Merge branch 'master' into xcmetrics-overview-features

Signed-off-by: Niklas Granander <ngranander@spotify.com>
This commit is contained in:
Niklas Granander
2021-07-27 19:55:45 +02:00
463 changed files with 14440 additions and 3651 deletions
-16
View File
@@ -1,16 +0,0 @@
---
'@backstage/backend-common': patch
---
Support a `ensureExists` config option to skip ensuring a configured database exists. This allows deployment scenarios where
limited permissions are given for provisioned databases without privileges to create new databases. If set to `false`, the
database connection will not be validated prior to use which means the backend will not attempt to create the database if it
doesn't exist. You can configure this in your app-config.yaml:
```yaml
backend:
database:
ensureExists: false
```
This defaults to `true` if unspecified. You can also configure this per plugin connection and will override the base option.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog': patch
---
Add unstable prop for disabling unregister entity menu
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Unsubscribe from broker after response is flushed
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-react': patch
---
Store filter values set in `EntityListProvider` in query parameters. This allows selected filters to be restored when returning to pages that list catalog entities.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
chore: set the lifecycle as beta logo
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-react': patch
---
Fix `EntityTypeFilter` so it produces unique case-insensitive set of available types
-10
View File
@@ -1,10 +0,0 @@
---
'@backstage/plugin-catalog-react': minor
'@backstage/plugin-scaffolder': patch
---
Updated the software templates list page (`ScaffolderPage`) to use the `useEntityListProvider` hook from #5643. This reduces the code footprint, making it easier to customize the display of this page, and consolidates duplicate approaches to querying the catalog with filters.
- The `useEntityTypeFilter` hook has been updated along with the underlying `EntityTypeFilter` to work with multiple values, to allow more flexibility for different user interfaces. It's unlikely that this change affects you; however, if you're using either of these directly, you'll need to update your usage.
- `SearchToolbar` was renamed to `EntitySearchBar` and moved to `catalog-react` to be usable by other entity list pages
- `UserListPicker` now has an `availableTypes` prop to restrict which user-related options to present
@@ -2,4 +2,4 @@
'@backstage/plugin-catalog-backend-module-ldap': patch
---
Expose missing types used by the custom transformers
chore(deps): bump `@types/ldapjs` from 1.0.10 to 2.2.0
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Updating fs-extra to 10.0.0 to handle broken symbolic links correctly
-9
View File
@@ -1,9 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
The codeowners processor extracts the username of the primary owner and uses this as the owner field.
Given the kind isn't specified this is assumed to be a group and so the link to the owner in the about card
doesn't work. This change specifies the kind where the entity is a user. e.g:
`@iain-b` -> `user:iain-b`
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-user-settings': minor
---
Exported and renamed components from the `@backstage/plugin-user-settings` plugin , to be able to use it in the consumer side and customize the `SettingPage`
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend-module-rails': patch
---
updated paths to consider differences between platform (windows corrected)
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Add new `fetch:template` action which handles the same responsibilities as `fetch:cookiecutter` without the external dependency on `cookiecutter`. For information on migrating from `fetch:cookiecutter` to `fetch:template`, see the [migration guide](https://backstage.io/docs/features/software-templates/builtin-actions#migrating-from-fetch-cookiecutter-to-fetch-template) in the docs.
-12
View File
@@ -1,12 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Scaffolder: Added an 'eq' handlebars helper for use in software template YAML files. This can be used to execute a step depending on the value of an input, e.g.:
```yaml
steps:
id: 'conditional-step'
action: 'custom-action'
if: '{{ eq parameters.myvalue "custom" }}',
```
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-auth-backend': patch
---
Add Sign In and Handler resolver for Microsoft provider
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/plugin-search-backend-node': minor
---
Change return value of `SearchEngine.index` to `Promise<void>` to support
implementation of external search engines.
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': minor
---
Updated inputs for the `publish:github:pull-request` action.
Now requires a `repoUrl` instead of separate `owner` and `repo` inputs. This aligns with the output of the `RepoUrlPicker` ui field used by the pull-request sample template.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-kubernetes-backend': patch
'@backstage/plugin-kubernetes-common': patch
'@backstage/plugin-kubernetes': patch
---
chore(deps): bump `@kubernetes/client-node` from 0.14.3 to 0.15.0
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Fix `EntityListProvider` to not update url if unmounted
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': patch
---
TechDocs now uses a "safe by default" sanitization library, rather than relying on its own, hard-coded list of allowable tags and attributes.
@@ -1,7 +0,0 @@
---
'@backstage/plugin-techdocs-backend': patch
---
It is no longer required to provide a generator and a preparer to the TechDocs
router factory when running TechDocs in the "recommended" (e.g. externally
prepared and generated docs) configuration.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/backend-common': patch
---
Document the default behavior of `statusCheck` option in `createStatusCheckRouter`.
-16
View File
@@ -1,16 +0,0 @@
---
'@backstage/backend-common': patch
'@backstage/cli': patch
'@backstage/config-loader': patch
'@backstage/create-app': patch
'@backstage/techdocs-common': patch
'@backstage/plugin-app-backend': patch
'@backstage/plugin-auth-backend': patch
'@backstage/plugin-catalog-backend': patch
'@backstage/plugin-kubernetes-backend': patch
'@backstage/plugin-rollbar-backend': patch
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-techdocs-backend': patch
---
Revert the upgrade to `fs-extra@10.0.0` as that seemed to have broken all installs inexplicably.
+2
View File
@@ -1,5 +1,6 @@
abc
accessors
Anddddd
Apdex
api
Api
@@ -212,6 +213,7 @@ repos
rerender
Reusability
reusability
roadmaps
rollbar
Rollbar
Rollup
+2
View File
@@ -37,3 +37,5 @@
| [FactSet](https://www.factset.com/) | [@kuangp](https://github.com/kuangp) | Developer portal to provide discoverability to all internal components, APIs, documentation, and scaffold templates with integrations to our internal infrastructure tools. |
| [Workrise](https://www.workrise.com/) | [Michael Rode](https://github.com/michaelrode) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. |
| [RedVentures](https://www.redventures.com/) | [Chris Diaz](https://github.com/codingdiaz) | Developer portal that brings everything an engineer needs to provide value into a single pane of glass. |
| [MavTek](https://www.mavtek.com/) | [@fgascon](https://github.com/fgascon) | Developer portal focused on standardizing practices, centralizing documentation and streamlining developer practices. |
| [QuintoAndar](https://www.quintoandar.com.br/) | [@quintoandar](https://github.com/quintoandar) | Developer portal, services catalog and centralization of service metrics. |
+18 -3
View File
@@ -101,8 +101,10 @@ organization:
# https://backstage.io/docs/features/techdocs/how-to-guides#how-to-migrate-from-techdocs-basic-to-recommended-deployment-approach
techdocs:
builder: 'local' # Alternatives - 'external'
generators:
techdocs: 'docker' # Alternatives - 'local'
generator:
runIn: 'docker'
# dockerImage: my-org/techdocs # use a custom docker image
# pullImage: true # or false to disable automatic pulling of image (e.g. if custom docker login is required)
publisher:
type: 'local' # Alternatives - 'googleGcs' or 'awsS3' or 'azureBlobStorage' or 'openStackSwift'. Read documentation for using alternatives.
@@ -312,13 +314,20 @@ auth:
#
# scope: saml-login-selector openid profile email
oidc:
# Note that you must define a session secret (see above) since the oidc provider requires session support.
# Note that by default, this provider will use the 'none' prompt which assumes that your are already logged on in the IDP.
# You should set prompt to:
# - auto: will let the IDP decide if you need to log on or if you can skip login when you have an active SSO session
# - login: will force the IDP to always present a login form to the user
development:
metadataUrl: ${AUTH_OIDC_METADATA_URL}
clientId: ${AUTH_OIDC_CLIENT_ID}
clientSecret: ${AUTH_OIDC_CLIENT_SECRET}
authorizationUrl: ${AUTH_OIDC_AUTH_URL}
tokenUrl: ${AUTH_OIDC_TOKEN_URL}
tokenSignedResponseAlg: ${AUTH_OIDC_TOKEN_SIGNED_RESPONSE_ALG}
tokenSignedResponseAlg: ${AUTH_OIDC_TOKEN_SIGNED_RESPONSE_ALG} # default='RS256'
scope: ${AUTH_OIDC_SCOPE} # default='openid profile email'
prompt: ${AUTH_OIDC_PROMPT} # default=none (allowed values: auto, none, consent, login)
auth0:
development:
clientId: ${AUTH_AUTH0_CLIENT_ID}
@@ -370,3 +379,9 @@ homepage:
timezone: 'Asia/Tokyo'
pagerduty:
eventsBaseUrl: 'https://events.pagerduty.com/v2'
jenkins:
instances:
- name: default
baseUrl: https://jenkins.example.com
username: backstage-bot
apiKey: 123456789abcdef0123456789abcedf012
+1 -1
View File
@@ -5,7 +5,7 @@ image](https://backstage.io/docs/getting-started/deployment-docker); this
tutorial shows how to deploy that Docker image to AWS using Elastic Container
Registry (ECR) and Elastic Kubernetes Service (EKS). Amazon also supports
deployments with Helm, covered in the [Helm
Kubernetes](../kubernetes/basic_kubernetes_example_with_helm) example.
Kubernetes](../../kubernetes/basic_kubernetes_example_with_helm) example.
The basic workflow for this method is to build a Backstage Docker image, upload
the new version to a container registry, and update a Kubernetes deployment with
@@ -27,27 +27,33 @@ default catalog page and create a component in a
```tsx
// imports, etc omitted for brevity. for full source see:
// https://github.com/backstage/backstage/blob/master/plugins/catalog/src/components/CatalogPage/CatalogPage.tsx
export const CustomCatalogPage = () => {
export const CustomCatalogPage = ({
columns,
actions,
initiallySelectedFilter = 'owned',
}: CatalogPageProps) => {
return (
<CatalogLayout>
<PageWithHeader title={`${orgName} Catalog`} themeId="home">
<Content>
<ContentHeader title="Components">
<CreateComponentButton />
<SupportButton>All your software catalog entities</SupportButton>
</ContentHeader>
<div className={styles.contentWrapper}>
<EntityListProvider>
<div>
<EntityListProvider>
<FilteredEntityLayout>
<FilterContainer>
<EntityKindPicker initialFilter="component" hidden />
<EntityTypePicker />
<UserListPicker />
<UserListPicker initialFilter={initiallySelectedFilter} />
<EntityTagPicker />
</div>
<CatalogTable />
</EntityListProvider>
</div>
</FilterContainer>
<EntityListContainer>
<CatalogTable columns={columns} actions={actions} />
</EntityListContainer>
</FilteredEntityLayout>
</EntityListProvider>
</Content>
</CatalogLayout>
</PageWithHeader>
);
};
```
@@ -137,19 +143,27 @@ export const EntitySecurityTierPicker = () => {
Now we can add the component to `CustomCatalogPage`:
```diff
export const CustomCatalogPage = () => {
export const CustomCatalogPage = ({
columns,
actions,
initiallySelectedFilter = 'owned',
}: CatalogPageProps) => {
return (
...
<EntityListProvider>
<div>
<EntityListProvider>
<FilteredEntityLayout>
<FilterContainer>
<EntityKindPicker initialFilter="component" hidden />
<EntityTypePicker />
<UserListPicker />
+ <EntitySecurityTierPicker />
<UserListPicker initialFilter={initiallySelectedFilter} />
+ <EntitySecurityTierPicker />
<EntityTagPicker />
</div>
<CatalogTable />
</EntityListProvider>
<FilterContainer>
<EntityListContainer>
<CatalogTable columns={columns} actions={actions} />
</EntityListContainer>
</FilteredEntityLayout>
</EntityListProvider>
...
};
```
+5 -6
View File
@@ -8,12 +8,11 @@ description: The Backstage Software Catalog
## What is a Software Catalog?
The Backstage Software Catalog — actually, a software catalog, since it includes
more than just services — is a centralized system that keeps track of ownership
and metadata for all the software in your ecosystem (services, websites,
libraries, data pipelines, etc). The catalog is built around the concept of
[metadata YAML files](descriptor-format.md) stored together with the code, which
are then harvested and visualized in Backstage.
The Backstage Software Catalog is a centralized system that keeps track of
ownership and metadata for all the software in your ecosystem (services,
websites, libraries, data pipelines, etc). The catalog is built around the
concept of [metadata YAML files](descriptor-format.md) stored together with the
code, which are then harvested and visualized in Backstage.
![software-catalog](https://backstage.io/blog/assets/6/header.png)
@@ -101,18 +101,22 @@ repository itself. If the URL points to a folder, it is important that it is
suffixed with a `'/'` in order for relative path resolution to work
consistently.
### jenkins.io/github-folder
### jenkins.io/job-full-name
```yaml
# Example:
metadata:
annotations:
jenkins.io/github-folder: folder-name/job-name
jenkins.io/job-full-name: folder-name/job-name
```
The value of this annotation is the path to a job on Jenkins, that builds this
entity.
The value can be the format of just `[folder-path]` or
`[instanceName]:[folder-path]`, if multiple instances are configured in
`app-config.yaml`
Specifying this annotation may enable Jenkins related features in Backstage for
that entity.
@@ -304,6 +308,10 @@ This annotation allowed to load the API definition from another location. Use
[substitution](./descriptor-format.md#substitutions-in-the-descriptor-format)
instead.
### jenkins.io/github-folder
Use the `jenkins.io/job-full-name` instead.
## Links
- [Descriptor Format: annotations](descriptor-format.md#annotations-optional)
@@ -33,9 +33,12 @@ scaffolder:
### Disabling Docker in Docker situation (Optional)
Software Templates use
[Cookiecutter](https://github.com/cookiecutter/cookiecutter) as a templating
library. By default it will use the
Software templates use the `fetch:template` action by default, which requires no
external dependencies and offers a
[Cookiecutter-compatible mode](https://backstage.io/docs/features/software-templates/builtin-actions#using-cookiecuttercompat-mode).
There is also a `fetch:cookiecutter` action, which uses
[Cookiecutter](https://github.com/cookiecutter/cookiecutter) directly for
templating. By default, the `fetch:cookiecutter` action will use the
[scaffolder-backend/Cookiecutter](https://github.com/backstage/backstage/blob/master/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile)
docker image.
@@ -227,6 +227,33 @@ spec:
inputType: tel
```
#### Hide or mask sensitive data on Review step
Sometimes, specially in custom fields, you collect some data on Create form that
must not be shown to the user on Review step. To hide or mask this data, you can
use `ui:widget: password` or set some properties of `ui:backstage`:
```yaml
- title: Hide or mask values
properties:
password:
title: Password
type: string
ui:widget: password # will print '******' as value for property 'password' on Review Step
masked:
title: Masked
type: string
ui:backstage:
review:
mask: '<some-value-to-show>' # will print '<some-value-to-show>' as value for property 'Masked' on Review Step
hidden:
title: Hidden
type: string
ui:backstage:
review:
show: false # wont print any info about 'hidden' property on Review Step
```
#### The Repository Picker
So in order to make working with repository providers easier, we've built a
+22 -7
View File
@@ -13,14 +13,29 @@ configuration options for TechDocs.
# File: app-config.yaml
techdocs:
# generators.techdocs can have two values: 'docker' or 'local'. This is to determine how to run the generator - whether to
# spin up the techdocs-container docker image or to run mkdocs locally (assuming all the dependencies are taken care of).
# You want to change this to 'local' if you are running Backstage using your own custom Docker setup and want to avoid running
# into Docker in Docker situation. Read more here
# https://backstage.io/docs/features/techdocs/getting-started#disable-docker-in-docker-situation-optional
# techdocs.generator is used to configure how documentation sites are generated using MkDocs.
generators:
techdocs: 'docker'
generator:
# techdocs.generator.runIn can be either 'docker' or 'local'. This is to determine how to run the generator - whether to
# spin up the techdocs-container docker image or to run mkdocs locally (assuming all the dependencies are taken care of).
# You want to change this to 'local' if you are running Backstage using your own custom Docker setup and want to avoid running
# into Docker in Docker situation. Read more here
# https://backstage.io/docs/features/techdocs/getting-started#disable-docker-in-docker-situation-optional
runIn: 'docker'
# techdocs.generator.dockerImage can be used to control the docker image used during documentation generation. This can be useful
# if you want to use MkDocs plugins or other packages that are not included in the default techdocs-container (spotify/techdocs).
# NOTE: This setting is only used when techdocs.generator.runIn is set to 'docker'.
dockerImage: 'spotify/techdocs'
# techdocs.generator.pullImage can be used to disable pulling the latest docker image by default. This can be useful when you are
# using a custom techdocs.generator.dockerImage and you have a custom docker login requirement. For example, you need to login to
# AWS ECR to pull the docker image.
# NOTE: Disabling this requires the docker image was pulled by other means before running the techdocs generator.
pullImage: true
# techdocs.builder can be either 'local' or 'external.
# If builder is set to 'local' and you open a TechDocs page, techdocs-backend will try to generate the docs, publish to storage
@@ -150,6 +150,39 @@ permissions to:
- `s3:ListBucket` - To retrieve bucket metadata
- `s3:GetObject` - To retrieve files from the bucket
> Note: If you need to migrate documentation objects from an older-style path
> format including case-sensitive entity metadata, you will need to add some
> additional permissions to be able to perform the migration, including:
>
> - `s3:PutBucketAcl` (for copying files,
> [more info here](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html))
> - `s3:DeleteObject` and `s3:DeleteObjectVersion` (for deleting migrated files,
> [more info here](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html))
>
> ...And you will need to ensure the permissions apply to the bucket itself, as
> well as all resources under the bucket. See the example policy below.
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TechDocsWithMigration",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObjectVersion",
"s3:ListBucket",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": ["arn:aws:s3:::your-bucket", "arn:aws:s3:::your-bucket/*"]
}
]
}
```
**4a. (Recommended) Setup authentication the AWS way, using environment
variables**
+3 -5
View File
@@ -24,11 +24,9 @@ an easier path to make Pull Requests.
Backstage provides the `@backstage/create-app` package to scaffold standalone
instances of Backstage. You will need to have
[Node.js](https://nodejs.org/en/download/) Active LTS Release installed
(currently v14), [Yarn](https://classic.yarnpkg.com/en/docs/install) and
[Python](https://www.python.org/downloads/) (although you likely have it
already). You will also need to have
[Docker](https://docs.docker.com/engine/install/) installed to use some features
like Software Templates and TechDocs.
(currently v14) and [Yarn](https://classic.yarnpkg.com/en/docs/install). You
will also need to have [Docker](https://docs.docker.com/engine/install/)
installed to use some features like Software Templates and TechDocs.
Using `npx` you can then run the following to create an app in a chosen
subdirectory of your current working directory:
+5 -1
View File
@@ -38,7 +38,11 @@ The target is composed of four parts:
repositories prefixed with `service-`.
- The path within each repository to find the catalog YAML file. This will
usually be `/catalog-info.yaml` or a similar variation for catalog files
stored in the root directory of each repository.
stored in the root directory of each repository. If omitted, the default value
`catalog-info.yaml` will be used. E.g. given that `my-project`and `service-a`
exists, `https://bitbucket.mycompany.com/projects/my-project/repos/service-*/`
will result in:
`https://bitbucket.mycompany.com/projects/my-project/repos/service-a/catalog-info.yaml`.
## Custom repository processing
+151 -82
View File
@@ -1,116 +1,185 @@
---
id: roadmap
title: Project roadmap
description: Roadmap of Backstage Project
title: Roadmap
description: Roadmap of Backstage
---
## Current status
## The Backstage Roadmap
> Backstage is currently under rapid development. This means that you can expect
> APIs and features to evolve. It is also recommended that teams who adopt
> Backstage today [upgrade their installation](../cli/commands.md#versionsbump)
> as new [releases](https://github.com/backstage/backstage/releases) become
> available, as Backwards compatibility is not yet guaranteed.
Backstage is currently under rapid development. This page details the projects
public roadmap, the result of ongoing collaboration between the core maintainers
and the broader Backstage community. Treat the roadmap as an ever-evolving guide
to keep us aligned as a community on:
## Phases
- Upcoming enhancements and benefits,
- Planning contributions and support,
- Planning the projects adoption,
- Understanding what things are coming soon,
- Avoiding duplication of work
We have divided the project into three high-level _phases_:
### How to influence the roadmap
- 🐣 **Phase 1:** Extensible frontend platform (Done ✅) - You will be able to
easily create a single consistent UI layer for your internal infrastructure
and tools. A set of reusable
[UX patterns and components](https://backstage.io/storybook) help ensure a
consistent experience between tools.
As we evolve Backstage, we want you to contribute actively in the journey to
define the most effective developer experience in the world.
- 🐢 **Phase 2:** Software Catalog
([alpha released](https://backstage.io/blog/2020/06/22/backstage-service-catalog-alpha)) -
With a single catalog, Backstage makes it easy for a team to manage ten
services — and makes it possible for your company to manage thousands of them.
A roadmap is only useful if it captures real needs. If you have success stories,
feedback, or ideas, we want to hear from you! If you plan to work (or are
already working) on a new or existing feature, please let us know, so that we
can update the roadmap accordingly. We are also happy to share knowledge and
context that will help your feature land successfully.
- 🐇 **Phase 3:** Ecosystem (ongoing, see
[Plugin Marketplace](https://backstage.io/plugins)) - Everyone's
infrastructure stack is different. By fostering a vibrant community of
contributors we hope to provide an ecosystem of Open Source
plugins/integrations that allows you to pick the tools that match your stack.
## Detailed roadmap
If you have questions about the roadmap or want to provide feedback, we would
love to hear from you! Please create an
[Issue](https://github.com/backstage/backstage/issues/new/choose), ping us on
[Discord](https://discord.gg/EBHEGzX) or reach out directly at
[backstage-interest@spotify.com](mailto:backstage-interest@spotify.com).
Want to help out? Awesome ❤️ Head over to
You can also head over to the
[CONTRIBUTING](https://github.com/backstage/backstage/blob/master/CONTRIBUTING.md)
guidelines to get started.
### Ongoing work 🚧
If you have specific questions about the roadmap, please create an
[issue](https://github.com/backstage/backstage/issues/new/choose), ping us on
[Discord](https://discord.gg/awD6SxgQ), or
[book time](http://calendly.com/spotify-backstage) with the Spotify team.
- **[Platform stabilization](https://github.com/backstage/backstage/milestone/19)** -
Stabilize the core of Backstage, including its core features, so that the
platform can be depended on for production use. After this, plugins will
require little-to-no maintenance.
### How to read the roadmap
- **[Kubernetes plugin for service owners](https://github.com/backstage/backstage/issues/2857)** -
Improve native support for Kubernetes, making it easier for service owners to
see and manage their services running in K8s, regardless if that's locally, in
AWS, GCS, Azure, or elsewhere.
The Backstage roadmap lays out both [“whats next”](#whats-next) and
[“future work”](#future-work). With "next" we mean features planned for release
within the ongoing quarter starting in July until September 2021 included. With
"future" we mean features in the radar, but not yet scheduled.
- **[Search platform](../features/search/README.md)** - Evolve the basic search
functionality currently available into a platform that **a)** enables search
across the software catalog, TechDocs, and any other information exposed by
plugins, and **b)** supports a variety of search engine technologies.
The long-term roadmap (12 - 36 months) is not detailed in the public roadmap.
Third-party contributions are also not currently included in the roadmap. Let us
know about any ongoing developments and were happy to include it here as well.
- **[Software Templates V2](https://github.com/backstage/backstage/issues/2771)** -
Expand the templates to make the steps more composable by adding the ability
to add more steps for custom logic, including webhooks and using authorization
from integrations.
### Roadmap evolution
### Future work 🔮
Will this roadmap change? Obviously!
- **Golden Path for Plugin Development** - Create an easy, standardized way for
developers to build plugins that will encourage contributions and lead to a
richer ecosystem for everyone.
Roadmap are always evolving and ours is no different; you can expect to see this
updated roughly every month.
- **[GraphQL API](https://github.com/backstage/backstage/milestone/13)** - A
GraphQL API will open up the rich metadata provided by Backstage in a single
query. Plugins can easily query this API as well as extend the model where
needed.
## Whats next
- **Inter-Plugin Communication** - **[Under consideration]** Establish more
clearly defined patterns for plugins to communicate.
The feature set below is planned for the ongoing quarter, and grouped by theme.
The list order doesnt necessarily reflect priority, and the development/release
cycle will vary based on maintainer schedules.
- **Improved Access Control** - **[Under consideration]** Provide finer grained
access controls and management for better control of the platform user
experience.
### Backstage Core
### Plugins
The following features are planned for release:
Building and maintaining [plugins](https://backstage.io/plugins) is the work of
the entire Backstage community.
- **Composable homepage:** Were seeing lots of interest from the community in
reusable components to build a homepage experience where users can easily
surface what they might find useful to start their tasks. Check out the
[milestone](https://github.com/backstage/backstage/milestone/34) for further
details.
- **Improved responsiveness:** Check out the
[RFC here](https://github.com/backstage/backstage/issues/6318) for further
details on how to improve the responsiveness for Backstage's UI.
A list of plugins that are in development is
[available here](https://github.com/backstage/backstage/issues?q=is%3Aissue+is%3Aopen+label%3Aplugin+sort%3Areactions-%2B1-desc).
We strongly recommend to upvote 👍 plugins you are interested in. This helps us
and the community prioritize what plugins to build.
### Software Templates
Are you missing a plugin for your favorite tool? Please
[suggest a new one](https://github.com/backstage/backstage/issues/new?labels=plugin&template=plugin_template.md&title=%5BPlugin%5D+THE+PLUGIN+NAME).
Chances are that someone will jump in and help build it.
The following features are planned for release::
### Community Initiatives 🧑‍🤝‍🧑
- **Re-creation/resubmission in case of failure:** Speed up productivity by
allowing developers to relaunch a project after a failure or any unexpected
problem. In the current version, this task requires retyping and a full
re-creation from scratch.
- **Performance and usability improvements for contributors:** Reach a relevant
improvement in templating's performance through the replacement of
[handlebars](https://handlebarsjs.com/). Other replacements will be considered
as part of this task (possibly
[cookiecutter](https://cookiecutter.readthedocs.io/)) for easier software
template creation, allowing more contributors to reach their goals without
having to learn new tooling.
- **Improved extensibility through inclusion:** Make software templates more
maintainable and extensible by adding `$include` support for parameters.
- **Authenticated job creation:** Created jobs will be able to run with an
authenticated user with all actions tracked for future consumption and
evidence. Track users creating jobs and make “jobs created by me” reporting
available.
- [**Backstage Community Sessions**](https://github.com/backstage/community#meetups) -
A monthly meetup for the community to come together to share and learn about
the latest happenings in Backstage.
### Software Catalog
- **Backstage Hackathons** - (Coming soon) Open to everyone in our Backstage
community, a celebration of you, the project and building awesome things
together
The following features are planned for release:
### Completed milestones ✅
- **Request For Comments (RFC) for composability improvements (routing):**
Enable plugins to be auto-added and make plugin installation and upgrades
easier for all Backstage users. This includes information card layouts, entity
pages containing content and hooking the external header, considering the
support of a separate deployment, and configuration for plugins.
- **Removing duplicated entities in catalog:** As any adopter knows, a software
catalog can contain thousands or more entities and it is very important to
avoid duplications in naming to prevent failures. With this development task,
two entities with the same name won't be allowed as described
[here](https://github.com/backstage/backstage/issues/4760).
- **Connecting identity to ownership to prepare for role-based access control
([RBAC](https://en.wikipedia.org/wiki/Role-based_access_control)):** This is a
first step to supporting RBAC for the software catalog (see the
[future work section](#future-work) for further details). Provide each entity
within the software catalog with a recognized owner.
- **Catalog performance improvements through improved caching:** Fix the
performance gaps in the catalog processor, which currently doesnt have a
strong caching mechanism. The current version often requires fetching a
relevant amount of data, especially at scale.
### Search
The following features are planned for release:
- ElasticSearch integration: Add ElasticSearch to the Search Platform as the
underlying search engine. Check out the
[milestone here](https://github.com/backstage/backstage/milestone/27) for
further details.
### TechDocs
The following features are planned for release:
- **TechDocs beta release:** Fix remaining bugs to get TechDocs to Beta. Check
out the [milestone here](https://github.com/backstage/backstage/milestone/29)
for further details.
## Future work
The following feature list doesnt represent a commitment to develop and the
list order doesnt reflect any priority or importance. But these features are on
the maintainers radar, with clear interest expressed by the community.
- **Improved UX design:** Provide a better Backstage user experience through
visual guidelines and templates, especially navigation across plug-ins and
portal functionalities.
- **Catalog composability (routing):** Follow up development after the RFC
planned for the ongoing quarter (see [whats next](#whats-next) for further
details).
- **Catalog-import improvements:** Provide a faster (scalability) and better
(more features like move/rename) way to import entities into the Software
Catalog. Importing items in the Software Catalog is crucial for creating a
Backstage proof-of-concept or testing/planning for broader organizational
adoption. This enhancement better supports getting developers to use Backstage
with less effort and customization.
- **Catalog improvements:** Add pagination and sourcing to Software Catalog.
- **[GraphQL](https://graphql.org/) support:** Introduce the ability to query
Backstage backend services with a standard query language for APIs.
- **Software templates performance improvements through decoupling a separate
worker:** Improve performance through decoupling resource-consuming services
and making them asynchronous. In the current version, project auto-creation
through the Software Templating system can consume a lot of resources and
bottleneck many concurrent projects created simultaneously.
- **API discovery and documentation:** Add better support for the
[gRPC](https://grpc.io/).
- **Adding TechDocs search to the Search Platform:** Having this capability in
place will provide a better and new major version of the Search Platform
(v3.0). You can refer to the
[milestone here](https://github.com/backstage/backstage/milestone/28) for
further details.
- **TechDocs GA release:** Work toward enhancements necessary to get TechDocs to
general availability. Check out the
[milestone here](https://github.com/backstage/backstage/milestone/30) for
further details.
## Completed milestones
Read more about the completed (and released) features for reference.
- [[Search] Out-of-the-Box Implementation (Alpha)](https://github.com/backstage/backstage/milestone/26)
- [Deploy a product demo at `demo.backstage.io`](https://demo.backstage.io)
- [Kubernetes plugin - v1](https://github.com/backstage/backstage/tree/master/plugins/kubernetes)
- [Helm charts](https://github.com/backstage/backstage/tree/master/contrib/chart/backstage)
+3 -4
View File
@@ -99,15 +99,14 @@ You may tweak these components, rename them and/or replace them completely.
## Connecting the plugin to the Backstage app
There are three things needed for a Backstage app to start making use of a
plugin.
There are two things needed for a Backstage app to start making use of a plugin.
1. Add plugin as dependency in `app/package.json`
2. Import and use one or more plugin extensions, for example in
`app/src/App.tsx`.
Luckily these three steps happen automatically when you create a plugin with the
Backstage CLI.
Luckily both of these steps happen automatically when you create a plugin with
the Backstage CLI.
## Talking to the outside world
@@ -0,0 +1,68 @@
---
title: Software Templates is now in Beta
author: Ben Lambert, Spotify
authorURL: https://github.com/benjdlambert
authorImageURL: https://avatars.githubusercontent.com/u/3645856?v=4
---
![Software Templates in Beta](assets/21-07-26/backstage-software-templates-beta.gif)
**TLDR**; At a high level, Backstage performs three main jobs: [Create, Manage, and Explore](https://backstage.io/blog/2021/05/20/adopting-backstage#three-jobs-create-manage-explore). Throughout the year, weve been focussed on improving the stability and scalability of these areas while enhancing the feature sets based upon requests from the community. Software Templates — which enable push-button deployments with all your standards and best practices built-in — is our first feature-complete release candidate to graduate to beta. Read on to learn how this release improves template customization and flexibility, as well as performance.
<!--truncate-->
Lets rewind a little bit, around a year in fact. Backstage had been open sourced, and we released our first version of Software Templates and our Scaffolder plugin.
In case you missed it, [Software Templates](https://backstage.io/blog/2020/08/05/announcing-backstage-software-templates) are part of the Create feature set, where you can set up Backstage to give your engineers the ability to spin up a new microservice, website, or any other software component with your organizations best practices built-in, right from the start.
Back when we released the first version of these templates, with the `apiVersion` `backstage.io/v1alpha1`, they were a little restrictive in what they could do. The generated repository could only have one template source and it was restricted to only being [cookiecutter](https://github.com/cookiecutter/cookiecutter) templates. And it had to fit into the three stages of templating which was `Prepare`, `Template`, and `Publish`.
We [opened up for feedback](https://github.com/backstage/backstage/issues/2771) from the community knowing that this wasnt going to be the final version, but something of a stepping stone to where we want to be in the future.
And now we come to today…
## Anddddd… Action(s)! 🎬
Following the removal of the previously deprecated `backstage.io/v1alpha1` templates, today were officially announcing the beta version of Software Templates, or `backstage.io/v1beta2`.
With it comes an entirely new architecture to the Software Templates functionality, and a load of new exciting features, which Ill dig into a little deeper.
### Template actions
Weve totally opened up the ability to compose your own workflows for each Template that you have registered in Software Templates. This means no restrictions on where your template skeleton is kept, and no restrictions on what your workflow should look like.
Template Actions are customizable JavaScript functions that allow you to extend the capabilities of the Software Templates by adding your own business logic or reusing some of our Built-In actions.
![New template syntax with actions](assets/21-07-26/example-template-code.png)
_An example of the new template syntax with steps and parameters_
The workflow for Software Templates are now step-based, and each Software Template can have a customizable amount of steps which will in turn call these new actions.
![New steps being rendered in the frontend](assets/21-07-26/steps-running.gif)
_An example of a Template with customizable steps_
These actions are very heavily inspired by GitHub Actions and GitHub Workflows, and weve given back a lot of control to the template authors so they can build the boilerplate and push the code however they want.
### Custom UI extensions
A large part of the Software Templates feature is the form that we use to collect user input which is then passed on to these new actions. Sometimes, it makes sense that Template Authors want to provide their own React components which can be rendered in the frontend to maybe do some more complex things like calling internal APIs to provide autocomplete.
This is now possible with the new `ScaffolderFieldExtensions`.
![Custom UI extensions](assets/21-07-26/custom-components.gif)
_An example of `ScaffolderFieldExtension` is the `OwnerPicker` component which can automatically add options and suggest typeahead with data from an async API request_
Template Authors can create their own components to provide data to the custom actions in any way you see fit, and even override our own built in ones too like the `RepoUrlPicker`.
### Horizontal scalability
The Scaffolder Service and Software Templates are now horizontally scalable, coordinating work between your deployed backend machines. This means now that the number of instances of the `@backstage/plugin-scaffolder-backend` plugin you have, is the same amount of jobs that you can have in parallel. This ensures that your tasks are handled quickly and reliably, while providing great feedback in the process.
## Try out the new templates
Were still on the journey to making the Software Templates a great user experience for both authors and developers — but were not done yet, so watch this space for new exciting features to come!
In the meantime, make sure to visit the documentation for [building templates](https://backstage.io/docs/features/software-templates/adding-templates) or creating your own [custom actions](https://backstage.io/docs/features/software-templates/writing-custom-actions).
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

+4
View File
@@ -44,6 +44,10 @@ class Footer extends React.Component {
<a href="https://github.com/backstage/backstage/blob/master/CONTRIBUTING.md">
Contributing
</a>
<a href="https://backstage.spotify.com">Adopting</a>
<a href="https://github.com/backstage/community">
Community Sessions
</a>
<a href="https://mailchi.mp/spotify/backstage-community">
Subscribe to our newsletter
</a>
+1 -1
View File
@@ -16,7 +16,7 @@
"lock:check": "yarn-lock-check"
},
"devDependencies": {
"@spotify/prettier-config": "^10.0.0",
"@spotify/prettier-config": "^11.0.0",
"docusaurus": "^2.0.0-alpha.70",
"js-yaml": "^4.1.0",
"prettier": "^2.3.2",
+3 -3
View File
@@ -212,9 +212,9 @@ class Index extends React.Component {
Backstage Software Templates{' '}
<a
title="Submit feedback for this feature. Click to learn more about this release."
href="https://backstage.io/blog/2020/08/05/announcing-backstage-software-templates"
href="https://backstage.io/blog/2021/07/26/software-templates-are-now-in-beta"
>
(alpha)
(beta)
</a>
</Block.Subtitle>
<Block.Title small>Standards can set you free</Block.Title>
@@ -292,7 +292,7 @@ class Index extends React.Component {
Build your own software templates
</ActionBlock.Title>
<ActionBlock.Link
href={`https://github.com/backstage/backstage/blob/master/docs/features/software-templates/index.md`}
href={`https://backstage.io/docs/features/software-templates`}
>
Contribute
</ActionBlock.Link>
+1 -1
View File
@@ -1 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="250" height="250" viewBox="0 0 250 250"><defs><style>.cls-1{fill:none;stroke:#7df3e1;stroke-linejoin:round;stroke-width:2.5px;}</style></defs><polyline class="cls-1" points="79.08 24.38 79.08 218.83 79.08 245.06"/><polyline class="cls-1" points="63.67 235.75 63.67 209.52 63.67 24.38"/><path class="cls-1" d="M189.83,220h0l0,0Z"/><path class="cls-1" d="M145.5,88.07c-16.61-12.31-5.42-21.25-22-33.56s-27.8-3.37-44.4-15.68v116.3c16.6,12.31,27.79,3.37,44.4,15.68s5.41,21.25,22,33.56,27.76,3.38,44.33,15.63l0-116.27C173.28,91.43,162.09,100.37,145.5,88.07Z"/><path class="cls-1" d="M137.72,124.67V108a23.2,23.2,0,0,0-16.43,6.8l11.82,11.82A6.5,6.5,0,0,1,137.72,124.67Z"/><path class="cls-1" d="M144.24,131.19H161a23.15,23.15,0,0,0-6.81-16.43l-11.82,11.82A6.5,6.5,0,0,1,144.24,131.19Z"/><path class="cls-1" d="M133.11,126.58l-11.82-11.82a23.18,23.18,0,0,0-6.8,16.43H131.2A6.5,6.5,0,0,1,133.11,126.58Z"/><path class="cls-1" d="M142.33,126.58l11.82-11.82a23.16,23.16,0,0,0-16.43-6.8v16.71A6.5,6.5,0,0,1,142.33,126.58Z"/><path class="cls-1" d="M131.2,131.19H114.49a23.16,23.16,0,0,0,6.8,16.43l11.82-11.82A6.5,6.5,0,0,1,131.2,131.19Z"/><path class="cls-1" d="M137.72,137.71v16.72a23.13,23.13,0,0,0,16.43-6.81L142.33,135.8A6.5,6.5,0,0,1,137.72,137.71Z"/><path class="cls-1" d="M161,131.19H144.24a6.5,6.5,0,0,1-1.91,4.61l11.82,11.82A23.13,23.13,0,0,0,161,131.19Z"/><path class="cls-1" d="M133.11,135.8l-11.82,11.82a23.17,23.17,0,0,0,16.43,6.81V137.71A6.5,6.5,0,0,1,133.11,135.8Z"/><path class="cls-1" d="M82.63,16.19a11.26,11.26,0,1,0-19,8.19h0a11.23,11.23,0,0,0,15.41,0h0A11.21,11.21,0,0,0,82.63,16.19Z"/><line class="cls-1" x1="154.15" y1="147.62" x2="161.15" y2="154.62"/><line class="cls-1" x1="160.96" y1="131.19" x2="170.85" y2="131.19"/><line class="cls-1" x1="154.15" y1="114.76" x2="161.15" y2="107.77"/><line class="cls-1" x1="137.72" y1="107.96" x2="137.72" y2="98.06"/><line class="cls-1" x1="121.29" y1="114.76" x2="114.3" y2="107.77"/><line class="cls-1" x1="114.49" y1="131.19" x2="104.6" y2="131.19"/><line class="cls-1" x1="121.29" y1="147.62" x2="114.3" y2="154.62"/><line class="cls-1" x1="137.72" y1="154.43" x2="137.72" y2="164.32"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" width="250" height="250" data-name="Layer 1" viewBox="0 0 250 250"><defs><style>.cls-1{fill:none;stroke:#7df3e1;stroke-linejoin:round;stroke-width:2.5px}</style></defs><polyline points="79.08 24.38 79.08 218.83 79.08 245.06" class="cls-1"/><polyline points="63.67 235.75 63.67 209.52 63.67 24.38" class="cls-1"/><path d="M189.83,220h0l0,0Z" class="cls-1"/><path d="M145.5,88.07c-16.61-12.31-5.42-21.25-22-33.56s-27.8-3.37-44.4-15.68v116.3c16.6,12.31,27.79,3.37,44.4,15.68s5.41,21.25,22,33.56,27.76,3.38,44.33,15.63l0-116.27C173.28,91.43,162.09,100.37,145.5,88.07Z" class="cls-1"/><path d="M137.72,124.67V108a23.2,23.2,0,0,0-16.43,6.8l11.82,11.82A6.5,6.5,0,0,1,137.72,124.67Z" class="cls-1"/><path d="M144.24,131.19H161a23.15,23.15,0,0,0-6.81-16.43l-11.82,11.82A6.5,6.5,0,0,1,144.24,131.19Z" class="cls-1"/><path d="M133.11,126.58l-11.82-11.82a23.18,23.18,0,0,0-6.8,16.43H131.2A6.5,6.5,0,0,1,133.11,126.58Z" class="cls-1"/><path d="M142.33,126.58l11.82-11.82a23.16,23.16,0,0,0-16.43-6.8v16.71A6.5,6.5,0,0,1,142.33,126.58Z" class="cls-1"/><path d="M131.2,131.19H114.49a23.16,23.16,0,0,0,6.8,16.43l11.82-11.82A6.5,6.5,0,0,1,131.2,131.19Z" class="cls-1"/><path d="M137.72,137.71v16.72a23.13,23.13,0,0,0,16.43-6.81L142.33,135.8A6.5,6.5,0,0,1,137.72,137.71Z" class="cls-1"/><path d="M161,131.19H144.24a6.5,6.5,0,0,1-1.91,4.61l11.82,11.82A23.13,23.13,0,0,0,161,131.19Z" class="cls-1"/><path d="M133.11,135.8l-11.82,11.82a23.17,23.17,0,0,0,16.43,6.81V137.71A6.5,6.5,0,0,1,133.11,135.8Z" class="cls-1"/><path d="M82.63,16.19a11.26,11.26,0,1,0-19,8.19h0a11.23,11.23,0,0,0,15.41,0h0A11.21,11.21,0,0,0,82.63,16.19Z" class="cls-1"/><line x1="154.15" x2="161.15" y1="147.62" y2="154.62" class="cls-1"/><line x1="160.96" x2="170.85" y1="131.19" y2="131.19" class="cls-1"/><line x1="154.15" x2="161.15" y1="114.76" y2="107.77" class="cls-1"/><line x1="137.72" x2="137.72" y1="107.96" y2="98.06" class="cls-1"/><line x1="121.29" x2="114.3" y1="114.76" y2="107.77" class="cls-1"/><line x1="114.49" x2="104.6" y1="131.19" y2="131.19" class="cls-1"/><line x1="121.29" x2="114.3" y1="147.62" y2="154.62" class="cls-1"/><line x1="137.72" x2="137.72" y1="154.43" y2="164.32" class="cls-1"/></svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -1 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="250" height="250" viewBox="0 0 250 250"><defs><style>.cls-1,.cls-2,.cls-3{fill:none;stroke:#7df3e1;stroke-width:2.5px;}.cls-1{stroke-linecap:round;}.cls-1,.cls-3{stroke-linejoin:round;}.cls-2{stroke-miterlimit:10;}</style></defs><path class="cls-1" d="M22.08,87.32c-1.64-3.26-2-6.12-1-8.45C24.64,70.6,45,70.7,73.39,77.6"/><circle class="cls-2" cx="31.13" cy="100.9" r="15.94"/><path class="cls-1" d="M88,136.33c-17.15-8.82-32-17.87-43.33-26.3"/><path class="cls-1" d="M198.45,131.52c25,16.22,39.43,31.24,35.81,39.61-4.72,10.91-38.57,7.26-81.64-7.33"/><path class="cls-1" d="M91.39,129.7C49,85.89,23.62,45.42,33.42,35.14c6.72-7,28.38,1.71,56.08,20.9"/><path class="cls-1" d="M193,153c23.35,29.29,36,54.36,28.87,61.87-8.5,8.92-40.94-7.48-79.25-38.28"/><path class="cls-3" d="M128.76,182.48c20.74,32.14,40.49,51.49,50,46.81"/><path class="cls-3" d="M76.52,20.71C64.08,26.81,73.27,71.5,96.9,123.56"/><circle class="cls-2" cx="111.23" cy="46.18" r="23.7"/><path class="cls-3" d="M133.76,53.58a71,71,0,1,1-39.92,8.47"/><path class="cls-3" d="M128.76,182.48c20.74,32.14,40.49,51.49,50,46.81,8.24-4,7-25-1.67-53.87"/><path class="cls-3" d="M95.51,28.62c-7.92-7.07-14.56-10.08-19-7.91C64.08,26.81,73.27,71.5,96.9,123.56"/><circle class="cls-2" cx="120.99" cy="148.62" r="34.89"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" width="250" height="250" data-name="Layer 1" viewBox="0 0 250 250"><defs><style>.cls-1,.cls-2,.cls-3{fill:none;stroke:#7df3e1;stroke-width:2.5px}.cls-1{stroke-linecap:round}.cls-1,.cls-3{stroke-linejoin:round}.cls-2{stroke-miterlimit:10}</style></defs><path d="M22.08,87.32c-1.64-3.26-2-6.12-1-8.45C24.64,70.6,45,70.7,73.39,77.6" class="cls-1"/><circle cx="31.13" cy="100.9" r="15.94" class="cls-2"/><path d="M88,136.33c-17.15-8.82-32-17.87-43.33-26.3" class="cls-1"/><path d="M198.45,131.52c25,16.22,39.43,31.24,35.81,39.61-4.72,10.91-38.57,7.26-81.64-7.33" class="cls-1"/><path d="M91.39,129.7C49,85.89,23.62,45.42,33.42,35.14c6.72-7,28.38,1.71,56.08,20.9" class="cls-1"/><path d="M193,153c23.35,29.29,36,54.36,28.87,61.87-8.5,8.92-40.94-7.48-79.25-38.28" class="cls-1"/><path d="M128.76,182.48c20.74,32.14,40.49,51.49,50,46.81" class="cls-3"/><path d="M76.52,20.71C64.08,26.81,73.27,71.5,96.9,123.56" class="cls-3"/><circle cx="111.23" cy="46.18" r="23.7" class="cls-2"/><path d="M133.76,53.58a71,71,0,1,1-39.92,8.47" class="cls-3"/><path d="M128.76,182.48c20.74,32.14,40.49,51.49,50,46.81,8.24-4,7-25-1.67-53.87" class="cls-3"/><path d="M95.51,28.62c-7.92-7.07-14.56-10.08-19-7.91C64.08,26.81,73.27,71.5,96.9,123.56" class="cls-3"/><circle cx="120.99" cy="148.62" r="34.89" class="cls-2"/></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -1 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="250" height="250" viewBox="0 0 250 250"><defs><style>.cls-1{fill:none;stroke:#7df3e1;stroke-linejoin:round;stroke-width:2.5px;}</style></defs><path class="cls-1" d="M157.82,203.89a5.28,5.28,0,0,1-.67,3.09c-3.75,6.21-21.45,2.39-39.54-8.53C101.87,189,91,177.23,90.93,170.25c-7.27-.67-12.6.66-14.77,4.26-5.58,9.25,11.76,29.94,38.74,46.21s53.36,22,58.94,12.72C177.61,227.18,170.9,215.7,157.82,203.89Z"/><path class="cls-1" d="M157.82,203.89c-.3-5.42-6.78-13.52-16.86-21.24,0,0,0,.09-.05.13C139,185.93,130,184,120.77,178.43c-6.92-4.17-12-9.2-13.27-12.78-7.89-2-13.88-1.51-15.88,1.81a5.24,5.24,0,0,0-.69,2.79"/><path class="cls-1" d="M90.93,170.25c.09,7,10.94,18.71,26.68,28.2,18.09,10.92,35.79,14.74,39.54,8.53a5.28,5.28,0,0,0,.67-3.09"/><path class="cls-1" d="M141,182.65c1.69-3.22-4.19-10.17-13.28-15.66s-18.23-7.5-20.14-4.34a3.49,3.49,0,0,0,0,3"/><path class="cls-1" d="M107.5,165.65c1.29,3.58,6.35,8.61,13.27,12.78,9.22,5.56,18.23,7.5,20.14,4.35,0,0,0-.09.05-.13"/><path class="cls-1" d="M117.79,126a6.09,6.09,0,0,0,0,2.58l6.36,27,7.2-21.89a9.86,9.86,0,0,0,.45-4.26"/><path class="cls-1" d="M154.88,109V75.86a82.39,82.39,0,0,0-28-61.9l-2.08-1.83A45.42,45.42,0,0,0,94.7,54.89V94h0c-.64,9.87,5.75,21.3,17.08,28.72a44.56,44.56,0,0,0,6,3.28,6.16,6.16,0,0,1,9.26-4.09h0a10.13,10.13,0,0,1,4.8,7.57c8.51.37,16.05-2.61,20.12-8.83a18.2,18.2,0,0,0,2.88-8.6h0v-.38A20,20,0,0,0,154.88,109Z"/><path class="cls-1" d="M131.85,129.49a10.13,10.13,0,0,0-4.8-7.57h0a6.16,6.16,0,0,0-9.26,4.09"/><path class="cls-1" d="M173.76,96.66V86.55h0c.19-3.07-1.79-6.62-5.32-8.93-4.67-3.06-10.27-2.77-12.5.64a5.58,5.58,0,0,0-.89,2.68h0V81a5.89,5.89,0,0,0,0,.84v3.26h0v21.36h0v10.11h0c-.2,3.08,1.79,6.63,5.31,8.94,4.67,3.06,10.27,2.77,12.5-.64a5.71,5.71,0,0,0,.9-2.68h0v-.12c0-.27,0-.55,0-.83V118h0V96.66Z"/><path class="cls-1" d="M94.66,59.93a5.75,5.75,0,0,0,0-.83V59h0a5.63,5.63,0,0,0-.9-2.67c-2.23-3.41-7.83-3.7-12.5-.65-3.52,2.31-5.51,5.87-5.31,8.94h0v1.19s0,.07,0,.1V93.64s0,.07,0,.1v1.19h0c-.2,3.08,1.79,6.63,5.31,8.94,4.67,3.06,10.27,2.77,12.5-.64a5.71,5.71,0,0,0,.9-2.68h0v-.12a5.75,5.75,0,0,0,0-.83V95.9h0V59.94Z"/><ellipse class="cls-1" cx="122.77" cy="62.49" rx="10.06" ry="11.36"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" width="250" height="250" data-name="Layer 1" viewBox="0 0 250 250"><defs><style>.cls-1{fill:none;stroke:#7df3e1;stroke-linejoin:round;stroke-width:2.5px}</style></defs><path d="M157.82,203.89a5.28,5.28,0,0,1-.67,3.09c-3.75,6.21-21.45,2.39-39.54-8.53C101.87,189,91,177.23,90.93,170.25c-7.27-.67-12.6.66-14.77,4.26-5.58,9.25,11.76,29.94,38.74,46.21s53.36,22,58.94,12.72C177.61,227.18,170.9,215.7,157.82,203.89Z" class="cls-1"/><path d="M157.82,203.89c-.3-5.42-6.78-13.52-16.86-21.24,0,0,0,.09-.05.13C139,185.93,130,184,120.77,178.43c-6.92-4.17-12-9.2-13.27-12.78-7.89-2-13.88-1.51-15.88,1.81a5.24,5.24,0,0,0-.69,2.79" class="cls-1"/><path d="M90.93,170.25c.09,7,10.94,18.71,26.68,28.2,18.09,10.92,35.79,14.74,39.54,8.53a5.28,5.28,0,0,0,.67-3.09" class="cls-1"/><path d="M141,182.65c1.69-3.22-4.19-10.17-13.28-15.66s-18.23-7.5-20.14-4.34a3.49,3.49,0,0,0,0,3" class="cls-1"/><path d="M107.5,165.65c1.29,3.58,6.35,8.61,13.27,12.78,9.22,5.56,18.23,7.5,20.14,4.35,0,0,0-.09.05-.13" class="cls-1"/><path d="M117.79,126a6.09,6.09,0,0,0,0,2.58l6.36,27,7.2-21.89a9.86,9.86,0,0,0,.45-4.26" class="cls-1"/><path d="M154.88,109V75.86a82.39,82.39,0,0,0-28-61.9l-2.08-1.83A45.42,45.42,0,0,0,94.7,54.89V94h0c-.64,9.87,5.75,21.3,17.08,28.72a44.56,44.56,0,0,0,6,3.28,6.16,6.16,0,0,1,9.26-4.09h0a10.13,10.13,0,0,1,4.8,7.57c8.51.37,16.05-2.61,20.12-8.83a18.2,18.2,0,0,0,2.88-8.6h0v-.38A20,20,0,0,0,154.88,109Z" class="cls-1"/><path d="M131.85,129.49a10.13,10.13,0,0,0-4.8-7.57h0a6.16,6.16,0,0,0-9.26,4.09" class="cls-1"/><path d="M173.76,96.66V86.55h0c.19-3.07-1.79-6.62-5.32-8.93-4.67-3.06-10.27-2.77-12.5.64a5.58,5.58,0,0,0-.89,2.68h0V81a5.89,5.89,0,0,0,0,.84v3.26h0v21.36h0v10.11h0c-.2,3.08,1.79,6.63,5.31,8.94,4.67,3.06,10.27,2.77,12.5-.64a5.71,5.71,0,0,0,.9-2.68h0v-.12c0-.27,0-.55,0-.83V118h0V96.66Z" class="cls-1"/><path d="M94.66,59.93a5.75,5.75,0,0,0,0-.83V59h0a5.63,5.63,0,0,0-.9-2.67c-2.23-3.41-7.83-3.7-12.5-.65-3.52,2.31-5.51,5.87-5.31,8.94h0v1.19s0,.07,0,.1V93.64s0,.07,0,.1v1.19h0c-.2,3.08,1.79,6.63,5.31,8.94,4.67,3.06,10.27,2.77,12.5-.64a5.71,5.71,0,0,0,.9-2.68h0v-.12a5.75,5.75,0,0,0,0-.83V95.9h0V59.94Z" class="cls-1"/><ellipse cx="122.77" cy="62.49" class="cls-1" rx="10.06" ry="11.36"/></svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

+1 -1
View File
@@ -1 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="250" height="250" viewBox="0 0 250 250"><defs><style>.cls-1{fill:none;stroke:#7df3e1;stroke-linejoin:round;stroke-width:2.5px;}</style></defs><polygon class="cls-1" points="210.2 178.75 210.2 96.75 186.09 44.02 136.67 12.26 136.67 134.08 210.2 178.75"/><polygon class="cls-1" points="113.33 237.75 113.33 118.51 39.8 71.25 39.8 193.07 113.33 237.75"/><polyline class="cls-1" points="69.73 136.22 58.56 147.39 68.59 167.84"/><polyline class="cls-1" points="82.96 176.15 93.08 166.03 82.67 143.81"/><line class="cls-1" x1="159.63" y1="127.73" x2="122.15" y2="165.96"/><polyline class="cls-1" points="136.74 165.96 122.15 165.96 122.15 151.37"/><line class="cls-1" x1="122.15" y1="115.07" x2="159.51" y2="77.07"/><polyline class="cls-1" points="144.92 77.07 159.51 77.07 159.51 91.66"/><polygon class="cls-1" points="186.03 81.26 210.13 96.75 186.03 44.1 186.03 81.26"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" width="250" height="250" data-name="Layer 1" viewBox="0 0 250 250"><defs><style>.cls-1{fill:none;stroke:#7df3e1;stroke-linejoin:round;stroke-width:2.5px}</style></defs><polygon points="210.2 178.75 210.2 96.75 186.09 44.02 136.67 12.26 136.67 134.08 210.2 178.75" class="cls-1"/><polygon points="113.33 237.75 113.33 118.51 39.8 71.25 39.8 193.07 113.33 237.75" class="cls-1"/><polyline points="69.73 136.22 58.56 147.39 68.59 167.84" class="cls-1"/><polyline points="82.96 176.15 93.08 166.03 82.67 143.81" class="cls-1"/><line x1="159.63" x2="122.15" y1="127.73" y2="165.96" class="cls-1"/><polyline points="136.74 165.96 122.15 165.96 122.15 151.37" class="cls-1"/><line x1="122.15" x2="159.51" y1="115.07" y2="77.07" class="cls-1"/><polyline points="144.92 77.07 159.51 77.07 159.51 91.66" class="cls-1"/><polygon points="186.03 81.26 210.13 96.75 186.03 44.1 186.03 81.26" class="cls-1"/></svg>

Before

Width:  |  Height:  |  Size: 953 B

After

Width:  |  Height:  |  Size: 952 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

+4 -4
View File
@@ -909,10 +909,10 @@
resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==
"@spotify/prettier-config@^10.0.0":
version "10.0.0"
resolved "https://registry.npmjs.org/@spotify/prettier-config/-/prettier-config-10.0.0.tgz#fa076d98d2e7e6c53dd3d86a696307a7010bd056"
integrity sha512-VYOdo8P7lIScAkl02nB9KpUAuOYMManryBIBuKJkAw5D3aVtLobfmdIKvdV6MqEmGMEQPbn7w/UpnjJYhUH+IA==
"@spotify/prettier-config@^11.0.0":
version "11.0.0"
resolved "https://registry.npmjs.org/@spotify/prettier-config/-/prettier-config-11.0.0.tgz#d91e0546a8c1c0f7299e2edc7e44306e9be210f6"
integrity sha512-dOI13j1uHMZkRxhZuge/ugOE7Aqcg7Nxki932lDZuXyY4G8CGxkc/66PeQ8pR4PCzThHORXo7Ptvau6bh101lQ==
"@types/cheerio@^0.22.8":
version "0.22.23"
+30
View File
@@ -1,5 +1,35 @@
# example-app
## 0.2.37
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@0.6.7
- @backstage/plugin-catalog-react@0.3.0
- @backstage/plugin-scaffolder@0.10.1
- @backstage/plugin-techdocs@0.10.0
- @backstage/plugin-jenkins@0.5.0
- @backstage/plugin-user-settings@0.3.0
- @backstage/plugin-search@0.4.3
- @backstage/cli@0.7.4
- @backstage/plugin-api-docs@0.6.2
- @backstage/plugin-badges@0.2.5
- @backstage/plugin-catalog-import@0.5.13
- @backstage/plugin-circleci@0.2.19
- @backstage/plugin-cloudbuild@0.2.19
- @backstage/plugin-code-coverage@0.1.7
- @backstage/plugin-explore@0.3.10
- @backstage/plugin-github-actions@0.4.13
- @backstage/plugin-kafka@0.2.11
- @backstage/plugin-kubernetes@0.4.8
- @backstage/plugin-lighthouse@0.2.20
- @backstage/plugin-org@0.3.17
- @backstage/plugin-pagerduty@0.3.8
- @backstage/plugin-rollbar@0.3.9
- @backstage/plugin-sentry@0.3.15
- @backstage/plugin-todo@0.1.5
## 0.2.36
### Patch Changes
+31 -29
View File
@@ -1,52 +1,54 @@
{
"name": "example-app",
"version": "0.2.36",
"version": "0.2.37",
"private": true,
"bundled": true,
"dependencies": {
"@backstage/catalog-model": "^0.9.0",
"@backstage/cli": "^0.7.2",
"@backstage/cli": "^0.7.4",
"@backstage/core-app-api": "^0.1.3",
"@backstage/core-components": "^0.1.5",
"@backstage/core-plugin-api": "^0.1.3",
"@backstage/integration-react": "^0.1.4",
"@backstage/plugin-api-docs": "^0.6.1",
"@backstage/plugin-badges": "^0.2.4",
"@backstage/plugin-catalog": "^0.6.6",
"@backstage/plugin-catalog-import": "^0.5.12",
"@backstage/plugin-catalog-react": "^0.2.6",
"@backstage/plugin-circleci": "^0.2.18",
"@backstage/plugin-cloudbuild": "^0.2.18",
"@backstage/plugin-code-coverage": "^0.1.6",
"@backstage/plugin-api-docs": "^0.6.2",
"@backstage/plugin-badges": "^0.2.5",
"@backstage/plugin-catalog": "^0.6.7",
"@backstage/plugin-catalog-import": "^0.5.13",
"@backstage/plugin-catalog-react": "^0.3.0",
"@backstage/plugin-circleci": "^0.2.19",
"@backstage/plugin-cloudbuild": "^0.2.19",
"@backstage/plugin-code-coverage": "^0.1.7",
"@backstage/plugin-cost-insights": "^0.11.0",
"@backstage/plugin-explore": "^0.3.9",
"@backstage/plugin-explore": "^0.3.10",
"@backstage/plugin-gcp-projects": "^0.3.0",
"@backstage/plugin-github-actions": "^0.4.12",
"@backstage/plugin-github-actions": "^0.4.13",
"@backstage/plugin-graphiql": "^0.2.12",
"@backstage/plugin-jenkins": "^0.4.7",
"@backstage/plugin-kafka": "^0.2.10",
"@backstage/plugin-kubernetes": "^0.4.7",
"@backstage/plugin-lighthouse": "^0.2.19",
"@backstage/plugin-jenkins": "^0.5.0",
"@backstage/plugin-kafka": "^0.2.11",
"@backstage/plugin-kubernetes": "^0.4.8",
"@backstage/plugin-lighthouse": "^0.2.20",
"@backstage/plugin-newrelic": "^0.3.0",
"@backstage/plugin-org": "^0.3.16",
"@backstage/plugin-pagerduty": "0.3.7",
"@backstage/plugin-rollbar": "^0.3.8",
"@backstage/plugin-scaffolder": "^0.10.0",
"@backstage/plugin-search": "^0.4.2",
"@backstage/plugin-sentry": "^0.3.14",
"@backstage/plugin-org": "^0.3.17",
"@backstage/plugin-pagerduty": "0.3.8",
"@backstage/plugin-rollbar": "^0.3.9",
"@backstage/plugin-scaffolder": "^0.10.1",
"@backstage/plugin-search": "^0.4.3",
"@backstage/plugin-sentry": "^0.3.15",
"@backstage/plugin-shortcuts": "^0.1.4",
"@backstage/plugin-tech-radar": "^0.4.1",
"@backstage/plugin-techdocs": "^0.9.9",
"@backstage/plugin-todo": "^0.1.4",
"@backstage/plugin-user-settings": "^0.2.12",
"@backstage/plugin-techdocs": "^0.10.0",
"@backstage/plugin-todo": "^0.1.5",
"@backstage/plugin-user-settings": "^0.3.0",
"@backstage/search-common": "^0.1.2",
"@backstage/theme": "^0.2.8",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.45",
"@octokit/rest": "^18.5.3",
"@roadiehq/backstage-plugin-buildkite": "^1.0.4",
"@roadiehq/backstage-plugin-github-insights": "^1.1.15",
"@roadiehq/backstage-plugin-github-pull-requests": "^1.0.8",
"@roadiehq/backstage-plugin-travis-ci": "^1.0.4",
"@roadiehq/backstage-plugin-buildkite": "^1.0.6",
"@roadiehq/backstage-plugin-github-insights": "^1.1.20",
"@roadiehq/backstage-plugin-github-pull-requests": "^1.0.10",
"@roadiehq/backstage-plugin-travis-ci": "^1.0.8",
"history": "^5.0.0",
"prop-types": "^15.7.2",
"react": "^16.12.0",
@@ -135,6 +135,13 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => {
);
};
/**
* NOTE: This page is designed to work on small screens such as mobile devices.
* This is based on Material UI Grid. If breakpoints are used, each grid item must set the `xs` prop to a column size or to `true`,
* since this does not default. If no breakpoints are used, the items will equitably share the asvailable space.
* https://material-ui.com/components/grid/#basic-grid.
*/
export const cicdContent = (
<EntitySwitch>
<EntitySwitch.Case if={isJenkinsAvailable}>
@@ -292,10 +299,10 @@ const serviceEntityPage = (
<EntityLayout.Route path="/api" title="API">
<Grid container spacing={3} alignItems="stretch">
<Grid item md={6}>
<Grid item xs={12} md={6}>
<EntityProvidedApisCard />
</Grid>
<Grid item md={6}>
<Grid item xs={12} md={6}>
<EntityConsumedApisCard />
</Grid>
</Grid>
@@ -303,10 +310,10 @@ const serviceEntityPage = (
<EntityLayout.Route path="/dependencies" title="Dependencies">
<Grid container spacing={3} alignItems="stretch">
<Grid item md={6}>
<Grid item xs={12} md={6}>
<EntityDependsOnComponentsCard variant="gridItem" />
</Grid>
<Grid item md={6}>
<Grid item xs={12} md={6}>
<EntityDependsOnResourcesCard variant="gridItem" />
</Grid>
</Grid>
@@ -431,15 +438,17 @@ const apiPage = (
<EntityLayoutWrapper>
<EntityLayout.Route path="/" title="Overview">
<Grid container spacing={3}>
<Grid item md={6}>
<Grid item xs={12}>
<EntityAboutCard />
</Grid>
<Grid container item md={12}>
<Grid item md={6}>
<EntityProvidingComponentsCard />
</Grid>
<Grid item md={6}>
<EntityConsumingComponentsCard />
<Grid item xs={12}>
<Grid container>
<Grid item xs={12} md={6}>
<EntityProvidingComponentsCard />
</Grid>
<Grid item xs={12} md={6}>
<EntityConsumingComponentsCard />
</Grid>
</Grid>
</Grid>
</Grid>
@@ -14,17 +14,20 @@
* limitations under the License.
*/
import React from 'react';
import React, { useState } from 'react';
import { makeStyles, Theme, Grid, List, Paper } from '@material-ui/core';
import Pagination from '@material-ui/lab/Pagination';
import { CatalogResultListItem } from '@backstage/plugin-catalog';
import {
SearchBar,
SearchFilter,
SearchResult,
SearchType,
DefaultResultListItem,
} from '@backstage/plugin-search';
import { Content, Header, Lifecycle, Page } from '@backstage/core-components';
import { DocsResultListItem } from '@backstage/plugin-techdocs';
import { SearchResultSet } from '@backstage/search-common';
const useStyles = makeStyles((theme: Theme) => ({
bar: {
@@ -34,15 +37,63 @@ const useStyles = makeStyles((theme: Theme) => ({
padding: theme.spacing(2),
},
filter: {
'& + &': {
marginTop: theme.spacing(2.5),
},
marginTop: theme.spacing(2.5),
},
}));
// TODO: Move this into the search plugin once pagination is natively supported.
// See: https://github.com/backstage/backstage/issues/6062
const SearchResultList = ({ results }: SearchResultSet) => {
const pageSize = 10;
const [page, setPage] = useState(1);
const changePage = (_: any, pageIndex: number) => {
setPage(pageIndex);
};
const pageAmount = Math.ceil((results.length || 0) / pageSize);
return (
<>
<List>
{results
.slice(pageSize * (page - 1), pageSize * page)
.map(({ type, document }) => {
switch (type) {
case 'software-catalog':
return (
<CatalogResultListItem
key={document.location}
result={document}
/>
);
case 'techdocs':
return (
<DocsResultListItem
key={document.location}
result={document}
/>
);
default:
return (
<DefaultResultListItem
key={document.location}
result={document}
/>
);
}
})}
</List>
<Pagination
count={pageAmount}
page={page}
onChange={changePage}
showFirstButton
showLastButton
/>
</>
);
};
const SearchPage = () => {
const classes = useStyles();
return (
<Page themeId="home">
<Header title="Search" subtitle={<Lifecycle alpha />} />
@@ -55,6 +106,11 @@ const SearchPage = () => {
</Grid>
<Grid item xs={3}>
<Paper className={classes.filters}>
<SearchType
values={['techdocs', 'software-catalog']}
name="type"
defaultValue="software-catalog"
/>
<SearchFilter.Select
className={classes.filter}
name="kind"
@@ -69,28 +125,7 @@ const SearchPage = () => {
</Grid>
<Grid item xs={9}>
<SearchResult>
{({ results }) => (
<List>
{results.map(({ type, document }) => {
switch (type) {
case 'software-catalog':
return (
<CatalogResultListItem
key={document.location}
result={document}
/>
);
default:
return (
<DefaultResultListItem
key={document.location}
result={document}
/>
);
}
})}
</List>
)}
{({ results }) => <SearchResultList results={results} />}
</SearchResult>
</Grid>
</Grid>
+39
View File
@@ -1,5 +1,44 @@
# @backstage/backend-common
## 0.8.7
### Patch Changes
- f25357273: Implement the etag functionality in the `readUrl` method of `FetchUrlReader`.
- bdd6ab5f1: It's possible to customize the request logging handler when building the service. For example in your `backend`
```
const service = createServiceBuilder(module)
.loadConfig(config)
.setRequestLoggingHandler((logger?: Logger): RequestHandler => {
const actualLogger = (logger || getRootLogger()).child({
type: 'incomingRequest',
});
return expressWinston.logger({ ...
```
## 0.8.6
### Patch Changes
- 5f6f2fd96: Support a `ensureExists` config option to skip ensuring a configured database exists. This allows deployment scenarios where
limited permissions are given for provisioned databases without privileges to create new databases. If set to `false`, the
database connection will not be validated prior to use which means the backend will not attempt to create the database if it
doesn't exist. You can configure this in your app-config.yaml:
```yaml
backend:
database:
ensureExists: false
```
This defaults to `true` if unspecified. You can also configure this per plugin connection and will override the base option.
- ad93bb035: Document the default behavior of `statusCheck` option in `createStatusCheckRouter`.
- ae84b20cf: Revert the upgrade to `fs-extra@10.0.0` as that seemed to have broken all installs inexplicably.
- Updated dependencies
- @backstage/config-loader@0.6.5
## 0.8.5
### Patch Changes
+149
View File
@@ -32,6 +32,8 @@ import { Server } from 'http';
import * as winston from 'winston';
import { Writable } from 'stream';
// Warning: (ae-missing-release-tag) "AzureUrlReader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class AzureUrlReader implements UrlReader {
constructor(
@@ -40,20 +42,31 @@ export class AzureUrlReader implements UrlReader {
treeResponseFactory: ReadTreeResponseFactory;
},
);
// Warning: (ae-forgotten-export) The symbol "ReaderFactory" needs to be exported by the entry point index.d.ts
//
// (undocumented)
static factory: ReaderFactory;
// (undocumented)
read(url: string): Promise<Buffer>;
// Warning: (ae-forgotten-export) The symbol "ReadTreeOptions" needs to be exported by the entry point index.d.ts
//
// (undocumented)
readTree(url: string, options?: ReadTreeOptions): Promise<ReadTreeResponse>;
// Warning: (ae-forgotten-export) The symbol "ReadUrlOptions" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "ReadUrlResponse" needs to be exported by the entry point index.d.ts
//
// (undocumented)
readUrl(url: string, _options?: ReadUrlOptions): Promise<ReadUrlResponse>;
// Warning: (ae-forgotten-export) The symbol "SearchOptions" needs to be exported by the entry point index.d.ts
//
// (undocumented)
search(url: string, options?: SearchOptions): Promise<SearchResponse>;
// (undocumented)
toString(): string;
}
// Warning: (ae-missing-release-tag) "BitbucketUrlReader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class BitbucketUrlReader implements UrlReader {
constructor(
@@ -76,60 +89,92 @@ export class BitbucketUrlReader implements UrlReader {
toString(): string;
}
// Warning: (ae-missing-release-tag) "CacheClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export interface CacheClient {
delete(key: string): Promise<void>;
get(key: string): Promise<JsonValue | undefined>;
// Warning: (ae-forgotten-export) The symbol "CacheSetOptions" needs to be exported by the entry point index.d.ts
set(key: string, value: JsonValue, options?: CacheSetOptions): Promise<void>;
}
// Warning: (ae-missing-release-tag) "CacheManager" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class CacheManager {
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
forPlugin(pluginId: string): PluginCacheManager;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-forgotten-export) The symbol "CacheManagerOptions" needs to be exported by the entry point index.d.ts
static fromConfig(
config: Config,
options?: CacheManagerOptions,
): CacheManager;
}
// Warning: (ae-missing-release-tag) "coloredFormat" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const coloredFormat: winston.Logform.Format;
// Warning: (ae-missing-release-tag) "ContainerRunner" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export interface ContainerRunner {
// (undocumented)
runContainer(opts: RunContainerOptions): Promise<void>;
}
// Warning: (ae-missing-release-tag) "createDatabase" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public @deprecated
export const createDatabase: typeof createDatabaseClient;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "createDatabaseClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function createDatabaseClient(
dbConfig: Config,
overrides?: Partial<Knex.Config>,
): Knex<any, unknown[]>;
// Warning: (ae-missing-release-tag) "createRootLogger" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function createRootLogger(
options?: winston.LoggerOptions,
env?: NodeJS.ProcessEnv,
): winston.Logger;
// Warning: (ae-forgotten-export) The symbol "ServiceBuilderImpl" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "createServiceBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function createServiceBuilder(_module: NodeModule): ServiceBuilderImpl;
// Warning: (ae-forgotten-export) The symbol "StatusCheckRouterOptions" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "createStatusCheckRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function createStatusCheckRouter(
options: StatusCheckRouterOptions,
): Promise<express.Router>;
// Warning: (ae-missing-release-tag) "DatabaseManager" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class DatabaseManager {
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
forPlugin(pluginId: string): PluginDatabaseManager;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
static fromConfig(config: Config): DatabaseManager;
}
// Warning: (ae-missing-release-tag) "DockerContainerRunner" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class DockerContainerRunner implements ContainerRunner {
constructor({ dockerClient }: { dockerClient: Docker });
@@ -142,20 +187,27 @@ export class DockerContainerRunner implements ContainerRunner {
mountDirs,
workingDir,
envVars,
pullImage,
}: RunContainerOptions): Promise<void>;
}
// Warning: (ae-missing-release-tag) "ensureDatabaseExists" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function ensureDatabaseExists(
dbConfig: Config,
...databases: Array<string>
): Promise<void>;
// Warning: (ae-missing-release-tag) "errorHandler" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function errorHandler(
options?: ErrorHandlerOptions,
): ErrorRequestHandler;
// Warning: (ae-missing-release-tag) "ErrorHandlerOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type ErrorHandlerOptions = {
showStackTraces?: boolean;
@@ -163,12 +215,18 @@ export type ErrorHandlerOptions = {
logClientErrors?: boolean;
};
// Warning: (ae-missing-release-tag) "getRootLogger" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function getRootLogger(): winston.Logger;
// Warning: (ae-missing-release-tag) "getVoidLogger" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function getVoidLogger(): winston.Logger;
// Warning: (ae-missing-release-tag) "Git" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class Git {
// (undocumented)
@@ -273,6 +331,8 @@ export class Git {
resolveRef({ dir, ref }: { dir: string; ref: string }): Promise<string>;
}
// Warning: (ae-missing-release-tag) "GithubUrlReader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class GithubUrlReader implements UrlReader {
constructor(
@@ -296,6 +356,8 @@ export class GithubUrlReader implements UrlReader {
toString(): string;
}
// Warning: (ae-missing-release-tag) "GitlabUrlReader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class GitlabUrlReader implements UrlReader {
constructor(
@@ -320,28 +382,41 @@ export class GitlabUrlReader implements UrlReader {
export { isChildPath };
// Warning: (ae-forgotten-export) The symbol "Options" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "loadBackendConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function loadBackendConfig(options: Options): Promise<Config>;
// Warning: (ae-missing-release-tag) "notFoundHandler" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function notFoundHandler(): RequestHandler;
// Warning: (ae-missing-release-tag) "PluginCacheManager" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type PluginCacheManager = {
getClient: (options?: ClientOptions) => CacheClient;
};
// Warning: (ae-missing-release-tag) "PluginDatabaseManager" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export interface PluginDatabaseManager {
getClient(): Promise<Knex>;
}
// Warning: (ae-missing-release-tag) "PluginEndpointDiscovery" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type PluginEndpointDiscovery = {
getBaseUrl(pluginId: string): Promise<string>;
getExternalBaseUrl(pluginId: string): Promise<string>;
};
// Warning: (ae-missing-release-tag) "ReadTreeResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type ReadTreeResponse = {
files(): Promise<ReadTreeResponseFile[]>;
@@ -350,21 +425,41 @@ export type ReadTreeResponse = {
etag: string;
};
// Warning: (ae-missing-release-tag) "ReadTreeResponseFile" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type ReadTreeResponseFile = {
path: string;
content(): Promise<Buffer>;
};
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "requestLoggingHandler" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function requestLoggingHandler(logger?: Logger_2): RequestHandler;
// Warning: (ae-missing-release-tag) "RequestLoggingHandlerFactory" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type RequestLoggingHandlerFactory = (
logger?: Logger_2,
) => RequestHandler;
// Warning: (ae-missing-release-tag) "resolvePackagePath" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function resolvePackagePath(name: string, ...paths: string[]): string;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "resolveSafeChildPath" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function resolveSafeChildPath(base: string, path: string): string;
// Warning: (ae-missing-release-tag) "RunContainerOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type RunContainerOptions = {
imageName: string;
@@ -374,20 +469,27 @@ export type RunContainerOptions = {
mountDirs?: Record<string, string>;
workingDir?: string;
envVars?: Record<string, string>;
pullImage?: boolean;
};
// Warning: (ae-missing-release-tag) "SearchResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type SearchResponse = {
files: SearchResponseFile[];
etag: string;
};
// Warning: (ae-missing-release-tag) "SearchResponseFile" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type SearchResponseFile = {
url: string;
content(): Promise<Buffer>;
};
// Warning: (ae-missing-release-tag) "ServiceBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type ServiceBuilder = {
loadConfig(config: ConfigReader): ServiceBuilder;
@@ -397,15 +499,24 @@ export type ServiceBuilder = {
enableCors(options: cors.CorsOptions): ServiceBuilder;
setHttpsSettings(settings: HttpsSettings): ServiceBuilder;
addRouter(root: string, router: Router | RequestHandler): ServiceBuilder;
setRequestLoggingHandler(
requestLoggingHandler: RequestLoggingHandlerFactory,
): ServiceBuilder;
start(): Promise<Server>;
};
// Warning: (ae-missing-release-tag) "setRootLogger" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function setRootLogger(newLogger: winston.Logger): void;
// Warning: (ae-missing-release-tag) "SingleConnectionDatabaseManager" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public @deprecated
export const SingleConnectionDatabaseManager: typeof DatabaseManager;
// Warning: (ae-missing-release-tag) "SingleHostDiscovery" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class SingleHostDiscovery implements PluginEndpointDiscovery {
static fromConfig(
@@ -420,19 +531,28 @@ export class SingleHostDiscovery implements PluginEndpointDiscovery {
getExternalBaseUrl(pluginId: string): Promise<string>;
}
// Warning: (ae-missing-release-tag) "StatusCheck" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type StatusCheck = () => Promise<any>;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "statusCheckHandler" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function statusCheckHandler(
options?: StatusCheckHandlerOptions,
): Promise<RequestHandler>;
// Warning: (ae-missing-release-tag) "StatusCheckHandlerOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export interface StatusCheckHandlerOptions {
statusCheck?: StatusCheck;
}
// Warning: (ae-missing-release-tag) "UrlReader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type UrlReader = {
read(url: string): Promise<Buffer>;
@@ -441,20 +561,49 @@ export type UrlReader = {
search(url: string, options?: SearchOptions): Promise<SearchResponse>;
};
// Warning: (ae-missing-release-tag) "UrlReaders" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class UrlReaders {
// Warning: (ae-forgotten-export) The symbol "CreateOptions" needs to be exported by the entry point index.d.ts
static create({ logger, config, factories }: CreateOptions): UrlReader;
static default({ logger, config, factories }: CreateOptions): UrlReader;
}
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "useHotCleanup" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function useHotCleanup(
_module: NodeModule,
cancelEffect: () => void,
): void;
// Warning: (tsdoc-undefined-tag) The TSDoc tag "@warning" is not defined in this configuration
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "useHotMemoize" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function useHotMemoize<T>(_module: NodeModule, valueFactory: () => T): T;
// Warnings were encountered during analysis:
//
// src/cache/types.d.ts:34:5 - (ae-forgotten-export) The symbol "ClientOptions" needs to be exported by the entry point index.d.ts
// src/middleware/errorHandler.d.ts:17:26 - (tsdoc-malformed-html-name) Invalid HTML element: A space is not allowed here
// src/reading/AzureUrlReader.d.ts:9:9 - (ae-forgotten-export) The symbol "ReadTreeResponseFactory" needs to be exported by the entry point index.d.ts
// src/reading/types.d.ts:106:5 - (ae-forgotten-export) The symbol "ReadTreeResponseDirOptions" needs to be exported by the entry point index.d.ts
// src/service/types.d.ts:12:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// src/service/types.d.ts:22:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// src/service/types.d.ts:30:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// src/service/types.d.ts:38:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// src/service/types.d.ts:47:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// src/service/types.d.ts:55:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// src/service/types.d.ts:57:5 - (ae-forgotten-export) The symbol "HttpsSettings" needs to be exported by the entry point index.d.ts
// src/service/types.d.ts:61:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// src/service/types.d.ts:62:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// src/service/types.d.ts:70:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// (No @packageDocumentation comment for this package)
```
+4 -4
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-common",
"description": "Common functionality library for Backstage backends",
"version": "0.8.5",
"version": "0.8.7",
"main": "src/index.ts",
"types": "src/index.ts",
"private": false,
@@ -31,7 +31,7 @@
"dependencies": {
"@backstage/cli-common": "^0.1.2",
"@backstage/config": "^0.1.5",
"@backstage/config-loader": "^0.6.4",
"@backstage/config-loader": "^0.6.5",
"@backstage/errors": "^0.1.1",
"@backstage/integration": "^0.5.8",
"@google-cloud/storage": "^5.8.0",
@@ -76,8 +76,8 @@
}
},
"devDependencies": {
"@backstage/cli": "^0.7.3",
"@backstage/test-utils": "^0.1.12",
"@backstage/cli": "^0.7.5",
"@backstage/test-utils": "^0.1.15",
"@types/archiver": "^5.1.0",
"@types/compression": "^1.7.0",
"@types/concat-stream": "^1.6.0",
@@ -15,12 +15,16 @@
*/
import { ConfigReader } from '@backstage/config';
import { NotFoundError, NotModifiedError } from '@backstage/errors';
import { msw } from '@backstage/test-utils';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { getVoidLogger } from '../logging';
import { FetchUrlReader } from './FetchUrlReader';
import { DefaultReadTreeResponseFactory } from './tree';
const fetchUrlReader = new FetchUrlReader();
describe('FetchUrlReader', () => {
const worker = setupServer();
@@ -30,6 +34,39 @@ describe('FetchUrlReader', () => {
jest.clearAllMocks();
});
beforeEach(() => {
worker.use(
rest.get('https://backstage.io/some-resource', (req, res, ctx) => {
if (req.headers.get('if-none-match') === 'foo') {
return res(
ctx.status(304),
ctx.set('Content-Type', 'text/plain'),
ctx.set('etag', 'foo'),
);
}
return res(
ctx.status(200),
ctx.set('Content-Type', 'text/plain'),
ctx.set('etag', 'foo'),
ctx.body('content foo'),
);
}),
);
worker.use(
rest.get('https://backstage.io/not-exists', (_req, res, ctx) => {
return res(ctx.status(404));
}),
);
worker.use(
rest.get('https://backstage.io/error', (_req, res, ctx) => {
return res(ctx.status(500), ctx.body('An internal error occured'));
}),
);
});
it('factory should create a single entry with a predicate that matches config', async () => {
const entries = FetchUrlReader.factory({
config: new ConfigReader({
@@ -70,4 +107,55 @@ describe('FetchUrlReader', () => {
expect(predicate(new URL('https://a.examples.org:700/test'))).toBe(true);
expect(predicate(new URL('https://a.b.examples.org:700/test'))).toBe(true);
});
describe('read', () => {
it('should return etag from the response', async () => {
const buffer = await fetchUrlReader.read(
'https://backstage.io/some-resource',
);
expect(buffer.toString()).toBe('content foo');
});
it('should throw NotFound if server responds with 404', async () => {
await expect(
fetchUrlReader.read('https://backstage.io/not-exists'),
).rejects.toThrow(NotFoundError);
});
it('should throw Error if server responds with 500', async () => {
await expect(
fetchUrlReader.read('https://backstage.io/error'),
).rejects.toThrow(Error);
});
});
describe('readUrl', () => {
it('should throw NotModified if server responds with 304', async () => {
await expect(
fetchUrlReader.readUrl('https://backstage.io/some-resource', {
etag: 'foo',
}),
).rejects.toThrow(NotModifiedError);
});
it('should return etag from the response', async () => {
const response = await fetchUrlReader.readUrl(
'https://backstage.io/some-resource',
);
expect(response.etag).toBe('foo');
expect((await response.buffer()).toString()).toEqual('content foo');
});
it('should throw NotFound if server responds with 404', async () => {
await expect(
fetchUrlReader.readUrl('https://backstage.io/not-exists'),
).rejects.toThrow(NotFoundError);
});
it('should throw Error if server responds with 500', async () => {
await expect(
fetchUrlReader.readUrl('https://backstage.io/error'),
).rejects.toThrow(Error);
});
});
});
@@ -14,8 +14,8 @@
* limitations under the License.
*/
import { NotFoundError, NotModifiedError } from '@backstage/errors';
import fetch from 'cross-fetch';
import { NotFoundError } from '@backstage/errors';
import {
ReaderFactory,
ReadTreeResponse,
@@ -57,15 +57,34 @@ export class FetchUrlReader implements UrlReader {
};
async read(url: string): Promise<Buffer> {
const response = await this.readUrl(url);
return response.buffer();
}
async readUrl(
url: string,
options?: ReadUrlOptions,
): Promise<ReadUrlResponse> {
let response: Response;
try {
response = await fetch(url);
response = await fetch(url, {
headers: {
...(options?.etag && { 'If-None-Match': options.etag }),
},
});
} catch (e) {
throw new Error(`Unable to read ${url}, ${e}`);
}
if (response.status === 304) {
throw new NotModifiedError();
}
if (response.ok) {
return Buffer.from(await response.text());
return {
buffer: async () => Buffer.from(await response.text()),
etag: response.headers.get('ETag') ?? undefined,
};
}
const message = `could not read ${url}, ${response.status} ${response.statusText}`;
@@ -75,15 +94,6 @@ export class FetchUrlReader implements UrlReader {
throw new Error(message);
}
async readUrl(
url: string,
_options?: ReadUrlOptions,
): Promise<ReadUrlResponse> {
// TODO etag is not implemented yet.
const buffer = await this.read(url);
return { buffer: async () => buffer };
}
async readTree(): Promise<ReadTreeResponse> {
throw new Error('FetchUrlReader does not implement readTree');
}
+1 -1
View File
@@ -16,4 +16,4 @@
export { createServiceBuilder } from './createServiceBuilder';
export { createStatusCheckRouter } from './createStatusCheckRouter';
export type { ServiceBuilder } from './types';
export type { ServiceBuilder, RequestLoggingHandlerFactory } from './types';
@@ -27,9 +27,9 @@ import { getRootLogger } from '../../logging';
import {
errorHandler,
notFoundHandler,
requestLoggingHandler,
requestLoggingHandler as defaultRequestLoggingHandler,
} from '../../middleware';
import { ServiceBuilder } from '../types';
import { RequestLoggingHandlerFactory, ServiceBuilder } from '../types';
import {
CspOptions,
HttpsSettings,
@@ -65,6 +65,7 @@ export class ServiceBuilderImpl implements ServiceBuilder {
private cspOptions: Record<string, string[] | false> | undefined;
private httpsSettings: HttpsSettings | undefined;
private routers: [string, Router][];
private requestLoggingHandler: RequestLoggingHandlerFactory | undefined;
// Reference to the module where builder is created - needed for hot module
// reloading
private module: NodeModule;
@@ -144,6 +145,13 @@ export class ServiceBuilderImpl implements ServiceBuilder {
return this;
}
setRequestLoggingHandler(
requestLoggingHandler: RequestLoggingHandlerFactory,
) {
this.requestLoggingHandler = requestLoggingHandler;
return this;
}
async start(): Promise<http.Server> {
const app = express();
const {
@@ -160,7 +168,9 @@ export class ServiceBuilderImpl implements ServiceBuilder {
app.use(cors(corsOptions));
}
app.use(compression());
app.use(requestLoggingHandler(logger));
app.use(
(this.requestLoggingHandler ?? defaultRequestLoggingHandler)(logger),
);
for (const [root, route] of this.routers) {
app.use(root, route);
}
@@ -85,8 +85,21 @@ export type ServiceBuilder = {
*/
addRouter(root: string, router: Router | RequestHandler): ServiceBuilder;
/**
* Set the request logging handler
*
* If no handler is given the default one is used
*
* @param requestLoggingHandler a factory function that given a logger returns an handler
*/
setRequestLoggingHandler(
requestLoggingHandler: RequestLoggingHandlerFactory,
): ServiceBuilder;
/**
* Starts the server using the given settings.
*/
start(): Promise<Server>;
};
export type RequestLoggingHandlerFactory = (logger?: Logger) => RequestHandler;
@@ -24,6 +24,7 @@ export type RunContainerOptions = {
mountDirs?: Record<string, string>;
workingDir?: string;
envVars?: Record<string, string>;
pullImage?: boolean;
};
export interface ContainerRunner {
@@ -58,6 +58,7 @@ describe('DockerContainerRunner', () => {
});
afterEach(() => {
jest.clearAllMocks();
mockFs.restore();
});
@@ -86,6 +87,17 @@ describe('DockerContainerRunner', () => {
expect(mockDocker.run).toHaveBeenCalled();
});
it('should not pull the docker container when pullImage is false', async () => {
await containerTaskApi.runContainer({
imageName,
args,
pullImage: false,
});
expect(mockDocker.pull).not.toHaveBeenCalled();
expect(mockDocker.run).toHaveBeenCalled();
});
it('should call the dockerClient run command with the correct arguments passed through', async () => {
await containerTaskApi.runContainer({
imageName,
@@ -38,6 +38,7 @@ export class DockerContainerRunner implements ContainerRunner {
mountDirs = {},
workingDir,
envVars = {},
pullImage = true,
}: RunContainerOptions) {
// Show a better error message when Docker is unavailable.
try {
@@ -48,15 +49,17 @@ export class DockerContainerRunner implements ContainerRunner {
);
}
await new Promise<void>((resolve, reject) => {
this.dockerClient.pull(imageName, {}, (err, stream) => {
if (err) return reject(err);
stream.pipe(logStream, { end: false });
stream.on('end', () => resolve());
stream.on('error', (error: Error) => reject(error));
return undefined;
if (pullImage) {
await new Promise<void>((resolve, reject) => {
this.dockerClient.pull(imageName, {}, (err, stream) => {
if (err) return reject(err);
stream.pipe(logStream, { end: false });
stream.on('end', () => resolve());
stream.on('error', (error: Error) => reject(error));
return undefined;
});
});
});
}
const userOptions: UserOptions = {};
if (process.getuid && process.getgid) {
@@ -5,9 +5,13 @@
```ts
import { Knex } from 'knex';
// Warning: (ae-missing-release-tag) "isDockerDisabledForTests" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function isDockerDisabledForTests(): boolean;
// Warning: (ae-missing-release-tag) "TestDatabaseId" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type TestDatabaseId =
| 'POSTGRES_13'
@@ -15,6 +19,8 @@ export type TestDatabaseId =
| 'MYSQL_8'
| 'SQLITE_3';
// Warning: (ae-missing-release-tag) "TestDatabases" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class TestDatabases {
static create(options?: {
@@ -23,6 +29,7 @@ export class TestDatabases {
}): TestDatabases;
// (undocumented)
eachSupportedId(): [TestDatabaseId][];
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
init(id: TestDatabaseId): Promise<Knex>;
// (undocumented)
supports(id: TestDatabaseId): boolean;
+31
View File
@@ -1,5 +1,36 @@
# example-backend
## 0.2.38
### Patch Changes
- Updated dependencies
- @backstage/plugin-kubernetes-backend@0.3.11
- @backstage/catalog-client@0.3.17
- @backstage/plugin-auth-backend@0.3.18
- @backstage/plugin-jenkins-backend@0.1.2
- @backstage/backend-common@0.8.7
- @backstage/plugin-techdocs-backend@0.9.0
- @backstage/plugin-scaffolder-backend@0.14.1
## 0.2.37
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.8.6
- @backstage/plugin-scaffolder-backend@0.14.0
- @backstage/plugin-catalog-backend@0.13.0
- @backstage/plugin-auth-backend@0.3.17
- @backstage/plugin-scaffolder-backend-module-rails@0.1.3
- @backstage/plugin-search-backend-node@0.4.0
- @backstage/plugin-techdocs-backend@0.8.7
- @backstage/plugin-app-backend@0.3.15
- @backstage/plugin-kubernetes-backend@0.3.10
- @backstage/plugin-rollbar-backend@0.1.13
- example-app@0.2.37
- @backstage/plugin-search-backend@0.2.3
## 0.2.36
### Patch Changes
+16 -15
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend",
"version": "0.2.36",
"version": "0.2.38",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -27,32 +27,33 @@
"migrate:create": "knex migrate:make -x ts"
},
"dependencies": {
"@backstage/backend-common": "^0.8.5",
"@backstage/catalog-client": "^0.3.16",
"@backstage/backend-common": "^0.8.7",
"@backstage/catalog-client": "^0.3.17",
"@backstage/catalog-model": "^0.9.0",
"@backstage/config": "^0.1.5",
"@backstage/integration": "^0.5.8",
"@backstage/plugin-app-backend": "^0.3.13",
"@backstage/plugin-auth-backend": "^0.3.16",
"@backstage/plugin-app-backend": "^0.3.15",
"@backstage/plugin-auth-backend": "^0.3.18",
"@backstage/plugin-badges-backend": "^0.1.8",
"@backstage/plugin-catalog-backend": "^0.12.0",
"@backstage/plugin-catalog-backend": "^0.13.0",
"@backstage/plugin-code-coverage-backend": "^0.1.8",
"@backstage/plugin-graphql-backend": "^0.1.8",
"@backstage/plugin-kubernetes-backend": "^0.3.9",
"@backstage/plugin-jenkins-backend": "^0.1.2",
"@backstage/plugin-kubernetes-backend": "^0.3.11",
"@backstage/plugin-kafka-backend": "^0.2.8",
"@backstage/plugin-proxy-backend": "^0.2.9",
"@backstage/plugin-rollbar-backend": "^0.1.11",
"@backstage/plugin-scaffolder-backend": "^0.13.0",
"@backstage/plugin-scaffolder-backend-module-rails": "^0.1.2",
"@backstage/plugin-search-backend": "^0.2.2",
"@backstage/plugin-search-backend-node": "^0.3.0",
"@backstage/plugin-techdocs-backend": "^0.8.6",
"@backstage/plugin-rollbar-backend": "^0.1.13",
"@backstage/plugin-scaffolder-backend": "^0.14.1",
"@backstage/plugin-scaffolder-backend-module-rails": "^0.1.3",
"@backstage/plugin-search-backend": "^0.2.3",
"@backstage/plugin-search-backend-node": "^0.4.0",
"@backstage/plugin-techdocs-backend": "^0.9.0",
"@backstage/plugin-todo-backend": "^0.1.8",
"@gitbeaker/node": "^30.2.0",
"@octokit/rest": "^18.5.3",
"azure-devops-node-api": "^10.2.2",
"dockerode": "^3.2.1",
"example-app": "^0.2.36",
"example-app": "^0.2.37",
"express": "^4.17.1",
"express-promise-router": "^4.1.0",
"knex": "^0.95.1",
@@ -62,7 +63,7 @@
"winston": "^3.2.1"
},
"devDependencies": {
"@backstage/cli": "^0.7.3",
"@backstage/cli": "^0.7.5",
"@types/dockerode": "^3.2.1",
"@types/express": "^4.17.6",
"@types/express-serve-static-core": "^4.17.5"
+3
View File
@@ -50,6 +50,7 @@ import todo from './plugins/todo';
import graphql from './plugins/graphql';
import app from './plugins/app';
import badges from './plugins/badges';
import jenkins from './plugins/jenkins';
import { PluginEnvironment } from './types';
function makeCreateEnv(config: Config) {
@@ -101,6 +102,7 @@ async function main() {
const graphqlEnv = useHotMemoize(module, () => createEnv('graphql'));
const appEnv = useHotMemoize(module, () => createEnv('app'));
const badgesEnv = useHotMemoize(module, () => createEnv('badges'));
const jenkinsEnv = useHotMemoize(module, () => createEnv('jenkins'));
const apiRouter = Router();
apiRouter.use('/catalog', await catalog(catalogEnv));
@@ -116,6 +118,7 @@ async function main() {
apiRouter.use('/proxy', await proxy(proxyEnv));
apiRouter.use('/graphql', await graphql(graphqlEnv));
apiRouter.use('/badges', await badges(badgesEnv));
apiRouter.use('/jenkins', await jenkins(jenkinsEnv));
apiRouter.use(notFoundHandler());
const service = createServiceBuilder(module)
+39
View File
@@ -0,0 +1,39 @@
/*
* Copyright 2020 Spotify AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
createRouter,
DefaultJenkinsInfoProvider,
} from '@backstage/plugin-jenkins-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
import { CatalogClient } from '@backstage/catalog-client';
export default async function createPlugin({
logger,
config,
discovery,
}: PluginEnvironment): Promise<Router> {
const catalog = new CatalogClient({ discoveryApi: discovery });
return await createRouter({
logger,
jenkinsInfoProvider: DefaultJenkinsInfoProvider.fromConfig({
catalog,
config,
}),
});
}
+6
View File
@@ -21,6 +21,7 @@ import {
} from '@backstage/plugin-search-backend-node';
import { PluginEnvironment } from '../types';
import { DefaultCatalogCollator } from '@backstage/plugin-catalog-backend';
import { DefaultTechDocsCollator } from '@backstage/plugin-techdocs-backend';
export default async function createPlugin({
logger,
@@ -37,6 +38,11 @@ export default async function createPlugin({
collator: new DefaultCatalogCollator({ discovery }),
});
indexBuilder.addCollator({
defaultRefreshIntervalSeconds: 600,
collator: new DefaultTechDocsCollator({ discovery, logger }),
});
// The scheduler controls when documents are gathered from collators and sent
// to the search engine for indexing.
const { scheduler } = await indexBuilder.build();
+6
View File
@@ -1,5 +1,11 @@
# @backstage/catalog-client
## 0.3.17
### Patch Changes
- 71c936eb6: Export `CatalogRequestOptions` type
## 0.3.16
### Patch Changes
+25
View File
@@ -7,6 +7,8 @@ import { Entity } from '@backstage/catalog-model';
import { EntityName } from '@backstage/catalog-model';
import { Location as Location_2 } from '@backstage/catalog-model';
// Warning: (ae-missing-release-tag) "AddLocationRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type AddLocationRequest = {
type?: string;
@@ -15,12 +17,16 @@ export type AddLocationRequest = {
presence?: 'optional' | 'required';
};
// Warning: (ae-missing-release-tag) "AddLocationResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type AddLocationResponse = {
location: Location_2;
entities: Entity[];
};
// Warning: (ae-missing-release-tag) "CatalogApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export interface CatalogApi {
// (undocumented)
@@ -65,6 +71,8 @@ export interface CatalogApi {
): Promise<void>;
}
// Warning: (ae-missing-release-tag) "CatalogClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class CatalogClient implements CatalogApi {
constructor(options: { discoveryApi: DiscoveryApi });
@@ -110,6 +118,8 @@ export class CatalogClient implements CatalogApi {
): Promise<void>;
}
// Warning: (ae-missing-release-tag) "CatalogEntitiesRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type CatalogEntitiesRequest = {
filter?:
@@ -119,14 +129,29 @@ export type CatalogEntitiesRequest = {
fields?: string[] | undefined;
};
// Warning: (ae-missing-release-tag) "CatalogListResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type CatalogListResponse<T> = {
items: T[];
};
// Warning: (ae-missing-release-tag) "CatalogRequestOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type CatalogRequestOptions = {
token?: string;
};
// Warning: (ae-missing-release-tag) "ENTITY_STATUS_CATALOG_PROCESSING_TYPE" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const ENTITY_STATUS_CATALOG_PROCESSING_TYPE =
'backstage.io/catalog-processing';
// Warnings were encountered during analysis:
//
// src/CatalogClient.d.ts:7:9 - (ae-forgotten-export) The symbol "DiscoveryApi" needs to be exported by the entry point index.d.ts
// (No @packageDocumentation comment for this package)
```
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/catalog-client",
"version": "0.3.16",
"version": "0.3.17",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -35,7 +35,7 @@
"cross-fetch": "^3.0.6"
},
"devDependencies": {
"@backstage/cli": "^0.7.3",
"@backstage/cli": "^0.7.5",
"@types/jest": "^26.0.7",
"msw": "^0.29.0"
},
@@ -20,5 +20,6 @@ export type {
CatalogApi,
CatalogEntitiesRequest,
CatalogListResponse,
CatalogRequestOptions,
} from './api';
export { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from './status';
+211
View File
@@ -9,6 +9,9 @@ import { JsonValue } from '@backstage/config';
import { SerializedError } from '@backstage/errors';
import * as yup from 'yup';
// Warning: (tsdoc-missing-deprecation-message) The @deprecated block must include a deprecation message, e.g. describing the recommended alternative
// Warning: (ae-missing-release-tag) "analyzeLocationSchema" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public @deprecated (undocumented)
export const analyzeLocationSchema: yup.ObjectSchema<
{
@@ -17,6 +20,8 @@ export const analyzeLocationSchema: yup.ObjectSchema<
object
>;
// Warning: (ae-missing-release-tag) "ApiEntityV1alpha1" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
interface ApiEntityV1alpha1 extends Entity {
// (undocumented)
@@ -35,24 +40,43 @@ interface ApiEntityV1alpha1 extends Entity {
export { ApiEntityV1alpha1 as ApiEntity };
export { ApiEntityV1alpha1 };
// Warning: (ae-missing-release-tag) "apiEntityV1alpha1Validator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const apiEntityV1alpha1Validator: KindValidator;
// Warning: (ae-missing-release-tag) "CommonValidatorFunctions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class CommonValidatorFunctions {
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
static isJsonSafe(value: unknown): boolean;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
static isValidDnsLabel(value: unknown): boolean;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
static isValidDnsSubdomain(value: unknown): boolean;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
static isValidPrefixAndOrSuffix(
value: unknown,
separator: string,
isValidPrefix: (value: string) => boolean,
isValidSuffix: (value: string) => boolean,
): boolean;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
static isValidString(value: unknown): boolean;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
static isValidUrl(value: unknown): boolean;
}
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-forgotten-export) The symbol "EntityRefContext" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "compareEntityToRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function compareEntityToRef(
entity: Entity,
@@ -60,6 +84,8 @@ export function compareEntityToRef(
context?: EntityRefContext,
): boolean;
// Warning: (ae-missing-release-tag) "ComponentEntityV1alpha1" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
interface ComponentEntityV1alpha1 extends Entity {
// (undocumented)
@@ -81,9 +107,13 @@ interface ComponentEntityV1alpha1 extends Entity {
export { ComponentEntityV1alpha1 as ComponentEntity };
export { ComponentEntityV1alpha1 };
// Warning: (ae-missing-release-tag) "componentEntityV1alpha1Validator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const componentEntityV1alpha1Validator: KindValidator;
// Warning: (ae-missing-release-tag) "DefaultNamespaceEntityPolicy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class DefaultNamespaceEntityPolicy implements EntityPolicy {
constructor(namespace?: string);
@@ -91,6 +121,8 @@ export class DefaultNamespaceEntityPolicy implements EntityPolicy {
enforce(entity: Entity): Promise<Entity>;
}
// Warning: (ae-missing-release-tag) "DomainEntityV1alpha1" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
interface DomainEntityV1alpha1 extends Entity {
// (undocumented)
@@ -105,12 +137,18 @@ interface DomainEntityV1alpha1 extends Entity {
export { DomainEntityV1alpha1 as DomainEntity };
export { DomainEntityV1alpha1 };
// Warning: (ae-missing-release-tag) "domainEntityV1alpha1Validator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const domainEntityV1alpha1Validator: KindValidator;
// Warning: (ae-missing-release-tag) "EDIT_URL_ANNOTATION" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const EDIT_URL_ANNOTATION = 'backstage.io/edit-url';
// Warning: (ae-missing-release-tag) "Entity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type Entity = {
apiVersion: string;
@@ -121,9 +159,13 @@ export type Entity = {
status?: UNSTABLE_EntityStatus;
};
// Warning: (ae-missing-release-tag) "ENTITY_DEFAULT_NAMESPACE" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const ENTITY_DEFAULT_NAMESPACE = 'default';
// Warning: (ae-missing-release-tag) "ENTITY_META_GENERATED_FIELDS" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const ENTITY_META_GENERATED_FIELDS: readonly [
'uid',
@@ -131,6 +173,8 @@ export const ENTITY_META_GENERATED_FIELDS: readonly [
'generation',
];
// Warning: (ae-missing-release-tag) "EntityEnvelope" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type EntityEnvelope = {
apiVersion: string;
@@ -141,19 +185,35 @@ export type EntityEnvelope = {
};
};
// Warning: (ae-missing-release-tag) "entityEnvelopeSchemaValidator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/catalog-model" does not have an export "TypeError"
//
// @public
export function entityEnvelopeSchemaValidator<
T extends EntityEnvelope = EntityEnvelope
>(schema?: unknown): (data: unknown) => T;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "entityHasChanges" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function entityHasChanges(previous: Entity, next: Entity): boolean;
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
// Warning: (ae-missing-release-tag) "entityKindSchemaValidator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/catalog-model" does not have an export "TypeError"
//
// @public
export function entityKindSchemaValidator<T extends Entity>(
schema: unknown,
): (data: unknown) => T | false;
// Warning: (ae-missing-release-tag) "EntityLink" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type EntityLink = {
url: string;
@@ -161,6 +221,8 @@ export type EntityLink = {
icon?: string;
};
// Warning: (ae-missing-release-tag) "EntityMeta" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type EntityMeta = JsonObject & {
uid?: string;
@@ -175,6 +237,8 @@ export type EntityMeta = JsonObject & {
links?: EntityLink[];
};
// Warning: (ae-missing-release-tag) "EntityName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type EntityName = {
kind: string;
@@ -182,17 +246,23 @@ export type EntityName = {
name: string;
};
// Warning: (ae-missing-release-tag) "EntityPolicies" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const EntityPolicies: {
allOf(policies: EntityPolicy[]): AllEntityPolicies;
oneOf(policies: EntityPolicy[]): AnyEntityPolicy;
};
// Warning: (ae-missing-release-tag) "EntityPolicy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type EntityPolicy = {
enforce(entity: Entity): Promise<Entity | undefined>;
};
// Warning: (ae-missing-release-tag) "EntityRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type EntityRef =
| string
@@ -202,12 +272,16 @@ export type EntityRef =
name: string;
};
// Warning: (ae-missing-release-tag) "EntityRelation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type EntityRelation = {
type: string;
target: EntityName;
};
// Warning: (ae-missing-release-tag) "EntityRelationSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type EntityRelationSpec = {
source: EntityName;
@@ -215,11 +289,16 @@ export type EntityRelationSpec = {
target: EntityName;
};
// Warning: (ae-missing-release-tag) "entitySchemaValidator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "@backstage/catalog-model" does not have an export "TypeError"
//
// @public
export function entitySchemaValidator<T extends Entity = Entity>(
schema?: unknown,
): (data: unknown) => T;
// Warning: (ae-missing-release-tag) "FieldFormatEntityPolicy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class FieldFormatEntityPolicy implements EntityPolicy {
constructor(validators?: Validators);
@@ -227,18 +306,32 @@ export class FieldFormatEntityPolicy implements EntityPolicy {
enforce(entity: Entity): Promise<Entity>;
}
// Warning: (ae-missing-release-tag) "generateEntityEtag" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function generateEntityEtag(): string;
// Warning: (ae-missing-release-tag) "generateEntityUid" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function generateEntityUid(): string;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "generateUpdatedEntity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function generateUpdatedEntity(previous: Entity, next: Entity): Entity;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "getEntityName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function getEntityName(entity: Entity): EntityName;
// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@"
// Warning: (ae-missing-release-tag) "getEntitySourceLocation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function getEntitySourceLocation(
entity: Entity,
@@ -247,6 +340,8 @@ export function getEntitySourceLocation(
target: string;
};
// Warning: (ae-missing-release-tag) "GroupEntityV1alpha1" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
interface GroupEntityV1alpha1 extends Entity {
// (undocumented)
@@ -269,20 +364,28 @@ interface GroupEntityV1alpha1 extends Entity {
export { GroupEntityV1alpha1 as GroupEntity };
export { GroupEntityV1alpha1 };
// Warning: (ae-missing-release-tag) "groupEntityV1alpha1Validator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const groupEntityV1alpha1Validator: KindValidator;
// Warning: (ae-missing-release-tag) "JSONSchema" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type JSONSchema = JSONSchema7 &
{
[key in string]?: JsonValue;
};
// Warning: (ae-missing-release-tag) "KindValidator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type KindValidator = {
check(entity: Entity): Promise<boolean>;
};
// Warning: (ae-missing-release-tag) "KubernetesValidatorFunctions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class KubernetesValidatorFunctions {
// (undocumented)
@@ -303,15 +406,21 @@ export class KubernetesValidatorFunctions {
static isValidObjectName(value: unknown): boolean;
}
// Warning: (ae-missing-release-tag) "Location" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type Location_2 = {
id: string;
} & LocationSpec;
export { Location_2 as Location };
// Warning: (ae-missing-release-tag) "LOCATION_ANNOTATION" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const LOCATION_ANNOTATION = 'backstage.io/managed-by-location';
// Warning: (ae-missing-release-tag) "LocationEntityV1alpha1" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
interface LocationEntityV1alpha1 extends Entity {
// (undocumented)
@@ -328,12 +437,19 @@ interface LocationEntityV1alpha1 extends Entity {
export { LocationEntityV1alpha1 as LocationEntity };
export { LocationEntityV1alpha1 };
// Warning: (ae-missing-release-tag) "locationEntityV1alpha1Validator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const locationEntityV1alpha1Validator: KindValidator;
// Warning: (tsdoc-missing-deprecation-message) The @deprecated block must include a deprecation message, e.g. describing the recommended alternative
// Warning: (ae-missing-release-tag) "locationSchema" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public @deprecated (undocumented)
export const locationSchema: yup.ObjectSchema<Location_2, object>;
// Warning: (ae-missing-release-tag) "LocationSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type LocationSpec = {
type: string;
@@ -341,12 +457,19 @@ export type LocationSpec = {
presence?: 'optional' | 'required';
};
// Warning: (tsdoc-missing-deprecation-message) The @deprecated block must include a deprecation message, e.g. describing the recommended alternative
// Warning: (ae-missing-release-tag) "locationSpecSchema" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public @deprecated (undocumented)
export const locationSpecSchema: yup.ObjectSchema<LocationSpec, object>;
// Warning: (ae-missing-release-tag) "makeValidator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function makeValidator(overrides?: Partial<Validators>): Validators;
// Warning: (ae-missing-release-tag) "NoForeignRootFieldsEntityPolicy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class NoForeignRootFieldsEntityPolicy implements EntityPolicy {
constructor(knownFields?: string[]);
@@ -354,16 +477,28 @@ export class NoForeignRootFieldsEntityPolicy implements EntityPolicy {
enforce(entity: Entity): Promise<Entity>;
}
// Warning: (ae-missing-release-tag) "ORIGIN_LOCATION_ANNOTATION" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const ORIGIN_LOCATION_ANNOTATION =
'backstage.io/managed-by-origin-location';
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "parseEntityName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function parseEntityName(
ref: EntityRef,
context?: EntityRefContext,
): EntityName;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "parseEntityRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
// Warning: (ae-missing-release-tag) "parseEntityRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
// Warning: (ae-missing-release-tag) "parseEntityRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function parseEntityRef(
ref: EntityRef,
@@ -401,6 +536,11 @@ export function parseEntityRef(
name: string;
};
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
// Warning: (ae-missing-release-tag) "parseLocationReference" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function parseLocationReference(
ref: string,
@@ -409,48 +549,78 @@ export function parseLocationReference(
target: string;
};
// Warning: (ae-missing-release-tag) "RELATION_API_CONSUMED_BY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const RELATION_API_CONSUMED_BY = 'apiConsumedBy';
// Warning: (ae-missing-release-tag) "RELATION_API_PROVIDED_BY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const RELATION_API_PROVIDED_BY = 'apiProvidedBy';
// Warning: (ae-missing-release-tag) "RELATION_CHILD_OF" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const RELATION_CHILD_OF = 'childOf';
// Warning: (ae-missing-release-tag) "RELATION_CONSUMES_API" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const RELATION_CONSUMES_API = 'consumesApi';
// Warning: (ae-missing-release-tag) "RELATION_DEPENDENCY_OF" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const RELATION_DEPENDENCY_OF = 'dependencyOf';
// Warning: (ae-missing-release-tag) "RELATION_DEPENDS_ON" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const RELATION_DEPENDS_ON = 'dependsOn';
// Warning: (ae-missing-release-tag) "RELATION_HAS_MEMBER" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const RELATION_HAS_MEMBER = 'hasMember';
// Warning: (ae-missing-release-tag) "RELATION_HAS_PART" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const RELATION_HAS_PART = 'hasPart';
// Warning: (ae-missing-release-tag) "RELATION_MEMBER_OF" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const RELATION_MEMBER_OF = 'memberOf';
// Warning: (ae-missing-release-tag) "RELATION_OWNED_BY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const RELATION_OWNED_BY = 'ownedBy';
// Warning: (ae-missing-release-tag) "RELATION_OWNER_OF" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const RELATION_OWNER_OF = 'ownerOf';
// Warning: (ae-missing-release-tag) "RELATION_PARENT_OF" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const RELATION_PARENT_OF = 'parentOf';
// Warning: (ae-missing-release-tag) "RELATION_PART_OF" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const RELATION_PART_OF = 'partOf';
// Warning: (ae-missing-release-tag) "RELATION_PROVIDES_API" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const RELATION_PROVIDES_API = 'providesApi';
// Warning: (ae-missing-release-tag) "ResourceEntityV1alpha1" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
interface ResourceEntityV1alpha1 extends Entity {
// (undocumented)
@@ -468,15 +638,22 @@ interface ResourceEntityV1alpha1 extends Entity {
export { ResourceEntityV1alpha1 as ResourceEntity };
export { ResourceEntityV1alpha1 };
// Warning: (ae-missing-release-tag) "resourceEntityV1alpha1Validator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const resourceEntityV1alpha1Validator: KindValidator;
// Warning: (ae-missing-release-tag) "SchemaValidEntityPolicy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class SchemaValidEntityPolicy implements EntityPolicy {
// (undocumented)
enforce(entity: Entity): Promise<Entity>;
}
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "serializeEntityRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public @deprecated
export function serializeEntityRef(
ref:
@@ -488,9 +665,14 @@ export function serializeEntityRef(
},
): EntityRef;
// Warning: (ae-missing-release-tag) "SOURCE_LOCATION_ANNOTATION" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SOURCE_LOCATION_ANNOTATION = 'backstage.io/source-location';
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "stringifyEntityRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function stringifyEntityRef(
ref:
@@ -502,12 +684,19 @@ export function stringifyEntityRef(
},
): string;
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (ae-missing-release-tag) "stringifyLocationReference" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function stringifyLocationReference(ref: {
type: string;
target: string;
}): string;
// Warning: (ae-missing-release-tag) "SystemEntityV1alpha1" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
interface SystemEntityV1alpha1 extends Entity {
// (undocumented)
@@ -523,9 +712,13 @@ interface SystemEntityV1alpha1 extends Entity {
export { SystemEntityV1alpha1 as SystemEntity };
export { SystemEntityV1alpha1 };
// Warning: (ae-missing-release-tag) "systemEntityV1alpha1Validator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const systemEntityV1alpha1Validator: KindValidator;
// Warning: (ae-missing-release-tag) "TemplateEntityV1beta2" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export interface TemplateEntityV1beta2 extends Entity {
// (undocumented)
@@ -554,6 +747,8 @@ export interface TemplateEntityV1beta2 extends Entity {
};
}
// Warning: (ae-missing-release-tag) "templateEntityV1beta2Validator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const templateEntityV1beta2Validator: KindValidator;
@@ -573,6 +768,8 @@ export type UNSTABLE_EntityStatusItem = {
// @alpha
export type UNSTABLE_EntityStatusLevel = 'info' | 'warning' | 'error';
// Warning: (ae-missing-release-tag) "UserEntityV1alpha1" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
interface UserEntityV1alpha1 extends Entity {
// (undocumented)
@@ -592,9 +789,13 @@ interface UserEntityV1alpha1 extends Entity {
export { UserEntityV1alpha1 as UserEntity };
export { UserEntityV1alpha1 };
// Warning: (ae-missing-release-tag) "userEntityV1alpha1Validator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const userEntityV1alpha1Validator: KindValidator;
// Warning: (ae-missing-release-tag) "Validators" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type Validators = {
isValidApiVersion(value: unknown): boolean;
@@ -608,8 +809,18 @@ export type Validators = {
isValidTag(value: unknown): boolean;
};
// Warning: (ae-missing-release-tag) "VIEW_URL_ANNOTATION" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const VIEW_URL_ANNOTATION = 'backstage.io/view-url';
// Warnings were encountered during analysis:
//
// src/EntityPolicies.d.ts:13:5 - (ae-forgotten-export) The symbol "AllEntityPolicies" needs to be exported by the entry point index.d.ts
// src/EntityPolicies.d.ts:14:5 - (ae-forgotten-export) The symbol "AnyEntityPolicy" needs to be exported by the entry point index.d.ts
// src/entity/Entity.d.ts:37:5 - (ae-incompatible-release-tags) The symbol "status" is marked as @public, but its signature references "UNSTABLE_EntityStatus" which is marked as @alpha
// src/entity/policies/types.d.ts:10:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// src/kinds/types.d.ts:9:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// (No @packageDocumentation comment for this package)
```
+17 -10
View File
@@ -3,26 +3,33 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
// Warning: (ae-missing-release-tag) "findPaths" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function findPaths(searchDir: string): Paths;
// Warning: (ae-missing-release-tag) "isChildPath" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function isChildPath(base: string, path: string): boolean;
// Warning: (ae-missing-release-tag) "Paths" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type Paths = {
ownDir: string;
ownRoot: string;
targetDir: string;
targetRoot: string;
resolveOwn: ResolveFunc;
resolveOwnRoot: ResolveFunc;
resolveTarget: ResolveFunc;
resolveTargetRoot: ResolveFunc;
ownDir: string;
ownRoot: string;
targetDir: string;
targetRoot: string;
resolveOwn: ResolveFunc;
resolveOwnRoot: ResolveFunc;
resolveTarget: ResolveFunc;
resolveTargetRoot: ResolveFunc;
};
// Warnings were encountered during analysis:
//
// src/paths.d.ts:7:5 - (ae-forgotten-export) The symbol "ResolveFunc" needs to be exported by the entry point index.d.ts
// (No @packageDocumentation comment for this package)
```
+14
View File
@@ -1,5 +1,19 @@
# @backstage/cli
## 0.7.5
### Patch Changes
- 9a96b5da7: chore: bump `eslint` to `7.30.0`
## 0.7.4
### Patch Changes
- ae84b20cf: Revert the upgrade to `fs-extra@10.0.0` as that seemed to have broken all installs inexplicably.
- Updated dependencies
- @backstage/config-loader@0.6.5
## 0.7.3
### Patch Changes
+10 -10
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli",
"description": "CLI for developing Backstage plugins and apps",
"version": "0.7.3",
"version": "0.7.5",
"private": false,
"publishConfig": {
"access": "public"
@@ -32,7 +32,7 @@
"@babel/plugin-transform-modules-commonjs": "^7.4.4",
"@backstage/cli-common": "^0.1.2",
"@backstage/config": "^0.1.5",
"@backstage/config-loader": "^0.6.4",
"@backstage/config-loader": "^0.6.5",
"@hot-loader/react-dom": "^16.13.0",
"@lerna/package-graph": "^4.0.0",
"@lerna/project": "^4.0.0",
@@ -53,8 +53,8 @@
"@types/start-server-webpack-plugin": "^2.2.0",
"@types/webpack-env": "^1.15.2",
"@types/webpack-node-externals": "^2.5.0",
"@typescript-eslint/eslint-plugin": "^v4.27.0",
"@typescript-eslint/parser": "^v4.27.0",
"@typescript-eslint/eslint-plugin": "^v4.28.3",
"@typescript-eslint/parser": "^v4.28.3",
"@yarnpkg/lockfile": "^1.1.0",
"babel-plugin-dynamic-import-node": "^2.3.3",
"bfj": "^7.0.2",
@@ -65,7 +65,7 @@
"dashify": "^2.0.0",
"diff": "^5.0.0",
"esbuild": "^0.8.56",
"eslint": "^7.1.0",
"eslint": "^7.30.0",
"eslint-config-prettier": "^8.3.0",
"eslint-formatter-friendly": "^7.0.0",
"eslint-plugin-import": "^2.20.2",
@@ -118,13 +118,13 @@
"yn": "^4.0.0"
},
"devDependencies": {
"@backstage/backend-common": "^0.8.4",
"@backstage/backend-common": "^0.8.7",
"@backstage/config": "^0.1.5",
"@backstage/core-components": "^0.1.4",
"@backstage/core-components": "^0.1.6",
"@backstage/core-plugin-api": "^0.1.3",
"@backstage/core-app-api": "^0.1.4",
"@backstage/dev-utils": "^0.2.0",
"@backstage/test-utils": "^0.1.14",
"@backstage/core-app-api": "^0.1.5",
"@backstage/dev-utils": "^0.2.3",
"@backstage/test-utils": "^0.1.15",
"@backstage/theme": "^0.2.8",
"@types/diff": "^5.0.0",
"@types/express": "^4.17.6",
+8
View File
@@ -1,5 +1,13 @@
# @backstage/codemods
## 0.1.6
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.1.6
- @backstage/core-app-api@0.1.5
## 0.1.5
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/codemods",
"description": "A collection of codemods for Backstage projects",
"version": "0.1.5",
"version": "0.1.6",
"private": false,
"publishConfig": {
"access": "public",
+6
View File
@@ -1,5 +1,11 @@
# @backstage/config-loader
## 0.6.5
### Patch Changes
- ae84b20cf: Revert the upgrade to `fs-extra@10.0.0` as that seemed to have broken all installs inexplicably.
## 0.6.4
### Patch Changes
+21
View File
@@ -7,6 +7,8 @@ import { AppConfig } from '@backstage/config';
import { JsonObject } from '@backstage/config';
import { JSONSchema7 } from 'json-schema';
// Warning: (ae-missing-release-tag) "ConfigSchema" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type ConfigSchema = {
process(
@@ -16,12 +18,19 @@ export type ConfigSchema = {
serialize(): JsonObject;
};
// Warning: (ae-forgotten-export) The symbol "CONFIG_VISIBILITIES" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "ConfigVisibility" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type ConfigVisibility = typeof CONFIG_VISIBILITIES[number];
// Warning: (ae-missing-release-tag) "loadConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function loadConfig(options: LoadConfigOptions): Promise<AppConfig[]>;
// Warning: (ae-missing-release-tag) "LoadConfigOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type LoadConfigOptions = {
configRoot: string;
@@ -30,16 +39,28 @@ export type LoadConfigOptions = {
experimentalEnvFunc?: EnvFunc;
};
// Warning: (ae-forgotten-export) The symbol "Options" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "loadConfigSchema" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function loadConfigSchema(options: Options): Promise<ConfigSchema>;
// Warning: (ae-missing-release-tag) "mergeConfigSchemas" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function mergeConfigSchemas(schemas: JSONSchema7[]): JSONSchema7;
// Warning: (ae-missing-release-tag) "readEnvConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function readEnvConfig(env: {
[name: string]: string | undefined;
}): AppConfig[];
// Warnings were encountered during analysis:
//
// src/lib/schema/types.d.ts:77:5 - (ae-forgotten-export) The symbol "ConfigProcessingOptions" needs to be exported by the entry point index.d.ts
// src/loader.d.ts:13:5 - (ae-forgotten-export) The symbol "EnvFunc" needs to be exported by the entry point index.d.ts
// (No @packageDocumentation comment for this package)
```
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/config-loader",
"description": "Config loading functionality used by Backstage backend, and CLI",
"version": "0.6.4",
"version": "0.6.5",
"private": false,
"publishConfig": {
"access": "public",
+14
View File
@@ -3,12 +3,16 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
// Warning: (ae-missing-release-tag) "AppConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type AppConfig = {
context: string;
data: JsonObject;
};
// Warning: (ae-missing-release-tag) "Config" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type Config = {
has(key: string): boolean;
@@ -29,6 +33,8 @@ export type Config = {
getOptionalStringArray(key: string): string[] | undefined;
};
// Warning: (ae-missing-release-tag) "ConfigReader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class ConfigReader implements Config {
constructor(
@@ -73,17 +79,25 @@ export class ConfigReader implements Config {
keys(): string[];
}
// Warning: (ae-missing-release-tag) "JsonArray" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export interface JsonArray extends Array<JsonValue> {}
// Warning: (ae-missing-release-tag) "JsonObject" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type JsonObject = {
[key in string]?: JsonValue;
};
// Warning: (ae-missing-release-tag) "JsonPrimitive" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type JsonPrimitive = number | string | boolean | null;
// Warning: (ae-missing-release-tag) "JsonValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type JsonValue = JsonObject | JsonArray | JsonPrimitive;
+8
View File
@@ -1,5 +1,13 @@
# @backstage/core-app-api
## 0.1.5
### Patch Changes
- ea249c6e6: Fix a bug in `FlatRoutes` that prevented outlets from working with the root route, as well as matching root routes too broadly.
- Updated dependencies
- @backstage/core-components@0.1.6
## 0.1.4
### Patch Changes
+115
View File
@@ -54,6 +54,8 @@ import { StorageApi } from '@backstage/core-plugin-api';
import { StorageValueChange } from '@backstage/core-plugin-api';
import { SubRouteRef } from '@backstage/core-plugin-api';
// Warning: (ae-missing-release-tag) "AlertApiForwarder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class AlertApiForwarder implements AlertApi {
// (undocumented)
@@ -62,6 +64,8 @@ export class AlertApiForwarder implements AlertApi {
post(alert: AlertMessage): void;
}
// Warning: (ae-missing-release-tag) "ApiFactoryHolder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type ApiFactoryHolder = {
get<T>(
@@ -77,6 +81,8 @@ export type ApiFactoryHolder = {
| undefined;
};
// Warning: (ae-missing-release-tag) "ApiFactoryRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class ApiFactoryRegistry implements ApiFactoryHolder {
// (undocumented)
@@ -93,6 +99,7 @@ export class ApiFactoryRegistry implements ApiFactoryHolder {
| undefined;
// (undocumented)
getAllApis(): Set<AnyApiRef>;
// Warning: (ae-forgotten-export) The symbol "ApiFactoryScope" needs to be exported by the entry point index.d.ts
register<
Api,
Impl extends Api,
@@ -102,6 +109,8 @@ export class ApiFactoryRegistry implements ApiFactoryHolder {
>(scope: ApiFactoryScope, factory: ApiFactory<Api, Impl, Deps>): boolean;
}
// Warning: (ae-missing-release-tag) "ApiProvider" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const ApiProvider: {
({ apis, children }: PropsWithChildren<ApiProviderProps>): JSX.Element;
@@ -115,19 +124,31 @@ export const ApiProvider: {
};
};
// Warning: (ae-missing-release-tag) "ApiRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class ApiRegistry implements ApiHolder {
constructor(apis: Map<string, unknown>);
// Warning: (ae-forgotten-export) The symbol "ApiRegistryBuilder" needs to be exported by the entry point index.d.ts
//
// (undocumented)
static builder(): ApiRegistryBuilder;
// Warning: (ae-forgotten-export) The symbol "ApiImpl" needs to be exported by the entry point index.d.ts
//
// (undocumented)
static from(apis: ApiImpl[]): ApiRegistry;
// (undocumented)
get<T>(api: ApiRef<T>): T | undefined;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
static with<T>(api: ApiRef<T>, impl: T): ApiRegistry;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
with<T>(api: ApiRef<T>, impl: T): ApiRegistry;
}
// Warning: (ae-missing-release-tag) "ApiResolver" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class ApiResolver implements ApiHolder {
constructor(factories: ApiFactoryHolder);
@@ -139,6 +160,8 @@ export class ApiResolver implements ApiHolder {
): void;
}
// Warning: (ae-missing-release-tag) "AppComponents" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type AppComponents = {
NotFoundErrorPage: ComponentType<{}>;
@@ -149,9 +172,13 @@ export type AppComponents = {
SignInPage?: ComponentType<SignInPageProps>;
};
// Warning: (ae-missing-release-tag) "AppConfigLoader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export type AppConfigLoader = () => Promise<AppConfig[]>;
// Warning: (ae-missing-release-tag) "AppContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type AppContext = {
getPlugins(): BackstagePlugin<any, any>[];
@@ -159,6 +186,8 @@ export type AppContext = {
getComponents(): AppComponents;
};
// Warning: (ae-missing-release-tag) "AppOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type AppOptions = {
apis?: Iterable<AnyApiFactory>;
@@ -173,6 +202,11 @@ export type AppOptions = {
bindRoutes?(context: { bind: AppRouteBinder }): void;
};
// Warning: (ae-forgotten-export) The symbol "PartialKeys" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "TargetRouteMap" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "KeysWithType" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "AppRouteBinder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type AppRouteBinder = <
ExternalRoutes extends {
@@ -186,6 +220,8 @@ export type AppRouteBinder = <
>,
) => void;
// Warning: (ae-missing-release-tag) "AppThemeSelector" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class AppThemeSelector implements AppThemeApi {
constructor(themes: AppTheme[]);
@@ -201,8 +237,12 @@ export class AppThemeSelector implements AppThemeApi {
setActiveThemeId(themeId?: string): void;
}
// Warning: (ae-missing-release-tag) "Auth0Auth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class Auth0Auth {
// Warning: (ae-forgotten-export) The symbol "OAuthApiCreateOptions" needs to be exported by the entry point index.d.ts
//
// (undocumented)
static create({
discoveryApi,
@@ -213,6 +253,8 @@ export class Auth0Auth {
}: OAuthApiCreateOptions): typeof auth0AuthApiRef.T;
}
// Warning: (ae-missing-release-tag) "BackstageApp" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type BackstageApp = {
getPlugins(): BackstagePlugin<any, any>[];
@@ -221,6 +263,8 @@ export type BackstageApp = {
getRouter(): ComponentType<{}>;
};
// Warning: (ae-missing-release-tag) "BackstagePluginWithAnyOutput" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type BackstagePluginWithAnyOutput = Omit<
BackstagePlugin<any, any>,
@@ -229,6 +273,8 @@ export type BackstagePluginWithAnyOutput = Omit<
output(): (PluginOutput | UnknownPluginOutput)[];
};
// Warning: (ae-missing-release-tag) "BootErrorPageProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type BootErrorPageProps = {
step: 'load-config' | 'load-chunk';
@@ -237,12 +283,19 @@ export type BootErrorPageProps = {
export { ConfigReader };
// Warning: (ae-forgotten-export) The symbol "PrivateAppImpl" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "createApp" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export function createApp(options?: AppOptions): PrivateAppImpl;
// Warning: (ae-missing-release-tag) "defaultConfigLoader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const defaultConfigLoader: AppConfigLoader;
// Warning: (ae-missing-release-tag) "ErrorAlerter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class ErrorAlerter implements ErrorApi {
constructor(alertApi: AlertApi, errorApi: ErrorApi);
@@ -259,6 +312,8 @@ export class ErrorAlerter implements ErrorApi {
post(error: Error, context?: ErrorContext): void;
}
// Warning: (ae-missing-release-tag) "ErrorApiForwarder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class ErrorApiForwarder implements ErrorApi {
// (undocumented)
@@ -270,6 +325,8 @@ export class ErrorApiForwarder implements ErrorApi {
post(error: Error, context?: ErrorContext): void;
}
// Warning: (ae-missing-release-tag) "ErrorBoundaryFallbackProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type ErrorBoundaryFallbackProps = {
plugin?: BackstagePlugin;
@@ -277,9 +334,13 @@ export type ErrorBoundaryFallbackProps = {
resetError: () => void;
};
// Warning: (ae-missing-release-tag) "FeatureFlagged" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const FeatureFlagged: (props: FeatureFlaggedProps) => JSX.Element;
// Warning: (ae-missing-release-tag) "FeatureFlaggedProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type FeatureFlaggedProps = {
children: ReactNode;
@@ -292,11 +353,17 @@ export type FeatureFlaggedProps = {
}
);
// Warning: (ae-forgotten-export) The symbol "FlatRoutesProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "FlatRoutes" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const FlatRoutes: (props: FlatRoutesProps) => JSX.Element | null;
// Warning: (ae-missing-release-tag) "GithubAuth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class GithubAuth implements OAuthApi, SessionApi {
// Warning: (ae-forgotten-export) The symbol "SessionManager" needs to be exported by the entry point index.d.ts
constructor(sessionManager: SessionManager<GithubSession>);
// (undocumented)
static create({
@@ -324,6 +391,8 @@ export class GithubAuth implements OAuthApi, SessionApi {
signOut(): Promise<void>;
}
// Warning: (ae-missing-release-tag) "GithubSession" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type GithubSession = {
providerInfo: {
@@ -335,6 +404,8 @@ export type GithubSession = {
backstageIdentity: BackstageIdentity;
};
// Warning: (ae-missing-release-tag) "GitlabAuth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class GitlabAuth {
// (undocumented)
@@ -347,6 +418,8 @@ export class GitlabAuth {
}: OAuthApiCreateOptions): typeof gitlabAuthApiRef.T;
}
// Warning: (ae-missing-release-tag) "GoogleAuth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class GoogleAuth {
// (undocumented)
@@ -359,6 +432,8 @@ export class GoogleAuth {
}: OAuthApiCreateOptions): typeof googleAuthApiRef.T;
}
// Warning: (ae-missing-release-tag) "LocalStorageFeatureFlags" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class LocalStorageFeatureFlags implements FeatureFlagsApi {
// (undocumented)
@@ -371,6 +446,8 @@ export class LocalStorageFeatureFlags implements FeatureFlagsApi {
save(options: FeatureFlagsSaveOptions): void;
}
// Warning: (ae-missing-release-tag) "MicrosoftAuth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class MicrosoftAuth {
// (undocumented)
@@ -383,6 +460,8 @@ export class MicrosoftAuth {
}: OAuthApiCreateOptions): typeof microsoftAuthApiRef.T;
}
// Warning: (ae-missing-release-tag) "OAuth2" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class OAuth2
implements
@@ -391,7 +470,10 @@ export class OAuth2
ProfileInfoApi,
BackstageIdentityApi,
SessionApi {
// Warning: (ae-forgotten-export) The symbol "Options" needs to be exported by the entry point index.d.ts
constructor(options: Options);
// Warning: (ae-forgotten-export) The symbol "CreateOptions" needs to be exported by the entry point index.d.ts
//
// (undocumented)
static create({
discoveryApi,
@@ -422,6 +504,8 @@ export class OAuth2
signOut(): Promise<void>;
}
// Warning: (ae-missing-release-tag) "OAuth2Session" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type OAuth2Session = {
providerInfo: {
@@ -434,6 +518,8 @@ export type OAuth2Session = {
backstageIdentity: BackstageIdentity;
};
// Warning: (ae-missing-release-tag) "OAuthRequestManager" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class OAuthRequestManager implements OAuthRequestApi {
// (undocumented)
@@ -442,6 +528,8 @@ export class OAuthRequestManager implements OAuthRequestApi {
createAuthRequester<T>(options: AuthRequesterOptions<T>): AuthRequester<T>;
}
// Warning: (ae-missing-release-tag) "OktaAuth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class OktaAuth {
// (undocumented)
@@ -454,8 +542,12 @@ export class OktaAuth {
}: OAuthApiCreateOptions): typeof oktaAuthApiRef.T;
}
// Warning: (ae-missing-release-tag) "OneLoginAuth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class OneLoginAuth {
// Warning: (ae-forgotten-export) The symbol "CreateOptions" needs to be exported by the entry point index.d.ts
//
// (undocumented)
static create({
discoveryApi,
@@ -465,10 +557,15 @@ export class OneLoginAuth {
}: CreateOptions_2): typeof oneloginAuthApiRef.T;
}
// Warning: (ae-missing-release-tag) "SamlAuth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class SamlAuth
implements ProfileInfoApi, BackstageIdentityApi, SessionApi {
// Warning: (ae-forgotten-export) The symbol "SamlSession" needs to be exported by the entry point index.d.ts
constructor(sessionManager: SessionManager<SamlSession>);
// Warning: (ae-forgotten-export) The symbol "AuthApiCreateOptions" needs to be exported by the entry point index.d.ts
//
// (undocumented)
static create({
discoveryApi,
@@ -489,11 +586,15 @@ export class SamlAuth
signOut(): Promise<void>;
}
// Warning: (ae-missing-release-tag) "SignInPageProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type SignInPageProps = {
onResult(result: SignInResult): void;
};
// Warning: (ae-missing-release-tag) "SignInResult" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type SignInResult = {
userId: string;
@@ -502,11 +603,15 @@ export type SignInResult = {
signOut?: () => Promise<void>;
};
// Warning: (ae-missing-release-tag) "UnhandledErrorForwarder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class UnhandledErrorForwarder {
static forward(errorApi: ErrorApi, errorContext: ErrorContext): void;
}
// Warning: (ae-missing-release-tag) "UrlPatternDiscovery" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export class UrlPatternDiscovery implements DiscoveryApi {
static compile(pattern: string): UrlPatternDiscovery;
@@ -514,9 +619,13 @@ export class UrlPatternDiscovery implements DiscoveryApi {
getBaseUrl(pluginId: string): Promise<string>;
}
// Warning: (ae-missing-release-tag) "WebStorage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export class WebStorage implements StorageApi {
constructor(namespace: string, errorApi: ErrorApi);
// Warning: (ae-forgotten-export) The symbol "CreateStorageApiOptions" needs to be exported by the entry point index.d.ts
//
// (undocumented)
static create(options: CreateStorageApiOptions): WebStorage;
// (undocumented)
@@ -531,5 +640,11 @@ export class WebStorage implements StorageApi {
set<T>(key: string, data: T): Promise<void>;
}
// Warnings were encountered during analysis:
//
// src/apis/system/ApiProvider.d.ts:9:5 - (ae-forgotten-export) The symbol "ApiProviderProps" needs to be exported by the entry point index.d.ts
// src/app/types.d.ts:88:5 - (ae-forgotten-export) The symbol "UnknownPluginOutput" needs to be exported by the entry point index.d.ts
// src/app/types.d.ts:99:5 - (ae-forgotten-export) The symbol "AppIcons" needs to be exported by the entry point index.d.ts
// (No @packageDocumentation comment for this package)
```
+4 -4
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-app-api",
"description": "Core app API used by Backstage apps",
"version": "0.1.4",
"version": "0.1.5",
"private": false,
"publishConfig": {
"access": "public",
@@ -29,7 +29,7 @@
"clean": "backstage-cli clean"
},
"dependencies": {
"@backstage/core-components": "^0.1.4",
"@backstage/core-components": "^0.1.6",
"@backstage/config": "^0.1.3",
"@backstage/core-plugin-api": "^0.1.3",
"@backstage/theme": "^0.2.8",
@@ -44,8 +44,8 @@
"zen-observable": "^0.8.15"
},
"devDependencies": {
"@backstage/cli": "^0.7.3",
"@backstage/test-utils": "^0.1.14",
"@backstage/cli": "^0.7.5",
"@backstage/test-utils": "^0.1.15",
"@backstage/test-utils-core": "^0.1.1",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
@@ -100,7 +100,6 @@ describe('FlatRoutes', () => {
return <>Outlet: {useOutlet()}</>;
};
// The '/*' suffixes here are intentional and will be ignored by FlatRoutes
const routes = (
<>
<Route path="/a" element={<MyPage />}>
@@ -112,11 +111,15 @@ describe('FlatRoutes', () => {
<Route path="/b" element={<MyPage />}>
b
</Route>
<Route path="/" element={<MyPage />}>
c
</Route>
</>
);
const renderRoute = makeRouteRenderer(<FlatRoutes>{routes}</FlatRoutes>);
expect(renderRoute('/a').getByText('Outlet: a')).toBeInTheDocument();
expect(renderRoute('/a/b').getByText('Outlet: a-b')).toBeInTheDocument();
expect(renderRoute('/b').getByText('Outlet: b')).toBeInTheDocument();
expect(renderRoute('/').getByText('Outlet: c')).toBeInTheDocument();
});
});
@@ -49,8 +49,10 @@ export const FlatRoutes = (props: FlatRoutesProps): JSX.Element | null => {
element: child,
children: child.props.children
? [
// These are the children of each route, which we all add in under a catch-all
// subroute in order to make them available to `useOutlet`
{
path: '/*',
path: path === '/' ? '/' : '/*', // The root path must require an exact match
element: child.props.children,
},
]
+15
View File
@@ -1,5 +1,20 @@
# @backstage/core-components
## 0.1.6
### Patch Changes
- 9a751bb28: Increase the vertical padding of the sidebar search input field to match the height of the parent anchor tag. This prevents users from accidentally navigating to the search page when they actually wanted to use the search input directly.
- 45b5fc3a8: Updated the layout of catalog and API index pages to handle smaller screen sizes. This adds responsive wrappers to the entity tables, and switches filters to a drawer when width-constrained. If you have created a custom catalog or API index page, you will need to update the page structure to match the updated [catalog customization](https://backstage.io/docs/features/software-catalog/catalog-customization) documentation.
- 03bf17e9b: Improve the responsiveness of the EntityPage UI. With this the Header component should scale with the screen size & wrapping should not cause overflowing/blocking of links. Additionally enforce the Pages using the Grid Layout to use it across all screen sizes & to wrap as intended.
To benefit from the improved responsive layout, the `EntityPage` in existing Backstage applications should be updated to set the `xs` column size on each grid item in the page, as this does not default. For example:
```diff
- <Grid item md={6}>
+ <Grid item xs={12} md={6}>
```
## 0.1.5
### Patch Changes
+322
View File
@@ -47,9 +47,13 @@ import { Theme } from '@material-ui/core';
import { TooltipProps } from '@material-ui/core';
import { WithStyles } from '@material-ui/core';
// Warning: (ae-missing-release-tag) "AlertDisplay" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const AlertDisplay: () => JSX.Element | null;
// Warning: (ae-missing-release-tag) "Alignment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
enum Alignment {
// (undocumented)
@@ -62,6 +66,9 @@ enum Alignment {
UP_RIGHT = 'UR',
}
// Warning: (ae-forgotten-export) The symbol "AvatarProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Avatar" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Avatar: ({
displayName,
@@ -69,12 +76,20 @@ export const Avatar: ({
customStyles,
}: AvatarProps) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Breadcrumbs" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Breadcrumbs: ({ children, ...props }: Props_25) => JSX.Element;
// Warning: (ae-missing-release-tag) "BrokenImageIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const BrokenImageIcon: IconComponent;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Button" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const Button: React_2.ForwardRefExoticComponent<
Pick<
@@ -384,18 +399,28 @@ export const Button: React_2.ForwardRefExoticComponent<
React_2.RefAttributes<any>
>;
// Warning: (ae-forgotten-export) The symbol "CardTabProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "CardTab" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const CardTab: ({
children,
...props
}: PropsWithChildren<CardTabProps>) => JSX.Element;
// Warning: (ae-missing-release-tag) "CatalogIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const CatalogIcon: IconComponent;
// Warning: (ae-missing-release-tag) "ChatIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const ChatIcon: IconComponent;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "CodeSnippet" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const CodeSnippet: ({
text,
@@ -406,6 +431,9 @@ export const CodeSnippet: ({
customStyle,
}: Props_2) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Content" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Content: ({
className,
@@ -415,6 +443,9 @@ export const Content: ({
...props
}: PropsWithChildren<Props_18>) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "ContentHeaderProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "ContentHeader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const ContentHeader: ({
description,
@@ -424,6 +455,8 @@ export const ContentHeader: ({
textAlign,
}: PropsWithChildren<ContentHeaderProps>) => JSX.Element;
// Warning: (ae-missing-release-tag) "CopyTextButton" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const CopyTextButton: {
(props: Props_3): JSX.Element;
@@ -434,9 +467,14 @@ export const CopyTextButton: {
};
};
// Warning: (ae-missing-release-tag) "DashboardIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const DashboardIcon: IconComponent;
// Warning: (ae-forgotten-export) The symbol "CustomType" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "DependencyEdge" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type DependencyEdge<T = CustomType> = T & {
from: string;
@@ -444,6 +482,9 @@ type DependencyEdge<T = CustomType> = T & {
label?: string;
};
// Warning: (ae-forgotten-export) The symbol "DependencyGraphProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "DependencyGraph" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function DependencyGraph({
edges,
@@ -486,11 +527,15 @@ declare namespace DependencyGraphTypes {
}
export { DependencyGraphTypes };
// Warning: (ae-missing-release-tag) "DependencyNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type DependencyNode<T = CustomType> = T & {
id: string;
};
// Warning: (ae-missing-release-tag) "Direction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
enum Direction {
// (undocumented)
@@ -503,6 +548,9 @@ enum Direction {
TOP_BOTTOM = 'TB',
}
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "DismissableBanner" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const DismissableBanner: ({
variant,
@@ -511,9 +559,13 @@ export const DismissableBanner: ({
fixed,
}: Props_4) => JSX.Element;
// Warning: (ae-missing-release-tag) "DocsIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const DocsIcon: IconComponent;
// Warning: (ae-missing-release-tag) "EdgeProperties" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type EdgeProperties = {
label?: string;
@@ -526,9 +578,14 @@ type EdgeProperties = {
[customKey: string]: any;
};
// Warning: (ae-missing-release-tag) "EmailIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const EmailIcon: IconComponent;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "EmptyState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const EmptyState: ({
title,
@@ -537,15 +594,23 @@ export const EmptyState: ({
action,
}: Props_5) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "State" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "ErrorBoundary" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const ErrorBoundary: ComponentClass<ErrorBoundaryProps, State>;
// Warning: (ae-missing-release-tag) "ErrorBoundaryProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type ErrorBoundaryProps = {
slackChannel?: string | SlackChannel;
onError?: (error: Error, errorInfo: string) => null;
};
// Warning: (ae-forgotten-export) The symbol "IErrorPageProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "ErrorPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const ErrorPage: ({
status,
@@ -553,6 +618,8 @@ export const ErrorPage: ({
additionalInfo,
}: IErrorPageProps) => JSX.Element;
// Warning: (ae-missing-release-tag) "ErrorPanel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const ErrorPanel: ({
title,
@@ -561,6 +628,8 @@ export const ErrorPanel: ({
children,
}: PropsWithChildren<ErrorPanelProps>) => JSX.Element;
// Warning: (ae-missing-release-tag) "ErrorPanelProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type ErrorPanelProps = {
error: Error;
@@ -568,6 +637,9 @@ export type ErrorPanelProps = {
title?: string;
};
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "FeatureCalloutCircular" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const FeatureCalloutCircular: ({
featureId,
@@ -576,26 +648,43 @@ export const FeatureCalloutCircular: ({
children,
}: PropsWithChildren<Props_7>) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Gauge" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Gauge: (props: Props_14) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "GaugeCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const GaugeCard: (props: Props_13) => JSX.Element;
// Warning: (ae-missing-release-tag) "GitHubIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const GitHubIcon: IconComponent;
// Warning: (ae-missing-release-tag) "GraphEdge" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type GraphEdge<T = CustomType> = DependencyEdge<T> &
dagre_2.GraphEdge &
EdgeProperties;
// Warning: (ae-missing-release-tag) "GraphNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type GraphNode<T = CustomType> = dagre_2.Node<DependencyNode<T>>;
// Warning: (ae-missing-release-tag) "GroupIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const GroupIcon: IconComponent;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Header" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Header: ({
children,
@@ -608,9 +697,15 @@ export const Header: ({
typeLink,
}: PropsWithChildren<Props_19>) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "HeaderIconLinkRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const HeaderIconLinkRow: ({ links }: Props_8) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "HeaderLabelProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "HeaderLabel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const HeaderLabel: ({
label,
@@ -618,6 +713,9 @@ export const HeaderLabel: ({
url,
}: HeaderLabelProps) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "HeaderTabsProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "HeaderTabs" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const HeaderTabs: ({
tabs,
@@ -625,17 +723,26 @@ export const HeaderTabs: ({
selectedIndex,
}: HeaderTabsProps) => JSX.Element;
// Warning: (ae-missing-release-tag) "HelpIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const HelpIcon: IconComponent;
// Warning: (ae-missing-release-tag) "HomepageTimer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const HomepageTimer: () => JSX.Element | null;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "HorizontalScrollGrid" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const HorizontalScrollGrid: (
props: PropsWithChildren<Props_9>,
) => JSX.Element;
// Warning: (ae-missing-release-tag) "IconLinkVerticalProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type IconLinkVerticalProps = {
color?: 'primary' | 'secondary';
@@ -647,6 +754,9 @@ export type IconLinkVerticalProps = {
title?: string;
};
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "InfoCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const InfoCard: ({
title,
@@ -669,12 +779,22 @@ export const InfoCard: ({
titleTypographyProps,
}: Props_20) => JSX.Element;
// Warning: (ae-missing-release-tag) "InfoCardVariants" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type InfoCardVariants = 'flex' | 'fullHeight' | 'gridItem';
// Warning: (ae-forgotten-export) The symbol "IntroCardProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "IntroCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const IntroCard: (props: IntroCardProps) => JSX.Element;
// Warning: (tsdoc-malformed-html-name) Invalid HTML element: Expecting an HTML name
// Warning: (tsdoc-escape-greater-than) The ">" character should be escaped using a backslash to avoid confusion with an HTML tag
// Warning: (ae-forgotten-export) The symbol "ItemCardProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "ItemCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public @deprecated
export const ItemCard: ({
description,
@@ -687,17 +807,39 @@ export const ItemCard: ({
href,
}: ItemCardProps) => JSX.Element;
// Warning: (tsdoc-escape-greater-than) The ">" character should be escaped using a backslash to avoid confusion with an HTML tag
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
// Warning: (tsdoc-html-tag-missing-string) The HTML element has an invalid attribute: Expecting an HTML string starting with a single-quote or double-quote character
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
// Warning: (ae-missing-release-tag) "ItemCardGrid" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const ItemCardGrid: (props: ItemCardGridProps) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "styles" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "ItemCardGridProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type ItemCardGridProps = Partial<WithStyles<typeof styles>> & {
children?: React_2.ReactNode;
};
// Warning: (tsdoc-escape-greater-than) The ">" character should be escaped using a backslash to avoid confusion with an HTML tag
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
// Warning: (tsdoc-html-tag-missing-string) The HTML element has an invalid attribute: Expecting an HTML string starting with a single-quote or double-quote character
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
// Warning: (tsdoc-malformed-inline-tag) Expecting a TSDoc tag starting with "{@"
// Warning: (ae-missing-release-tag) "ItemCardHeader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const ItemCardHeader: (props: ItemCardHeaderProps) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "styles" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "ItemCardHeaderProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type ItemCardHeaderProps = Partial<WithStyles<typeof styles_2>> & {
title?: React_2.ReactNode;
@@ -705,6 +847,8 @@ export type ItemCardHeaderProps = Partial<WithStyles<typeof styles_2>> & {
children?: React_2.ReactNode;
};
// Warning: (ae-missing-release-tag) "LabelPosition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
enum LabelPosition {
// (undocumented)
@@ -715,12 +859,20 @@ enum LabelPosition {
RIGHT = 'r',
}
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Lifecycle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Lifecycle: (props: Props_10) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "LinearGauge" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const LinearGauge: ({ value }: Props_15) => JSX.Element | null;
// Warning: (ae-missing-release-tag) "Link" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const Link: React_2.ForwardRefExoticComponent<
Pick<
@@ -1008,37 +1160,67 @@ export const Link: React_2.ForwardRefExoticComponent<
React_2.RefAttributes<any>
>;
// Warning: (ae-missing-release-tag) "LinkProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type LinkProps = LinkProps_2 &
LinkProps_3 & {
component?: ElementType<any>;
};
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "MarkdownContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const MarkdownContent: ({ content, dialect }: Props_11) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "MissingAnnotationEmptyState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const MissingAnnotationEmptyState: ({
annotation,
}: Props_6) => JSX.Element;
// Warning: (ae-missing-release-tag) "OAuthRequestDialog" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const OAuthRequestDialog: () => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "OverflowTooltip" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const OverflowTooltip: (props: Props_12) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Page" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Page: ({
themeId,
children,
}: PropsWithChildren<Props_21>) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "PageWithHeaderProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "PageWithHeader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const PageWithHeader: ({
themeId,
children,
...props
}: PropsWithChildren<PageWithHeaderProps>) => JSX.Element;
// Warning: (ae-missing-release-tag) "Progress" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Progress: (
props: PropsWithChildren<LinearProgressProps>,
) => JSX.Element;
// Warning: (ae-missing-release-tag) "Ranker" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
enum Ranker {
// (undocumented)
@@ -1049,22 +1231,32 @@ enum Ranker {
TIGHT_TREE = 'tight-tree',
}
// Warning: (ae-missing-release-tag) "RenderLabelFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type RenderLabelFunction = (props: RenderLabelProps<any>) => React.ReactNode;
// Warning: (ae-missing-release-tag) "RenderLabelProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type RenderLabelProps<T = CustomType> = {
edge: DependencyEdge<T>;
};
// Warning: (ae-missing-release-tag) "RenderNodeFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type RenderNodeFunction = (props: RenderNodeProps<any>) => React.ReactNode;
// Warning: (ae-missing-release-tag) "RenderNodeProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
type RenderNodeProps<T = CustomType> = {
node: DependencyNode<T>;
};
// Warning: (ae-missing-release-tag) "ResponseErrorPanel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const ResponseErrorPanel: ({
title,
@@ -1072,9 +1264,14 @@ export const ResponseErrorPanel: ({
defaultExpanded,
}: ErrorPanelProps) => JSX.Element;
// Warning: (ae-missing-release-tag) "RoutedTabs" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const RoutedTabs: ({ routes }: { routes: SubRoute_2[] }) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "SelectProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "SelectComponent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Select: ({
multiple,
@@ -1086,6 +1283,9 @@ export const Select: ({
triggerReset,
}: SelectProps) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Sidebar" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Sidebar: ({
openDelayMs,
@@ -1093,10 +1293,14 @@ export const Sidebar: ({
children,
}: PropsWithChildren<Props_22>) => JSX.Element;
// Warning: (ae-missing-release-tag) "SIDEBAR_INTRO_LOCAL_STORAGE" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SIDEBAR_INTRO_LOCAL_STORAGE =
'@backstage/core/sidebar-intro-dismissed';
// Warning: (ae-missing-release-tag) "sidebarConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const sidebarConfig: {
drawerWidthClosed: number;
@@ -1113,14 +1317,20 @@ export const sidebarConfig: {
userBadgeDiameter: number;
};
// Warning: (ae-missing-release-tag) "SidebarContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarContext: Context<SidebarContextType>;
// Warning: (ae-missing-release-tag) "SidebarContextType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type SidebarContextType = {
isOpen: boolean;
};
// Warning: (ae-missing-release-tag) "SidebarDivider" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarDivider: React_2.ComponentType<
Pick<
@@ -1388,26 +1598,39 @@ export const SidebarDivider: React_2.ComponentType<
}
>;
// Warning: (ae-missing-release-tag) "SidebarIntro" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarIntro: () => JSX.Element | null;
// Warning: (ae-forgotten-export) The symbol "SidebarItemProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "SidebarItem" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarItem: React_2.ForwardRefExoticComponent<
SidebarItemProps & React_2.RefAttributes<any>
>;
// Warning: (ae-missing-release-tag) "SidebarPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarPage: (props: PropsWithChildren<{}>) => JSX.Element;
// Warning: (ae-missing-release-tag) "SidebarPinStateContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarPinStateContext: React_2.Context<SidebarPinStateContextType>;
// Warning: (ae-missing-release-tag) "SidebarPinStateContextType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type SidebarPinStateContextType = {
isPinned: boolean;
toggleSidebarPinState: () => any;
};
// Warning: (ae-missing-release-tag) "SidebarScrollWrapper" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarScrollWrapper: React_2.ComponentType<
Pick<
@@ -1675,11 +1898,16 @@ export const SidebarScrollWrapper: React_2.ComponentType<
}
>;
// Warning: (ae-forgotten-export) The symbol "SidebarSearchFieldProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "SidebarSearchField" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarSearchField: (
props: SidebarSearchFieldProps,
) => JSX.Element;
// Warning: (ae-missing-release-tag) "SidebarSpace" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarSpace: React_2.ComponentType<
Pick<
@@ -1947,6 +2175,8 @@ export const SidebarSpace: React_2.ComponentType<
}
>;
// Warning: (ae-missing-release-tag) "SidebarSpacer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SidebarSpacer: React_2.ComponentType<
Pick<
@@ -2214,9 +2444,14 @@ export const SidebarSpacer: React_2.ComponentType<
}
>;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "SignInPage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SignInPage: (props: Props_23) => JSX.Element;
// Warning: (ae-missing-release-tag) "SignInProviderConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type SignInProviderConfig = {
id: string;
@@ -2225,6 +2460,9 @@ export type SignInProviderConfig = {
apiRef: ApiRef<ProfileInfoApi & BackstageIdentityApi & SessionApi>;
};
// Warning: (ae-forgotten-export) The symbol "StepperProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "SimpleStepper" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SimpleStepper: ({
children,
@@ -2233,6 +2471,9 @@ export const SimpleStepper: ({
activeStep,
}: PropsWithChildren<StepperProps>) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "StepProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "SimpleStepperStep" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SimpleStepperStep: ({
title,
@@ -2242,24 +2483,39 @@ export const SimpleStepperStep: ({
...muiProps
}: PropsWithChildren<StepProps>) => JSX.Element;
// Warning: (ae-missing-release-tag) "StatusAborted" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const StatusAborted: (props: PropsWithChildren<{}>) => JSX.Element;
// Warning: (ae-missing-release-tag) "StatusError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const StatusError: (props: PropsWithChildren<{}>) => JSX.Element;
// Warning: (ae-missing-release-tag) "StatusOK" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const StatusOK: (props: PropsWithChildren<{}>) => JSX.Element;
// Warning: (ae-missing-release-tag) "StatusPending" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const StatusPending: (props: PropsWithChildren<{}>) => JSX.Element;
// Warning: (ae-missing-release-tag) "StatusRunning" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const StatusRunning: (props: PropsWithChildren<{}>) => JSX.Element;
// Warning: (ae-missing-release-tag) "StatusWarning" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const StatusWarning: (props: PropsWithChildren<{}>) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "StructuredMetadataTable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const StructuredMetadataTable: ({
metadata,
@@ -2267,24 +2523,34 @@ export const StructuredMetadataTable: ({
options,
}: Props_16) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "SubvalueCellProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "SubvalueCell" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SubvalueCell: ({
value,
subvalue,
}: SubvalueCellProps) => JSX.Element;
// Warning: (ae-forgotten-export) The symbol "SupportButtonProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "SupportButton" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const SupportButton: ({
title,
children,
}: SupportButtonProps) => JSX.Element;
// Warning: (ae-missing-release-tag) "SupportConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type SupportConfig = {
url: string;
items: SupportItem[];
};
// Warning: (ae-missing-release-tag) "SupportItem" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type SupportItem = {
title: string;
@@ -2292,12 +2558,16 @@ export type SupportItem = {
links: SupportItemLink[];
};
// Warning: (ae-missing-release-tag) "SupportItemLink" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type SupportItemLink = {
url: string;
title: string;
};
// Warning: (ae-missing-release-tag) "Tab" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type Tab = {
id: string;
@@ -2310,6 +2580,9 @@ export type Tab = {
>;
};
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "TabbedCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const TabbedCard: ({
slackChannel,
@@ -2321,12 +2594,16 @@ export const TabbedCard: ({
onChange,
}: PropsWithChildren<Props_24>) => JSX.Element;
// Warning: (ae-missing-release-tag) "TabbedLayout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const TabbedLayout: {
({ children }: PropsWithChildren<{}>): JSX.Element;
Route: (props: SubRoute) => null;
};
// Warning: (ae-missing-release-tag) "Table" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function Table<T extends object = {}>({
columns,
@@ -2340,6 +2617,8 @@ export function Table<T extends object = {}>({
...props
}: TableProps<T>): JSX.Element;
// Warning: (ae-missing-release-tag) "TableColumn" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export interface TableColumn<T extends object = {}> extends Column<T> {
// (undocumented)
@@ -2348,12 +2627,16 @@ export interface TableColumn<T extends object = {}> extends Column<T> {
width?: string;
}
// Warning: (ae-missing-release-tag) "TableFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type TableFilter = {
column: string;
type: 'select' | 'multiple-select' | 'checkbox-tree';
};
// Warning: (ae-missing-release-tag) "TableProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export interface TableProps<T extends object = {}>
extends MaterialTableProps<T> {
@@ -2371,6 +2654,8 @@ export interface TableProps<T extends object = {}>
subtitle?: string;
}
// Warning: (ae-missing-release-tag) "TableState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export type TableState = {
search?: string;
@@ -2378,9 +2663,14 @@ export type TableState = {
filters?: SelectedFilters;
};
// Warning: (ae-forgotten-export) The symbol "TabsProps" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "Tabs" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const Tabs: ({ tabs }: TabsProps) => JSX.Element;
// Warning: (ae-missing-release-tag) "TrendLine" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const TrendLine: (
props: SparklinesProps &
@@ -2389,23 +2679,55 @@ export const TrendLine: (
},
) => JSX.Element | null;
// Warning: (ae-forgotten-export) The symbol "SetQueryParams" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "useQueryParamState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function useQueryParamState<T>(
stateName: string,
debounceTime?: number,
): [T | undefined, SetQueryParams<T>];
// Warning: (ae-missing-release-tag) "UserIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const UserIcon: IconComponent;
// Warning: (ae-missing-release-tag) "useSupportConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export function useSupportConfig(): SupportConfig;
// Warning: (ae-missing-release-tag) "WarningIcon" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const WarningIcon: IconComponent;
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-with-invalid-optional-name) The @param should not include a JSDoc-style optional name; it must not be enclosed in '[ ]' brackets.
// Warning: (tsdoc-param-tag-with-invalid-type) The @param block should not include a JSDoc-style '{type}'
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-with-invalid-optional-name) The @param should not include a JSDoc-style optional name; it must not be enclosed in '[ ]' brackets.
// Warning: (tsdoc-param-tag-with-invalid-type) The @param block should not include a JSDoc-style '{type}'
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-with-invalid-optional-name) The @param should not include a JSDoc-style optional name; it must not be enclosed in '[ ]' brackets.
// Warning: (tsdoc-param-tag-with-invalid-type) The @param block should not include a JSDoc-style '{type}'
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
// Warning: (tsdoc-param-tag-with-invalid-optional-name) The @param should not include a JSDoc-style optional name; it must not be enclosed in '[ ]' brackets.
// Warning: (tsdoc-param-tag-with-invalid-type) The @param block should not include a JSDoc-style '{type}'
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// Warning: (ae-missing-release-tag) "WarningPanel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public
export const WarningPanel: (props: Props_17) => JSX.Element;
// Warnings were encountered during analysis:
//
// src/components/CopyTextButton/CopyTextButton.d.ts:24:5 - (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
// src/components/TabbedLayout/RoutedTabs.d.ts:9:5 - (ae-forgotten-export) The symbol "SubRoute" needs to be exported by the entry point index.d.ts
// src/components/TabbedLayout/TabbedLayout.d.ts:29:5 - (ae-forgotten-export) The symbol "SubRoute" needs to be exported by the entry point index.d.ts
// src/components/Table/Table.d.ts:15:5 - (ae-forgotten-export) The symbol "SelectedFilters" needs to be exported by the entry point index.d.ts
// src/layout/ErrorBoundary/ErrorBoundary.d.ts:7:5 - (ae-forgotten-export) The symbol "SlackChannel" needs to be exported by the entry point index.d.ts
// (No @packageDocumentation comment for this package)
```
+5 -5
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-components",
"description": "Core components used by Backstage plugins and apps",
"version": "0.1.5",
"version": "0.1.6",
"private": false,
"publishConfig": {
"access": "public",
@@ -70,15 +70,15 @@
"zen-observable": "^0.8.15"
},
"devDependencies": {
"@backstage/core-app-api": "^0.1.4",
"@backstage/cli": "^0.7.3",
"@backstage/test-utils": "^0.1.13",
"@backstage/core-app-api": "^0.1.5",
"@backstage/cli": "^0.7.5",
"@backstage/test-utils": "^0.1.15",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
"@testing-library/user-event": "^13.1.8",
"@types/classnames": "^2.2.9",
"@types/d3-selection": "^2.0.0",
"@types/d3-shape": "^2.0.0",
"@types/d3-shape": "^3.0.1",
"@types/d3-zoom": "^2.0.0",
"@types/google-protobuf": "^3.7.2",
"@types/jest": "^26.0.7",
@@ -49,15 +49,17 @@ export const EmptyState = ({ title, description, missing, action }: Props) => {
className={classes.root}
spacing={2}
>
<Grid item container direction="column" xs={12} md={6}>
<Grid item>
<Typography variant="h5">{title}</Typography>
</Grid>
<Grid item>
<Typography variant="body1">{description}</Typography>
</Grid>
<Grid item className={classes.action}>
{action}
<Grid item xs={12} md={6}>
<Grid container direction="column">
<Grid item xs>
<Typography variant="h5">{title}</Typography>
</Grid>
<Grid item xs>
<Typography variant="body1">{description}</Typography>
</Grid>
<Grid item xs className={classes.action}>
{action}
</Grid>
</Grid>
</Grid>
<Grid item xs={12} md={6} className={classes.imageContainer}>
@@ -29,7 +29,7 @@ const useStyles = makeStyles({
generalImg: {
width: '95%',
zIndex: 2,
position: 'absolute',
position: 'relative',
left: '50%',
top: '50%',
transform: 'translate(-50%, 15%)',
@@ -28,7 +28,7 @@ import {
makeStyles,
Popover,
} from '@material-ui/core';
import React, { Fragment, MouseEventHandler, useState } from 'react';
import React, { MouseEventHandler, useState } from 'react';
import { SupportItem, SupportItemLink, useSupportConfig } from '../../hooks';
import { Link } from '../Link';
@@ -94,17 +94,17 @@ export const SupportButton = ({ title, children }: SupportButtonProps) => {
};
return (
<Fragment>
<Button
data-testid="support-button"
color="primary"
onClick={onClickHandler}
>
<Box marginRight={1}>
<HelpIcon />
</Box>
Support
</Button>
<>
<Box ml={1}>
<Button
data-testid="support-button"
color="primary"
onClick={onClickHandler}
startIcon={<HelpIcon />}
>
Support
</Button>
</Box>
<Popover
data-testid="support-button-popover"
open={popoverOpen}
@@ -141,6 +141,6 @@ export const SupportButton = ({ title, children }: SupportButtonProps) => {
</Button>
</DialogActions>
</Popover>
</Fragment>
</>
);
};
@@ -18,7 +18,7 @@
* TODO favoriteable capability
*/
import React, { ComponentType, Fragment, PropsWithChildren } from 'react';
import React, { ComponentType, PropsWithChildren } from 'react';
import { Typography, makeStyles } from '@material-ui/core';
import { Helmet } from 'react-helmet';
@@ -57,15 +57,15 @@ const useStyles = (props: ContentHeaderProps) =>
},
}));
type DefaultTitleProps = {
type ContentHeaderTitleProps = {
title?: string;
className: string;
className?: string;
};
const DefaultTitle = ({
const ContentHeaderTitle = ({
title = 'Unknown page',
className,
}: DefaultTitleProps) => (
}: ContentHeaderTitleProps) => (
<Typography
variant="h4"
component="h2"
@@ -77,7 +77,7 @@ const DefaultTitle = ({
);
type ContentHeaderProps = {
title?: DefaultTitleProps['title'];
title?: ContentHeaderTitleProps['title'];
titleComponent?: ComponentType;
description?: string;
textAlign?: 'left' | 'right' | 'center';
@@ -95,10 +95,10 @@ export const ContentHeader = ({
const renderedTitle = TitleComponent ? (
<TitleComponent />
) : (
<DefaultTitle title={title} className={classes.title} />
<ContentHeaderTitle title={title} className={classes.title} />
);
return (
<Fragment>
<>
<Helmet title={title} />
<div className={classes.container}>
<div className={classes.leftItemsBox}>
@@ -111,6 +111,6 @@ export const ContentHeader = ({
</div>
<div className={classes.rightItemsBox}>{children}</div>
</div>
</Fragment>
</>
);
};
@@ -16,17 +16,20 @@
import { useApi, configApiRef } from '@backstage/core-plugin-api';
import { BackstageTheme } from '@backstage/theme';
import { makeStyles, Tooltip, Typography } from '@material-ui/core';
import { Box, Grid, makeStyles, Tooltip, Typography } from '@material-ui/core';
import React, { CSSProperties, PropsWithChildren, ReactNode } from 'react';
import { Helmet } from 'react-helmet';
import { Link } from '../../components/Link';
import { Breadcrumbs } from '../Breadcrumbs';
const minHeaderHeight = 118;
const useStyles = makeStyles<BackstageTheme>(theme => ({
header: {
gridArea: 'pageHeader',
padding: theme.spacing(3),
minHeight: 118,
height: 'fit-content',
minHeight: minHeaderHeight,
width: '100%',
boxShadow: '0 0 8px 3px rgba(20, 20, 20, 0.3)',
position: 'relative',
@@ -34,26 +37,21 @@ const useStyles = makeStyles<BackstageTheme>(theme => ({
display: 'flex',
flexDirection: 'row',
flexWrap: 'wrap',
justifyContent: 'flex-end',
alignItems: 'center',
backgroundImage: theme.page.backgroundImage,
backgroundPosition: 'center',
backgroundSize: 'cover',
},
leftItemsBox: {
flex: '1 1 auto',
maxWidth: '100%',
flexGrow: 1,
marginBottom: theme.spacing(1),
},
rightItemsBox: {
flex: '0 1 auto',
display: 'flex',
flexDirection: 'row',
flexWrap: 'wrap',
alignItems: 'center',
marginRight: theme.spacing(1),
width: 'auto',
},
title: {
color: theme.palette.bursts.fontColor,
lineHeight: '1.0em',
wordBreak: 'break-all',
fontSize: 'calc(24px + 6 * ((100vw - 320px) / 680))',
marginBottom: theme.spacing(1),
@@ -199,7 +197,7 @@ export const Header = ({
<>
<Helmet titleTemplate={titleTemplate} defaultTitle={defaultTitle} />
<header style={style} className={classes.header}>
<div className={classes.leftItemsBox}>
<Box className={classes.leftItemsBox}>
<TypeFragment
classes={classes}
type={type}
@@ -212,8 +210,10 @@ export const Header = ({
tooltip={tooltip}
/>
<SubtitleFragment classes={classes} subtitle={subtitle} />
</div>
<div className={classes.rightItemsBox}>{children}</div>
</Box>
<Grid container className={classes.rightItemsBox} spacing={4}>
{children}
</Grid>
</header>
</>
);

Some files were not shown because too many files have changed in this diff Show More