Merge branch 'backstage:master' into add-catalog-permissions
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Add an extra bit of height to the EntityPicker dropdown to make it clear there are more options to select from, and to remove the scroll bar when there is less than 10 options
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
'@backstage/cli-node': patch
|
||||
'@backstage/cli': patch
|
||||
'@backstage/eslint-plugin': patch
|
||||
---
|
||||
|
||||
Added support for the `frontend-extensions` role, which is used in conjunction with the new frontend system to ship extensions to your apps.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch
|
||||
---
|
||||
|
||||
Add ability to set the initial commit message when initializing a repository using the scaffolder action.
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
'@backstage/frontend-plugin-api': patch
|
||||
---
|
||||
|
||||
Support overriding of plugin extensions using the new `plugin.withOverrides` method.
|
||||
|
||||
```tsx
|
||||
import homePlugin from '@backstage/plugin-home';
|
||||
|
||||
export default homePlugin.withOverrides({
|
||||
extensions: [
|
||||
homePage.getExtension('page:home').override({
|
||||
*factory(originalFactory) {
|
||||
yield* originalFactory();
|
||||
yield coreExtensionData.reactElement(<h1>My custom home page</h1>);
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
@@ -191,8 +191,10 @@
|
||||
},
|
||||
"changesets": [
|
||||
"angry-dolphins-camp",
|
||||
"big-countries-wait",
|
||||
"big-eagles-grab",
|
||||
"blue-pumas-cheer",
|
||||
"breezy-cats-kiss",
|
||||
"breezy-jeans-tie",
|
||||
"breezy-rings-fly",
|
||||
"bright-donkeys-buy",
|
||||
@@ -200,6 +202,7 @@
|
||||
"calm-crabs-drop",
|
||||
"chilly-days-peel",
|
||||
"chilly-trains-sleep",
|
||||
"clean-kids-applaud",
|
||||
"clever-pans-brake",
|
||||
"cool-insects-remember",
|
||||
"cool-schools-vanish",
|
||||
@@ -217,20 +220,27 @@
|
||||
"fair-pumas-hang",
|
||||
"fast-bulldogs-relax",
|
||||
"few-wasps-hug",
|
||||
"five-mangos-agree",
|
||||
"flat-papayas-push",
|
||||
"flat-plums-grow",
|
||||
"forty-ties-agree",
|
||||
"forty-ties-disagree",
|
||||
"fresh-timers-walk",
|
||||
"friendly-cherries-applaud",
|
||||
"friendly-chicken-cry",
|
||||
"friendly-feet-refuse",
|
||||
"funny-bears-sort",
|
||||
"funny-wolves-learn",
|
||||
"gentle-dryers-smile",
|
||||
"good-steaks-report",
|
||||
"green-planets-reflect",
|
||||
"grumpy-owls-suffer",
|
||||
"healthy-fireants-jump",
|
||||
"healthy-timers-divide",
|
||||
"heavy-numbers-love",
|
||||
"hip-fishes-guess",
|
||||
"hip-hairs-exist",
|
||||
"itchy-experts-tie",
|
||||
"khaki-lamps-peel",
|
||||
"late-games-protect",
|
||||
"light-pianos-exercise",
|
||||
@@ -243,6 +253,7 @@
|
||||
"mighty-dolls-retire",
|
||||
"mighty-geckos-kiss",
|
||||
"modern-parrots-protect",
|
||||
"modern-poems-mate",
|
||||
"neat-bears-divide",
|
||||
"neat-gifts-join",
|
||||
"neat-socks-cheer",
|
||||
@@ -253,27 +264,38 @@
|
||||
"nine-seahorses-relate",
|
||||
"ninety-icons-smile",
|
||||
"odd-books-share",
|
||||
"old-tools-smell",
|
||||
"olive-books-sort",
|
||||
"orange-gifts-protect",
|
||||
"perfect-cars-jam",
|
||||
"pink-gorillas-brake",
|
||||
"plenty-tools-exist",
|
||||
"popular-panthers-hear",
|
||||
"purple-carrots-crash",
|
||||
"quick-roses-juggle",
|
||||
"rare-foxes-compete",
|
||||
"real-lizards-sit",
|
||||
"red-radios-promise",
|
||||
"renovate-147ac48",
|
||||
"renovate-f04beb1",
|
||||
"rich-mugs-dress",
|
||||
"selfish-bees-think",
|
||||
"seven-days-film",
|
||||
"seven-eggs-admire",
|
||||
"shaggy-dodos-applaud",
|
||||
"shaggy-mugs-return",
|
||||
"shy-games-poke",
|
||||
"shy-waves-share",
|
||||
"silly-candles-sin",
|
||||
"silly-cycles-tan",
|
||||
"silly-scissors-turn",
|
||||
"silver-pillows-begin",
|
||||
"six-mails-smell",
|
||||
"six-rats-kick",
|
||||
"sixty-kiwis-poke",
|
||||
"slow-ducks-rush",
|
||||
"slow-ligers-drum",
|
||||
"slow-rocks-end",
|
||||
"slow-toes-jog",
|
||||
"small-bottles-cough",
|
||||
"small-ears-poke",
|
||||
@@ -284,28 +306,38 @@
|
||||
"spicy-planets-provide",
|
||||
"spotty-planets-accept",
|
||||
"strange-papayas-beg",
|
||||
"strong-chicken-kiss",
|
||||
"strong-otters-compete",
|
||||
"stupid-dots-relate",
|
||||
"sweet-oranges-buy",
|
||||
"swift-kings-sparkle",
|
||||
"tall-snakes-fix",
|
||||
"tasty-ads-rescue",
|
||||
"ten-penguins-roll",
|
||||
"thick-hotels-know",
|
||||
"thick-squids-drive",
|
||||
"thin-carrots-eat",
|
||||
"thirty-adults-grab",
|
||||
"thirty-paws-hope",
|
||||
"tiny-dodos-prove-2",
|
||||
"tiny-dodos-prove",
|
||||
"tiny-oranges-pretend",
|
||||
"tough-goats-hang",
|
||||
"tough-lies-repair",
|
||||
"tricky-ducks-juggle",
|
||||
"tricky-rules-destroy",
|
||||
"two-emus-work",
|
||||
"violet-jokes-wave",
|
||||
"warm-monkeys-marry",
|
||||
"weak-jobs-joke",
|
||||
"wicked-bobcats-teach",
|
||||
"wild-eggs-exist",
|
||||
"wise-spiders-walk",
|
||||
"witty-bears-behave",
|
||||
"witty-geese-battle",
|
||||
"witty-queens-run",
|
||||
"witty-timers-marry",
|
||||
"young-birds-push",
|
||||
"young-games-visit",
|
||||
"young-peaches-shake"
|
||||
]
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Updated dependency `@module-federation/enhanced` to `0.3.1`
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend-module-cloudflare-access-provider': minor
|
||||
---
|
||||
|
||||
Support for Cloudflare Custom Headers and Custom Cookie Auth Name
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-api-docs': patch
|
||||
'@backstage/plugin-catalog': patch
|
||||
---
|
||||
|
||||
Add `tableOptions` to all tables and additionally `title` to API tables.
|
||||
@@ -32,6 +32,12 @@ auth:
|
||||
serviceTokens:
|
||||
- token: '1uh2fh19efvfh129f1f919u21f2f19jf2.access'
|
||||
subject: 'bot-user@your-company.com'
|
||||
# You can customize the header name that contains the jwt token, by default
|
||||
# cf-access-jwt-assertion is used
|
||||
jwtHeaderName: <my-header>
|
||||
# You can customize the authorization cookie name, by default
|
||||
# CF_Authorization is used
|
||||
authorizationCookieName: <MY_CAUTHORIZATION_COOKIE_NAME>
|
||||
# This picks what sign in resolver(s) you want to use.
|
||||
signIn:
|
||||
resolvers:
|
||||
|
||||
@@ -50,7 +50,7 @@ components need to be in a known machine-readable format so we can build further
|
||||
tooling and analysis on top.
|
||||
|
||||
APIs have a visibility: they are either public (making them available for any
|
||||
other component to consume), restricted (only available to an allowlisted set of
|
||||
other component to consume), restricted (only available to an allowed set of
|
||||
consumers), or private (only available within their system). As public APIs are
|
||||
going to be the primary way interaction between components, Backstage supports
|
||||
documenting, indexing and searching all APIs so we can browse them as
|
||||
|
||||
@@ -203,7 +203,7 @@ techdocs:
|
||||
|
||||
# (Optional) The time (in milliseconds) that the TechDocs backend will wait
|
||||
# for a cache service to respond before continuing on as though the cached
|
||||
# object was not found (e.g. when the cache sercice is unavailable). The
|
||||
# object was not found (e.g. when the cache service is unavailable). The
|
||||
# default value is 1000
|
||||
readTimeout: 500
|
||||
```
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -93,19 +93,18 @@ defined in the `package.json` of each package like this:
|
||||
|
||||
These are the available roles that are currently supported by the Backstage build system:
|
||||
|
||||
| Role | Description | Example |
|
||||
| ---------------------- | ----------------------------------------------------------------------------- | -------------------------------------------- |
|
||||
| frontend | Bundled frontend application | `packages/app` |
|
||||
| backend | Bundled backend application | `packages/backend` |
|
||||
| cli | Package used as a command-line interface | `@backstage/cli`, `@backstage/codemods` |
|
||||
| web-library | Web library for use by other packages | `@backstage/plugin-catalog-react` |
|
||||
| node-library | Node.js library for use by other packages | `@backstage/plugin-techdocs-node` |
|
||||
| common-library | Isomorphic library for use by other packages | `@backstage/plugin-permission-common` |
|
||||
| frontend-plugin | Backstage frontend plugin | `@backstage/plugin-scaffolder` |
|
||||
| frontend-extensions | Extensions (customizations, private additions etc) for the Backstage frontend | Typically only appears in adopter repos |
|
||||
| frontend-plugin-module | Backstage frontend plugin module | `@backstage/plugin-analytics-module-ga` |
|
||||
| backend-plugin | Backstage backend plugin | `@backstage/plugin-auth-backend` |
|
||||
| backend-plugin-module | Backstage backend plugin module | `@backstage/plugin-search-backend-module-pg` |
|
||||
| Role | Description | Example |
|
||||
| ---------------------- | -------------------------------------------- | -------------------------------------------- |
|
||||
| frontend | Bundled frontend application | `packages/app` |
|
||||
| backend | Bundled backend application | `packages/backend` |
|
||||
| cli | Package used as a command-line interface | `@backstage/cli`, `@backstage/codemods` |
|
||||
| web-library | Web library for use by other packages | `@backstage/plugin-catalog-react` |
|
||||
| node-library | Node.js library for use by other packages | `@backstage/plugin-techdocs-node` |
|
||||
| common-library | Isomorphic library for use by other packages | `@backstage/plugin-permission-common` |
|
||||
| frontend-plugin | Backstage frontend plugin | `@backstage/plugin-scaffolder` |
|
||||
| frontend-plugin-module | Backstage frontend plugin module | `@backstage/plugin-analytics-module-ga` |
|
||||
| backend-plugin | Backstage backend plugin | `@backstage/plugin-auth-backend` |
|
||||
| backend-plugin-module | Backstage backend plugin module | `@backstage/plugin-search-backend-module-pg` |
|
||||
|
||||
Most of the steps that we cover below have an accompanying command that is intended to be used as a package script. The commands are all available under the `backstage-cli package` category, and many of the commands will behave differently depending on the role of the package. The commands are intended to be used like this:
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "root",
|
||||
"version": "1.30.0-next.3",
|
||||
"version": "1.30.0-next.4",
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);
|
||||
@@ -1,3 +0,0 @@
|
||||
# app-next-example-extensions
|
||||
|
||||
This is just an example of how extensions can be bundled up for adding into your Backstage frontend app.
|
||||
@@ -1,26 +0,0 @@
|
||||
## API Report File for "@internal/app-next-example-extensions"
|
||||
|
||||
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
|
||||
|
||||
```ts
|
||||
import { AnyExtensionDataRef } from '@backstage/frontend-plugin-api';
|
||||
import { ExtensionDefinition } from '@backstage/frontend-plugin-api';
|
||||
import { ExtensionOverrides } from '@backstage/frontend-plugin-api';
|
||||
|
||||
// @public (undocumented)
|
||||
const _default: ExtensionOverrides;
|
||||
export default _default;
|
||||
|
||||
// @public (undocumented)
|
||||
export const SignInPage: ExtensionDefinition<
|
||||
{},
|
||||
{},
|
||||
AnyExtensionDataRef,
|
||||
{},
|
||||
string | undefined,
|
||||
string | undefined,
|
||||
string | undefined
|
||||
>;
|
||||
|
||||
// (No @packageDocumentation comment for this package)
|
||||
```
|
||||
@@ -1,9 +0,0 @@
|
||||
apiVersion: backstage.io/v1alpha1
|
||||
kind: Component
|
||||
metadata:
|
||||
name: internal-app-next-example-extensions
|
||||
title: '@internal/app-next-example-extensions'
|
||||
spec:
|
||||
lifecycle: experimental
|
||||
type: backstage-frontend-extensions
|
||||
owner: maintainers
|
||||
@@ -1,60 +0,0 @@
|
||||
{
|
||||
"name": "@internal/app-next-example-extensions",
|
||||
"version": "0.0.0",
|
||||
"backstage": {
|
||||
"role": "frontend-extensions"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"main": "dist/index.esm.js",
|
||||
"types": "dist/index.d.ts"
|
||||
},
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/backstage/backstage",
|
||||
"directory": "packages/app-next-example-extensions"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"sideEffects": false,
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "backstage-cli package build",
|
||||
"clean": "backstage-cli package clean",
|
||||
"lint": "backstage-cli package lint",
|
||||
"prepack": "backstage-cli package prepack",
|
||||
"postpack": "backstage-cli package postpack",
|
||||
"start": "backstage-cli package start",
|
||||
"test": "backstage-cli package test"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-components": "workspace:^",
|
||||
"@backstage/frontend-plugin-api": "workspace:^",
|
||||
"@backstage/integration-react": "workspace:^",
|
||||
"@backstage/plugin-home": "workspace:^",
|
||||
"@backstage/theme": "workspace:^",
|
||||
"@material-ui/core": "^4.9.13",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "^4.0.0-alpha.61",
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "workspace:^",
|
||||
"@backstage/core-app-api": "workspace:^",
|
||||
"@backstage/dev-utils": "workspace:^",
|
||||
"@backstage/test-utils": "workspace:^",
|
||||
"@testing-library/jest-dom": "^6.0.0",
|
||||
"@testing-library/react": "^15.0.0",
|
||||
"@testing-library/user-event": "^14.0.0",
|
||||
"msw": "^1.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^16.13.1 || ^17.0.0 || ^18.0.0",
|
||||
"react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0",
|
||||
"react-router-dom": "6.0.0-beta.0 || ^6.3.0"
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
* Copyright 2024 The Backstage Authors
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
describe('dummy', () => {
|
||||
it('succeeds', () => {
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
});
|
||||
@@ -1,22 +0,0 @@
|
||||
/*
|
||||
* Copyright 2024 The Backstage Authors
|
||||
*
|
||||
* 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 { createApiExtension } from '@backstage/frontend-plugin-api';
|
||||
import { ScmAuth } from '@backstage/integration-react';
|
||||
|
||||
export const ScmAuthApi = createApiExtension({
|
||||
factory: ScmAuth.createDefaultApiFactory(),
|
||||
});
|
||||
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
* Copyright 2024 The Backstage Authors
|
||||
*
|
||||
* 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 React from 'react';
|
||||
import { createSignInPageExtension } from '@backstage/frontend-plugin-api';
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export const SignInPage = createSignInPageExtension({
|
||||
name: 'guest',
|
||||
loader: () =>
|
||||
import('@backstage/core-components').then(m => props => (
|
||||
<m.SignInPage {...props} providers={['guest']} />
|
||||
)),
|
||||
});
|
||||
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
* Copyright 2024 The Backstage Authors
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
export { HomePage } from './HomePage';
|
||||
export { NotFoundErrorPage } from './NotFoundErrorPage';
|
||||
export { ScmAuthApi } from './ScmAuthApi';
|
||||
export { ScmIntegrationApi } from './ScmIntegrationApi';
|
||||
export { SignInPage } from './SignInPage';
|
||||
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright 2024 The Backstage Authors
|
||||
*
|
||||
* 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 { createExtensionOverrides } from '@backstage/frontend-plugin-api';
|
||||
import * as extensions from './extensions';
|
||||
|
||||
export { SignInPage } from './extensions/SignInPage';
|
||||
|
||||
export default createExtensionOverrides({
|
||||
extensions: Object.values(extensions),
|
||||
});
|
||||
@@ -1,17 +0,0 @@
|
||||
/*
|
||||
* Copyright 2024 The Backstage Authors
|
||||
*
|
||||
* 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 '@testing-library/jest-dom';
|
||||
@@ -1,5 +1,13 @@
|
||||
# app-next-example-plugin
|
||||
|
||||
## 0.0.14-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/frontend-plugin-api@0.7.0-next.3
|
||||
- @backstage/core-components@0.14.10-next.0
|
||||
|
||||
## 0.0.14-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "app-next-example-plugin",
|
||||
"version": "0.0.14-next.2",
|
||||
"version": "0.0.14-next.3",
|
||||
"description": "Backstage internal example plugin",
|
||||
"backstage": {
|
||||
"role": "frontend-plugin",
|
||||
|
||||
@@ -1,5 +1,48 @@
|
||||
# example-app-next
|
||||
|
||||
## 0.0.14-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder@1.24.0-next.3
|
||||
- @backstage/frontend-plugin-api@0.7.0-next.3
|
||||
- @backstage/plugin-notifications@0.3.0-next.1
|
||||
- @backstage/cli@0.27.0-next.4
|
||||
- @backstage/plugin-techdocs@1.10.8-next.3
|
||||
- @backstage/plugin-api-docs@0.11.8-next.3
|
||||
- @backstage/plugin-catalog@1.22.0-next.3
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/core-compat-api@0.2.8-next.3
|
||||
- @backstage/frontend-app-api@0.7.5-next.3
|
||||
- @backstage/plugin-app-visualizer@0.1.9-next.3
|
||||
- @backstage/plugin-catalog-graph@0.4.8-next.4
|
||||
- @backstage/plugin-catalog-import@0.12.2-next.3
|
||||
- @backstage/plugin-catalog-react@1.12.3-next.3
|
||||
- @backstage/plugin-home@0.7.9-next.3
|
||||
- @backstage/plugin-kubernetes@0.11.13-next.3
|
||||
- @backstage/plugin-org@0.6.28-next.3
|
||||
- @backstage/plugin-search@1.4.15-next.3
|
||||
- @backstage/plugin-search-react@1.7.14-next.3
|
||||
- @backstage/plugin-user-settings@0.8.11-next.3
|
||||
- @backstage/app-defaults@1.5.10-next.2
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/core-app-api@1.14.2-next.0
|
||||
- @backstage/core-components@0.14.10-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/integration-react@1.1.30-next.0
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/plugin-auth-react@0.1.5-next.0
|
||||
- @backstage/plugin-catalog-common@1.0.26-next.2
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.1
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.14-next.3
|
||||
- @backstage/plugin-permission-react@0.4.25-next.1
|
||||
- @backstage/plugin-scaffolder-react@1.11.0-next.3
|
||||
- @backstage/plugin-search-common@1.2.14-next.1
|
||||
- @backstage/plugin-signals@0.0.9-next.0
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.1
|
||||
- @backstage/plugin-techdocs-react@1.2.7-next.1
|
||||
|
||||
## 0.0.14-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app-next",
|
||||
"version": "0.0.14-next.3",
|
||||
"version": "0.0.14-next.4",
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -49,7 +49,6 @@
|
||||
"@backstage/plugin-techdocs-react": "workspace:^",
|
||||
"@backstage/plugin-user-settings": "workspace:^",
|
||||
"@backstage/theme": "workspace:^",
|
||||
"@internal/app-next-example-extensions": "workspace:^",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.61",
|
||||
|
||||
@@ -17,16 +17,33 @@
|
||||
import React from 'react';
|
||||
import { createApp } from '@backstage/frontend-app-api';
|
||||
import { pagesPlugin } from './examples/pagesPlugin';
|
||||
import notFoundErrorPage from './examples/notFoundErrorPageExtension';
|
||||
import userSettingsPlugin from '@backstage/plugin-user-settings/alpha';
|
||||
import homePlugin from '@backstage/plugin-home/alpha';
|
||||
import homePlugin, {
|
||||
titleExtensionDataRef,
|
||||
} from '@backstage/plugin-home/alpha';
|
||||
|
||||
import {
|
||||
coreExtensionData,
|
||||
createExtension,
|
||||
createApiExtension,
|
||||
createExtensionOverrides,
|
||||
} from '@backstage/frontend-plugin-api';
|
||||
import techdocsPlugin from '@backstage/plugin-techdocs/alpha';
|
||||
import appVisualizerPlugin from '@backstage/plugin-app-visualizer';
|
||||
import { homePage } from './HomePage';
|
||||
import { convertLegacyApp } from '@backstage/core-compat-api';
|
||||
import { FlatRoutes } from '@backstage/core-app-api';
|
||||
import { Route } from 'react-router';
|
||||
import { CatalogImportPage } from '@backstage/plugin-catalog-import';
|
||||
import { createApiFactory, configApiRef } from '@backstage/core-plugin-api';
|
||||
import {
|
||||
ScmAuth,
|
||||
ScmIntegrationsApi,
|
||||
scmIntegrationsApiRef,
|
||||
} from '@backstage/integration-react';
|
||||
import kubernetesPlugin from '@backstage/plugin-kubernetes/alpha';
|
||||
import extensions from '@internal/app-next-example-extensions';
|
||||
import { signInPageOverrides } from './overrides/SignInPage';
|
||||
|
||||
/*
|
||||
|
||||
@@ -57,6 +74,30 @@ TODO:
|
||||
|
||||
/* app.tsx */
|
||||
|
||||
const homePageExtension = createExtension({
|
||||
name: 'myhomepage',
|
||||
attachTo: { id: 'page:home', input: 'props' },
|
||||
output: {
|
||||
children: coreExtensionData.reactElement,
|
||||
title: titleExtensionDataRef,
|
||||
},
|
||||
factory() {
|
||||
return { children: homePage, title: 'just a title' };
|
||||
},
|
||||
});
|
||||
|
||||
const scmAuthExtension = createApiExtension({
|
||||
factory: ScmAuth.createDefaultApiFactory(),
|
||||
});
|
||||
|
||||
const scmIntegrationApi = createApiExtension({
|
||||
factory: createApiFactory({
|
||||
api: scmIntegrationsApiRef,
|
||||
deps: { configApi: configApiRef },
|
||||
factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi),
|
||||
}),
|
||||
});
|
||||
|
||||
const collectedLegacyPlugins = convertLegacyApp(
|
||||
<FlatRoutes>
|
||||
<Route path="/catalog-import" element={<CatalogImportPage />} />
|
||||
@@ -71,8 +112,16 @@ const app = createApp({
|
||||
homePlugin,
|
||||
appVisualizerPlugin,
|
||||
kubernetesPlugin,
|
||||
extensions,
|
||||
signInPageOverrides,
|
||||
...collectedLegacyPlugins,
|
||||
createExtensionOverrides({
|
||||
extensions: [
|
||||
homePageExtension,
|
||||
scmAuthExtension,
|
||||
scmIntegrationApi,
|
||||
notFoundErrorPage,
|
||||
],
|
||||
}),
|
||||
],
|
||||
/* Handled through config instead */
|
||||
// bindRoutes({ bind }) {
|
||||
|
||||
-17
@@ -29,11 +29,6 @@ import {
|
||||
import { Content, Header, Page } from '@backstage/core-components';
|
||||
import React from 'react';
|
||||
import HomeIcon from '@material-ui/icons/Home';
|
||||
import {
|
||||
coreExtensionData,
|
||||
createExtension,
|
||||
} from '@backstage/frontend-plugin-api';
|
||||
import { titleExtensionDataRef } from '@backstage/plugin-home/alpha';
|
||||
|
||||
const clockConfigs: ClockConfig[] = [
|
||||
{
|
||||
@@ -116,15 +111,3 @@ export const homePage = (
|
||||
</Content>
|
||||
</Page>
|
||||
);
|
||||
|
||||
export const HomePage = createExtension({
|
||||
name: 'myhomepage',
|
||||
attachTo: { id: 'page:home', input: 'props' },
|
||||
output: {
|
||||
children: coreExtensionData.reactElement,
|
||||
title: titleExtensionDataRef,
|
||||
},
|
||||
factory() {
|
||||
return { children: homePage, title: 'just a title' };
|
||||
},
|
||||
});
|
||||
+2
-2
@@ -23,7 +23,7 @@ import Box from '@material-ui/core/Box';
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
import { Button } from '@backstage/core-components';
|
||||
|
||||
function CustomNotFoundErrorPage() {
|
||||
export function CustomNotFoundErrorPage() {
|
||||
return (
|
||||
<Box
|
||||
component="article"
|
||||
@@ -51,7 +51,7 @@ function CustomNotFoundErrorPage() {
|
||||
);
|
||||
}
|
||||
|
||||
export const NotFoundErrorPage = createComponentExtension({
|
||||
export default createComponentExtension({
|
||||
ref: coreComponentRefs.notFoundErrorPage,
|
||||
loader: { sync: () => CustomNotFoundErrorPage },
|
||||
});
|
||||
@@ -18,7 +18,7 @@ import React from 'react';
|
||||
import ReactDOM from 'react-dom/client';
|
||||
import { CookieAuthRedirect } from '@backstage/plugin-auth-react';
|
||||
import { createApp } from '@backstage/frontend-app-api';
|
||||
import { SignInPage } from '@internal/app-next-example-extensions';
|
||||
import { signInPageOverrides } from './overrides/SignInPage';
|
||||
import {
|
||||
coreExtensionData,
|
||||
createExtension,
|
||||
@@ -39,8 +39,9 @@ const authRedirectExtension = createExtension({
|
||||
|
||||
const app = createApp({
|
||||
features: [
|
||||
signInPageOverrides,
|
||||
createExtensionOverrides({
|
||||
extensions: [SignInPage, authRedirectExtension],
|
||||
extensions: [authRedirectExtension],
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
+11
-13
@@ -14,20 +14,18 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import { SignInPage } from '@backstage/core-components';
|
||||
import {
|
||||
configApiRef,
|
||||
createApiExtension,
|
||||
createApiFactory,
|
||||
createExtensionOverrides,
|
||||
createSignInPageExtension,
|
||||
} from '@backstage/frontend-plugin-api';
|
||||
import {
|
||||
ScmIntegrationsApi,
|
||||
scmIntegrationsApiRef,
|
||||
} from '@backstage/integration-react';
|
||||
|
||||
export const ScmIntegrationApi = createApiExtension({
|
||||
factory: createApiFactory({
|
||||
api: scmIntegrationsApiRef,
|
||||
deps: { configApi: configApiRef },
|
||||
factory: ({ configApi }) => ScmIntegrationsApi.fromConfig(configApi),
|
||||
}),
|
||||
const signInPage = createSignInPageExtension({
|
||||
name: 'guest',
|
||||
loader: async () => props => <SignInPage {...props} providers={['guest']} />,
|
||||
});
|
||||
|
||||
export const signInPageOverrides = createExtensionOverrides({
|
||||
extensions: [signInPage],
|
||||
});
|
||||
@@ -1,5 +1,46 @@
|
||||
# example-app
|
||||
|
||||
## 0.2.100-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder@1.24.0-next.3
|
||||
- @backstage/plugin-notifications@0.3.0-next.1
|
||||
- @backstage/cli@0.27.0-next.4
|
||||
- @backstage/plugin-techdocs@1.10.8-next.3
|
||||
- @backstage/plugin-api-docs@0.11.8-next.3
|
||||
- @backstage/plugin-catalog@1.22.0-next.3
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/frontend-app-api@0.7.5-next.3
|
||||
- @backstage/plugin-catalog-graph@0.4.8-next.4
|
||||
- @backstage/plugin-catalog-import@0.12.2-next.3
|
||||
- @backstage/plugin-catalog-react@1.12.3-next.3
|
||||
- @backstage/plugin-devtools@0.1.17-next.3
|
||||
- @backstage/plugin-home@0.7.9-next.3
|
||||
- @backstage/plugin-kubernetes@0.11.13-next.3
|
||||
- @backstage/plugin-org@0.6.28-next.3
|
||||
- @backstage/plugin-search@1.4.15-next.3
|
||||
- @backstage/plugin-search-react@1.7.14-next.3
|
||||
- @backstage/plugin-user-settings@0.8.11-next.3
|
||||
- @backstage/app-defaults@1.5.10-next.2
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/core-app-api@1.14.2-next.0
|
||||
- @backstage/core-components@0.14.10-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/integration-react@1.1.30-next.0
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/plugin-auth-react@0.1.5-next.0
|
||||
- @backstage/plugin-catalog-common@1.0.26-next.2
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.7-next.1
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.14-next.3
|
||||
- @backstage/plugin-permission-react@0.4.25-next.1
|
||||
- @backstage/plugin-scaffolder-react@1.11.0-next.3
|
||||
- @backstage/plugin-search-common@1.2.14-next.1
|
||||
- @backstage/plugin-signals@0.0.9-next.0
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.13-next.1
|
||||
- @backstage/plugin-techdocs-react@1.2.7-next.1
|
||||
|
||||
## 0.2.100-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.100-next.3",
|
||||
"version": "0.2.100-next.4",
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,22 @@
|
||||
# @backstage/backend-app-api
|
||||
|
||||
## 0.8.1-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.8.0-next.3
|
||||
- @backstage/backend-common@0.23.4-next.3
|
||||
- @backstage/backend-tasks@0.5.28-next.3
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/cli-node@0.2.7
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.9.0-next.2
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-auth-node@0.5.0-next.3
|
||||
- @backstage/plugin-permission-node@0.8.1-next.3
|
||||
|
||||
## 0.8.1-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-app-api",
|
||||
"version": "0.8.1-next.2",
|
||||
"version": "0.8.1-next.3",
|
||||
"description": "Core API used by Backstage backend apps",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,22 @@
|
||||
# @backstage/backend-common
|
||||
|
||||
## 0.23.4-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ddde5fe: Internal type refactor.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.8.0-next.3
|
||||
- @backstage/backend-dev-utils@0.1.4
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.9.0-next.2
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/integration@1.14.0-next.0
|
||||
- @backstage/integration-aws-node@0.1.12
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-auth-node@0.5.0-next.3
|
||||
|
||||
## 0.23.4-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-common",
|
||||
"version": "0.23.4-next.2",
|
||||
"version": "0.23.4-next.3",
|
||||
"description": "Common functionality library for Backstage backends",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
# @backstage/backend-defaults
|
||||
|
||||
## 0.4.2-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 81f930a: use formatted query to prevent chance of SQL-injection
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.8.0-next.3
|
||||
- @backstage/backend-common@0.23.4-next.3
|
||||
- @backstage/backend-app-api@0.8.1-next.3
|
||||
- @backstage/backend-dev-utils@0.1.4
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.9.0-next.2
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/integration@1.14.0-next.0
|
||||
- @backstage/integration-aws-node@0.1.12
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-auth-node@0.5.0-next.3
|
||||
- @backstage/plugin-events-node@0.3.9-next.3
|
||||
- @backstage/plugin-permission-node@0.8.1-next.3
|
||||
|
||||
## 0.4.2-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-defaults",
|
||||
"version": "0.4.2-next.2",
|
||||
"version": "0.4.2-next.3",
|
||||
"description": "Backend defaults used by Backstage backend apps",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,31 @@
|
||||
# @backstage/backend-dynamic-feature-service
|
||||
|
||||
## 0.2.16-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.8.0-next.3
|
||||
- @backstage/backend-common@0.23.4-next.3
|
||||
- @backstage/backend-app-api@0.8.1-next.3
|
||||
- @backstage/backend-tasks@0.5.28-next.3
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/cli-node@0.2.7
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.9.0-next.2
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-app-node@0.1.23-next.3
|
||||
- @backstage/plugin-auth-node@0.5.0-next.3
|
||||
- @backstage/plugin-catalog-backend@1.24.1-next.3
|
||||
- @backstage/plugin-events-backend@0.3.10-next.3
|
||||
- @backstage/plugin-events-node@0.3.9-next.3
|
||||
- @backstage/plugin-permission-common@0.8.1-next.1
|
||||
- @backstage/plugin-permission-node@0.8.1-next.3
|
||||
- @backstage/plugin-scaffolder-node@0.4.9-next.3
|
||||
- @backstage/plugin-search-backend-node@1.2.28-next.3
|
||||
- @backstage/plugin-search-common@1.2.14-next.1
|
||||
|
||||
## 0.2.16-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-dynamic-feature-service",
|
||||
"description": "Backstage dynamic feature service",
|
||||
"version": "0.2.16-next.2",
|
||||
"version": "0.2.16-next.3",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +1,46 @@
|
||||
# example-backend-legacy
|
||||
|
||||
## 0.2.101-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.3
|
||||
- @backstage/plugin-techdocs-backend@1.10.10-next.3
|
||||
- @backstage/backend-common@0.23.4-next.3
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/plugin-scaffolder-backend@1.23.1-next.3
|
||||
- @backstage/backend-tasks@0.5.28-next.3
|
||||
- @backstage/catalog-client@1.6.6-next.0
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/integration@1.14.0-next.0
|
||||
- @backstage/plugin-app-backend@0.3.72-next.3
|
||||
- @backstage/plugin-auth-backend@0.22.10-next.3
|
||||
- @backstage/plugin-auth-node@0.5.0-next.3
|
||||
- @backstage/plugin-catalog-backend@1.24.1-next.3
|
||||
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3
|
||||
- @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.3
|
||||
- @backstage/plugin-catalog-node@1.12.5-next.3
|
||||
- @backstage/plugin-devtools-backend@0.3.9-next.3
|
||||
- @backstage/plugin-events-backend@0.3.10-next.3
|
||||
- @backstage/plugin-events-node@0.3.9-next.3
|
||||
- @backstage/plugin-kubernetes-backend@0.18.4-next.3
|
||||
- @backstage/plugin-permission-backend@0.5.47-next.3
|
||||
- @backstage/plugin-permission-common@0.8.1-next.1
|
||||
- @backstage/plugin-permission-node@0.8.1-next.3
|
||||
- @backstage/plugin-proxy-backend@0.5.4-next.3
|
||||
- @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.3
|
||||
- @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.3
|
||||
- @backstage/plugin-search-backend@1.5.15-next.3
|
||||
- @backstage/plugin-search-backend-module-catalog@0.1.29-next.3
|
||||
- @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.3
|
||||
- @backstage/plugin-search-backend-module-explore@0.1.29-next.3
|
||||
- @backstage/plugin-search-backend-module-pg@0.5.33-next.3
|
||||
- @backstage/plugin-search-backend-module-techdocs@0.1.28-next.3
|
||||
- @backstage/plugin-search-backend-node@1.2.28-next.3
|
||||
- @backstage/plugin-signals-backend@0.1.9-next.3
|
||||
- @backstage/plugin-signals-node@0.1.9-next.3
|
||||
|
||||
## 0.2.101-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend-legacy",
|
||||
"version": "0.2.101-next.2",
|
||||
"version": "0.2.101-next.3",
|
||||
"backstage": {
|
||||
"role": "backend"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/backend-openapi-utils
|
||||
|
||||
## 0.1.16-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.8.0-next.3
|
||||
- @backstage/errors@1.2.4
|
||||
|
||||
## 0.1.16-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-openapi-utils",
|
||||
"description": "OpenAPI typescript support.",
|
||||
"version": "0.1.16-next.2",
|
||||
"version": "0.1.16-next.3",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/backend-plugin-api
|
||||
|
||||
## 0.8.0-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ddde5fe: Fixed a type issue where plugin and modules depending on multiton services would not receive the correct type.
|
||||
- Updated dependencies
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-auth-node@0.5.0-next.3
|
||||
- @backstage/plugin-permission-common@0.8.1-next.1
|
||||
|
||||
## 0.8.0-next.2
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-plugin-api",
|
||||
"version": "0.8.0-next.2",
|
||||
"version": "0.8.0-next.3",
|
||||
"description": "Core API used by Backstage backend plugins",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/backend-tasks
|
||||
|
||||
## 0.5.28-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.8.0-next.3
|
||||
- @backstage/backend-common@0.23.4-next.3
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
|
||||
## 0.5.28-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-tasks",
|
||||
"description": "Common distributed task management library for Backstage backends",
|
||||
"version": "0.5.28-next.2",
|
||||
"version": "0.5.28-next.3",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/backend-test-utils
|
||||
|
||||
## 0.4.5-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.8.0-next.3
|
||||
- @backstage/backend-defaults@0.4.2-next.3
|
||||
- @backstage/backend-app-api@0.8.1-next.3
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-auth-node@0.5.0-next.3
|
||||
- @backstage/plugin-events-node@0.3.9-next.3
|
||||
|
||||
## 0.4.5-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-test-utils",
|
||||
"version": "0.4.5-next.2",
|
||||
"version": "0.4.5-next.3",
|
||||
"description": "Test helpers library for Backstage backends",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,42 @@
|
||||
# example-backend
|
||||
|
||||
## 0.0.29-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.3
|
||||
- @backstage/plugin-notifications-backend@0.3.4-next.3
|
||||
- @backstage/backend-plugin-api@0.8.0-next.3
|
||||
- @backstage/plugin-techdocs-backend@1.10.10-next.3
|
||||
- @backstage/backend-defaults@0.4.2-next.3
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/plugin-scaffolder-backend@1.23.1-next.3
|
||||
- @backstage/backend-tasks@0.5.28-next.3
|
||||
- @backstage/plugin-app-backend@0.3.72-next.3
|
||||
- @backstage/plugin-auth-backend@0.22.10-next.3
|
||||
- @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.3
|
||||
- @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.3
|
||||
- @backstage/plugin-auth-node@0.5.0-next.3
|
||||
- @backstage/plugin-catalog-backend@1.24.1-next.3
|
||||
- @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.3
|
||||
- @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.3
|
||||
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3
|
||||
- @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.3
|
||||
- @backstage/plugin-devtools-backend@0.3.9-next.3
|
||||
- @backstage/plugin-kubernetes-backend@0.18.4-next.3
|
||||
- @backstage/plugin-permission-backend@0.5.47-next.3
|
||||
- @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.3
|
||||
- @backstage/plugin-permission-common@0.8.1-next.1
|
||||
- @backstage/plugin-permission-node@0.8.1-next.3
|
||||
- @backstage/plugin-proxy-backend@0.5.4-next.3
|
||||
- @backstage/plugin-search-backend@1.5.15-next.3
|
||||
- @backstage/plugin-search-backend-module-catalog@0.1.29-next.3
|
||||
- @backstage/plugin-search-backend-module-explore@0.1.29-next.3
|
||||
- @backstage/plugin-search-backend-module-techdocs@0.1.28-next.3
|
||||
- @backstage/plugin-search-backend-node@1.2.28-next.3
|
||||
- @backstage/plugin-signals-backend@0.1.9-next.3
|
||||
|
||||
## 0.0.29-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend",
|
||||
"version": "0.0.29-next.2",
|
||||
"version": "0.0.29-next.3",
|
||||
"main": "dist/index.cjs.js",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/catalog-client
|
||||
|
||||
## 1.6.6-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/errors@1.2.4
|
||||
|
||||
## 1.6.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/catalog-client",
|
||||
"version": "1.6.5",
|
||||
"version": "1.6.6-next.0",
|
||||
"description": "An isomorphic client for the catalog backend",
|
||||
"backstage": {
|
||||
"role": "common-library"
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @backstage/catalog-model
|
||||
|
||||
## 1.6.0-next.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 34fa803: Introduce an optional spec.type attribute on the Domain and System entity kinds
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
|
||||
## 1.5.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/catalog-model",
|
||||
"version": "1.5.0",
|
||||
"version": "1.6.0-next.0",
|
||||
"description": "Types and validators that help describe the model of a Backstage Catalog",
|
||||
"backstage": {
|
||||
"role": "common-library"
|
||||
|
||||
@@ -154,7 +154,6 @@ export type PackageRole =
|
||||
| 'node-library'
|
||||
| 'common-library'
|
||||
| 'frontend-plugin'
|
||||
| 'frontend-extensions'
|
||||
| 'frontend-plugin-module'
|
||||
| 'backend-plugin'
|
||||
| 'backend-plugin-module';
|
||||
|
||||
@@ -53,11 +53,6 @@ const packageRoleInfos: PackageRoleInfo[] = [
|
||||
platform: 'web',
|
||||
output: ['types', 'esm'],
|
||||
},
|
||||
{
|
||||
role: 'frontend-extensions',
|
||||
platform: 'web',
|
||||
output: ['types', 'esm'],
|
||||
},
|
||||
{
|
||||
role: 'frontend-plugin-module',
|
||||
platform: 'web',
|
||||
|
||||
@@ -27,7 +27,6 @@ export type PackageRole =
|
||||
| 'node-library'
|
||||
| 'common-library'
|
||||
| 'frontend-plugin'
|
||||
| 'frontend-extensions'
|
||||
| 'frontend-plugin-module'
|
||||
| 'backend-plugin'
|
||||
| 'backend-plugin-module';
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
# @backstage/cli
|
||||
|
||||
## 0.27.0-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 6d898d8: Switched the `process` polyfill to use `require.resolve` for greater compatability.
|
||||
- 2ced236: Updated dependency `@module-federation/enhanced` to `0.3.1`
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/cli-node@0.2.7
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.9.0-next.2
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/eslint-plugin@0.1.8
|
||||
- @backstage/integration@1.14.0-next.0
|
||||
- @backstage/release-manifests@0.0.11
|
||||
- @backstage/types@1.1.1
|
||||
|
||||
## 0.27.0-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -200,7 +200,6 @@ function createConfigForRole(dir, role, extraConfig = {}) {
|
||||
case 'web-library':
|
||||
case 'frontend':
|
||||
case 'frontend-plugin':
|
||||
case 'frontend-extensions':
|
||||
case 'frontend-plugin-module':
|
||||
case 'frontend-dynamic-container':
|
||||
return createConfig(dir, {
|
||||
|
||||
@@ -54,7 +54,6 @@ function getRoleConfig(role) {
|
||||
case 'web-library':
|
||||
case 'common-library':
|
||||
case 'frontend-plugin':
|
||||
case 'frontend-extensions':
|
||||
case 'frontend-plugin-module':
|
||||
return { testEnvironment: require.resolve('jest-environment-jsdom') };
|
||||
case 'cli':
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/cli",
|
||||
"version": "0.27.0-next.3",
|
||||
"version": "0.27.0-next.4",
|
||||
"description": "CLI for developing Backstage plugins and apps",
|
||||
"backstage": {
|
||||
"role": "cli"
|
||||
@@ -53,7 +53,7 @@
|
||||
"@backstage/release-manifests": "workspace:^",
|
||||
"@backstage/types": "workspace:^",
|
||||
"@manypkg/get-packages": "^1.1.3",
|
||||
"@module-federation/enhanced": "^0.1.19",
|
||||
"@module-federation/enhanced": "^0.3.5",
|
||||
"@octokit/graphql": "^5.0.0",
|
||||
"@octokit/graphql-schema": "^13.7.0",
|
||||
"@octokit/oauth-app": "^4.2.0",
|
||||
|
||||
@@ -246,8 +246,6 @@ function guessPluginId(role: PackageRole, pkgName: string): string | undefined {
|
||||
case 'frontend':
|
||||
case 'frontend-plugin':
|
||||
return pkgName.match(/plugin-(.*)/)?.[1];
|
||||
case 'frontend-extensions':
|
||||
return undefined;
|
||||
case 'frontend-plugin-module':
|
||||
return pkgName.match(/plugin-(.*)-module-/)?.[1];
|
||||
case 'backend-plugin':
|
||||
@@ -366,7 +364,6 @@ export function fixPluginPackages(
|
||||
role === 'common-library' ||
|
||||
role === 'web-library' ||
|
||||
role === 'node-library' ||
|
||||
role === 'frontend-extensions' ||
|
||||
role === 'frontend-plugin-module' // TODO(Rugvip): Remove this once frontend modules are required to have a plugin ID
|
||||
) {
|
||||
return;
|
||||
|
||||
@@ -46,7 +46,6 @@ export async function command(opts: OptionValues): Promise<void> {
|
||||
});
|
||||
case 'web-library':
|
||||
case 'frontend-plugin':
|
||||
case 'frontend-extensions':
|
||||
case 'frontend-plugin-module':
|
||||
return startFrontend({ entry: 'dev/index', ...options });
|
||||
case 'frontend-dynamic-container' as PackageRole: // experimental
|
||||
|
||||
@@ -84,11 +84,9 @@ async function detectPackages(
|
||||
{ paths: [targetPath] },
|
||||
));
|
||||
if (
|
||||
[
|
||||
'frontend-plugin',
|
||||
'frontend-extensions',
|
||||
'frontend-plugin-module',
|
||||
].includes(depPackageJson.backstage?.role ?? '')
|
||||
['frontend-plugin', 'frontend-plugin-module'].includes(
|
||||
depPackageJson.backstage?.role ?? '',
|
||||
)
|
||||
) {
|
||||
// Include alpha entry point if available. If there's no default export it will be ignored
|
||||
const exp = depPackageJson.exports;
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/core-compat-api
|
||||
|
||||
## 0.2.8-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/frontend-plugin-api@0.7.0-next.3
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/version-bridge@1.0.8
|
||||
|
||||
## 0.2.8-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/core-compat-api",
|
||||
"version": "0.2.8-next.2",
|
||||
"version": "0.2.8-next.3",
|
||||
"backstage": {
|
||||
"role": "web-library"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/create-app
|
||||
|
||||
## 0.5.18-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- bfeba46: Included permission config and enabled it out of the box
|
||||
- Updated dependencies
|
||||
- @backstage/cli-common@0.1.14
|
||||
|
||||
## 0.5.18-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/create-app",
|
||||
"description": "A CLI that helps you create your own Backstage app",
|
||||
"version": "0.5.18-next.3",
|
||||
"version": "0.5.18-next.4",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/dev-utils
|
||||
|
||||
## 1.0.37-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/plugin-catalog-react@1.12.3-next.3
|
||||
- @backstage/app-defaults@1.5.10-next.2
|
||||
- @backstage/core-app-api@1.14.2-next.0
|
||||
- @backstage/core-components@0.14.10-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/integration-react@1.1.30-next.0
|
||||
- @backstage/theme@0.5.6
|
||||
|
||||
## 1.0.37-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/dev-utils",
|
||||
"version": "1.0.37-next.2",
|
||||
"version": "1.0.37-next.3",
|
||||
"description": "Utilities for developing Backstage plugins.",
|
||||
"backstage": {
|
||||
"role": "web-library"
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# e2e-test
|
||||
|
||||
## 0.2.19-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/create-app@0.5.18-next.4
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/errors@1.2.4
|
||||
|
||||
## 0.2.19-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "e2e-test",
|
||||
"description": "E2E test for verifying Backstage packages",
|
||||
"version": "0.2.19-next.3",
|
||||
"version": "0.2.19-next.4",
|
||||
"private": true,
|
||||
"backstage": {
|
||||
"role": "cli"
|
||||
|
||||
@@ -48,7 +48,6 @@ function getExpectedDepType(
|
||||
case 'common-library':
|
||||
case 'web-library':
|
||||
case 'frontend-plugin':
|
||||
case 'frontend-extensions':
|
||||
case 'frontend-plugin-module':
|
||||
case 'node-library':
|
||||
case 'backend-plugin':
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
# @backstage/frontend-app-api
|
||||
|
||||
## 0.7.5-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/frontend-plugin-api@0.7.0-next.3
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/core-app-api@1.14.2-next.0
|
||||
- @backstage/core-components@0.14.10-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/version-bridge@1.0.8
|
||||
|
||||
## 0.7.5-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/frontend-app-api",
|
||||
"version": "0.7.5-next.2",
|
||||
"version": "0.7.5-next.3",
|
||||
"backstage": {
|
||||
"role": "web-library"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,65 @@
|
||||
# @backstage/frontend-plugin-api
|
||||
|
||||
## 0.7.0-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 6f72c2b: Fixing issue with extension blueprints `inputs` merging.
|
||||
- 99abb6b: Support overriding of plugin extensions using the new `plugin.withOverrides` method.
|
||||
|
||||
```tsx
|
||||
import homePlugin from '@backstage/plugin-home';
|
||||
|
||||
export default homePlugin.withOverrides({
|
||||
extensions: [
|
||||
homePage.getExtension('page:home').override({
|
||||
*factory(originalFactory) {
|
||||
yield* originalFactory();
|
||||
yield coreExtensionData.reactElement(<h1>My custom home page</h1>);
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
- a65cfc8: Add support for accessing extensions definitions provided by a plugin via `plugin.getExtension(...)`. For this to work the extensions must be defined using the v2 format, typically using an extension blueprint.
|
||||
- 34f1b2a: Support merging of `inputs` in extension blueprints, but stop merging `output`. In addition, the original factory in extension blueprints now returns a data container that both provides access to the returned data, but can also be forwarded as output.
|
||||
- 2d21599: Added support for being able to override extension definitions.
|
||||
|
||||
```tsx
|
||||
const TestCard = EntityCardBlueprint.make({
|
||||
...
|
||||
});
|
||||
|
||||
TestCard.override({
|
||||
// override attachment points
|
||||
attachTo: { id: 'something-else', input: 'overridden' },
|
||||
// extend the config schema
|
||||
config: {
|
||||
schema: {
|
||||
newConfig: z => z.string().optional(),
|
||||
}
|
||||
},
|
||||
// override factory
|
||||
*factory(originalFactory, { inputs, config }){
|
||||
const originalOutput = originalFactory();
|
||||
|
||||
yield coreExentsionData.reactElement(
|
||||
<Wrapping>
|
||||
{originalOutput.get(coreExentsionData.reactElement)}
|
||||
</Wrapping>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.14.10-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/version-bridge@1.0.8
|
||||
|
||||
## 0.7.0-next.2
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -356,6 +356,10 @@ export interface BackstagePlugin<
|
||||
readonly id: string;
|
||||
// (undocumented)
|
||||
readonly routes: TRoutes;
|
||||
// (undocumented)
|
||||
withOverrides(options: {
|
||||
extensions: Array<ExtensionDefinition<any, any>>;
|
||||
}): BackstagePlugin<TRoutes, TExternalRoutes, TExtensionMap>;
|
||||
}
|
||||
|
||||
export { BackstageUserIdentity };
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/frontend-plugin-api",
|
||||
"version": "0.7.0-next.2",
|
||||
"version": "0.7.0-next.3",
|
||||
"backstage": {
|
||||
"role": "web-library"
|
||||
},
|
||||
|
||||
@@ -767,35 +767,37 @@ describe('createExtension', () => {
|
||||
opt: inputs.opt?.get(testDataRef1) ?? 'none',
|
||||
single: inputs.single.get(testDataRef1),
|
||||
singleOpt: inputs.single.get(testDataRef2) ?? 'none',
|
||||
multi: inputs.multi.map(i => i.get(testDataRef1)).join(','),
|
||||
multi: inputs.multi
|
||||
.map(i => `${i.node.spec.id}=${i.get(testDataRef1)}`)
|
||||
.join(','),
|
||||
}),
|
||||
];
|
||||
},
|
||||
});
|
||||
|
||||
const optExt = createExtension({
|
||||
name: 'opt',
|
||||
name: 'o',
|
||||
attachTo: { id: 'subject', input: 'opt' },
|
||||
output: [testDataRef1],
|
||||
factory: () => [testDataRef1('orig-opt')],
|
||||
});
|
||||
|
||||
const singleExt = createExtension({
|
||||
name: 'single',
|
||||
name: 's',
|
||||
attachTo: { id: 'subject', input: 'single' },
|
||||
output: [testDataRef1, testDataRef2.optional()],
|
||||
factory: () => [testDataRef1('orig-single')],
|
||||
});
|
||||
|
||||
const multi1Ext = createExtension({
|
||||
name: 'multi1',
|
||||
name: 'm1',
|
||||
attachTo: { id: 'subject', input: 'multi' },
|
||||
output: [testDataRef1],
|
||||
factory: () => [testDataRef1('orig-multi1')],
|
||||
});
|
||||
|
||||
const multi2Ext = createExtension({
|
||||
name: 'multi2',
|
||||
name: 'm2',
|
||||
attachTo: { id: 'subject', input: 'multi' },
|
||||
output: [testDataRef1],
|
||||
factory: () => [testDataRef1('orig-multi2')],
|
||||
@@ -812,7 +814,7 @@ describe('createExtension', () => {
|
||||
opt: 'orig-opt',
|
||||
single: 'orig-single',
|
||||
singleOpt: 'none',
|
||||
multi: 'orig-multi1,orig-multi2',
|
||||
multi: 'm1=orig-multi1,m2=orig-multi2',
|
||||
});
|
||||
|
||||
// All values provided
|
||||
@@ -839,7 +841,7 @@ describe('createExtension', () => {
|
||||
opt: 'opt',
|
||||
single: 'single',
|
||||
singleOpt: 'singleOpt',
|
||||
multi: 'multi1,multi2',
|
||||
multi: 'm1=multi1,m2=multi2',
|
||||
});
|
||||
|
||||
// Minimal values provided
|
||||
@@ -888,7 +890,7 @@ describe('createExtension', () => {
|
||||
opt: 'orig-opt',
|
||||
single: 'orig-single',
|
||||
singleOpt: 'none',
|
||||
multi: 'orig-multi1,orig-multi2',
|
||||
multi: 'm1=orig-multi1,m2=orig-multi2',
|
||||
});
|
||||
|
||||
// Forward inputs separately
|
||||
@@ -915,7 +917,61 @@ describe('createExtension', () => {
|
||||
opt: 'orig-opt',
|
||||
single: 'orig-single',
|
||||
singleOpt: 'none',
|
||||
multi: 'orig-multi1,orig-multi2',
|
||||
multi: 'm1=orig-multi1,m2=orig-multi2',
|
||||
});
|
||||
|
||||
// Reordering inputs
|
||||
expect(
|
||||
createExtensionTester(
|
||||
subject.override({
|
||||
factory(originalFactory, { inputs }) {
|
||||
return originalFactory({
|
||||
inputs: {
|
||||
opt: inputs.opt,
|
||||
single: inputs.single,
|
||||
multi: [inputs.multi[1], inputs.multi[0]],
|
||||
},
|
||||
});
|
||||
},
|
||||
}),
|
||||
)
|
||||
.add(optExt)
|
||||
.add(singleExt)
|
||||
.add(multi1Ext)
|
||||
.add(multi2Ext)
|
||||
.data(outputRef),
|
||||
).toEqual({
|
||||
opt: 'orig-opt',
|
||||
single: 'orig-single',
|
||||
singleOpt: 'none',
|
||||
multi: 'm2=orig-multi2,m1=orig-multi1',
|
||||
});
|
||||
|
||||
// Filter out inputs
|
||||
expect(
|
||||
createExtensionTester(
|
||||
subject.override({
|
||||
factory(originalFactory, { inputs }) {
|
||||
return originalFactory({
|
||||
inputs: {
|
||||
opt: inputs.opt,
|
||||
single: inputs.single,
|
||||
multi: inputs.multi.filter(i => i.node.spec.id.endsWith('2')),
|
||||
},
|
||||
});
|
||||
},
|
||||
}),
|
||||
)
|
||||
.add(optExt)
|
||||
.add(singleExt)
|
||||
.add(multi1Ext)
|
||||
.add(multi2Ext)
|
||||
.data(outputRef),
|
||||
).toEqual({
|
||||
opt: 'orig-opt',
|
||||
single: 'orig-single',
|
||||
singleOpt: 'none',
|
||||
multi: 'm2=orig-multi2',
|
||||
});
|
||||
|
||||
// Overriding based on original input
|
||||
@@ -946,7 +1002,7 @@ describe('createExtension', () => {
|
||||
opt: 'none',
|
||||
single: 'override-orig-single',
|
||||
singleOpt: 'new-singleOpt',
|
||||
multi: 'override-orig-multi1,override-orig-multi2',
|
||||
multi: 'm1=override-orig-multi1,m2=override-orig-multi2',
|
||||
});
|
||||
|
||||
// Mismatched input override length
|
||||
@@ -972,6 +1028,29 @@ describe('createExtension', () => {
|
||||
`"Failed to instantiate extension 'subject', override data provided for input 'multi' must match the length of the original inputs"`,
|
||||
);
|
||||
|
||||
// Mix forward and data override
|
||||
expect(() =>
|
||||
createExtensionTester(
|
||||
subject.override({
|
||||
factory(originalFactory, { inputs }) {
|
||||
return originalFactory({
|
||||
inputs: {
|
||||
...inputs,
|
||||
multi: [inputs.multi[0], [testDataRef1('multi2')]],
|
||||
},
|
||||
});
|
||||
},
|
||||
}),
|
||||
)
|
||||
.add(optExt)
|
||||
.add(singleExt)
|
||||
.add(multi1Ext)
|
||||
.add(multi2Ext)
|
||||
.data(outputRef),
|
||||
).toThrowErrorMatchingInlineSnapshot(
|
||||
`"Failed to instantiate extension 'subject', override data for input 'multi' may not mix forwarded inputs with data overrides"`,
|
||||
);
|
||||
|
||||
// Required input not provided
|
||||
expect(() =>
|
||||
createExtensionTester(
|
||||
|
||||
@@ -148,7 +148,28 @@ describe('createPlugin', () => {
|
||||
});
|
||||
expect(plugin).toBeDefined();
|
||||
|
||||
expect(plugin.getExtension('test/1')).toBe(Extension1);
|
||||
expect(plugin.getExtension('test/1')).toMatchInlineSnapshot(`
|
||||
{
|
||||
"$$type": "@backstage/ExtensionDefinition",
|
||||
"attachTo": {
|
||||
"id": "test/output",
|
||||
"input": "names",
|
||||
},
|
||||
"configSchema": undefined,
|
||||
"disabled": false,
|
||||
"factory": [Function],
|
||||
"inputs": {},
|
||||
"kind": undefined,
|
||||
"name": "1",
|
||||
"namespace": "test",
|
||||
"output": [
|
||||
[Function],
|
||||
],
|
||||
"override": [Function],
|
||||
"toString": [Function],
|
||||
"version": "v2",
|
||||
}
|
||||
`);
|
||||
// @ts-expect-error
|
||||
expect(plugin.getExtension('nonexistent')).toBeUndefined();
|
||||
|
||||
@@ -250,4 +271,68 @@ describe('createPlugin', () => {
|
||||
}),
|
||||
).toThrow("Plugin 'test' provided duplicate extensions: test/2, test/3");
|
||||
});
|
||||
|
||||
describe('overrides', () => {
|
||||
it('should return a plugin instance with the correct namespace', () => {
|
||||
const plugin = createPlugin({
|
||||
id: 'test',
|
||||
extensions: [Extension1, Extension2],
|
||||
});
|
||||
|
||||
expect(plugin.getExtension('test/1')).toMatchInlineSnapshot(`
|
||||
{
|
||||
"$$type": "@backstage/ExtensionDefinition",
|
||||
"attachTo": {
|
||||
"id": "test/output",
|
||||
"input": "names",
|
||||
},
|
||||
"configSchema": undefined,
|
||||
"disabled": false,
|
||||
"factory": [Function],
|
||||
"inputs": {},
|
||||
"kind": undefined,
|
||||
"name": "1",
|
||||
"namespace": "test",
|
||||
"output": [
|
||||
[Function],
|
||||
],
|
||||
"override": [Function],
|
||||
"toString": [Function],
|
||||
"version": "v2",
|
||||
}
|
||||
`);
|
||||
});
|
||||
|
||||
it('should allow overriding extensions that have a matching ID, while keeping old extensions that do not have overlapping IDs', async () => {
|
||||
const plugin = createPlugin({
|
||||
id: 'test',
|
||||
extensions: [Extension1, Extension2, outputExtension],
|
||||
});
|
||||
|
||||
await renderWithEffects(
|
||||
createTestAppRoot({
|
||||
features: [
|
||||
plugin.withOverrides({
|
||||
extensions: [
|
||||
plugin.getExtension('test/1').override({
|
||||
factory() {
|
||||
return [nameExtensionDataRef('overridden')];
|
||||
},
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
config: {
|
||||
app: {
|
||||
extensions: [{ 'app/root': false }],
|
||||
},
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
await expect(
|
||||
screen.findByText('Names: extension-2, overridden'),
|
||||
).resolves.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -78,7 +78,7 @@ export function createPlugin<
|
||||
for (const def of options.extensions ?? []) {
|
||||
const ext = resolveExtensionDefinition(def, { namespace: options.id });
|
||||
extensions.push(ext);
|
||||
extensionDefinitionsById.set(ext.id, def);
|
||||
extensionDefinitionsById.set(ext.id, { ...def, namespace: options.id });
|
||||
}
|
||||
|
||||
if (extensions.length !== extensionDefinitionsById.size) {
|
||||
@@ -110,6 +110,23 @@ export function createPlugin<
|
||||
toString() {
|
||||
return `Plugin{id=${options.id}}`;
|
||||
},
|
||||
withOverrides(overrides) {
|
||||
const overriddenExtensionIds = new Set(
|
||||
overrides.extensions.map(
|
||||
e => resolveExtensionDefinition(e, { namespace: options.id }).id,
|
||||
),
|
||||
);
|
||||
const nonOverriddenExtensions = (options.extensions ?? []).filter(
|
||||
e =>
|
||||
!overriddenExtensionIds.has(
|
||||
resolveExtensionDefinition(e, { namespace: options.id }).id,
|
||||
),
|
||||
);
|
||||
return createPlugin({
|
||||
...options,
|
||||
extensions: [...nonOverriddenExtensions, ...overrides.extensions],
|
||||
});
|
||||
},
|
||||
} as InternalBackstagePlugin<TRoutes, TExternalRoutes>;
|
||||
}
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ export function resolveInputOverrides(
|
||||
);
|
||||
}
|
||||
newInputs[name] = Object.assign(providedContainer, {
|
||||
name: (originalInput as ResolvedExtensionInput<any>).node,
|
||||
node: (originalInput as ResolvedExtensionInput<any>).node,
|
||||
}) as any;
|
||||
}
|
||||
} else {
|
||||
@@ -139,23 +139,40 @@ export function resolveInputOverrides(
|
||||
`override data provided for input '${name}' must be an array`,
|
||||
);
|
||||
}
|
||||
if (
|
||||
originalInput.length !== providedData.length &&
|
||||
providedData.length > 0
|
||||
) {
|
||||
throw new Error(
|
||||
`override data provided for input '${name}' must match the length of the original inputs`,
|
||||
);
|
||||
|
||||
// Regular inputs can be overridden in two different ways:
|
||||
// 1) Forward a subset of the original inputs in a new order
|
||||
// 2) Provide new data for each original input
|
||||
|
||||
// First check if all inputs are being removed
|
||||
if (providedData.length === 0) {
|
||||
newInputs[name] = [];
|
||||
} else {
|
||||
// Check how many of the provided data items have a node property, i.e. is a forwarded input
|
||||
const withNodesCount = providedData.filter(d => 'node' in d).length;
|
||||
if (withNodesCount === 0) {
|
||||
if (originalInput.length !== providedData.length) {
|
||||
throw new Error(
|
||||
`override data provided for input '${name}' must match the length of the original inputs`,
|
||||
);
|
||||
}
|
||||
newInputs[name] = providedData.map((data, i) => {
|
||||
const providedContainer = createExtensionDataContainer(
|
||||
data as Iterable<ExtensionDataValue<any, any>>,
|
||||
declaredInput.extensionData,
|
||||
);
|
||||
return Object.assign(providedContainer, {
|
||||
node: (originalInput[i] as ResolvedExtensionInput<any>).node,
|
||||
}) as any;
|
||||
});
|
||||
} else if (withNodesCount === providedData.length) {
|
||||
newInputs[name] = providedData as any;
|
||||
} else {
|
||||
throw new Error(
|
||||
`override data for input '${name}' may not mix forwarded inputs with data overrides`,
|
||||
);
|
||||
}
|
||||
}
|
||||
newInputs[name] = providedData.map((data, i) => {
|
||||
const providedContainer = createExtensionDataContainer(
|
||||
data as Iterable<ExtensionDataValue<any, any>>,
|
||||
declaredInput.extensionData,
|
||||
);
|
||||
return Object.assign(providedContainer, {
|
||||
name: (originalInput[i] as ResolvedExtensionInput<any>).node,
|
||||
}) as any;
|
||||
});
|
||||
}
|
||||
}
|
||||
return newInputs;
|
||||
|
||||
@@ -51,6 +51,9 @@ export interface BackstagePlugin<
|
||||
readonly routes: TRoutes;
|
||||
readonly externalRoutes: TExternalRoutes;
|
||||
getExtension<TId extends keyof TExtensionMap>(id: TId): TExtensionMap[TId];
|
||||
withOverrides(options: {
|
||||
extensions: Array<ExtensionDefinition<any, any>>;
|
||||
}): BackstagePlugin<TRoutes, TExternalRoutes, TExtensionMap>;
|
||||
}
|
||||
|
||||
/** @public */
|
||||
|
||||
@@ -1,5 +1,53 @@
|
||||
# @backstage/frontend-test-utils
|
||||
|
||||
## 0.1.12-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 2d21599: Added support for being able to override extension definitions.
|
||||
|
||||
```tsx
|
||||
const TestCard = EntityCardBlueprint.make({
|
||||
...
|
||||
});
|
||||
|
||||
TestCard.override({
|
||||
// override attachment points
|
||||
attachTo: { id: 'something-else', input: 'overridden' },
|
||||
// extend the config schema
|
||||
config: {
|
||||
schema: {
|
||||
newConfig: z => z.string().optional(),
|
||||
}
|
||||
},
|
||||
// override factory
|
||||
*factory(originalFactory, { inputs, config }){
|
||||
const originalOutput = originalFactory();
|
||||
|
||||
yield coreExentsionData.reactElement(
|
||||
<Wrapping>
|
||||
{originalOutput.get(coreExentsionData.reactElement)}
|
||||
</Wrapping>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
- 264e10f: Deprecate existing `ExtensionCreators` in favour of their new Blueprint counterparts.
|
||||
- 264e10f: Refactor `.make` method on Blueprints into two different methods, `.make` and `.makeWithOverrides`.
|
||||
|
||||
When using `createExtensionBlueprint` you can define parameters for the factory function, if you wish to take advantage of these parameters you should use `.make` when creating an extension instance of a Blueprint. If you wish to override more things other than the standard `attachTo`, `name`, `namespace` then you should use `.makeWithOverrides` instead.
|
||||
|
||||
`.make` is reserved for simple creation of extension instances from Blueprints using higher level parameters, whereas `.makeWithOverrides` is lower level and you have more control over the final extension.
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/frontend-plugin-api@0.7.0-next.3
|
||||
- @backstage/frontend-app-api@0.7.5-next.3
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/test-utils@1.5.10-next.2
|
||||
- @backstage/types@1.1.1
|
||||
|
||||
## 0.1.12-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/frontend-test-utils",
|
||||
"version": "0.1.12-next.2",
|
||||
"version": "0.1.12-next.3",
|
||||
"backstage": {
|
||||
"role": "web-library"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @backstage/repo-tools
|
||||
|
||||
## 0.9.5-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.8.0-next.3
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/cli-node@0.2.7
|
||||
- @backstage/config-loader@1.9.0-next.2
|
||||
- @backstage/errors@1.2.4
|
||||
|
||||
## 0.9.5-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/repo-tools",
|
||||
"description": "CLI for Backstage repo tooling ",
|
||||
"version": "0.9.5-next.2",
|
||||
"version": "0.9.5-next.3",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
# techdocs-cli-embedded-app
|
||||
|
||||
## 0.2.99-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/cli@0.27.0-next.4
|
||||
- @backstage/plugin-techdocs@1.10.8-next.3
|
||||
- @backstage/plugin-catalog@1.22.0-next.3
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/app-defaults@1.5.10-next.2
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/core-app-api@1.14.2-next.0
|
||||
- @backstage/core-components@0.14.10-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/integration-react@1.1.30-next.0
|
||||
- @backstage/test-utils@1.5.10-next.2
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/plugin-techdocs-react@1.2.7-next.1
|
||||
|
||||
## 0.2.99-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "techdocs-cli-embedded-app",
|
||||
"version": "0.2.99-next.3",
|
||||
"version": "0.2.99-next.4",
|
||||
"private": true,
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @techdocs/cli
|
||||
|
||||
## 1.8.17-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-defaults@0.4.2-next.3
|
||||
- @backstage/plugin-techdocs-node@1.12.9-next.3
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/config@1.2.0
|
||||
|
||||
## 1.8.17-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@techdocs/cli",
|
||||
"description": "Utility CLI for managing TechDocs sites in Backstage.",
|
||||
"version": "1.8.17-next.2",
|
||||
"version": "1.8.17-next.3",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
# @backstage/plugin-api-docs
|
||||
|
||||
## 0.11.8-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 6582799: Add `tableOptions` to all tables and additionally `title` to API tables.
|
||||
- Updated dependencies
|
||||
- @backstage/frontend-plugin-api@0.7.0-next.3
|
||||
- @backstage/plugin-catalog@1.22.0-next.3
|
||||
- @backstage/catalog-model@1.6.0-next.0
|
||||
- @backstage/core-compat-api@0.2.8-next.3
|
||||
- @backstage/plugin-catalog-react@1.12.3-next.3
|
||||
- @backstage/core-components@0.14.10-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/plugin-catalog-common@1.0.26-next.2
|
||||
- @backstage/plugin-permission-react@0.4.25-next.1
|
||||
|
||||
## 0.11.8-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -16,6 +16,7 @@ import { JSX as JSX_2 } from 'react';
|
||||
import { default as React_2 } from 'react';
|
||||
import { RouteRef } from '@backstage/core-plugin-api';
|
||||
import { TableColumn } from '@backstage/core-components';
|
||||
import { TableOptions } from '@backstage/core-components';
|
||||
import { TableProps } from '@backstage/core-components';
|
||||
import { UserListFilterKind } from '@backstage/plugin-catalog-react';
|
||||
|
||||
@@ -88,7 +89,9 @@ export type AsyncApiDefinitionWidgetProps = {
|
||||
// @public (undocumented)
|
||||
export const ConsumedApisCard: (props: {
|
||||
variant?: InfoCardVariants;
|
||||
title?: string;
|
||||
columns?: TableColumn<ApiEntity>[];
|
||||
tableOptions?: TableOptions;
|
||||
}) => React_2.JSX.Element;
|
||||
|
||||
// @public (undocumented)
|
||||
@@ -118,7 +121,9 @@ export const EntityApiDefinitionCard: () => JSX_2.Element;
|
||||
// @public (undocumented)
|
||||
export const EntityConsumedApisCard: (props: {
|
||||
variant?: InfoCardVariants | undefined;
|
||||
title?: string | undefined;
|
||||
columns?: TableColumn<ApiEntity>[] | undefined;
|
||||
tableOptions?: TableOptions<{}> | undefined;
|
||||
}) => JSX_2.Element;
|
||||
|
||||
// @public (undocumented)
|
||||
@@ -129,13 +134,17 @@ export const EntityConsumingComponentsCard: (props: {
|
||||
// @public (undocumented)
|
||||
export const EntityHasApisCard: (props: {
|
||||
variant?: InfoCardVariants | undefined;
|
||||
title?: string | undefined;
|
||||
columns?: TableColumn<ApiEntity>[] | undefined;
|
||||
tableOptions?: TableOptions<{}> | undefined;
|
||||
}) => JSX_2.Element;
|
||||
|
||||
// @public (undocumented)
|
||||
export const EntityProvidedApisCard: (props: {
|
||||
variant?: InfoCardVariants | undefined;
|
||||
title?: string | undefined;
|
||||
columns?: TableColumn<ApiEntity>[] | undefined;
|
||||
tableOptions?: TableOptions<{}> | undefined;
|
||||
}) => JSX_2.Element;
|
||||
|
||||
// @public (undocumented)
|
||||
@@ -156,7 +165,9 @@ export type GraphQlDefinitionWidgetProps = {
|
||||
// @public (undocumented)
|
||||
export const HasApisCard: (props: {
|
||||
variant?: InfoCardVariants;
|
||||
title?: string;
|
||||
columns?: TableColumn<ApiEntity>[];
|
||||
tableOptions?: TableOptions;
|
||||
}) => React_2.JSX.Element;
|
||||
|
||||
// @public (undocumented)
|
||||
@@ -185,7 +196,9 @@ export type PlainApiDefinitionWidgetProps = {
|
||||
// @public (undocumented)
|
||||
export const ProvidedApisCard: (props: {
|
||||
variant?: InfoCardVariants;
|
||||
title?: string;
|
||||
columns?: TableColumn<ApiEntity>[];
|
||||
tableOptions?: TableOptions;
|
||||
}) => React_2.JSX.Element;
|
||||
|
||||
// @public (undocumented)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-api-docs",
|
||||
"version": "0.11.8-next.2",
|
||||
"version": "0.11.8-next.3",
|
||||
"description": "A Backstage plugin that helps represent API entities in the frontend",
|
||||
"backstage": {
|
||||
"role": "frontend-plugin",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user