-
+
);
};
@@ -44,13 +37,13 @@ export const HeaderRow = ({ children }: { children: React.ReactNode }) => {
};
export const HeaderCell = ({ children }: { children: React.ReactNode }) => {
- return
{children} | ;
+ return
{children} | ;
};
export const Row = ({ children }: { children: React.ReactNode }) => {
- return
{children}
;
+ return
{children}
;
};
export const Cell = ({ children }: { children: React.ReactNode }) => {
- return
{children} | ;
+ return
{children} | ;
};
diff --git a/packages/canon/docs/components/Table/index.ts b/packages/canon/docs/components/Table/index.ts
new file mode 100644
index 0000000000..7419aa83a8
--- /dev/null
+++ b/packages/canon/docs/components/Table/index.ts
@@ -0,0 +1,16 @@
+/*
+ * 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 { Root, Header, Body, Row, Cell, HeaderRow, HeaderCell } from './Table';
diff --git a/packages/canon/docs/components/Table/styles.css b/packages/canon/docs/components/Table/styles.css
new file mode 100644
index 0000000000..a8c35d3978
--- /dev/null
+++ b/packages/canon/docs/components/Table/styles.css
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+.table-wrapper {
+ border: 1px solid #e7e7e7;
+ border-radius: 4px;
+ overflow: hidden;
+
+ & .table {
+ width: 100%;
+ margin: 0 !important;
+ padding: 0 !important;
+ border-spacing: 0px;
+ border-collapse: collapse;
+ }
+
+ & .table-cell {
+ padding: 12px 16px !important;
+ border: none !important;
+ text-align: left;
+ background-color: white !important;
+ font-family: 'Geist', sans-serif;
+ font-size: 16px;
+ font-weight: 300;
+
+ & p {
+ margin: 0;
+ }
+ }
+
+ & .table-header-cell {
+ background-color: #f5f5f5 !important;
+ border-bottom: 1px solid #e7e7e7 !important;
+ font-weight: 500;
+ font-size: 14px;
+ }
+
+ & .table-row {
+ border: none;
+ border-bottom: 1px solid #e7e7e7;
+ &:last-child {
+ border-bottom: none;
+ }
+ }
+
+ & .table-chip {
+ display: inline-block;
+ font-size: 14px !important;
+ border: 1px solid #e7e7e7;
+ border-radius: 6px;
+ padding: 0px 6px;
+ height: 24px;
+ }
+
+ & .table-type {
+ display: flex;
+ flex-wrap: wrap;
+ flex-direction: row;
+ gap: 8px;
+ }
+}
diff --git a/packages/canon/docs/components/Table/table.css.ts b/packages/canon/docs/components/Table/table.css.ts
deleted file mode 100644
index b01373ee04..0000000000
--- a/packages/canon/docs/components/Table/table.css.ts
+++ /dev/null
@@ -1,83 +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 { style, globalStyle } from '@vanilla-extract/css';
-
-export const wrapperStyles = style({
- border: '1px solid #e7e7e7',
- borderRadius: '4px',
- overflow: 'hidden',
-});
-
-export const tableStyles = style({
- width: '100%',
- margin: '0 !important',
- padding: '0 !important',
- borderSpacing: '0px',
- borderCollapse: 'collapse',
-});
-
-export const cellStyles = style({
- padding: '12px 16px !important',
- border: 'none !important',
- textAlign: 'left',
- backgroundColor: 'white !important',
- fontFamily: '"Geist", sans-serif',
- fontSize: '16px',
- fontWeight: 300,
-});
-
-// Apply global styles to
elements inside cellStyles
-globalStyle(`${cellStyles} p`, {
- margin: '0',
-});
-
-export const headerRowStyles = style({
- borderBottom: '1px solid #e7e7e7',
-});
-
-export const headerCellStyles = style({
- backgroundColor: '#f5f5f5 !important',
- borderBottom: '1px solid #e7e7e7 !important',
- fontWeight: 500,
- fontSize: '14px',
-});
-
-export const rowStyles = style({
- border: 'none',
- borderBottom: '1px solid #e7e7e7',
- selectors: {
- '&:last-child': {
- borderBottom: 'none',
- },
- },
-});
-
-export const chipStyles = style({
- display: 'inline-block',
- fontSize: '14px !important',
- border: '1px solid #e7e7e7',
- borderRadius: '6px',
- padding: '0px 6px',
- height: '24px',
-});
-
-export const typeStyles = style({
- display: 'flex',
- flexWrap: 'wrap',
- flexDirection: 'row',
- gap: '8px',
-});
diff --git a/packages/canon/docs/components/Text/index.tsx b/packages/canon/docs/components/Text/Text.tsx
similarity index 90%
rename from packages/canon/docs/components/Text/index.tsx
rename to packages/canon/docs/components/Text/Text.tsx
index be882c0a81..9f3dd6ce90 100644
--- a/packages/canon/docs/components/Text/index.tsx
+++ b/packages/canon/docs/components/Text/Text.tsx
@@ -15,7 +15,6 @@
*/
import React from 'react';
-import { textStyles } from './text.css';
export const Text = ({
children,
@@ -25,7 +24,7 @@ export const Text = ({
style?: React.CSSProperties;
}) => {
return (
-
+
{children}
);
diff --git a/packages/canon/docs/components/Text/index.ts b/packages/canon/docs/components/Text/index.ts
new file mode 100644
index 0000000000..873fca2c76
--- /dev/null
+++ b/packages/canon/docs/components/Text/index.ts
@@ -0,0 +1,16 @@
+/*
+ * 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 { Text } from './Text';
diff --git a/packages/canon/docs/components/Text/styles.css b/packages/canon/docs/components/Text/styles.css
new file mode 100644
index 0000000000..cbb2b88edb
--- /dev/null
+++ b/packages/canon/docs/components/Text/styles.css
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+
+.text {
+ font-family: 'Geist', sans-serif;
+ font-size: 16px;
+ line-height: 28px;
+ margin: 0;
+ font-weight: 300;
+ margin-bottom: 16px;
+
+ & p {
+ font-family: 'Geist', sans-serif;
+ font-size: 16px;
+ line-height: 28px;
+ margin: 0;
+ font-weight: 300;
+ }
+}
diff --git a/packages/canon/docs/components/Title/index.tsx b/packages/canon/docs/components/Title/Title.tsx
similarity index 92%
rename from packages/canon/docs/components/Title/index.tsx
rename to packages/canon/docs/components/Title/Title.tsx
index 13e5b964bb..056ccfc14d 100644
--- a/packages/canon/docs/components/Title/index.tsx
+++ b/packages/canon/docs/components/Title/Title.tsx
@@ -15,7 +15,6 @@
*/
import React from 'react';
-import { titleStyles } from './title.css';
export const Title = ({
children,
@@ -32,7 +31,7 @@ export const Title = ({
if (type === 'h3') Component = 'h3';
return React.createElement(Component, {
- className: titleStyles({ type }),
+ className: `title ${type}`,
style,
children,
});
diff --git a/packages/canon/docs/components/Title/index.ts b/packages/canon/docs/components/Title/index.ts
new file mode 100644
index 0000000000..998dc81882
--- /dev/null
+++ b/packages/canon/docs/components/Title/index.ts
@@ -0,0 +1,16 @@
+/*
+ * 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 { Title } from './Title';
diff --git a/packages/canon/docs/components/Title/styles.css b/packages/canon/docs/components/Title/styles.css
new file mode 100644
index 0000000000..a8d00e2af5
--- /dev/null
+++ b/packages/canon/docs/components/Title/styles.css
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+.title {
+ font-family: 'Geist', sans-serif;
+ margin: 0;
+ font-weight: 500;
+ border: none;
+
+ &.h1 {
+ font-size: 36px;
+ line-height: 44px;
+ margin-bottom: 8px;
+ margin-top: 0px;
+ }
+
+ &.h2 {
+ font-size: 24px;
+ line-height: 32px;
+ margin-bottom: 12px;
+ margin-top: 52px;
+ }
+
+ &.h3 {
+ font-size: 20px;
+ line-height: 28px;
+ margin-bottom: 12px;
+ margin-top: 40px;
+ }
+}
diff --git a/packages/canon/docs/components/Title/title.css.ts b/packages/canon/docs/components/Title/title.css.ts
deleted file mode 100644
index 6618ad80be..0000000000
--- a/packages/canon/docs/components/Title/title.css.ts
+++ /dev/null
@@ -1,48 +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 { recipe } from '@vanilla-extract/recipes';
-
-export const titleStyles = recipe({
- base: {
- fontFamily: '"Geist", sans-serif',
- margin: '0',
- fontWeight: 500,
- border: 'none',
- },
- variants: {
- type: {
- h1: {
- fontSize: '36px',
- lineHeight: '44px',
- marginBottom: '8px',
- marginTop: '0px',
- },
- h2: {
- fontSize: '24px',
- lineHeight: '32px',
- marginBottom: '12px',
- marginTop: '52px',
- },
- h3: {
- fontSize: '20px',
- lineHeight: '28px',
- marginBottom: '12px',
- marginTop: '40px',
- },
- },
- },
-});
diff --git a/packages/canon/docs/components/index.ts b/packages/canon/docs/components/index.ts
index 7ad07bec6a..0e5ff2e325 100644
--- a/packages/canon/docs/components/index.ts
+++ b/packages/canon/docs/components/index.ts
@@ -14,13 +14,14 @@
* limitations under the License.
*/
+export * from './Banner';
export * from './Chip';
-export * from './Table';
-export * from './Title';
-export * from './Text';
export * from './Columns';
export * from './ComponentStatus';
-export * from './LayoutComponents';
-export * from './Banner';
export * from './IconLibrary';
+export * from './LayoutComponents';
+export * from './PropsTable';
export * from './Roadmap';
+export * from './Table';
+export * from './Text';
+export * from './Title';
diff --git a/packages/canon/docs/components/styles.css b/packages/canon/docs/components/styles.css
index 698085ad19..670b0c3046 100644
--- a/packages/canon/docs/components/styles.css
+++ b/packages/canon/docs/components/styles.css
@@ -1,2 +1,10 @@
+@import './Banner/styles.css';
+@import './Chip/styles.css';
+@import './Columns/styles.css';
+@import './ComponentStatus/styles.css';
@import './IconLibrary/styles.css';
+@import './LayoutComponents/styles.css';
@import './Roadmap/styles.css';
+@import './Table/styles.css';
+@import './Text/styles.css';
+@import './Title/styles.css';
diff --git a/packages/canon/package.json b/packages/canon/package.json
index c8a8f79a6f..7bfc717b74 100644
--- a/packages/canon/package.json
+++ b/packages/canon/package.json
@@ -39,9 +39,6 @@
"dependencies": {
"@base_ui/react": "^1.0.0-alpha.3",
"@remixicon/react": "^4.5.0",
- "@vanilla-extract/css": "^1.16.0",
- "@vanilla-extract/dynamic": "^2.1.2",
- "@vanilla-extract/recipes": "^0.5.5",
"@vanilla-extract/sprinkles": "^1.6.3"
},
"devDependencies": {
diff --git a/packages/canon/report.api.md b/packages/canon/report.api.md
index c27b8da09b..b314020d81 100644
--- a/packages/canon/report.api.md
+++ b/packages/canon/report.api.md
@@ -129,6 +129,35 @@ export interface ButtonProps {
variant?: 'primary' | 'secondary' | 'tertiary';
}
+// @public (undocumented)
+export const Checkbox: React_2.ForwardRefExoticComponent<
+ CheckboxProps & React_2.RefAttributes
+>;
+
+// @public (undocumented)
+export interface CheckboxProps {
+ // (undocumented)
+ checked?: boolean;
+ // (undocumented)
+ className?: string;
+ // (undocumented)
+ defaultChecked?: boolean;
+ // (undocumented)
+ disabled?: boolean;
+ // (undocumented)
+ label?: string;
+ // (undocumented)
+ name?: string;
+ // (undocumented)
+ onChange?: (checked: boolean) => void;
+ // (undocumented)
+ required?: boolean;
+ // (undocumented)
+ style?: React.CSSProperties;
+ // (undocumented)
+ value?: string;
+}
+
// @public (undocumented)
export type Color =
| 'primary'
@@ -237,7 +266,10 @@ export interface GridProps extends SpaceProps, ColorProps {
}
// @public (undocumented)
-export const Icon: ({ name }: { name: IconNames }) => React_2.JSX.Element;
+export const Icon: (props: {
+ name: IconNames;
+ size?: number;
+}) => React_2.JSX.Element;
// @public (undocumented)
export type IconMap = Partial>;
@@ -252,6 +284,7 @@ export type IconNames =
| 'arrowLeftCircle'
| 'arrowRightCircle'
| 'arrowUpCircle'
+ | 'check'
| 'chevronDown'
| 'chevronLeft'
| 'chevronRight'
diff --git a/packages/canon/src/components/Box/Box.tsx b/packages/canon/src/components/Box/Box.tsx
index a470c0584d..ecf138f1ce 100644
--- a/packages/canon/src/components/Box/Box.tsx
+++ b/packages/canon/src/components/Box/Box.tsx
@@ -16,7 +16,6 @@
import { createElement, forwardRef } from 'react';
import { boxSprinkles } from './sprinkles.css';
-import { base } from './box.css';
import { BoxProps } from './types';
/** @public */
@@ -27,7 +26,7 @@ export const Box = forwardRef((props, ref) => {
const sprinklesClassName = boxSprinkles(restProps);
// Combine the base class name, the sprinkles class name, and any additional class names
- const classNames = [base, sprinklesClassName, className]
+ const classNames = ['box', sprinklesClassName, className]
.filter(Boolean)
.join(' ');
diff --git a/packages/canon/src/components/Box/Docs.mdx b/packages/canon/src/components/Box/Docs.mdx
index 11cc53b148..a03c6d43d3 100644
--- a/packages/canon/src/components/Box/Docs.mdx
+++ b/packages/canon/src/components/Box/Docs.mdx
@@ -2,7 +2,7 @@ import { Meta, Unstyled, Source } from '@storybook/blocks';
import * as BoxStories from './Box.stories';
import { Title, Text } from '../../../docs/components';
import { Padding } from './docs/padding';
-import { PropsTable, getBoxProps } from '../../../docs/components/PropsTable';
+import { PropsTable, getProps } from '../../../docs/components';
import { boxProperties } from './sprinkles.css';
import { spacingProperties } from '../../layout/sprinkles.css';
@@ -29,7 +29,7 @@ import { spacingProperties } from '../../layout/sprinkles.css';
-
+
Examples
Here are some examples of how you can use the Box component.
diff --git a/packages/canon/src/components/Box/styles.css b/packages/canon/src/components/Box/styles.css
new file mode 100644
index 0000000000..75fd0dd493
--- /dev/null
+++ b/packages/canon/src/components/Box/styles.css
@@ -0,0 +1,4 @@
+.box {
+ font-family: 'var(--canon-font-regular)';
+ color: 'var(--canon-text-primary)';
+}
diff --git a/packages/canon/src/components/Button/Button.stories.tsx b/packages/canon/src/components/Button/Button.stories.tsx
index fe3b1d58f6..6cab1cd1ba 100644
--- a/packages/canon/src/components/Button/Button.stories.tsx
+++ b/packages/canon/src/components/Button/Button.stories.tsx
@@ -26,7 +26,6 @@ const meta = {
parameters: {
layout: 'centered',
},
- tags: ['autodocs'],
argTypes: {
size: {
control: 'select',
diff --git a/packages/canon/src/components/Button/Docs.mdx b/packages/canon/src/components/Button/Docs.mdx
new file mode 100644
index 0000000000..4ddce0c982
--- /dev/null
+++ b/packages/canon/src/components/Button/Docs.mdx
@@ -0,0 +1,50 @@
+import { Canvas, Meta, Unstyled, Source } from '@storybook/blocks';
+import * as ButtonStories from './Button.stories';
+import { Title, Text } from '../../../docs/components';
+import { PropsTable } from '../../../docs/components/PropsTable/PropsTable';
+
+
+
+
+
+Button
+A button component that can be used to trigger actions.
+
+
+
+
+
+
+ API reference
+
+
+
+
+
diff --git a/packages/canon/src/components/Button/styles.css b/packages/canon/src/components/Button/styles.css
index aaf1cae8bf..01f917c4b1 100644
--- a/packages/canon/src/components/Button/styles.css
+++ b/packages/canon/src/components/Button/styles.css
@@ -36,18 +36,18 @@
.button.primary:hover {
background-color: transparent;
- box-shadow: 0 0 0 1px var(--canon-outline-focus);
+ box-shadow: inset 0 0 0 1px var(--canon-outline-focus);
color: var(--canon-text-primary);
}
.button.secondary {
background-color: transparent;
- box-shadow: 0 0 0 1px var(--canon-outline);
+ box-shadow: inset 0 0 0 1px var(--canon-outline);
color: var(--canon-text-primary);
}
.button.secondary:hover {
- box-shadow: 0 0 0 1px var(--canon-outline-hover);
+ box-shadow: inset 0 0 0 1px var(--canon-outline-hover);
}
.button.tertiary {
diff --git a/packages/canon/docs/components/Text/text.css.ts b/packages/canon/src/components/Checkbox/Checkbox.stories.tsx
similarity index 60%
rename from packages/canon/docs/components/Text/text.css.ts
rename to packages/canon/src/components/Checkbox/Checkbox.stories.tsx
index fbbc427362..ffd874ffe7 100644
--- a/packages/canon/docs/components/Text/text.css.ts
+++ b/packages/canon/src/components/Checkbox/Checkbox.stories.tsx
@@ -14,21 +14,22 @@
* limitations under the License.
*/
-import { globalStyle, style } from '@vanilla-extract/css';
+import type { Meta, StoryObj } from '@storybook/react';
+import { Checkbox } from './Checkbox';
-export const textStyles = style({
- fontFamily: '"Geist", sans-serif',
- fontSize: '16px',
- lineHeight: '28px',
- margin: '0',
- fontWeight: 300,
- marginBottom: '16px',
-});
+const meta = {
+ title: 'Components/Checkbox',
+ component: Checkbox,
+ parameters: {
+ layout: 'centered',
+ },
+} satisfies Meta;
-globalStyle(`${textStyles} p`, {
- fontFamily: '"Geist", sans-serif',
- fontSize: '16px',
- lineHeight: '28px',
- margin: '0',
- fontWeight: 300,
-});
+export default meta;
+type Story = StoryObj;
+
+export const Primary: Story = {
+ args: {
+ label: 'Accept terms and conditions',
+ },
+};
diff --git a/packages/canon/src/components/Checkbox/Checkbox.tsx b/packages/canon/src/components/Checkbox/Checkbox.tsx
new file mode 100644
index 0000000000..3021032421
--- /dev/null
+++ b/packages/canon/src/components/Checkbox/Checkbox.tsx
@@ -0,0 +1,64 @@
+/*
+ * 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 { CheckboxRoot, CheckboxIndicator } from '@base_ui/react';
+import { Icon } from '@backstage/canon';
+import type { CheckboxProps } from './types';
+
+/** @public */
+export const Checkbox = React.forwardRef(
+ (props, ref) => {
+ const {
+ label,
+ checked,
+ onChange,
+ disabled,
+ required,
+ className,
+ name,
+ value,
+ style,
+ } = props;
+
+ const checkboxElement = (
+
+
+
+
+
+ );
+
+ return label ? (
+
+ ) : (
+ checkboxElement
+ );
+ },
+);
diff --git a/packages/canon/src/components/Checkbox/Docs.mdx b/packages/canon/src/components/Checkbox/Docs.mdx
new file mode 100644
index 0000000000..9d9b4e4915
--- /dev/null
+++ b/packages/canon/src/components/Checkbox/Docs.mdx
@@ -0,0 +1,66 @@
+import { Canvas, Meta, Unstyled, Source } from '@storybook/blocks';
+import * as CheckboxStories from './Checkbox.stories';
+import { Title, Text } from '../../../docs/components';
+import { PropsTable } from '../../../docs/components/PropsTable';
+
+
+
+
+
+Checkbox
+A checkbox component that can be used to trigger actions.
+
+
+
+
+
+
+ API reference
+
+
+ void",
+ responsive: false,
+ },
+ disabled: {
+ type: 'boolean',
+ responsive: false,
+ },
+ required: {
+ type: 'boolean',
+ responsive: false,
+ },
+ name: {
+ type: 'string',
+ responsive: false,
+ },
+ value: {
+ type: 'string',
+ responsive: false,
+ },
+ className: {
+ type: 'string',
+ responsive: false,
+ },
+ style: {
+ type: 'CSSProperties',
+ responsive: false,
+ },
+ }}
+/>
+
+
diff --git a/packages/canon/src/components/Checkbox/index.ts b/packages/canon/src/components/Checkbox/index.ts
new file mode 100644
index 0000000000..f6dfbf6beb
--- /dev/null
+++ b/packages/canon/src/components/Checkbox/index.ts
@@ -0,0 +1,17 @@
+/*
+ * 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 { Checkbox } from './Checkbox';
+export type { CheckboxProps } from './types';
diff --git a/packages/canon/src/components/Checkbox/styles.css b/packages/canon/src/components/Checkbox/styles.css
new file mode 100644
index 0000000000..fb7e0d0ab7
--- /dev/null
+++ b/packages/canon/src/components/Checkbox/styles.css
@@ -0,0 +1,39 @@
+.checkbox-label {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ gap: var(--canon-spacing-xs);
+ font-size: var(--canon-font-sizes-xs);
+ font-family: var(--canon-font-regular);
+ color: var(--canon-text-primary);
+
+ & .checkbox {
+ all: unset;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 16px;
+ height: 16px;
+ box-shadow: inset 0 0 0 1px var(--canon-outline);
+ cursor: pointer;
+ border-radius: 2px;
+
+ &[data-state='unchecked'] {
+ & .checkbox-indicator {
+ display: none;
+ }
+ }
+
+ &[data-state='checked'] {
+ background: var(--canon-accent);
+ }
+ }
+
+ & .checkbox-indicator {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--canon-text-primary-on-accent);
+ }
+}
diff --git a/packages/canon/src/components/Checkbox/types.ts b/packages/canon/src/components/Checkbox/types.ts
new file mode 100644
index 0000000000..0240954afa
--- /dev/null
+++ b/packages/canon/src/components/Checkbox/types.ts
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+/** @public */
+export interface CheckboxProps {
+ label?: string;
+ defaultChecked?: boolean;
+ checked?: boolean;
+ onChange?: (checked: boolean) => void;
+ disabled?: boolean;
+ required?: boolean;
+ className?: string;
+ name?: string;
+ value?: string;
+ style?: React.CSSProperties;
+}
diff --git a/packages/canon/src/components/Container/Docs.mdx b/packages/canon/src/components/Container/Docs.mdx
index 733dbae637..d4dcf694da 100644
--- a/packages/canon/src/components/Container/Docs.mdx
+++ b/packages/canon/src/components/Container/Docs.mdx
@@ -1,7 +1,6 @@
import { Meta, Unstyled, Source } from '@storybook/blocks';
import * as ContainerStories from './Container.stories';
-import { Title, Text } from '../../../docs/components';
-import { PropsTable, getBoxProps } from '../../../docs/components/PropsTable';
+import { Title, Text, PropsTable, getProps } from '../../../docs/components';
import { spacingProperties } from '../../layout/sprinkles.css';
import { containerProperties } from './sprinkles.css';
@@ -29,7 +28,7 @@ import { containerProperties } from './sprinkles.css';
@@ -71,7 +70,7 @@ export default () => (
The grid component also accepts all the spacing props from the Box component.
-
+
Grid Item
diff --git a/packages/canon/src/components/Icon/Icon.tsx b/packages/canon/src/components/Icon/Icon.tsx
index d7891c23cf..587e3c0a23 100644
--- a/packages/canon/src/components/Icon/Icon.tsx
+++ b/packages/canon/src/components/Icon/Icon.tsx
@@ -19,15 +19,16 @@ import { useTheme } from '../../theme/context';
import type { IconNames } from './types';
/** @public */
-export const Icon = ({ name }: { name: IconNames }) => {
+export const Icon = (props: { name: IconNames; size?: number }) => {
+ const { name, size = 16 } = props;
const { icons } = useTheme();
- const RemixIcon = icons[name];
+ const RemixIcon = icons[name] as React.ComponentType<{ className?: string }>;
if (!RemixIcon) {
- console.error(`Icon "${name}" not found.`);
- return ; // Return default icon perhaps?
+ console.error(`Icon "${name}" not found or is not a valid component.`);
+ return ; // Return a default icon or handle the error appropriately
}
- return ;
+ return ;
};
diff --git a/packages/canon/src/components/Icon/icons.ts b/packages/canon/src/components/Icon/icons.ts
index 7fe2bf0056..ff5cd9a507 100644
--- a/packages/canon/src/components/Icon/icons.ts
+++ b/packages/canon/src/components/Icon/icons.ts
@@ -34,6 +34,7 @@ import {
RiArrowLeftCircleLine,
RiArrowRightCircleLine,
RiArrowUpCircleLine,
+ RiCheckLine,
} from '@remixicon/react';
// List of default icons
@@ -46,6 +47,7 @@ export const defaultIcons: IconMap = {
arrowLeftCircle: RiArrowLeftCircleLine,
arrowRightCircle: RiArrowRightCircleLine,
arrowUpCircle: RiArrowUpCircleLine,
+ check: RiCheckLine,
chevronDown: RiArrowDownSLine,
chevronUp: RiArrowUpSLine,
chevronLeft: RiArrowLeftSLine,
diff --git a/packages/canon/src/components/Box/box.css.ts b/packages/canon/src/components/Icon/styles.css
similarity index 79%
rename from packages/canon/src/components/Box/box.css.ts
rename to packages/canon/src/components/Icon/styles.css
index a3e49162fd..234105ed4e 100644
--- a/packages/canon/src/components/Box/box.css.ts
+++ b/packages/canon/src/components/Icon/styles.css
@@ -14,9 +14,17 @@
* limitations under the License.
*/
-import { style } from '@vanilla-extract/css';
+.icon-12 {
+ width: 12px;
+ height: 12px;
+}
-export const base = style({
- fontFamily: 'var(--canon-font-regular)',
- color: 'var(--canon-text-primary)',
-});
+.icon-16 {
+ width: 16px;
+ height: 16px;
+}
+
+.icon-24 {
+ width: 24px;
+ height: 24px;
+}
diff --git a/packages/canon/src/components/Icon/types.ts b/packages/canon/src/components/Icon/types.ts
index d60eaca020..bac853257b 100644
--- a/packages/canon/src/components/Icon/types.ts
+++ b/packages/canon/src/components/Icon/types.ts
@@ -24,6 +24,7 @@ export type IconNames =
| 'arrowLeftCircle'
| 'arrowRightCircle'
| 'arrowUpCircle'
+ | 'check'
| 'chevronDown'
| 'chevronLeft'
| 'chevronRight'
diff --git a/packages/canon/src/components/Inline/Docs.mdx b/packages/canon/src/components/Inline/Docs.mdx
index 0469ff0860..9850dedf7a 100644
--- a/packages/canon/src/components/Inline/Docs.mdx
+++ b/packages/canon/src/components/Inline/Docs.mdx
@@ -1,7 +1,6 @@
import { Meta, Unstyled, Source } from '@storybook/blocks';
import * as InlineStories from './Inline.stories';
-import { Title, Text } from '../../../docs/components';
-import { PropsTable, getBoxProps } from '../../../docs/components/PropsTable';
+import { Title, Text, PropsTable, getProps } from '../../../docs/components';
import { spacingProperties } from '../../layout/sprinkles.css';
import { inlineProperties } from './sprinkles.css';
@@ -57,7 +56,7 @@ import { inlineProperties } from './sprinkles.css';
The grid component also accepts all the spacing props from the Box component.
-
+
Examples
diff --git a/packages/canon/src/components/Stack/Docs.mdx b/packages/canon/src/components/Stack/Docs.mdx
index 5ec864937b..d5bdb0fc82 100644
--- a/packages/canon/src/components/Stack/Docs.mdx
+++ b/packages/canon/src/components/Stack/Docs.mdx
@@ -1,7 +1,6 @@
import { Meta, Unstyled, Source } from '@storybook/blocks';
import * as StackStories from './Stack.stories';
-import { Title, Text } from '../../../docs/components';
-import { PropsTable, getBoxProps } from '../../../docs/components/PropsTable';
+import { Title, Text, PropsTable, getProps } from '../../../docs/components';
import { spacingProperties } from '../../layout/sprinkles.css';
@@ -52,7 +51,7 @@ import { spacingProperties } from '../../layout/sprinkles.css';
The grid component also accepts all the spacing props from the Box component.
-
+
Common questions
diff --git a/packages/canon/src/index.ts b/packages/canon/src/index.ts
index 6497be2945..5d0ebb5a2e 100644
--- a/packages/canon/src/index.ts
+++ b/packages/canon/src/index.ts
@@ -33,3 +33,4 @@ export * from './components/Container';
// UI components
export * from './components/Button';
export * from './components/Icon';
+export * from './components/Checkbox';
diff --git a/packages/canon/src/theme/styles.css b/packages/canon/src/theme/styles.css
index ad2433ef74..8cb74374c6 100644
--- a/packages/canon/src/theme/styles.css
+++ b/packages/canon/src/theme/styles.css
@@ -27,3 +27,5 @@
@import '../components/Inline/styles.css';
@import '../components/Grid/styles.css';
@import '../components/Container/styles.css';
+@import '../components/Icon/styles.css';
+@import '../components/Checkbox/styles.css';
diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md
index cdf5e80818..e9e525a0e1 100644
--- a/packages/catalog-client/CHANGELOG.md
+++ b/packages/catalog-client/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/catalog-client
+## 1.9.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-model@1.7.2-next.0
+
## 1.9.0-next.1
### Minor Changes
diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json
index db66b541c7..8e16a4bf91 100644
--- a/packages/catalog-client/package.json
+++ b/packages/catalog-client/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/catalog-client",
- "version": "1.9.0-next.1",
+ "version": "1.9.0-next.2",
"description": "An isomorphic client for the catalog backend",
"backstage": {
"role": "common-library"
diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md
index b9e7addea6..1e5d752f2f 100644
--- a/packages/catalog-model/CHANGELOG.md
+++ b/packages/catalog-model/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/catalog-model
+## 1.7.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/types@1.2.0
+
## 1.7.1
### Patch Changes
diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json
index 61a3159ed2..97ebc54888 100644
--- a/packages/catalog-model/package.json
+++ b/packages/catalog-model/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/catalog-model",
- "version": "1.7.1",
+ "version": "1.7.2-next.0",
"description": "Types and validators that help describe the model of a Backstage Catalog",
"backstage": {
"role": "common-library"
diff --git a/packages/cli-node/CHANGELOG.md b/packages/cli-node/CHANGELOG.md
index 5cbe2cb6e2..129564d605 100644
--- a/packages/cli-node/CHANGELOG.md
+++ b/packages/cli-node/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/cli-node
+## 0.2.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/types@1.2.0
+
## 0.2.11-next.0
### Patch Changes
diff --git a/packages/cli-node/package.json b/packages/cli-node/package.json
index 01538d2e61..1aa460550d 100644
--- a/packages/cli-node/package.json
+++ b/packages/cli-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/cli-node",
- "version": "0.2.11-next.0",
+ "version": "0.2.11-next.1",
"description": "Node.js library for Backstage CLIs",
"backstage": {
"role": "node-library"
diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md
index 5fae59d357..f8dd593d52 100644
--- a/packages/cli/CHANGELOG.md
+++ b/packages/cli/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/cli
+## 0.29.3-next.2
+
+### Patch Changes
+
+- 62a9062: Updated dependency `@module-federation/enhanced` to `^0.8.0`.
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/cli-node@0.2.11-next.1
+ - @backstage/config-loader@1.9.3-next.1
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.1-next.0
+ - @backstage/eslint-plugin@0.1.10
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/release-manifests@0.0.12-next.1
+ - @backstage/types@1.2.0
+
## 0.29.3-next.1
### Patch Changes
diff --git a/packages/cli/config/nodeTransform.cjs b/packages/cli/config/nodeTransform.cjs
index fc25044fd0..1cf79cb1bb 100644
--- a/packages/cli/config/nodeTransform.cjs
+++ b/packages/cli/config/nodeTransform.cjs
@@ -41,7 +41,7 @@ if (process.env.BACKSTAGE_CLI_LINKED_WORKSPACE) {
}
// The package import that we're overriding will always existing in the root
- // node_modules of the linked workspace, so it's enough to override the the
+ // node_modules of the linked workspace, so it's enough to override the
// parent paths with that single entry
return origLoad.call(this, request, {
...parent,
diff --git a/packages/cli/package.json b/packages/cli/package.json
index bb338388a3..9d93f6007b 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/cli",
- "version": "0.29.3-next.1",
+ "version": "0.29.3-next.2",
"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.7.0",
+ "@module-federation/enhanced": "^0.8.0",
"@octokit/graphql": "^5.0.0",
"@octokit/graphql-schema": "^13.7.0",
"@octokit/oauth-app": "^4.2.0",
@@ -88,7 +88,7 @@
"commander": "^12.0.0",
"cross-fetch": "^4.0.0",
"cross-spawn": "^7.0.3",
- "css-loader": "^7.0.0",
+ "css-loader": "^6.5.1",
"ctrlc-windows": "^2.1.0",
"esbuild": "^0.24.0",
"esbuild-loader": "^4.0.0",
diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md
index 8f3bb87bce..15548ca9d7 100644
--- a/packages/config-loader/CHANGELOG.md
+++ b/packages/config-loader/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/config-loader
+## 1.9.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 1.9.3-next.0
### Patch Changes
diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json
index 336df8b1c0..3359e285d9 100644
--- a/packages/config-loader/package.json
+++ b/packages/config-loader/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/config-loader",
- "version": "1.9.3-next.0",
+ "version": "1.9.3-next.1",
"description": "Config loading functionality used by Backstage backend, and CLI",
"backstage": {
"role": "node-library"
diff --git a/packages/config-loader/src/sources/types.ts b/packages/config-loader/src/sources/types.ts
index abdf2f5c8e..fedce213c5 100644
--- a/packages/config-loader/src/sources/types.ts
+++ b/packages/config-loader/src/sources/types.ts
@@ -39,7 +39,7 @@ export interface ReadConfigDataOptions {
}
/**
- * The the generator returned by {@link ConfigSource.readConfigData}.
+ * The generator returned by {@link ConfigSource.readConfigData}.
*
* @public
*/
diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md
index e7ed06f626..f4f0429f8e 100644
--- a/packages/config/CHANGELOG.md
+++ b/packages/config/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/config
+## 1.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/types@1.2.0
+
## 1.3.0
### Minor Changes
diff --git a/packages/config/package.json b/packages/config/package.json
index b3130dcab5..79a2dfe980 100644
--- a/packages/config/package.json
+++ b/packages/config/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/config",
- "version": "1.3.0",
+ "version": "1.3.1-next.0",
"description": "Config API used by Backstage core, backend, and CLI",
"backstage": {
"role": "common-library"
diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md
index ecb3781525..995d8140f7 100644
--- a/packages/core-app-api/CHANGELOG.md
+++ b/packages/core-app-api/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/core-app-api
+## 1.15.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+
## 1.15.3-next.0
### Patch Changes
diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json
index a7b64e5218..92bf422050 100644
--- a/packages/core-app-api/package.json
+++ b/packages/core-app-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/core-app-api",
- "version": "1.15.3-next.0",
+ "version": "1.15.3-next.1",
"description": "Core app API used by Backstage apps",
"backstage": {
"role": "web-library"
diff --git a/packages/core-app-api/src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.ts b/packages/core-app-api/src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.ts
index 58ffc9441b..37b50bdcbb 100644
--- a/packages/core-app-api/src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.ts
+++ b/packages/core-app-api/src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.ts
@@ -26,7 +26,7 @@ const ERROR_PREFIX = 'Invalid discovery URL pattern,';
*/
export class UrlPatternDiscovery implements DiscoveryApi {
/**
- * Creates a new UrlPatternDiscovery given a template. The the only
+ * Creates a new UrlPatternDiscovery given a template. The only
* interpolation done for the template is to replace instances of `{{pluginId}}`
* with the ID of the plugin being requested.
*
diff --git a/packages/core-compat-api/CHANGELOG.md b/packages/core-compat-api/CHANGELOG.md
index bcb2a1828c..e8fd9439d0 100644
--- a/packages/core-compat-api/CHANGELOG.md
+++ b/packages/core-compat-api/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/core-compat-api
+## 0.3.4-next.2
+
+### Patch Changes
+
+- 1f30730: Updated dependency `@oriflame/backstage-plugin-score-card` to `^0.9.0`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/version-bridge@1.0.10
+
## 0.3.4-next.1
### Patch Changes
diff --git a/packages/core-compat-api/package.json b/packages/core-compat-api/package.json
index 101484b70b..83d0d2ee51 100644
--- a/packages/core-compat-api/package.json
+++ b/packages/core-compat-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/core-compat-api",
- "version": "0.3.4-next.1",
+ "version": "0.3.4-next.2",
"backstage": {
"role": "web-library"
},
@@ -46,7 +46,7 @@
"@backstage/plugin-catalog": "workspace:^",
"@backstage/test-utils": "workspace:^",
"@backstage/types": "workspace:^",
- "@oriflame/backstage-plugin-score-card": "^0.8.0",
+ "@oriflame/backstage-plugin-score-card": "^0.9.0",
"@testing-library/jest-dom": "^6.0.0",
"@testing-library/react": "^16.0.0",
"@types/react": "^18.0.0",
diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md
index 7650f9b2b5..37c3b72d7e 100644
--- a/packages/core-components/CHANGELOG.md
+++ b/packages/core-components/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/core-components
+## 0.16.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/version-bridge@1.0.10
+
## 0.16.2-next.1
### Patch Changes
diff --git a/packages/core-components/package.json b/packages/core-components/package.json
index ec9fd07e76..6405e49836 100644
--- a/packages/core-components/package.json
+++ b/packages/core-components/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/core-components",
- "version": "0.16.2-next.1",
+ "version": "0.16.2-next.2",
"description": "Core components used by Backstage plugins and apps",
"backstage": {
"role": "web-library"
diff --git a/packages/core-components/src/components/TrendLine/TrendLine.test.tsx b/packages/core-components/src/components/TrendLine/TrendLine.test.tsx
index 0d98c2dfdc..3cb54875c5 100644
--- a/packages/core-components/src/components/TrendLine/TrendLine.test.tsx
+++ b/packages/core-components/src/components/TrendLine/TrendLine.test.tsx
@@ -43,14 +43,14 @@ describe('TrendLine', () => {
});
});
- describe.skip('when the data finishes within the the warning threshold', () => {
+ describe.skip('when the data finishes within the warning threshold', () => {
it('renders with the correct color', async () => {
await renderInTestApp();
expect(screen.getByTitle('sparkline')).toBeInTheDocument();
});
});
- describe.skip('when the data finishes within the the error threshold', () => {
+ describe.skip('when the data finishes within the error threshold', () => {
it('renders with the correct color', async () => {
await renderInTestApp();
expect(screen.getByTitle('sparkline')).toBeInTheDocument();
diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md
index 2ddb6333c7..c74fe35878 100644
--- a/packages/core-plugin-api/CHANGELOG.md
+++ b/packages/core-plugin-api/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/core-plugin-api
+## 1.10.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+
## 1.10.1
### Patch Changes
diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json
index 176f6014b6..717b7d7150 100644
--- a/packages/core-plugin-api/package.json
+++ b/packages/core-plugin-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/core-plugin-api",
- "version": "1.10.1",
+ "version": "1.10.2-next.0",
"description": "Core API used by Backstage plugins",
"backstage": {
"role": "web-library"
diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md
index ce9aa221b0..6fc8da6e3e 100644
--- a/packages/create-app/CHANGELOG.md
+++ b/packages/create-app/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/create-app
+## 0.5.23-next.2
+
+### Patch Changes
+
+- e913fdf: Add github backend module to create-app and improve error messages
+- Updated dependencies
+ - @backstage/cli-common@0.1.15
+
## 0.5.23-next.1
### Patch Changes
diff --git a/packages/create-app/package.json b/packages/create-app/package.json
index c852cadb7f..b3dbd768cc 100644
--- a/packages/create-app/package.json
+++ b/packages/create-app/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/create-app",
- "version": "0.5.23-next.1",
+ "version": "0.5.23-next.2",
"description": "A CLI that helps you create your own Backstage app",
"backstage": {
"role": "cli"
diff --git a/packages/create-app/src/lib/tasks.test.ts b/packages/create-app/src/lib/tasks.test.ts
index 27c5765a12..3d5240977e 100644
--- a/packages/create-app/src/lib/tasks.test.ts
+++ b/packages/create-app/src/lib/tasks.test.ts
@@ -91,6 +91,7 @@ jest.mock('./versions', () => ({
'@backstage/plugin-kubernetes-backend': '1.0.0',
'@backstage/plugin-org': '1.0.0',
'@backstage/plugin-scaffolder': '1.0.0',
+ '@backstage/plugin-scaffolder-backend-module-github': '1.0.0',
'@backstage/plugin-permission-react': '1.0.0',
'@backstage/plugin-search': '1.0.0',
'@backstage/plugin-search-react': '1.0.0',
diff --git a/packages/create-app/src/lib/versions.ts b/packages/create-app/src/lib/versions.ts
index 9a7158ea55..d06912cca3 100644
--- a/packages/create-app/src/lib/versions.ts
+++ b/packages/create-app/src/lib/versions.ts
@@ -72,6 +72,7 @@ import { version as pluginPermissionNode } from '../../../../plugins/permission-
import { version as pluginProxyBackend } from '../../../../plugins/proxy-backend/package.json';
import { version as pluginScaffolder } from '../../../../plugins/scaffolder/package.json';
import { version as pluginScaffolderBackend } from '../../../../plugins/scaffolder-backend/package.json';
+import { version as pluginScaffolderBackendModuleGithub } from '../../../../plugins/scaffolder-backend-module-github/package.json';
import { version as pluginSearch } from '../../../../plugins/search/package.json';
import { version as pluginSearchReact } from '../../../../plugins/search-react/package.json';
import { version as pluginSearchBackend } from '../../../../plugins/search-backend/package.json';
@@ -130,6 +131,8 @@ export const packageVersions = {
'@backstage/plugin-proxy-backend': pluginProxyBackend,
'@backstage/plugin-scaffolder': pluginScaffolder,
'@backstage/plugin-scaffolder-backend': pluginScaffolderBackend,
+ '@backstage/plugin-scaffolder-backend-module-github':
+ pluginScaffolderBackendModuleGithub,
'@backstage/plugin-search': pluginSearch,
'@backstage/plugin-search-react': pluginSearchReact,
'@backstage/plugin-search-backend': pluginSearchBackend,
diff --git a/packages/create-app/templates/default-app/packages/backend/package.json.hbs b/packages/create-app/templates/default-app/packages/backend/package.json.hbs
index bb05beddaa..42afefd3b8 100644
--- a/packages/create-app/templates/default-app/packages/backend/package.json.hbs
+++ b/packages/create-app/templates/default-app/packages/backend/package.json.hbs
@@ -33,6 +33,7 @@
"@backstage/plugin-permission-node": "^{{version '@backstage/plugin-permission-node'}}",
"@backstage/plugin-proxy-backend": "^{{version '@backstage/plugin-proxy-backend'}}",
"@backstage/plugin-scaffolder-backend": "^{{version '@backstage/plugin-scaffolder-backend'}}",
+ "@backstage/plugin-scaffolder-backend-module-github": "^{{version '@backstage/plugin-scaffolder-backend-module-github'}}",
"@backstage/plugin-search-backend": "^{{version '@backstage/plugin-search-backend'}}",
"@backstage/plugin-search-backend-module-catalog": "^{{version '@backstage/plugin-search-backend-module-catalog'}}",
"@backstage/plugin-search-backend-module-pg": "^{{version '@backstage/plugin-search-backend-module-pg'}}",
diff --git a/packages/create-app/templates/default-app/packages/backend/src/index.ts b/packages/create-app/templates/default-app/packages/backend/src/index.ts
index 69a73511c6..6d0a6f4ca5 100644
--- a/packages/create-app/templates/default-app/packages/backend/src/index.ts
+++ b/packages/create-app/templates/default-app/packages/backend/src/index.ts
@@ -13,6 +13,7 @@ const backend = createBackend();
backend.add(import('@backstage/plugin-app-backend'));
backend.add(import('@backstage/plugin-proxy-backend'));
backend.add(import('@backstage/plugin-scaffolder-backend'));
+backend.add(import('@backstage/plugin-scaffolder-backend-module-github'));
backend.add(import('@backstage/plugin-techdocs-backend'));
// auth plugin
diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md
index d97bb0c44b..e6cd7eeb73 100644
--- a/packages/dev-utils/CHANGELOG.md
+++ b/packages/dev-utils/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/dev-utils
+## 1.1.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/app-defaults@1.5.15-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-app-api@1.15.3-next.1
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/theme@0.6.3-next.0
+
## 1.1.5-next.1
### Patch Changes
diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json
index ef1b92b954..c4aef9fd83 100644
--- a/packages/dev-utils/package.json
+++ b/packages/dev-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/dev-utils",
- "version": "1.1.5-next.1",
+ "version": "1.1.5-next.2",
"description": "Utilities for developing Backstage plugins.",
"backstage": {
"role": "web-library"
diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md
index 90c72dfdef..4feec740ca 100644
--- a/packages/e2e-test/CHANGELOG.md
+++ b/packages/e2e-test/CHANGELOG.md
@@ -1,5 +1,14 @@
# e2e-test
+## 0.2.23-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.23-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/cli-common@0.1.15
+
## 0.2.23-next.1
### Patch Changes
diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json
index c3c5457405..ca2f005a31 100644
--- a/packages/e2e-test/package.json
+++ b/packages/e2e-test/package.json
@@ -1,6 +1,6 @@
{
"name": "e2e-test",
- "version": "0.2.23-next.1",
+ "version": "0.2.23-next.2",
"description": "E2E test for verifying Backstage packages",
"backstage": {
"role": "cli"
diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md
index f1a0ec7a5d..33204aae4c 100644
--- a/packages/errors/CHANGELOG.md
+++ b/packages/errors/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/errors
+## 1.2.6-next.0
+
+### Patch Changes
+
+- 1d4b5b9: Trim `error.cause.stack` in addition to `error.stack` when trimming stack traces from serialized errors.
+- Updated dependencies
+ - @backstage/types@1.2.0
+
## 1.2.5
### Patch Changes
diff --git a/packages/errors/package.json b/packages/errors/package.json
index 45ec6d3816..fa2a600085 100644
--- a/packages/errors/package.json
+++ b/packages/errors/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/errors",
- "version": "1.2.5",
+ "version": "1.2.6-next.0",
"description": "Common utilities for error handling within Backstage",
"backstage": {
"role": "common-library"
diff --git a/packages/frontend-app-api/CHANGELOG.md b/packages/frontend-app-api/CHANGELOG.md
index c4a5354119..9751a9845c 100644
--- a/packages/frontend-app-api/CHANGELOG.md
+++ b/packages/frontend-app-api/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/frontend-app-api
+## 0.10.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-app-api@1.15.3-next.1
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-defaults@0.1.4-next.2
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+
## 0.10.3-next.1
### Patch Changes
diff --git a/packages/frontend-app-api/package.json b/packages/frontend-app-api/package.json
index a75dd2b09d..8f2215962c 100644
--- a/packages/frontend-app-api/package.json
+++ b/packages/frontend-app-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-app-api",
- "version": "0.10.3-next.1",
+ "version": "0.10.3-next.2",
"backstage": {
"role": "web-library"
},
diff --git a/packages/frontend-defaults/CHANGELOG.md b/packages/frontend-defaults/CHANGELOG.md
index 7601acc7e0..7bc7e229ec 100644
--- a/packages/frontend-defaults/CHANGELOG.md
+++ b/packages/frontend-defaults/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/frontend-defaults
+## 0.1.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/frontend-app-api@0.10.3-next.2
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/plugin-app@0.1.4-next.2
+
## 0.1.4-next.1
### Patch Changes
diff --git a/packages/frontend-defaults/package.json b/packages/frontend-defaults/package.json
index f8c63c5afb..2d6c1a7a86 100644
--- a/packages/frontend-defaults/package.json
+++ b/packages/frontend-defaults/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-defaults",
- "version": "0.1.4-next.1",
+ "version": "0.1.4-next.2",
"backstage": {
"role": "web-library"
},
diff --git a/packages/frontend-internal/CHANGELOG.md b/packages/frontend-internal/CHANGELOG.md
index c3cbeb7b76..0ac6c8558e 100644
--- a/packages/frontend-internal/CHANGELOG.md
+++ b/packages/frontend-internal/CHANGELOG.md
@@ -1,5 +1,14 @@
# @internal/frontend
+## 0.0.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+
## 0.0.4-next.1
### Patch Changes
diff --git a/packages/frontend-internal/package.json b/packages/frontend-internal/package.json
index 817e8f0812..bbe8e3df17 100644
--- a/packages/frontend-internal/package.json
+++ b/packages/frontend-internal/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/frontend",
- "version": "0.0.4-next.1",
+ "version": "0.0.4-next.2",
"backstage": {
"role": "web-library",
"inline": true
diff --git a/packages/frontend-plugin-api/CHANGELOG.md b/packages/frontend-plugin-api/CHANGELOG.md
index b5471f63d6..9aacfe0485 100644
--- a/packages/frontend-plugin-api/CHANGELOG.md
+++ b/packages/frontend-plugin-api/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/frontend-plugin-api
+## 0.9.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+
## 0.9.3-next.1
### Patch Changes
diff --git a/packages/frontend-plugin-api/package.json b/packages/frontend-plugin-api/package.json
index 74822f2b91..c2a9fd8d8b 100644
--- a/packages/frontend-plugin-api/package.json
+++ b/packages/frontend-plugin-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-plugin-api",
- "version": "0.9.3-next.1",
+ "version": "0.9.3-next.2",
"backstage": {
"role": "web-library"
},
diff --git a/packages/frontend-plugin-api/src/blueprints/PageBlueprint.test.tsx b/packages/frontend-plugin-api/src/blueprints/PageBlueprint.test.tsx
index de1cbe211e..4d0b4f37a7 100644
--- a/packages/frontend-plugin-api/src/blueprints/PageBlueprint.test.tsx
+++ b/packages/frontend-plugin-api/src/blueprints/PageBlueprint.test.tsx
@@ -98,7 +98,7 @@ describe('PageBlueprint', () => {
const tester = createExtensionTester(myPage);
- // TODO(blam): test for the routePath output doesn't work, due to the the way the test harness works
+ // TODO(blam): test for the routePath output doesn't work, due to the way the test harness works
// expect(tester.data(coreExtensionData.routePath)).toBe('/test');
expect(tester.get(coreExtensionData.routeRef)).toBe(mockRouteRef);
diff --git a/packages/frontend-test-utils/CHANGELOG.md b/packages/frontend-test-utils/CHANGELOG.md
index 29ad36435e..40d8e62884 100644
--- a/packages/frontend-test-utils/CHANGELOG.md
+++ b/packages/frontend-test-utils/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/frontend-test-utils
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.1-next.0
+ - @backstage/frontend-app-api@0.10.3-next.2
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/test-utils@1.7.3-next.1
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-app@0.1.4-next.2
+
## 0.2.4-next.1
### Patch Changes
diff --git a/packages/frontend-test-utils/package.json b/packages/frontend-test-utils/package.json
index 793d67b500..8a13dda074 100644
--- a/packages/frontend-test-utils/package.json
+++ b/packages/frontend-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-test-utils",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"backstage": {
"role": "web-library"
},
diff --git a/packages/integration-aws-node/CHANGELOG.md b/packages/integration-aws-node/CHANGELOG.md
index 26f65cf239..66d93b93c1 100644
--- a/packages/integration-aws-node/CHANGELOG.md
+++ b/packages/integration-aws-node/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/integration-aws-node
+## 0.1.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/config@1.3.1-next.0
+
## 0.1.13
### Patch Changes
diff --git a/packages/integration-aws-node/package.json b/packages/integration-aws-node/package.json
index a75ace7986..e1fbcf6fac 100644
--- a/packages/integration-aws-node/package.json
+++ b/packages/integration-aws-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/integration-aws-node",
- "version": "0.1.13",
+ "version": "0.1.14-next.0",
"description": "Helpers for fetching AWS account credentials",
"backstage": {
"role": "node-library"
diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md
index e447dd21af..57698d9a0f 100644
--- a/packages/integration-react/CHANGELOG.md
+++ b/packages/integration-react/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/integration-react
+## 1.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 1.2.2-next.0
### Patch Changes
diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json
index 052f84a736..b1c8ff60f9 100644
--- a/packages/integration-react/package.json
+++ b/packages/integration-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/integration-react",
- "version": "1.2.2-next.0",
+ "version": "1.2.2-next.1",
"description": "Frontend package for managing integrations towards external systems",
"backstage": {
"role": "web-library"
diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md
index 6c09d51df5..8af904036e 100644
--- a/packages/integration/CHANGELOG.md
+++ b/packages/integration/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/integration
+## 1.16.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/config@1.3.1-next.0
+
## 1.16.0-next.0
### Minor Changes
diff --git a/packages/integration/package.json b/packages/integration/package.json
index 4fddb1bdbb..9b09adaf1b 100644
--- a/packages/integration/package.json
+++ b/packages/integration/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/integration",
- "version": "1.16.0-next.0",
+ "version": "1.16.0-next.1",
"description": "Helpers for managing integrations towards external systems",
"backstage": {
"role": "common-library"
diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md
index eb44b2ac4c..8756efb2d9 100644
--- a/packages/repo-tools/CHANGELOG.md
+++ b/packages/repo-tools/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/repo-tools
+## 0.12.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/cli-node@0.2.11-next.1
+ - @backstage/config-loader@1.9.3-next.1
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/cli-common@0.1.15
+
## 0.12.0-next.1
### Patch Changes
diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json
index 03995ad421..c42a49109e 100644
--- a/packages/repo-tools/package.json
+++ b/packages/repo-tools/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/repo-tools",
- "version": "0.12.0-next.1",
+ "version": "0.12.0-next.2",
"description": "CLI for Backstage repo tooling ",
"backstage": {
"role": "cli"
diff --git a/packages/scaffolder-internal/CHANGELOG.md b/packages/scaffolder-internal/CHANGELOG.md
index 18c4056a71..8a2df052a6 100644
--- a/packages/scaffolder-internal/CHANGELOG.md
+++ b/packages/scaffolder-internal/CHANGELOG.md
@@ -1,5 +1,13 @@
# @internal/scaffolder
+## 0.0.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.14.2-next.2
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+
## 0.0.4-next.1
### Patch Changes
diff --git a/packages/scaffolder-internal/package.json b/packages/scaffolder-internal/package.json
index 23bdc9caf8..cf458bd536 100644
--- a/packages/scaffolder-internal/package.json
+++ b/packages/scaffolder-internal/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/scaffolder",
- "version": "0.0.4-next.1",
+ "version": "0.0.4-next.2",
"backstage": {
"role": "web-library",
"inline": true
diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md
index 6b696824ef..bee2276582 100644
--- a/packages/techdocs-cli-embedded-app/CHANGELOG.md
+++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md
@@ -1,5 +1,24 @@
# techdocs-cli-embedded-app
+## 0.2.103-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.26.0-next.2
+ - @backstage/cli@0.29.3-next.2
+ - @backstage/app-defaults@1.5.15-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-app-api@1.15.3-next.1
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/test-utils@1.7.3-next.1
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/plugin-techdocs@1.11.3-next.2
+ - @backstage/plugin-techdocs-react@1.2.12-next.2
+
## 0.2.103-next.1
### Patch Changes
diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json
index 3cb71cd2c8..5d3add528a 100644
--- a/packages/techdocs-cli-embedded-app/package.json
+++ b/packages/techdocs-cli-embedded-app/package.json
@@ -1,6 +1,6 @@
{
"name": "techdocs-cli-embedded-app",
- "version": "0.2.103-next.1",
+ "version": "0.2.103-next.2",
"backstage": {
"role": "frontend"
},
diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md
index dd5a85ad53..95b03dab88 100644
--- a/packages/techdocs-cli/CHANGELOG.md
+++ b/packages/techdocs-cli/CHANGELOG.md
@@ -1,5 +1,16 @@
# @techdocs/cli
+## 1.8.24-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.2
+ - @backstage/plugin-techdocs-node@1.12.15-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.1-next.0
+
## 1.8.24-next.1
### Patch Changes
diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json
index e61fbd5c84..da16a96f22 100644
--- a/packages/techdocs-cli/package.json
+++ b/packages/techdocs-cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@techdocs/cli",
- "version": "1.8.24-next.1",
+ "version": "1.8.24-next.2",
"description": "Utility CLI for managing TechDocs sites in Backstage.",
"backstage": {
"role": "cli"
diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md
index 617abaa71a..acce745e15 100644
--- a/packages/test-utils/CHANGELOG.md
+++ b/packages/test-utils/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/test-utils
+## 1.7.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-app-api@1.15.3-next.1
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+ - @backstage/plugin-permission-react@0.4.29-next.0
+
## 1.7.3-next.0
### Patch Changes
diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json
index 0b9bd1ea92..dc3a688026 100644
--- a/packages/test-utils/package.json
+++ b/packages/test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/test-utils",
- "version": "1.7.3-next.0",
+ "version": "1.7.3-next.1",
"description": "Utilities to test Backstage plugins and apps.",
"backstage": {
"role": "web-library"
diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md
index 406eba89a4..bf6ed35b30 100644
--- a/plugins/api-docs/CHANGELOG.md
+++ b/plugins/api-docs/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-api-docs
+## 0.12.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.26.0-next.2
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-permission-react@0.4.29-next.0
+
## 0.12.2-next.1
### Patch Changes
diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json
index 30b73fc398..b4372097f2 100644
--- a/plugins/api-docs/package.json
+++ b/plugins/api-docs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-api-docs",
- "version": "0.12.2-next.1",
+ "version": "0.12.2-next.2",
"description": "A Backstage plugin that helps represent API entities in the frontend",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md
index df45b6dd06..03c8163960 100644
--- a/plugins/app-backend/CHANGELOG.md
+++ b/plugins/app-backend/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-app-backend
+## 0.4.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-app-node@0.1.28-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/config-loader@1.9.3-next.1
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.4.3-next.1
### Patch Changes
diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json
index 0743eac013..a0faf2154c 100644
--- a/plugins/app-backend/package.json
+++ b/plugins/app-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-app-backend",
- "version": "0.4.3-next.1",
+ "version": "0.4.3-next.2",
"description": "A Backstage backend plugin that serves the Backstage frontend app",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/app-node/CHANGELOG.md b/plugins/app-node/CHANGELOG.md
index 6b2aae8034..2490d02552 100644
--- a/plugins/app-node/CHANGELOG.md
+++ b/plugins/app-node/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-app-node
+## 0.1.28-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/config-loader@1.9.3-next.1
+
## 0.1.28-next.1
### Patch Changes
diff --git a/plugins/app-node/package.json b/plugins/app-node/package.json
index 4cc057a1d2..1abd101c09 100644
--- a/plugins/app-node/package.json
+++ b/plugins/app-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-app-node",
- "version": "0.1.28-next.1",
+ "version": "0.1.28-next.2",
"description": "Node.js library for the app plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/app-visualizer/CHANGELOG.md b/plugins/app-visualizer/CHANGELOG.md
index 386f022eaa..73487d2f2d 100644
--- a/plugins/app-visualizer/CHANGELOG.md
+++ b/plugins/app-visualizer/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-app-visualizer
+## 0.1.14-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+
## 0.1.14-next.1
### Patch Changes
diff --git a/plugins/app-visualizer/package.json b/plugins/app-visualizer/package.json
index 5d919d8749..fd2297bd2f 100644
--- a/plugins/app-visualizer/package.json
+++ b/plugins/app-visualizer/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-app-visualizer",
- "version": "0.1.14-next.1",
+ "version": "0.1.14-next.2",
"description": "Visualizes the Backstage app structure",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/app/CHANGELOG.md b/plugins/app/CHANGELOG.md
index d49f7a8304..b7a68b9fe1 100644
--- a/plugins/app/CHANGELOG.md
+++ b/plugins/app/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-app
+## 0.1.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/plugin-permission-react@0.4.29-next.0
+
## 0.1.4-next.1
### Patch Changes
diff --git a/plugins/app/package.json b/plugins/app/package.json
index e4f4cb333d..a67314e518 100644
--- a/plugins/app/package.json
+++ b/plugins/app/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-app",
- "version": "0.1.4-next.1",
+ "version": "0.1.4-next.2",
"backstage": {
"role": "frontend-plugin",
"pluginId": "app",
diff --git a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md
index 45adec8243..3990ad28bc 100644
--- a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-atlassian-provider
+## 0.3.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.3.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-atlassian-provider/package.json b/plugins/auth-backend-module-atlassian-provider/package.json
index 34c477e1ee..42f9da9113 100644
--- a/plugins/auth-backend-module-atlassian-provider/package.json
+++ b/plugins/auth-backend-module-atlassian-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-atlassian-provider",
- "version": "0.3.3-next.1",
+ "version": "0.3.3-next.2",
"description": "The atlassian-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md
index bd72623c32..884a10bdf9 100644
--- a/plugins/auth-backend-module-auth0-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-auth0-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-auth0-provider
+## 0.1.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.1.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-auth0-provider/package.json b/plugins/auth-backend-module-auth0-provider/package.json
index ad857a3ddb..43f5d6cfd1 100644
--- a/plugins/auth-backend-module-auth0-provider/package.json
+++ b/plugins/auth-backend-module-auth0-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-auth0-provider",
- "version": "0.1.3-next.1",
+ "version": "0.1.3-next.2",
"description": "The auth0-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md
index bab6b48dab..ed6fca9fb3 100644
--- a/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-aws-alb-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-aws-alb-provider
+## 0.3.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-backend@0.24.1-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.3.1-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-aws-alb-provider/package.json b/plugins/auth-backend-module-aws-alb-provider/package.json
index 9c051165d7..4f513dc904 100644
--- a/plugins/auth-backend-module-aws-alb-provider/package.json
+++ b/plugins/auth-backend-module-aws-alb-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-aws-alb-provider",
- "version": "0.3.1-next.1",
+ "version": "0.3.1-next.2",
"description": "The aws-alb provider module for the Backstage auth backend.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md
index 7808d77a28..cdc6c21097 100644
--- a/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-azure-easyauth-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-azure-easyauth-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-azure-easyauth-provider/package.json b/plugins/auth-backend-module-azure-easyauth-provider/package.json
index c521b33435..159ced3d65 100644
--- a/plugins/auth-backend-module-azure-easyauth-provider/package.json
+++ b/plugins/auth-backend-module-azure-easyauth-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-azure-easyauth-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "The azure-easyauth-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md
index 1111537aa4..9742024bea 100644
--- a/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-bitbucket-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-bitbucket-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-bitbucket-provider/package.json b/plugins/auth-backend-module-bitbucket-provider/package.json
index ded19e9238..8134785461 100644
--- a/plugins/auth-backend-module-bitbucket-provider/package.json
+++ b/plugins/auth-backend-module-bitbucket-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-bitbucket-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "The bitbucket-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md
index 687583ebf0..b494d0f98b 100644
--- a/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-bitbucket-server-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-bitbucket-server-provider
+## 0.1.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.1.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-bitbucket-server-provider/package.json b/plugins/auth-backend-module-bitbucket-server-provider/package.json
index 589e4fa91c..306c931bda 100644
--- a/plugins/auth-backend-module-bitbucket-server-provider/package.json
+++ b/plugins/auth-backend-module-bitbucket-server-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-bitbucket-server-provider",
- "version": "0.1.3-next.1",
+ "version": "0.1.3-next.2",
"description": "The bitbucket-server-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md
index 6db569fbde..05bb865a9c 100644
--- a/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-cloudflare-access-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-cloudflare-access-provider
+## 0.3.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/config@1.3.1-next.0
+
## 0.3.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-cloudflare-access-provider/package.json b/plugins/auth-backend-module-cloudflare-access-provider/package.json
index 994d2df694..a6ab768f0f 100644
--- a/plugins/auth-backend-module-cloudflare-access-provider/package.json
+++ b/plugins/auth-backend-module-cloudflare-access-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-cloudflare-access-provider",
- "version": "0.3.3-next.1",
+ "version": "0.3.3-next.2",
"description": "The cloudflare-access-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md
index f34710f0a1..312a18eac7 100644
--- a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-gcp-iap-provider
+## 0.3.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/types@1.2.0
+
## 0.3.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-gcp-iap-provider/package.json b/plugins/auth-backend-module-gcp-iap-provider/package.json
index b5a9c4bd68..f39dde45b9 100644
--- a/plugins/auth-backend-module-gcp-iap-provider/package.json
+++ b/plugins/auth-backend-module-gcp-iap-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-gcp-iap-provider",
- "version": "0.3.3-next.1",
+ "version": "0.3.3-next.2",
"description": "A GCP IAP auth provider module for the Backstage auth backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-github-provider/CHANGELOG.md b/plugins/auth-backend-module-github-provider/CHANGELOG.md
index 9dd1e27943..1b59b8647f 100644
--- a/plugins/auth-backend-module-github-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-github-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-github-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-github-provider/package.json b/plugins/auth-backend-module-github-provider/package.json
index 45b2495e7a..49dca01723 100644
--- a/plugins/auth-backend-module-github-provider/package.json
+++ b/plugins/auth-backend-module-github-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-github-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "The github-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md
index 5822e9b8aa..ecfa128461 100644
--- a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-gitlab-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-gitlab-provider/package.json b/plugins/auth-backend-module-gitlab-provider/package.json
index eb8efa482f..b006aeb15f 100644
--- a/plugins/auth-backend-module-gitlab-provider/package.json
+++ b/plugins/auth-backend-module-gitlab-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-gitlab-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "The gitlab-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-google-provider/CHANGELOG.md b/plugins/auth-backend-module-google-provider/CHANGELOG.md
index 023721fd6e..439de2acdc 100644
--- a/plugins/auth-backend-module-google-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-google-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-google-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-google-provider/package.json b/plugins/auth-backend-module-google-provider/package.json
index 169ae171b6..e336c96987 100644
--- a/plugins/auth-backend-module-google-provider/package.json
+++ b/plugins/auth-backend-module-google-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-google-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "A Google auth provider module for the Backstage auth backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-guest-provider/CHANGELOG.md b/plugins/auth-backend-module-guest-provider/CHANGELOG.md
index 64f8deaaa4..8c03d41a0b 100644
--- a/plugins/auth-backend-module-guest-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-guest-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-guest-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-guest-provider/package.json b/plugins/auth-backend-module-guest-provider/package.json
index 53bd5b72ba..22b24139f6 100644
--- a/plugins/auth-backend-module-guest-provider/package.json
+++ b/plugins/auth-backend-module-guest-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-guest-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "The guest-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md
index aa043345a7..c9ceff5f82 100644
--- a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-microsoft-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json
index 4a66ca2e32..4853cf95a2 100644
--- a/plugins/auth-backend-module-microsoft-provider/package.json
+++ b/plugins/auth-backend-module-microsoft-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-microsoft-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "The microsoft-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md
index 1214418320..2d1a8ffd95 100644
--- a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-oauth2-provider
+## 0.3.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.3.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-oauth2-provider/package.json b/plugins/auth-backend-module-oauth2-provider/package.json
index b75f6e39c2..fb0ee690df 100644
--- a/plugins/auth-backend-module-oauth2-provider/package.json
+++ b/plugins/auth-backend-module-oauth2-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-oauth2-provider",
- "version": "0.3.3-next.1",
+ "version": "0.3.3-next.2",
"description": "The oauth2-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md
index 44c74e288c..ef29374df0 100644
--- a/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-oauth2-proxy-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-oauth2-proxy-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-oauth2-proxy-provider/package.json b/plugins/auth-backend-module-oauth2-proxy-provider/package.json
index 8b173df200..84258c01c7 100644
--- a/plugins/auth-backend-module-oauth2-proxy-provider/package.json
+++ b/plugins/auth-backend-module-oauth2-proxy-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-oauth2-proxy-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "The oauth2-proxy-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md
index 5900d01590..1f4f574d06 100644
--- a/plugins/auth-backend-module-oidc-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-oidc-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-oidc-provider
+## 0.3.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-backend@0.24.1-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.3.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-oidc-provider/package.json b/plugins/auth-backend-module-oidc-provider/package.json
index 2e40d255c6..9e10260bbd 100644
--- a/plugins/auth-backend-module-oidc-provider/package.json
+++ b/plugins/auth-backend-module-oidc-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-oidc-provider",
- "version": "0.3.3-next.1",
+ "version": "0.3.3-next.2",
"description": "The oidc-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-okta-provider/CHANGELOG.md b/plugins/auth-backend-module-okta-provider/CHANGELOG.md
index 4c8437f3c4..36c5a56db6 100644
--- a/plugins/auth-backend-module-okta-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-okta-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-okta-provider
+## 0.1.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.1.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-okta-provider/package.json b/plugins/auth-backend-module-okta-provider/package.json
index 0712c714ef..8ca4e26db2 100644
--- a/plugins/auth-backend-module-okta-provider/package.json
+++ b/plugins/auth-backend-module-okta-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-okta-provider",
- "version": "0.1.3-next.1",
+ "version": "0.1.3-next.2",
"description": "The okta-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md
index 8b26308542..be3263db85 100644
--- a/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-onelogin-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-onelogin-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-onelogin-provider/package.json b/plugins/auth-backend-module-onelogin-provider/package.json
index 67ca38acce..4f92065d30 100644
--- a/plugins/auth-backend-module-onelogin-provider/package.json
+++ b/plugins/auth-backend-module-onelogin-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-onelogin-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "The onelogin-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md
index 7606f9120e..f1e14601f9 100644
--- a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-pinniped-provider
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/config@1.3.1-next.0
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-pinniped-provider/package.json b/plugins/auth-backend-module-pinniped-provider/package.json
index 2d93b4f236..a70e51018d 100644
--- a/plugins/auth-backend-module-pinniped-provider/package.json
+++ b/plugins/auth-backend-module-pinniped-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-pinniped-provider",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "The pinniped-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md
index 3245132355..088d9acef5 100644
--- a/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-vmware-cloud-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-vmware-cloud-provider
+## 0.4.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+
## 0.4.2-next.1
### Patch Changes
diff --git a/plugins/auth-backend-module-vmware-cloud-provider/package.json b/plugins/auth-backend-module-vmware-cloud-provider/package.json
index b31f291e18..a005fd1762 100644
--- a/plugins/auth-backend-module-vmware-cloud-provider/package.json
+++ b/plugins/auth-backend-module-vmware-cloud-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-vmware-cloud-provider",
- "version": "0.4.2-next.1",
+ "version": "0.4.2-next.2",
"description": "The vmware-cloud-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md
index d35c858747..b41eee890e 100644
--- a/plugins/auth-backend/CHANGELOG.md
+++ b/plugins/auth-backend/CHANGELOG.md
@@ -1,5 +1,36 @@
# @backstage/plugin-auth-backend
+## 0.24.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.3-next.2
+ - @backstage/plugin-auth-backend-module-auth0-provider@0.1.3-next.2
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.3-next.2
+ - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.3-next.2
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.3-next.2
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.2
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.3-next.2
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.3-next.2
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.3-next.2
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.3-next.2
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.3-next.2
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.3-next.2
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.1-next.2
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.3-next.2
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.3-next.2
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.3-next.2
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.3-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.24.1-next.1
### Patch Changes
diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json
index e33f72a5d8..63fa6861d5 100644
--- a/plugins/auth-backend/package.json
+++ b/plugins/auth-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend",
- "version": "0.24.1-next.1",
+ "version": "0.24.1-next.2",
"description": "A Backstage backend plugin that handles authentication",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md
index 3cae640270..e3209aaa45 100644
--- a/plugins/auth-node/CHANGELOG.md
+++ b/plugins/auth-node/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-auth-node
+## 0.5.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.5.5-next.1
### Patch Changes
diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json
index 6b5861d494..cb7f02fd95 100644
--- a/plugins/auth-node/package.json
+++ b/plugins/auth-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-node",
- "version": "0.5.5-next.1",
+ "version": "0.5.5-next.2",
"backstage": {
"role": "node-library",
"pluginId": "auth",
diff --git a/plugins/auth-react/CHANGELOG.md b/plugins/auth-react/CHANGELOG.md
index 6ffb637999..8f47451e59 100644
--- a/plugins/auth-react/CHANGELOG.md
+++ b/plugins/auth-react/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-react
+## 0.1.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+
## 0.1.10-next.1
### Patch Changes
diff --git a/plugins/auth-react/package.json b/plugins/auth-react/package.json
index 9242dd2369..5241176b4c 100644
--- a/plugins/auth-react/package.json
+++ b/plugins/auth-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-react",
- "version": "0.1.10-next.1",
+ "version": "0.1.10-next.2",
"description": "Web library for the auth plugin",
"backstage": {
"role": "web-library",
diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md
index c6b894c7a3..c0d50270cf 100644
--- a/plugins/bitbucket-cloud-common/CHANGELOG.md
+++ b/plugins/bitbucket-cloud-common/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-bitbucket-cloud-common
+## 0.2.26-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.16.0-next.1
+
## 0.2.26-next.0
### Patch Changes
diff --git a/plugins/bitbucket-cloud-common/bitbucket-cloud.oas.json b/plugins/bitbucket-cloud-common/bitbucket-cloud.oas.json
index d897d83047..ead80230c6 100644
--- a/plugins/bitbucket-cloud-common/bitbucket-cloud.oas.json
+++ b/plugins/bitbucket-cloud-common/bitbucket-cloud.oas.json
@@ -24400,7 +24400,7 @@
"title": "Pagination",
"description": "Learn more about pagination",
"icon": "data:image/svg+xml;base64,b'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjM4LjgyIDE1MS42Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2IyZDRmZjt9LmNscy0ye2ZpbGw6IzRjOWFmZjt9LmNscy0ze2ZpbGw6IzAwNTJjYzt9LmNscy00e29wYWNpdHk6MC42O30uY2xzLTV7ZmlsbDp1cmwoI2xpbmVhci1ncmFkaWVudCk7fS5jbHMtNntmaWxsOnVybCgjbGluZWFyLWdyYWRpZW50LTIpO30uY2xzLTd7ZmlsbDp1cmwoI2xpbmVhci1ncmFkaWVudC0zKTt9LmNscy04e2ZpbGw6dXJsKCNsaW5lYXItZ3JhZGllbnQtNCk7fS5jbHMtOXtmaWxsOnVybCgjbGluZWFyLWdyYWRpZW50LTUpO30uY2xzLTEwLC5jbHMtMTEsLmNscy0xMntmaWxsOm5vbmU7fS5jbHMtMTB7c3Ryb2tlOiMzMzg0ZmY7fS5jbHMtMTAsLmNscy0xMSwuY2xzLTEyLC5jbHMtMTN7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0xMXtzdHJva2U6I2ZmYWIwMDt9LmNscy0xMntzdHJva2U6I2ZhZmJmYzt9LmNscy0xM3tmaWxsOiNmZmFiMDA7c3Ryb2tlOiMyNjg0ZmY7fTwvc3R5bGU+PGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQiIHkxPSI2NS4xNyIgeDI9Ijg2LjM4IiB5Mj0iNjUuMTciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM0YzlhZmYiLz48c3RvcCBvZmZzZXQ9IjAuMDgiIHN0b3AtY29sb3I9IiM0YzlhZmYiIHN0b3Atb3BhY2l0eT0iMC45NCIvPjxzdG9wIG9mZnNldD0iMC4yNCIgc3RvcC1jb2xvcj0iIzRjOWFmZiIgc3RvcC1vcGFjaXR5PSIwLjc4Ii8+PHN0b3Agb2Zmc2V0PSIwLjQ1IiBzdG9wLWNvbG9yPSIjNGM5YWZmIiBzdG9wLW9wYWNpdHk9IjAuNTMiLz48c3RvcCBvZmZzZXQ9IjAuNTUiIHN0b3AtY29sb3I9IiM0YzlhZmYiIHN0b3Atb3BhY2l0eT0iMC40Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC0yIiB4MT0iMTUyLjQ0IiB5MT0iNjUuMTciIHgyPSIyMzguODIiIHkyPSI2NS4xNyIgeGxpbms6aHJlZj0iI2xpbmVhci1ncmFkaWVudCIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50LTMiIHgxPSIxOC44NSIgeTE9IjExOC43OCIgeDI9IjEyNi4wOCIgeTI9IjExLjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwLjA2IiBzdG9wLWNvbG9yPSIjMDA2NWZmIi8+PHN0b3Agb2Zmc2V0PSIwLjE5IiBzdG9wLWNvbG9yPSIjMDA2NWZmIiBzdG9wLW9wYWNpdHk9IjAuOTQiLz48c3RvcCBvZmZzZXQ9IjAuNDYiIHN0b3AtY29sb3I9IiMwMDY1ZmYiIHN0b3Atb3BhY2l0eT0iMC43OCIvPjxzdG9wIG9mZnNldD0iMC44MiIgc3RvcC1jb2xvcj0iIzAwNjVmZiIgc3RvcC1vcGFjaXR5PSIwLjUzIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDA2NWZmIiBzdG9wLW9wYWNpdHk9IjAuNCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtNCIgeDE9IjExMi43NSIgeTE9IjExOC43OCIgeDI9IjIxOS45NyIgeTI9IjExLjU2IiB4bGluazpocmVmPSIjbGluZWFyLWdyYWRpZW50LTMiLz48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC01IiB4MT0iNTAuOTciIHkxPSIxMzMuNjEiIHgyPSIxODcuODYiIHkyPSItMy4yOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMC42NiIgc3RvcC1jb2xvcj0iIzI1Mzg1OCIvPjxzdG9wIG9mZnNldD0iMC44OCIgc3RvcC1jb2xvcj0iIzI1Mzg1OCIgc3RvcC1vcGFjaXR5PSIwLjgzIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMjUzODU4IiBzdG9wLW9wYWNpdHk9IjAuNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5WaWV3IFZlcnNpb25zPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iU29mdHdhcmUiPjxjaXJjbGUgY2xhc3M9ImNscy0xIiBjeD0iOTQuNTMiIGN5PSIxNDcuOTMiIHI9IjMuNjciLz48Y2lyY2xlIGNsYXNzPSJjbHMtMiIgY3g9IjEwNi45NCIgY3k9IjE0Ny45MyIgcj0iMy42NyIvPjxjaXJjbGUgY2xhc3M9ImNscy0zIiBjeD0iMTE5LjM0IiBjeT0iMTQ3LjkzIiByPSIzLjY3Ii8+PGNpcmNsZSBjbGFzcz0iY2xzLTIiIGN4PSIxMzEuNzUiIGN5PSIxNDcuOTMiIHI9IjMuNjciLz48Y2lyY2xlIGNsYXNzPSJjbHMtMSIgY3g9IjE0NC4xNiIgY3k9IjE0Ny45MyIgcj0iMy42NyIvPjxnIGNsYXNzPSJjbHMtNCI+PHJlY3QgaWQ9Il9SZWN0YW5nbGVfIiBkYXRhLW5hbWU9IiZsdDtSZWN0YW5nbGUmZ3Q7IiBjbGFzcz0iY2xzLTUiIHk9IjI1LjkyIiB3aWR0aD0iODYuMzgiIGhlaWdodD0iNzguNDkiLz48L2c+PGcgY2xhc3M9ImNscy00Ij48cmVjdCBpZD0iX1JlY3RhbmdsZV8yIiBkYXRhLW5hbWU9IiZsdDtSZWN0YW5nbGUmZ3Q7IiBjbGFzcz0iY2xzLTYiIHg9IjE1Mi40NCIgeT0iMjUuOTIiIHdpZHRoPSI4Ni4zOCIgaGVpZ2h0PSI3OC40OSIvPjwvZz48cmVjdCBpZD0iX1JlY3RhbmdsZV8zIiBkYXRhLW5hbWU9IiZsdDtSZWN0YW5nbGUmZ3Q7IiBjbGFzcz0iY2xzLTciIHg9IjE2LjI4IiB5PSIxNC4xMiIgd2lkdGg9IjExMi4zNiIgaGVpZ2h0PSIxMDIuMDkiLz48cmVjdCBpZD0iX1JlY3RhbmdsZV80IiBkYXRhLW5hbWU9IiZsdDtSZWN0YW5nbGUmZ3Q7IiBjbGFzcz0iY2xzLTgiIHg9IjExMC4xOCIgeT0iMTQuMTIiIHdpZHRoPSIxMTIuMzYiIGhlaWdodD0iMTAyLjA5Ii8+PHJlY3QgaWQ9Il9SZWN0YW5nbGVfNSIgZGF0YS1uYW1lPSImbHQ7UmVjdGFuZ2xlJmd0OyIgY2xhc3M9ImNscy05IiB4PSI0Ny42OSIgd2lkdGg9IjE0My40NSIgaGVpZ2h0PSIxMzAuMzQiLz48bGluZSBjbGFzcz0iY2xzLTEwIiB4MT0iNzkuMTYiIHkxPSIxNi4xOCIgeDI9IjExNy4yNCIgeTI9IjE2LjE4Ii8+PGxpbmUgY2xhc3M9ImNscy0xMCIgeDE9IjYyLjkzIiB5MT0iMTYuMTgiIHgyPSI3Mi42IiB5Mj0iMTYuMTgiLz48bGluZSBjbGFzcz0iY2xzLTExIiB4MT0iNzkuMTYiIHkxPSIyNi45NSIgeDI9IjExNy4yNCIgeTI9IjI2Ljk1Ii8+PGxpbmUgY2xhc3M9ImNscy0xMCIgeDE9IjYyLjkzIiB5MT0iMjYuOTUiIHgyPSI3Mi42IiB5Mj0iMjYuOTUiLz48bGluZSBjbGFzcz0iY2xzLTEwIiB4MT0iNzkuMTYiIHkxPSIzNy43MiIgeDI9IjE1MC43IiB5Mj0iMzcuNzIiLz48bGluZSBjbGFzcz0iY2xzLTEwIiB4MT0iNjIuOTMiIHkxPSIzNy43MiIgeDI9IjcyLjYiIHkyPSIzNy43MiIvPjxsaW5lIGNsYXNzPSJjbHMtMTEiIHgxPSIxNTAuNyIgeTE9IjQ4LjQ5IiB4Mj0iMTc1LjU5IiB5Mj0iNDguNDkiLz48bGluZSBjbGFzcz0iY2xzLTEyIiB4MT0iMTEwLjMyIiB5MT0iNDguNDkiIHgyPSIxNDMuMDUiIHkyPSI0OC40OSIvPjxsaW5lIGNsYXNzPSJjbHMtMTEiIHgxPSI3OS4xNiIgeTE9IjQ4LjQ5IiB4Mj0iMTAxLjM3IiB5Mj0iNDguNDkiLz48bGluZSBjbGFzcz0iY2xzLTEwIiB4MT0iNjIuOTMiIHkxPSI0OC40OSIgeDI9IjcyLjYiIHkyPSI0OC40OSIvPjxsaW5lIGNsYXNzPSJjbHMtMTAiIHgxPSI3OS4xNiIgeTE9IjU5LjI2IiB4Mj0iMTUwLjciIHkyPSI1OS4yNiIvPjxsaW5lIGNsYXNzPSJjbHMtMTAiIHgxPSI2Mi45MyIgeTE9IjU5LjI2IiB4Mj0iNzIuNiIgeTI9IjU5LjI2Ii8+PGxpbmUgY2xhc3M9ImNscy0xMCIgeDE9Ijc5LjE2IiB5MT0iNzAuMDMiIHgyPSIxNzUuNTkiIHkyPSI3MC4wMyIvPjxsaW5lIGNsYXNzPSJjbHMtMTAiIHgxPSI2Mi45MyIgeTE9IjcwLjAzIiB4Mj0iNzIuNiIgeTI9IjcwLjAzIi8+PGxpbmUgY2xhc3M9ImNscy0xMSIgeDE9Ijc5LjE2IiB5MT0iODAuNzkiIHgyPSIxMTcuMjQiIHkyPSI4MC43OSIvPjxsaW5lIGNsYXNzPSJjbHMtMTAiIHgxPSI2Mi45MyIgeTE9IjgwLjc5IiB4Mj0iNzIuNiIgeTI9IjgwLjc5Ii8+PGxpbmUgY2xhc3M9ImNscy0xMyIgeDE9Ijc5LjE2IiB5MT0iOTEuNTYiIHgyPSIxNDkuMDYiIHkyPSI5MS41NiIvPjxsaW5lIGNsYXNzPSJjbHMtMTAiIHgxPSI2Mi45MyIgeTE9IjkxLjU2IiB4Mj0iNzIuNiIgeTI9IjkxLjU2Ii8+PGxpbmUgY2xhc3M9ImNscy0xMCIgeDE9IjYyLjkzIiB5MT0iODAuNzkiIHgyPSI3Mi42IiB5Mj0iODAuNzkiLz48bGluZSBjbGFzcz0iY2xzLTEwIiB4MT0iNjIuOTMiIHkxPSI5MS41NiIgeDI9IjcyLjYiIHkyPSI5MS41NiIvPjxsaW5lIGNsYXNzPSJjbHMtMTEiIHgxPSI3OS4xNiIgeTE9IjEwMi4zMyIgeDI9IjExNy4yNCIgeTI9IjEwMi4zMyIvPjxsaW5lIGNsYXNzPSJjbHMtMTAiIHgxPSI2Mi45MyIgeTE9IjEwMi4zMyIgeDI9IjcyLjYiIHkyPSIxMDIuMzMiLz48bGluZSBjbGFzcz0iY2xzLTEwIiB4MT0iMTI1Ljk4IiB5MT0iMTEzLjEiIHgyPSIxNDkuMDYiIHkyPSIxMTMuMSIvPjxsaW5lIGNsYXNzPSJjbHMtMTIiIHgxPSI3OS4xNiIgeTE9IjExMy4xIiB4Mj0iMTE3LjI0IiB5Mj0iMTEzLjEiLz48bGluZSBjbGFzcz0iY2xzLTEwIiB4MT0iNjIuOTMiIHkxPSIxMTMuMSIgeDI9IjcyLjYiIHkyPSIxMTMuMSIvPjwvZz48L2c+PC9zdmc+'",
- "body": "\nEndpoints that return collections of objects should always apply pagination.\nPaginated collections are always wrapped in the following wrapper object:\n\n```json\n{\n \"size\": 5421,\n \"page\": 2,\n \"pagelen\": 10,\n \"next\": \"https://api.bitbucket.org/2.0/repositories/pypy/pypy/commits?page=3\",\n \"previous\": \"https://api.bitbucket.org/2.0/repositories/pypy/pypy/commits?page=1\",\n \"values\": [\n ...\n ]\n}\n```\n\nPagination is often page-bound, with a query parameter page indicating which\npage is to be returned.\n\nHowever, clients are not expected to construct URLs themselves by manipulating\nthe page number query parameter. Instead, the response contains a link to the\nnext page. This link should be treated as an opaque location that is not to be\nconstructed by clients or even assumed to be predictable. The only contract\naround the next link is that it will return the next chunk of results.\n\nLack of a next link in the response indicates the end of the collection.\n\nThe paginated response contains the following fields:\n\n| Field | Value |\n|------------|----------|\n| `size` | Total number of objects in the response. This is an optional element that is not provided in all responses, as it can be expensive to compute. |\n| `page` | Page number of the current results. This is an optional element that is not provided in all responses. |\n| `pagelen` | Current number of objects on the existing page. Globally, the minimum length is 10 and the maximum is 100. Some APIs may specify a different default. |\n| `next` | Link to the next page if it exists. The last page of a collection does not have this value. Use this link to navigate the result set and refrain from constructing your own URLs. |\n| `previous` | Link to previous page if it exists. A collections first page does not have this value. This is an optional element that is not provided in all responses. Some result sets strictly support forward navigation and never provide previous links. Clients must anticipate that backwards navigation is not always available. Use this link to navigate the result set and refrain from constructing your own URLs. |\n| `values` | The list of objects. This contains at most `pagelen` objects. |\n\nThe link to the next page is included such that you don't have to hardcode or construct any links. Only values and next are guaranteed (except the last page, which lacks next). This is because the previous and size values can be expensive for some data sets.\n\nIt is important to realize that Bitbucket support both list-based pagination and iterator-based pagination. List-based pagination assumes that the collection is a discrete, immutable, consistently ordered, finite array of objects with a fixed size. Clients navigate a list-based collection by requesting offset-based chunks. In Bitbucket Cloud, list-based responses include the optional size, page, and previous element. The the next and previous links typically resemble something like /foo/bar?page=4.\n\nHowever, not all result sets can be treated as immutable and finite – much like how programming languages tend to distinguish between lists and arrays on one hand and iterators or stream on the other. Where an list-based pagination offers random access into any point in a collection, iterator-based pagination can only navigate forward one element at a time. In Bitbucket such iterator-based pagination contains the next link and pagelen elements, but not necessarily anything else. In these cases, the next link's value often contains an unpredictable hash instead of an explicit page number. The commits resource uses iterator-based pagination.\n"
+ "body": "\nEndpoints that return collections of objects should always apply pagination.\nPaginated collections are always wrapped in the following wrapper object:\n\n```json\n{\n \"size\": 5421,\n \"page\": 2,\n \"pagelen\": 10,\n \"next\": \"https://api.bitbucket.org/2.0/repositories/pypy/pypy/commits?page=3\",\n \"previous\": \"https://api.bitbucket.org/2.0/repositories/pypy/pypy/commits?page=1\",\n \"values\": [\n ...\n ]\n}\n```\n\nPagination is often page-bound, with a query parameter page indicating which\npage is to be returned.\n\nHowever, clients are not expected to construct URLs themselves by manipulating\nthe page number query parameter. Instead, the response contains a link to the\nnext page. This link should be treated as an opaque location that is not to be\nconstructed by clients or even assumed to be predictable. The only contract\naround the next link is that it will return the next chunk of results.\n\nLack of a next link in the response indicates the end of the collection.\n\nThe paginated response contains the following fields:\n\n| Field | Value |\n|------------|----------|\n| `size` | Total number of objects in the response. This is an optional element that is not provided in all responses, as it can be expensive to compute. |\n| `page` | Page number of the current results. This is an optional element that is not provided in all responses. |\n| `pagelen` | Current number of objects on the existing page. Globally, the minimum length is 10 and the maximum is 100. Some APIs may specify a different default. |\n| `next` | Link to the next page if it exists. The last page of a collection does not have this value. Use this link to navigate the result set and refrain from constructing your own URLs. |\n| `previous` | Link to previous page if it exists. A collections first page does not have this value. This is an optional element that is not provided in all responses. Some result sets strictly support forward navigation and never provide previous links. Clients must anticipate that backwards navigation is not always available. Use this link to navigate the result set and refrain from constructing your own URLs. |\n| `values` | The list of objects. This contains at most `pagelen` objects. |\n\nThe link to the next page is included such that you don't have to hardcode or construct any links. Only values and next are guaranteed (except the last page, which lacks next). This is because the previous and size values can be expensive for some data sets.\n\nIt is important to realize that Bitbucket support both list-based pagination and iterator-based pagination. List-based pagination assumes that the collection is a discrete, immutable, consistently ordered, finite array of objects with a fixed size. Clients navigate a list-based collection by requesting offset-based chunks. In Bitbucket Cloud, list-based responses include the optional size, page, and previous element. The next and previous links typically resemble something like /foo/bar?page=4.\n\nHowever, not all result sets can be treated as immutable and finite – much like how programming languages tend to distinguish between lists and arrays on one hand and iterators or stream on the other. Where an list-based pagination offers random access into any point in a collection, iterator-based pagination can only navigate forward one element at a time. In Bitbucket such iterator-based pagination contains the next link and pagelen elements, but not necessarily anything else. In these cases, the next link's value often contains an unpredictable hash instead of an explicit page number. The commits resource uses iterator-based pagination.\n"
},
{
"anchor": "partial-response",
diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json
index 361608ee37..9a9099e5db 100644
--- a/plugins/bitbucket-cloud-common/package.json
+++ b/plugins/bitbucket-cloud-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-bitbucket-cloud-common",
- "version": "0.2.26-next.0",
+ "version": "0.2.26-next.1",
"description": "Common functionalities for bitbucket-cloud plugins",
"backstage": {
"role": "common-library",
diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md
index eb91db01fb..07a4438b6e 100644
--- a/plugins/catalog-backend-module-aws/CHANGELOG.md
+++ b/plugins/catalog-backend-module-aws/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-catalog-backend-module-aws
+## 0.4.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/integration-aws-node@0.1.14-next.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-kubernetes-common@0.9.1-next.0
+
## 0.4.6-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json
index 992e79658c..c2f1e3f34b 100644
--- a/plugins/catalog-backend-module-aws/package.json
+++ b/plugins/catalog-backend-module-aws/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-aws",
- "version": "0.4.6-next.1",
+ "version": "0.4.6-next.2",
"description": "A Backstage catalog backend module that helps integrate towards AWS",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md
index 01038c112d..ebb1fe39c4 100644
--- a/plugins/catalog-backend-module-azure/CHANGELOG.md
+++ b/plugins/catalog-backend-module-azure/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-azure
+## 0.3.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+
## 0.3.0-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json
index 7efb73ea2c..389bc1cfc9 100644
--- a/plugins/catalog-backend-module-azure/package.json
+++ b/plugins/catalog-backend-module-azure/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-azure",
- "version": "0.3.0-next.1",
+ "version": "0.3.0-next.2",
"description": "A Backstage catalog backend module that helps integrate towards Azure",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md
index 3eec2220aa..c7e9b52de4 100644
--- a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md
+++ b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-catalog-backend-module-backstage-openapi
+## 0.4.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/backend-openapi-utils@0.4.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+
## 0.4.3-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-backstage-openapi/package.json b/plugins/catalog-backend-module-backstage-openapi/package.json
index d847bb5dca..191e1567d7 100644
--- a/plugins/catalog-backend-module-backstage-openapi/package.json
+++ b/plugins/catalog-backend-module-backstage-openapi/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-backstage-openapi",
- "version": "0.4.3-next.1",
+ "version": "0.4.3-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "catalog",
diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md
index f0f57133cf..082ba8461e 100644
--- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md
+++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-catalog-backend-module-bitbucket-cloud
+## 0.4.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.1
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+
## 0.4.3-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json
index e2f2a51e90..73bbf48ffd 100644
--- a/plugins/catalog-backend-module-bitbucket-cloud/package.json
+++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud",
- "version": "0.4.3-next.1",
+ "version": "0.4.3-next.2",
"description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md
index e82471e694..d7318f53ea 100644
--- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md
+++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-catalog-backend-module-bitbucket-server
+## 0.3.0-next.2
+
+### Minor Changes
+
+- 3f34ea9: Throttles Bitbucket Server API calls
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.2.5-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json
index ac90aaf86a..f82a7bba16 100644
--- a/plugins/catalog-backend-module-bitbucket-server/package.json
+++ b/plugins/catalog-backend-module-bitbucket-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-bitbucket-server",
- "version": "0.2.5-next.1",
+ "version": "0.3.0-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "catalog",
@@ -56,6 +56,7 @@
"@backstage/errors": "workspace:^",
"@backstage/integration": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
+ "p-throttle": "^4.1.1",
"uuid": "^11.0.0"
},
"devDependencies": {
diff --git a/plugins/catalog-backend-module-bitbucket-server/src/lib/BitbucketServerClient.ts b/plugins/catalog-backend-module-bitbucket-server/src/lib/BitbucketServerClient.ts
index ee2caf7ffd..73373ffff1 100644
--- a/plugins/catalog-backend-module-bitbucket-server/src/lib/BitbucketServerClient.ts
+++ b/plugins/catalog-backend-module-bitbucket-server/src/lib/BitbucketServerClient.ts
@@ -19,6 +19,19 @@ import {
getBitbucketServerRequestOptions,
} from '@backstage/integration';
import { BitbucketServerProject, BitbucketServerRepository } from './types';
+import pThrottle from 'p-throttle';
+
+// 1 per second
+const throttle = pThrottle({
+ limit: 1,
+ interval: 1000,
+});
+
+const throttledFetch = throttle(
+ async (url: RequestInfo, options?: RequestInit) => {
+ return await fetch(url, options);
+ },
+);
/**
* A client for interacting with a Bitbucket Server instance
@@ -65,7 +78,7 @@ export class BitbucketServerClient {
path: string;
}): Promise {
const base = new URL(this.config.apiBaseUrl);
- return fetch(
+ return throttledFetch(
`${base.protocol}//${base.host}/projects/${options.projectKey}/repos/${options.repo}/raw/${options.path}`,
getBitbucketServerRequestOptions(this.config),
);
@@ -76,7 +89,7 @@ export class BitbucketServerClient {
repo: string;
}): Promise {
const request = `${this.config.apiBaseUrl}/projects/${options.projectKey}/repos/${options.repo}`;
- const response = await fetch(
+ const response = await throttledFetch(
request,
getBitbucketServerRequestOptions(this.config),
);
@@ -117,16 +130,17 @@ export class BitbucketServerClient {
}
private async request(req: Request): Promise {
- return fetch(req, getBitbucketServerRequestOptions(this.config)).then(
- (response: Response) => {
- if (!response.ok) {
- throw new Error(
- `Unexpected response for ${req.method} ${req.url}. Expected 200 but got ${response.status} - ${response.statusText}`,
- );
- }
- return response;
- },
- );
+ return throttledFetch(
+ req,
+ getBitbucketServerRequestOptions(this.config),
+ ).then((response: Response) => {
+ if (!response.ok) {
+ throw new Error(
+ `Unexpected response for ${req.method} ${req.url}. Expected 200 but got ${response.status} - ${response.statusText}`,
+ );
+ }
+ return response;
+ });
}
}
diff --git a/plugins/catalog-backend-module-gcp/CHANGELOG.md b/plugins/catalog-backend-module-gcp/CHANGELOG.md
index bc59702162..b8d319592e 100644
--- a/plugins/catalog-backend-module-gcp/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gcp/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-gcp
+## 0.3.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-kubernetes-common@0.9.1-next.0
+
## 0.3.3-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json
index 5f173b4bb8..be2f0ba442 100644
--- a/plugins/catalog-backend-module-gcp/package.json
+++ b/plugins/catalog-backend-module-gcp/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gcp",
- "version": "0.3.3-next.1",
+ "version": "0.3.3-next.2",
"description": "A Backstage catalog backend module that helps integrate towards GCP",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md
index 19c7daf10e..2801831552 100644
--- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-gerrit
+## 0.2.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.2.5-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json
index 9fe81d7794..b2c35e14b4 100644
--- a/plugins/catalog-backend-module-gerrit/package.json
+++ b/plugins/catalog-backend-module-gerrit/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gerrit",
- "version": "0.2.5-next.1",
+ "version": "0.2.5-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "catalog",
diff --git a/plugins/catalog-backend-module-github-org/CHANGELOG.md b/plugins/catalog-backend-module-github-org/CHANGELOG.md
index 9affcffb85..782f70896a 100644
--- a/plugins/catalog-backend-module-github-org/CHANGELOG.md
+++ b/plugins/catalog-backend-module-github-org/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-github-org
+## 0.3.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-backend-module-github@0.7.8-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/config@1.3.1-next.0
+
## 0.3.5-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-github-org/package.json b/plugins/catalog-backend-module-github-org/package.json
index a05a95951d..802b960a83 100644
--- a/plugins/catalog-backend-module-github-org/package.json
+++ b/plugins/catalog-backend-module-github-org/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-github-org",
- "version": "0.3.5-next.1",
+ "version": "0.3.5-next.2",
"description": "The github-org backend module for the catalog plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md
index bccafc89a2..a78b623ca4 100644
--- a/plugins/catalog-backend-module-github/CHANGELOG.md
+++ b/plugins/catalog-backend-module-github/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-catalog-backend-module-github
+## 0.7.8-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.29.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+
## 0.7.8-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json
index ede3f2b1b5..511c4019af 100644
--- a/plugins/catalog-backend-module-github/package.json
+++ b/plugins/catalog-backend-module-github/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-github",
- "version": "0.7.8-next.1",
+ "version": "0.7.8-next.2",
"description": "A Backstage catalog backend module that helps integrate towards GitHub",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md
index 0d7a36b32b..f6b29c16a4 100644
--- a/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gitlab-org/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-catalog-backend-module-gitlab-org
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-backend-module-gitlab@0.6.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+
## 0.2.4-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-gitlab-org/package.json b/plugins/catalog-backend-module-gitlab-org/package.json
index 94daed3905..d0f00076a5 100644
--- a/plugins/catalog-backend-module-gitlab-org/package.json
+++ b/plugins/catalog-backend-module-gitlab-org/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gitlab-org",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"description": "The gitlab-org backend module for the catalog plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md
index 9f97a2d634..ba0605d660 100644
--- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-catalog-backend-module-gitlab
+## 0.6.0-next.2
+
+### Minor Changes
+
+- 99dce5c: Implemented discovery for top-level groups defined in config.group or if undefined global top-level group in Gitlab
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+
## 0.5.1-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json
index 4649de9304..75c376a355 100644
--- a/plugins/catalog-backend-module-gitlab/package.json
+++ b/plugins/catalog-backend-module-gitlab/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gitlab",
- "version": "0.5.1-next.1",
+ "version": "0.6.0-next.2",
"description": "A Backstage catalog backend module that helps integrate towards GitLab",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-gitlab/src/__testUtils__/handlers.ts b/plugins/catalog-backend-module-gitlab/src/__testUtils__/handlers.ts
index 953ade6b7c..041aa5b835 100644
--- a/plugins/catalog-backend-module-gitlab/src/__testUtils__/handlers.ts
+++ b/plugins/catalog-backend-module-gitlab/src/__testUtils__/handlers.ts
@@ -83,7 +83,7 @@ const httpHandlers = [
}),
rest.get(
- `${apiBaseUrlSaas}/groups/subgroup1/members/all`,
+ `${apiBaseUrlSaas}/groups/group1%2Fsubgroup1/members/all`,
(_req, res, ctx) => {
return res(ctx.json(subgroup_saas_users_response)); // To-DO change
},
@@ -136,6 +136,22 @@ const httpHandlers = [
// dynamic handlers
+// https://docs.gitlab.com/ee/api/groups.html#list-group-details supports encoded path and id
+const httpGroupFindByEncodedPathDynamic = all_groups_response.flatMap(group => [
+ // Handler for apiBaseUrl
+ rest.get(`${apiBaseUrl}/groups/${group.full_path}`, (_, res, ctx) => {
+ return res(
+ ctx.json(all_groups_response.find(g => g.full_path === group.full_path)),
+ );
+ }),
+ // Handler for apiSaaSBaseUrl
+ rest.get(`${apiBaseUrlSaas}/groups/${group.full_path}`, (_, res, ctx) => {
+ return res(
+ ctx.json(all_groups_response.find(g => g.full_path === group.full_path)),
+ );
+ }),
+]);
+
const httpGroupFindByIdDynamic = all_groups_response.map(group => {
return rest.get(`${apiBaseUrl}/groups/${group.id}`, (_, res, ctx) => {
return res(ctx.json(all_groups_response.find(g => g.id === group.id)));
@@ -618,4 +634,5 @@ export const handlers = [
...httpGroupListDescendantProjectsById,
...httpGroupListDescendantProjectsByName,
...graphqlHandlers,
+ ...httpGroupFindByEncodedPathDynamic,
];
diff --git a/plugins/catalog-backend-module-gitlab/src/__testUtils__/mocks.ts b/plugins/catalog-backend-module-gitlab/src/__testUtils__/mocks.ts
index 2547015df8..d9914c0d0c 100644
--- a/plugins/catalog-backend-module-gitlab/src/__testUtils__/mocks.ts
+++ b/plugins/catalog-backend-module-gitlab/src/__testUtils__/mocks.ts
@@ -1041,7 +1041,7 @@ export const all_groups_response: GitLabGroup[] = [
{
id: 1,
name: 'group1',
- description: '',
+ description: 'description1',
full_path: 'group1',
},
{
@@ -1804,6 +1804,7 @@ export const expected_group_user_entity: MockObject[] = [
'url:https://example.com/group1',
'example.com/team-path': 'group1',
},
+ description: 'description1',
name: 'group1',
},
spec: {
@@ -2090,6 +2091,7 @@ export const expected_full_org_scan_entities: MockObject[] = [
'url:https://example.com/group1',
'example.com/team-path': 'group1',
},
+ description: 'description1',
name: 'group1',
},
spec: {
@@ -2347,7 +2349,7 @@ export const expected_full_members_group_org_scan_entities: MockObject[] = [
name: 'JohnDoe',
},
spec: {
- memberOf: ['subgroup1'],
+ memberOf: ['group1', 'subgroup1'], // since #26554 also config.group needs to be here.
profile: {
displayName: 'John Doe',
email: 'john.doe@company.com',
@@ -2431,6 +2433,30 @@ export const expected_full_members_group_org_scan_entities: MockObject[] = [
},
locationKey: 'GitlabOrgDiscoveryEntityProvider:test-id',
},
+ {
+ entity: {
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Group',
+ metadata: {
+ annotations: {
+ 'backstage.io/managed-by-location': 'url:https://example.com/group1',
+ 'backstage.io/managed-by-origin-location':
+ 'url:https://example.com/group1',
+ 'example.com/team-path': 'group1',
+ },
+ description: 'description1',
+ name: 'group1',
+ },
+ spec: {
+ children: [],
+ profile: {
+ displayName: 'group1',
+ },
+ type: 'team',
+ },
+ },
+ locationKey: 'GitlabOrgDiscoveryEntityProvider:test-id',
+ },
{
entity: {
apiVersion: 'backstage.io/v1alpha1',
@@ -2472,7 +2498,7 @@ export const expected_group_members_group_org_scan_entities: MockObject[] = [
name: 'JohnDoe',
},
spec: {
- memberOf: ['subgroup1'],
+ memberOf: ['subgroup1', 'group1'],
profile: {
displayName: 'John Doe',
email: 'john.doe@company.com',
@@ -2507,6 +2533,30 @@ export const expected_group_members_group_org_scan_entities: MockObject[] = [
},
locationKey: 'GitlabOrgDiscoveryEntityProvider:test-id',
},
+ {
+ entity: {
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Group',
+ metadata: {
+ annotations: {
+ 'backstage.io/managed-by-location': 'url:https://example.com/group1',
+ 'backstage.io/managed-by-origin-location':
+ 'url:https://example.com/group1',
+ 'example.com/team-path': 'group1',
+ },
+ name: 'group1',
+ description: 'description1',
+ },
+ spec: {
+ children: [],
+ profile: {
+ displayName: 'group1',
+ },
+ type: 'team',
+ },
+ },
+ locationKey: 'GitlabOrgDiscoveryEntityProvider:test-id',
+ },
];
export const all_self_hosted_group1_members: MockObject[] = [
diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.ts
index 4003ee5ea7..81ba58db5d 100644
--- a/plugins/catalog-backend-module-gitlab/src/lib/client.ts
+++ b/plugins/catalog-backend-module-gitlab/src/lib/client.ts
@@ -165,6 +165,15 @@ export class GitLabClient {
return this.pagedRequest(`/groups`, options);
}
+ // https://docs.gitlab.com/ee/api/groups.html#list-group-details
+ // id can either be group id or encoded full path
+ async getGroupByPath(
+ groupPath: string,
+ options?: CommonListOptions,
+ ): Promise {
+ return this.nonPagedRequest(`/groups/${groupPath}`, options);
+ }
+
async listDescendantGroups(
groupPath: string,
): Promise> {
diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts
index a15894b236..5f62cedb71 100644
--- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts
+++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts
@@ -435,7 +435,7 @@ describe('GitlabOrgDiscoveryEntityProvider - refresh', () => {
});
// This should return all members of the self-hosted instance regardless of the group set -> expected_full_members_group_org_scan_entities
- // All instance members, but only the group entities below the config.group
+ // All instance members, but only the group entities of config.group and below (#26554)
it('Self-hosted: should get all instance users when restrictUsersToGroup is not set', async () => {
const config = new ConfigReader(mock.config_org_group_selfHosted);
const schedule = new PersistingTaskRunner();
diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts
index 277a5a8c51..1fbd2a2a13 100644
--- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts
+++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts
@@ -366,6 +366,7 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider {
if (this.gitLabClient.isSelfManaged() && this.config.restrictUsersToGroup) {
groups = (await this.gitLabClient.listDescendantGroups(this.config.group))
.items;
+ groups.push(await this.gitLabClient.getGroupByPath(this.config.group)); // adds the parent group for #26554
users = paginated(
options =>
this.gitLabClient.listGroupMembers(this.config.group, options), // calls /groups//members
@@ -395,14 +396,18 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider {
else {
groups = (await this.gitLabClient.listDescendantGroups(this.config.group))
.items;
+
+ groups.push(await this.gitLabClient.getGroupByPath(this.config.group)); // adds the parent group for #26554
+
const rootGroupSplit = this.config.group.split('/');
- const rootGroup = this.config.restrictUsersToGroup
- ? rootGroupSplit[rootGroupSplit.length - 1]
+ const groupPath = this.config.restrictUsersToGroup
+ ? this.config.group
: rootGroupSplit[0];
+
users = paginated(
options =>
this.gitLabClient.listSaaSUsers(
- rootGroup,
+ groupPath,
options,
this.config.includeUsersWithoutSeat,
),
@@ -775,7 +780,8 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider {
return (
this.config.groupPattern.test(group.full_path) &&
(!this.config.group ||
- group.full_path.startsWith(`${this.config.group}/`))
+ group.full_path.startsWith(`${this.config.group}/`) ||
+ group.full_path === this.config.group)
);
}
diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md
index db5a402e0a..5f25c7e4f7 100644
--- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md
+++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-catalog-backend-module-incremental-ingestion
+## 0.6.1-next.2
+
+### Patch Changes
+
+- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`.
+- d42ecb0: Remove backend-common package from incremental-ingestion plugin and update related code
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.2
+ - @backstage/plugin-catalog-backend@1.29.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.6.1-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json
index f2f58e13e3..855973c834 100644
--- a/plugins/catalog-backend-module-incremental-ingestion/package.json
+++ b/plugins/catalog-backend-module-incremental-ingestion/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-incremental-ingestion",
- "version": "0.6.1-next.1",
+ "version": "0.6.1-next.2",
"description": "An entity provider for streaming large asset sources into the catalog",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md
index 9423a0847c..036e3cf152 100644
--- a/plugins/catalog-backend-module-ldap/CHANGELOG.md
+++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-catalog-backend-module-ldap
+## 0.11.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+
## 0.11.0-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json
index 860c39f8fe..ac76079370 100644
--- a/plugins/catalog-backend-module-ldap/package.json
+++ b/plugins/catalog-backend-module-ldap/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-ldap",
- "version": "0.11.0-next.1",
+ "version": "0.11.0-next.2",
"description": "A Backstage catalog backend module that helps integrate towards LDAP",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-logs/CHANGELOG.md b/plugins/catalog-backend-module-logs/CHANGELOG.md
index b835c1cfe6..213d04dd40 100644
--- a/plugins/catalog-backend-module-logs/CHANGELOG.md
+++ b/plugins/catalog-backend-module-logs/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-catalog-backend-module-logs
+## 0.1.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.29.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+
## 0.1.5-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-logs/package.json b/plugins/catalog-backend-module-logs/package.json
index 276040b7f0..402b6b3e8f 100644
--- a/plugins/catalog-backend-module-logs/package.json
+++ b/plugins/catalog-backend-module-logs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-logs",
- "version": "0.1.5-next.1",
+ "version": "0.1.5-next.2",
"description": "A module that subscribes to catalog releated events and logs them.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md
index 5c79632259..93f8b70860 100644
--- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md
+++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-msgraph
+## 0.6.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+
## 0.6.5-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json
index 40d0a02f24..8661290585 100644
--- a/plugins/catalog-backend-module-msgraph/package.json
+++ b/plugins/catalog-backend-module-msgraph/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-msgraph",
- "version": "0.6.5-next.1",
+ "version": "0.6.5-next.2",
"description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts
index 60e5c3d79b..4f1c9efbe2 100644
--- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts
+++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts
@@ -296,7 +296,7 @@ export function resolveRelations(
groupMember: Map>,
groupMemberOf: Map>,
) {
- // Build reference lookup tables, we reference them by the id the the graph
+ // Build reference lookup tables, we reference them by the id of the graph
const groupMap: Map = new Map(); // by group-id or tenant-id
for (const group of groups) {
diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md
index 5b4c8e8321..72e969e708 100644
--- a/plugins/catalog-backend-module-openapi/CHANGELOG.md
+++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-backend-module-openapi
+## 0.2.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.29.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/types@1.2.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+
## 0.2.5-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json
index 5af307fa3f..8f7fae6f1e 100644
--- a/plugins/catalog-backend-module-openapi/package.json
+++ b/plugins/catalog-backend-module-openapi/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-openapi",
- "version": "0.2.5-next.1",
+ "version": "0.2.5-next.2",
"description": "A Backstage catalog backend module that helps with OpenAPI specifications",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md
index e878c65559..9034f0fda9 100644
--- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md
+++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-catalog-backend-module-puppetdb
+## 0.2.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.2.5-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json
index 50a1a7d69b..80cc2af988 100644
--- a/plugins/catalog-backend-module-puppetdb/package.json
+++ b/plugins/catalog-backend-module-puppetdb/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-puppetdb",
- "version": "0.2.5-next.1",
+ "version": "0.2.5-next.2",
"description": "A Backstage catalog backend module that helps integrate towards PuppetDB",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md
index 9509d56d04..0bec90e9db 100644
--- a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md
+++ b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-scaffolder-entity-model
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-scaffolder-common@1.5.8-next.1
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json
index 94ac6c74e9..8aa73ba42b 100644
--- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json
+++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-scaffolder-entity-model",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md
index 9c044ccd8a..8dd8ca1c2f 100644
--- a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md
+++ b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-catalog-backend-module-unprocessed
+## 0.5.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.6-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.5.3-next.1
### Patch Changes
diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json
index 6a93b27bdc..42685e45a0 100644
--- a/plugins/catalog-backend-module-unprocessed/package.json
+++ b/plugins/catalog-backend-module-unprocessed/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-unprocessed",
- "version": "0.5.3-next.1",
+ "version": "0.5.3-next.2",
"description": "Backstage Catalog module to view unprocessed entities",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md
index 9a61eba8b6..65abfa1a07 100644
--- a/plugins/catalog-backend/CHANGELOG.md
+++ b/plugins/catalog-backend/CHANGELOG.md
@@ -1,5 +1,36 @@
# @backstage/plugin-catalog-backend
+## 1.29.0-next.2
+
+### Minor Changes
+
+- c1307b4: Implement `/entities` in terms of `queryEntities` to not run into memory and performance problems on large catalogs
+
+### Patch Changes
+
+- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`.
+- 8013c9c: Perform the by-query count inlined with the main query
+- feba9ee: Use a join based strategy for filtering, when having small page sizes
+- 1fdb48e: Use a faster count method on pg when computing some metrics
+- 0c33465: Implement `/entities/by-name/:kind/:namespace/:name` using `getEntitiesByRefs`
+- d93390d: When parsing filters, do not make redundant `anyOf` and `allOf` nodes when there's only a single entry within them
+- 24ecea8: Avoid extra ordering in by-query when the user doesn't ask for it
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-permission-node@0.8.6-next.2
+ - @backstage/backend-openapi-utils@0.4.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/plugin-search-backend-module-catalog@0.2.6-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/types@1.2.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 1.29.0-next.1
### Minor Changes
diff --git a/plugins/catalog-backend/config.d.ts b/plugins/catalog-backend/config.d.ts
index 8dd5e50480..384765f92e 100644
--- a/plugins/catalog-backend/config.d.ts
+++ b/plugins/catalog-backend/config.d.ts
@@ -138,6 +138,16 @@ export interface Config {
}>;
}>;
+ /**
+ * Disables the compatibility layer for relations in returned entities that
+ * ensures that all relations objects have both `target` and `targetRef`.
+ *
+ * Enabling this option significantly reduces the memory usage of the
+ * catalog, and slightly increases performance, but may break consumers that
+ * rely on the existence of `target` in the relations objects.
+ */
+ disableRelationsCompatibility?: boolean;
+
/**
* The strategy to use for entities that are orphaned, i.e. no longer have
* any other entities or providers referencing them. The default value is
diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json
index b5c09c8eea..09c6afd454 100644
--- a/plugins/catalog-backend/package.json
+++ b/plugins/catalog-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend",
- "version": "1.29.0-next.1",
+ "version": "1.29.0-next.2",
"description": "The Backstage backend plugin that provides the Backstage catalog",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/catalog-backend/src/catalog/types.ts b/plugins/catalog-backend/src/catalog/types.ts
index b3e52fb480..1fbf337986 100644
--- a/plugins/catalog-backend/src/catalog/types.ts
+++ b/plugins/catalog-backend/src/catalog/types.ts
@@ -52,8 +52,22 @@ export type EntitiesRequest = {
credentials: BackstageCredentials;
};
+/**
+ * Encapsulates either a deserialized or serialized entities to be sent in a response.
+ * @internal
+ */
+export type EntitiesResponseItems =
+ | {
+ type: 'object';
+ entities: (Entity | null)[];
+ }
+ | {
+ type: 'raw';
+ entities: (string | null)[];
+ };
+
export type EntitiesResponse = {
- entities: Entity[];
+ entities: EntitiesResponseItems;
pageInfo: PageInfo;
};
@@ -86,7 +100,7 @@ export interface EntitiesBatchResponse {
* The list of entities, in the same order as the refs in the request. Entries
* that are null signify that no entity existed with that ref.
*/
- items: Array;
+ items: EntitiesResponseItems;
}
export type EntityAncestryResponse = {
@@ -224,7 +238,7 @@ export interface QueryEntitiesResponse {
/**
* The entities for the current pagination request
*/
- items: Entity[];
+ items: EntitiesResponseItems;
pageInfo: {
/**
diff --git a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.test.ts b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.test.ts
index 37608b1493..e530c30d8b 100644
--- a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.test.ts
+++ b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.test.ts
@@ -283,7 +283,7 @@ describe('DefaultProcessingDatabase', () => {
);
it.each(databases.eachSupportedId())(
- 'adds deferred entities to the the refresh_state table to be picked up later, %p',
+ 'adds deferred entities to the refresh_state table to be picked up later, %p',
async databaseId => {
const { knex, db } = await createDatabase(databaseId);
await insertRefreshStateRow(knex, {
diff --git a/plugins/catalog-backend/src/database/metrics.ts b/plugins/catalog-backend/src/database/metrics.ts
index d8cd87558f..809405d69f 100644
--- a/plugins/catalog-backend/src/database/metrics.ts
+++ b/plugins/catalog-backend/src/database/metrics.ts
@@ -98,20 +98,40 @@ export function initDatabaseMetrics(knex: Knex) {
description: 'Total amount of registered locations in the catalog',
})
.addCallback(async gauge => {
- const total = await knex('locations').count({
- count: '*',
- });
- gauge.observe(Number(total[0].count));
+ if (knex.client.config.client === 'pg') {
+ // https://stackoverflow.com/questions/7943233/fast-way-to-discover-the-row-count-of-a-table-in-postgresql
+ const total = await knex.raw(`
+ SELECT reltuples::bigint AS estimate
+ FROM pg_class
+ WHERE oid = 'locations'::regclass;
+ `);
+ gauge.observe(Number(total.rows[0].estimate));
+ } else {
+ const total = await knex('locations').count({
+ count: '*',
+ });
+ gauge.observe(Number(total[0].count));
+ }
}),
relations: meter
.createObservableGauge('catalog_relations_count', {
description: 'Total amount of relations between entities',
})
.addCallback(async gauge => {
- const total = await knex('relations').count({
- count: '*',
- });
- gauge.observe(Number(total[0].count));
+ if (knex.client.config.client === 'pg') {
+ // https://stackoverflow.com/questions/7943233/fast-way-to-discover-the-row-count-of-a-table-in-postgresql
+ const total = await knex.raw(`
+ SELECT reltuples::bigint AS estimate
+ FROM pg_class
+ WHERE oid = 'relations'::regclass;
+ `);
+ gauge.observe(Number(total.rows[0].estimate));
+ } else {
+ const total = await knex('relations').count({
+ count: '*',
+ });
+ gauge.observe(Number(total[0].count));
+ }
}),
};
}
diff --git a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts
index 3e2dee7ae0..894949a691 100644
--- a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts
+++ b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts
@@ -64,7 +64,7 @@ describe('AuthorizedEntitiesCatalog', () => {
credentials: mockCredentials.none(),
}),
).toEqual({
- entities: [],
+ entities: { type: 'object', entities: [] },
pageInfo: { hasNextPage: false },
});
});
@@ -113,7 +113,7 @@ describe('AuthorizedEntitiesCatalog', () => {
credentials: mockCredentials.none(),
}),
).resolves.toEqual({
- items: [null],
+ items: { type: 'object', entities: [null] },
});
expect(fakeCatalog.entitiesBatch).not.toHaveBeenCalled();
@@ -174,7 +174,7 @@ describe('AuthorizedEntitiesCatalog', () => {
filter: { key: 'kind', values: ['b'] },
}),
).resolves.toEqual({
- items: [],
+ items: { type: 'object', entities: [] },
pageInfo: {},
totalItems: 0,
});
@@ -226,7 +226,7 @@ describe('AuthorizedEntitiesCatalog', () => {
];
fakeCatalog.queryEntities.mockResolvedValue({
- items: entities,
+ items: { type: 'object', entities },
pageInfo: {
nextCursor: {
isPrevious: false,
@@ -254,7 +254,7 @@ describe('AuthorizedEntitiesCatalog', () => {
});
expect(response).toEqual({
- items: entities,
+ items: { type: 'object', entities: entities },
totalItems: 4,
pageInfo: {
nextCursor: {
@@ -290,7 +290,7 @@ describe('AuthorizedEntitiesCatalog', () => {
});
expect(response).toEqual({
- items: entities,
+ items: { type: 'object', entities: entities },
totalItems: 4,
pageInfo: {
nextCursor: {
@@ -338,7 +338,9 @@ describe('AuthorizedEntitiesCatalog', () => {
conditions: { rule: 'IS_ENTITY_KIND', params: { kinds: ['b'] } },
},
]);
- fakeCatalog.entities.mockResolvedValue({ entities: [] });
+ fakeCatalog.entities.mockResolvedValue({
+ entities: { type: 'object', entities: [] },
+ });
const catalog = new AuthorizedEntitiesCatalog(
fakeCatalog,
fakePermissionApi,
@@ -360,7 +362,10 @@ describe('AuthorizedEntitiesCatalog', () => {
},
]);
fakeCatalog.entities.mockResolvedValue({
- entities: [{ kind: 'b', namespace: 'default', name: 'my-component' }],
+ entities: {
+ type: 'object',
+ entities: [{ kind: 'b', namespace: 'default', name: 'my-component' }],
+ },
});
const catalog = new AuthorizedEntitiesCatalog(
fakeCatalog,
diff --git a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.ts b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.ts
index 5358e90825..073e153dcc 100644
--- a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.ts
+++ b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.ts
@@ -60,7 +60,7 @@ export class AuthorizedEntitiesCatalog implements EntitiesCatalog {
if (authorizeDecision.result === AuthorizeResult.DENY) {
return {
- entities: [],
+ entities: { type: 'object', entities: [] },
pageInfo: { hasNextPage: false },
};
}
@@ -92,7 +92,10 @@ export class AuthorizedEntitiesCatalog implements EntitiesCatalog {
if (authorizeDecision.result === AuthorizeResult.DENY) {
return {
- items: new Array(request.entityRefs.length).fill(null),
+ items: {
+ type: 'object',
+ entities: new Array(request.entityRefs.length).fill(null),
+ },
};
}
@@ -123,7 +126,7 @@ export class AuthorizedEntitiesCatalog implements EntitiesCatalog {
if (authorizeDecision.result === AuthorizeResult.DENY) {
return {
- items: [],
+ items: { type: 'object', entities: [] },
pageInfo: {},
totalItems: 0,
};
@@ -208,7 +211,7 @@ export class AuthorizedEntitiesCatalog implements EntitiesCatalog {
allOf: [permissionFilter, basicEntityFilter({ 'metadata.uid': uid })],
},
});
- if (entities.length === 0) {
+ if (entities.entities.length === 0) {
throw new NotAllowedError();
}
}
diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts
index 31ec40b887..7ce308e796 100644
--- a/plugins/catalog-backend/src/service/CatalogBuilder.ts
+++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts
@@ -115,6 +115,7 @@ import {
UrlReaderService,
SchedulerService,
} from '@backstage/backend-plugin-api';
+import { entitiesResponseToObjects } from './response';
/**
* This is a duplicate of the alpha `CatalogPermissionRule` type, for use in the stable API.
@@ -485,6 +486,10 @@ export class CatalogBuilder {
discovery,
});
+ const disableRelationsCompatibility = config.getOptionalBoolean(
+ 'catalog.disableRelationsCompatibility',
+ );
+
const policy = this.buildEntityPolicy();
const processors = this.buildProcessors();
const parser = this.parser || defaultEntityDataParser;
@@ -521,6 +526,7 @@ export class CatalogBuilder {
database: dbClient,
logger,
stitcher,
+ disableRelationsCompatibility,
});
let permissionsService: PermissionsService;
@@ -566,7 +572,10 @@ export class CatalogBuilder {
},
});
- const entitiesByRef = keyBy(entities, stringifyEntityRef);
+ const entitiesByRef = keyBy(
+ entitiesResponseToObjects(entities),
+ stringifyEntityRef,
+ );
return resourceRefs.map(
resourceRef =>
@@ -629,6 +638,7 @@ export class CatalogBuilder {
auth,
httpAuth,
permissionsService,
+ disableRelationsCompatibility,
});
await connectEntityProviders(providerDatabase, entityProviders);
diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts
index bb2ba3d587..070b93ab2c 100644
--- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts
+++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts
@@ -38,6 +38,7 @@ import { Stitcher } from '../stitching/types';
import { DefaultEntitiesCatalog } from './DefaultEntitiesCatalog';
import { EntitiesRequest } from '../catalog/types';
import { buildEntitySearch } from '../database/operations/stitcher/buildEntitySearch';
+import { entitiesResponseToObjects } from './response';
jest.setTimeout(60_000);
@@ -310,10 +311,11 @@ describe('DefaultEntitiesCatalog', () => {
const testFilter = {
key: 'spec.test',
};
- const { entities } = await catalog.entities({
+ const res = await catalog.entities({
filter: testFilter,
credentials: mockCredentials.none(),
});
+ const entities = entitiesResponseToObjects(res.entities);
expect(entities.length).toBe(1);
expect(entities[0]).toEqual(entity2);
@@ -351,10 +353,11 @@ describe('DefaultEntitiesCatalog', () => {
key: 'spec.test',
},
};
- const { entities } = await catalog.entities({
+ const res = await catalog.entities({
filter: testFilter,
credentials: mockCredentials.none(),
});
+ const entities = entitiesResponseToObjects(res.entities);
expect(entities.length).toBe(1);
expect(entities[0]).toEqual(entity1);
@@ -416,7 +419,7 @@ describe('DefaultEntitiesCatalog', () => {
values: ['red'],
},
};
- const { entities } = await catalog.entities({
+ const res = await catalog.entities({
filter: {
allOf: [
testFilter1,
@@ -427,6 +430,7 @@ describe('DefaultEntitiesCatalog', () => {
},
credentials: mockCredentials.none(),
});
+ const entities = entitiesResponseToObjects(res.entities);
expect(entities.length).toBe(2);
expect(entities).toContainEqual(entity2);
@@ -465,7 +469,7 @@ describe('DefaultEntitiesCatalog', () => {
const testFilter2 = {
key: 'metadata.desc',
};
- const { entities } = await catalog.entities({
+ const res = await catalog.entities({
filter: {
not: {
allOf: [testFilter1, testFilter2],
@@ -474,6 +478,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
});
+ const entities = entitiesResponseToObjects(res.entities);
expect(entities.length).toBe(1);
expect(entities).toContainEqual(entity1);
@@ -509,10 +514,11 @@ describe('DefaultEntitiesCatalog', () => {
key: 'kind',
values: [],
};
- const { entities } = await catalog.entities({
+ const res = await catalog.entities({
filter: testFilter,
credentials: mockCredentials.none(),
});
+ const entities = entitiesResponseToObjects(res.entities);
expect(entities.length).toBe(0);
},
@@ -553,10 +559,11 @@ describe('DefaultEntitiesCatalog', () => {
stitcher,
});
- const { entities } = await catalog.entities();
+ const res = await catalog.entities();
+ const entities = entitiesResponseToObjects(res.entities);
expect(
- entities.find(e => e.metadata.name === 'one')!.relations,
+ entities.find(e => e?.metadata.name === 'one')!.relations,
).toEqual([
{
type: 'r',
@@ -565,7 +572,7 @@ describe('DefaultEntitiesCatalog', () => {
},
]);
expect(
- entities.find(e => e.metadata.name === 'two')!.relations,
+ entities.find(e => e?.metadata.name === 'two')!.relations,
).toEqual([
{
type: 'r',
@@ -615,7 +622,9 @@ describe('DefaultEntitiesCatalog', () => {
return catalog
.entities({ ...request, credentials: mockCredentials.none() })
.then(response =>
- response.entities.map(e => e.metadata.name).toSorted(),
+ entitiesResponseToObjects(response.entities)
+ .map(e => e!.metadata.name)
+ .toSorted(),
);
}
@@ -678,7 +687,11 @@ describe('DefaultEntitiesCatalog', () => {
): Promise {
return catalog
.entities({ ...request, credentials: mockCredentials.none() })
- .then(response => response.entities.map(e => e.metadata.name));
+ .then(response =>
+ entitiesResponseToObjects(response.entities).map(
+ e => e!.metadata.name,
+ ),
+ );
}
await expect(
@@ -764,7 +777,7 @@ describe('DefaultEntitiesCatalog', () => {
stitcher,
});
- const { items } = await catalog.entitiesBatch({
+ const res = await catalog.entitiesBatch({
entityRefs: [
'k:default/two',
'k:default/one',
@@ -775,6 +788,7 @@ describe('DefaultEntitiesCatalog', () => {
],
credentials: mockCredentials.none(),
});
+ const items = entitiesResponseToObjects(res.items);
expect(items.map(e => e && stringifyEntityRef(e))).toEqual([
'k:default/two',
@@ -819,11 +833,12 @@ describe('DefaultEntitiesCatalog', () => {
stitcher,
});
- const { items } = await catalog.entitiesBatch({
+ const res = await catalog.entitiesBatch({
entityRefs: ['k:default/two', 'k:default/one'],
filter: { key: 'spec.owner', values: ['me'] },
credentials: mockCredentials.none(),
});
+ const items = entitiesResponseToObjects(res.items);
expect(items.map(e => e && stringifyEntityRef(e))).toEqual([
'k:default/two',
@@ -881,7 +896,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response1 = await catalog.queryEntities(request1);
- expect(response1.items).toEqual([entityFrom('A'), entityFrom('B')]);
+ expect(entitiesResponseToObjects(response1.items)).toEqual([
+ entityFrom('A'),
+ entityFrom('B'),
+ ]);
expect(response1.pageInfo.nextCursor).toBeDefined();
expect(response1.pageInfo.prevCursor).toBeUndefined();
expect(response1.totalItems).toBe(names.length);
@@ -893,7 +911,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response2 = await catalog.queryEntities(request2);
- expect(response2.items).toEqual([entityFrom('C'), entityFrom('D')]);
+ expect(entitiesResponseToObjects(response2.items)).toEqual([
+ entityFrom('C'),
+ entityFrom('D'),
+ ]);
expect(response2.pageInfo.nextCursor).toBeDefined();
expect(response2.pageInfo.prevCursor).toBeDefined();
expect(response2.totalItems).toBe(names.length);
@@ -905,7 +926,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response3 = await catalog.queryEntities(request3);
- expect(response3.items).toEqual([entityFrom('E'), entityFrom('F')]);
+ expect(entitiesResponseToObjects(response3.items)).toEqual([
+ entityFrom('E'),
+ entityFrom('F'),
+ ]);
expect(response3.pageInfo.nextCursor).toBeDefined();
expect(response3.pageInfo.prevCursor).toBeDefined();
expect(response3.totalItems).toBe(names.length);
@@ -917,7 +941,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response4 = await catalog.queryEntities(request4);
- expect(response4.items).toEqual([entityFrom('C'), entityFrom('D')]);
+ expect(entitiesResponseToObjects(response4.items)).toEqual([
+ entityFrom('C'),
+ entityFrom('D'),
+ ]);
expect(response4.pageInfo.nextCursor).toBeDefined();
expect(response4.pageInfo.prevCursor).toBeDefined();
expect(response4.totalItems).toBe(names.length);
@@ -929,7 +956,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response5 = await catalog.queryEntities(request5);
- expect(response5.items).toEqual([entityFrom('A'), entityFrom('B')]);
+ expect(entitiesResponseToObjects(response5.items)).toEqual([
+ entityFrom('A'),
+ entityFrom('B'),
+ ]);
expect(response5.pageInfo.nextCursor).toBeDefined();
expect(response5.pageInfo.prevCursor).toBeUndefined();
expect(response5.totalItems).toBe(names.length);
@@ -941,7 +971,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response6 = await catalog.queryEntities(request6);
- expect(response6.items).toEqual([entityFrom('C'), entityFrom('D')]);
+ expect(entitiesResponseToObjects(response6.items)).toEqual([
+ entityFrom('C'),
+ entityFrom('D'),
+ ]);
expect(response6.pageInfo.nextCursor).toBeDefined();
expect(response6.pageInfo.prevCursor).toBeDefined();
expect(response6.totalItems).toBe(names.length);
@@ -953,7 +986,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response7 = await catalog.queryEntities(request7);
- expect(response7.items).toEqual([entityFrom('E'), entityFrom('F')]);
+ expect(entitiesResponseToObjects(response7.items)).toEqual([
+ entityFrom('E'),
+ entityFrom('F'),
+ ]);
expect(response7.pageInfo.nextCursor).toBeDefined();
expect(response7.pageInfo.prevCursor).toBeDefined();
expect(response7.totalItems).toBe(names.length);
@@ -965,7 +1001,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response7bis = await catalog.queryEntities(request7bis);
- expect(response7bis.items).toEqual([
+ expect(entitiesResponseToObjects(response7bis.items)).toEqual([
entityFrom('E'),
entityFrom('F'),
entityFrom('G'),
@@ -981,7 +1017,9 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response8 = await catalog.queryEntities(request8);
- expect(response8.items).toEqual([entityFrom('G')]);
+ expect(entitiesResponseToObjects(response8.items)).toEqual([
+ entityFrom('G'),
+ ]);
expect(response8.pageInfo.nextCursor).toBeUndefined();
expect(response8.pageInfo.prevCursor).toBeDefined();
expect(response8.totalItems).toBe(names.length);
@@ -1035,7 +1073,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response1 = await catalog.queryEntities(request1);
- expect(response1.items).toEqual([entityFrom('G'), entityFrom('F')]);
+ expect(entitiesResponseToObjects(response1.items)).toEqual([
+ entityFrom('G'),
+ entityFrom('F'),
+ ]);
expect(response1.pageInfo.nextCursor).toBeDefined();
expect(response1.pageInfo.prevCursor).toBeUndefined();
expect(response1.totalItems).toBe(names.length);
@@ -1047,7 +1088,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response2 = await catalog.queryEntities(request2);
- expect(response2.items).toEqual([entityFrom('E'), entityFrom('D')]);
+ expect(entitiesResponseToObjects(response2.items)).toEqual([
+ entityFrom('E'),
+ entityFrom('D'),
+ ]);
expect(response2.pageInfo.nextCursor).toBeDefined();
expect(response2.pageInfo.prevCursor).toBeDefined();
expect(response2.totalItems).toBe(names.length);
@@ -1059,7 +1103,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response3 = await catalog.queryEntities(request3);
- expect(response3.items).toEqual([entityFrom('C'), entityFrom('B')]);
+ expect(entitiesResponseToObjects(response3.items)).toEqual([
+ entityFrom('C'),
+ entityFrom('B'),
+ ]);
expect(response3.pageInfo.nextCursor).toBeDefined();
expect(response3.pageInfo.prevCursor).toBeDefined();
expect(response3.totalItems).toBe(names.length);
@@ -1072,7 +1119,10 @@ describe('DefaultEntitiesCatalog', () => {
};
const response4 = await catalog.queryEntities(request4);
- expect(response4.items).toEqual([entityFrom('E'), entityFrom('D')]);
+ expect(entitiesResponseToObjects(response4.items)).toEqual([
+ entityFrom('E'),
+ entityFrom('D'),
+ ]);
expect(response4.pageInfo.nextCursor).toBeDefined();
expect(response4.pageInfo.prevCursor).toBeDefined();
expect(response4.totalItems).toBe(names.length);
@@ -1084,7 +1134,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response5 = await catalog.queryEntities(request5);
- expect(response5.items).toEqual([entityFrom('G'), entityFrom('F')]);
+ expect(entitiesResponseToObjects(response5.items)).toEqual([
+ entityFrom('G'),
+ entityFrom('F'),
+ ]);
expect(response5.pageInfo.nextCursor).toBeDefined();
expect(response5.pageInfo.prevCursor).toBeUndefined();
expect(response5.totalItems).toBe(names.length);
@@ -1096,7 +1149,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response6 = await catalog.queryEntities(request6);
- expect(response6.items).toEqual([entityFrom('E'), entityFrom('D')]);
+ expect(entitiesResponseToObjects(response6.items)).toEqual([
+ entityFrom('E'),
+ entityFrom('D'),
+ ]);
expect(response6.pageInfo.nextCursor).toBeDefined();
expect(response6.pageInfo.prevCursor).toBeDefined();
expect(response6.totalItems).toBe(names.length);
@@ -1108,7 +1164,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response7 = await catalog.queryEntities(request7);
- expect(response7.items).toEqual([entityFrom('C'), entityFrom('B')]);
+ expect(entitiesResponseToObjects(response7.items)).toEqual([
+ entityFrom('C'),
+ entityFrom('B'),
+ ]);
expect(response7.pageInfo.nextCursor).toBeDefined();
expect(response7.pageInfo.prevCursor).toBeDefined();
expect(response7.totalItems).toBe(names.length);
@@ -1120,7 +1179,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response7bis = await catalog.queryEntities(request7bis);
- expect(response7bis.items).toEqual([
+ expect(entitiesResponseToObjects(response7bis.items)).toEqual([
entityFrom('C'),
entityFrom('B'),
entityFrom('A'),
@@ -1136,7 +1195,9 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response8 = await catalog.queryEntities(request8);
- expect(response8.items).toEqual([entityFrom('A')]);
+ expect(entitiesResponseToObjects(response8.items)).toEqual([
+ entityFrom('A'),
+ ]);
expect(response8.pageInfo.nextCursor).toBeUndefined();
expect(response8.pageInfo.prevCursor).toBeDefined();
expect(response8.totalItems).toBe(names.length);
@@ -1188,7 +1249,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response = await catalog.queryEntities(request);
- expect(response.items).toEqual([
+ expect(entitiesResponseToObjects(response.items)).toEqual([
entityFrom('atcatss'),
entityFrom('cat'),
entityFrom('dogcat'),
@@ -1246,7 +1307,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response = await catalog.queryEntities(request);
- expect(response.items).toEqual(entities);
+ expect(entitiesResponseToObjects(response.items)).toEqual(entities);
expect(response.pageInfo.nextCursor).toBeUndefined();
expect(response.pageInfo.prevCursor).toBeUndefined();
expect(response.totalItems).toBe(1);
@@ -1301,7 +1362,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response = await catalog.queryEntities(request);
- expect(response.items).toEqual([
+ expect(entitiesResponseToObjects(response.items)).toEqual([
entityFrom('1', { uid: 'id1', title: 'cat' }),
entityFrom('2', { uid: 'id2', title: 'atcatss' }),
entityFrom('4', { uid: 'id4', title: 'dogcat' }),
@@ -1314,7 +1375,7 @@ describe('DefaultEntitiesCatalog', () => {
...request,
limit: 2,
});
- expect(paginatedResponse.items).toEqual([
+ expect(entitiesResponseToObjects(paginatedResponse.items)).toEqual([
entityFrom('1', { uid: 'id1', title: 'cat' }),
entityFrom('2', { uid: 'id2', title: 'atcatss' }),
]);
@@ -1326,7 +1387,7 @@ describe('DefaultEntitiesCatalog', () => {
cursor: paginatedResponse.pageInfo.nextCursor!,
credentials: mockCredentials.none(),
});
- expect(paginatedResponseNext.items).toEqual([
+ expect(entitiesResponseToObjects(paginatedResponseNext.items)).toEqual([
entityFrom('4', { uid: 'id4', title: 'dogcat' }),
]);
expect(paginatedResponseNext.pageInfo.nextCursor).toBeUndefined();
@@ -1404,7 +1465,7 @@ describe('DefaultEntitiesCatalog', () => {
};
const response = await catalog.queryEntities(request);
- expect(response.items).toEqual([
+ expect(entitiesResponseToObjects(response.items)).toEqual([
entityFrom('KingOfTheJungle', { uid: 'id0', title: 'lion' }),
entityFrom('NotKingOfTheJungle', { uid: 'id1', title: 'cat' }),
entityFrom('NotACatKing', { uid: 'id2', title: 'atcatss' }),
@@ -1418,7 +1479,7 @@ describe('DefaultEntitiesCatalog', () => {
...request,
limit: 2,
});
- expect(paginatedResponse.items).toEqual([
+ expect(entitiesResponseToObjects(paginatedResponse.items)).toEqual([
entityFrom('KingOfTheJungle', { uid: 'id0', title: 'lion' }),
entityFrom('NotKingOfTheJungle', { uid: 'id1', title: 'cat' }),
]);
@@ -1430,7 +1491,7 @@ describe('DefaultEntitiesCatalog', () => {
cursor: paginatedResponse.pageInfo.nextCursor!,
credentials: mockCredentials.none(),
});
- expect(paginatedResponseNext.items).toEqual([
+ expect(entitiesResponseToObjects(paginatedResponseNext.items)).toEqual([
entityFrom('NotACatKing', { uid: 'id2', title: 'atcatss' }),
entityFrom('123', { uid: 'id3', title: 'king' }),
]);
@@ -1474,7 +1535,11 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response = await catalog.queryEntities(request);
- expect(response).toEqual({ totalItems: 20, items: [], pageInfo: {} });
+ expect(response).toEqual({
+ totalItems: 20,
+ items: { type: 'raw', entities: [] },
+ pageInfo: {},
+ });
},
);
@@ -1509,7 +1574,10 @@ describe('DefaultEntitiesCatalog', () => {
let response = await catalog.queryEntities(request);
expect(response).toEqual({
totalItems: 0,
- items: expect.objectContaining({ length: 10 }),
+ items: {
+ type: 'raw',
+ entities: expect.objectContaining({ length: 10 }),
+ },
pageInfo: { nextCursor: expect.anything() },
});
response = await catalog.queryEntities({
@@ -1518,7 +1586,10 @@ describe('DefaultEntitiesCatalog', () => {
});
expect(response).toEqual({
totalItems: 0,
- items: expect.objectContaining({ length: 5 }),
+ items: {
+ type: 'raw',
+ entities: expect.objectContaining({ length: 5 }),
+ },
pageInfo: { prevCursor: expect.anything() },
});
},
@@ -1553,7 +1624,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response1 = await catalog.queryEntities(request1);
- expect(response1.items).toMatchObject([
+ expect(entitiesResponseToObjects(response1.items)).toMatchObject([
entityFrom('AA'),
entityFrom('AA'),
]);
@@ -1568,7 +1639,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response2 = await catalog.queryEntities(request2);
- expect(response2.items).toMatchObject([
+ expect(entitiesResponseToObjects(response2.items)).toMatchObject([
entityFrom('AA'),
entityFrom('AA'),
]);
@@ -1583,7 +1654,10 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response3 = await catalog.queryEntities(request3);
- expect(response3.items).toEqual([entityFrom('CC'), entityFrom('DD')]);
+ expect(entitiesResponseToObjects(response3.items)).toEqual([
+ entityFrom('CC'),
+ entityFrom('DD'),
+ ]);
expect(response3.pageInfo.nextCursor).toBeUndefined();
expect(response3.pageInfo.prevCursor).toBeDefined();
expect(response3.totalItems).toBe(6);
@@ -1595,7 +1669,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response4 = await catalog.queryEntities(request4);
- expect(response4.items).toMatchObject([
+ expect(entitiesResponseToObjects(response4.items)).toMatchObject([
entityFrom('AA'),
entityFrom('AA'),
]);
@@ -1610,7 +1684,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response5 = await catalog.queryEntities(request5);
- expect(response5.items).toMatchObject([
+ expect(entitiesResponseToObjects(response5.items)).toMatchObject([
entityFrom('AA'),
entityFrom('AA'),
]);
@@ -1678,7 +1752,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response1 = await catalog.queryEntities(request1);
- expect(response1.items).toMatchObject([
+ expect(entitiesResponseToObjects(response1.items)).toMatchObject([
entityFrom('AA', { uid: '1', kind: 'included' }),
entityFrom('AA', { uid: '2', kind: 'included' }),
]);
@@ -1693,7 +1767,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response2 = await catalog.queryEntities(request2);
- expect(response2.items).toMatchObject([
+ expect(entitiesResponseToObjects(response2.items)).toMatchObject([
entityFrom('AA', { uid: '4', kind: 'included' }),
entityFrom('AA', { uid: '5', kind: 'included' }),
]);
@@ -1737,7 +1811,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response1 = await catalog.queryEntities(request1);
- expect(response1.items).toMatchObject([
+ expect(entitiesResponseToObjects(response1.items)).toMatchObject([
entityFrom('AA'),
entityFrom('CC'),
]);
@@ -1752,7 +1826,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response2 = await catalog.queryEntities(request2);
- expect(response2.items).toMatchObject([
+ expect(entitiesResponseToObjects(response2.items)).toMatchObject([
entityFrom('DD'),
entityFrom('AA', { namespace: 'namespace2' }),
]);
@@ -1767,7 +1841,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response3 = await catalog.queryEntities(request3);
- expect(response3.items).toMatchObject([
+ expect(entitiesResponseToObjects(response3.items)).toMatchObject([
entityFrom('AA', { namespace: 'namespace3' }),
entityFrom('AA', { namespace: 'namespace4' }),
]);
@@ -1782,7 +1856,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response4 = await catalog.queryEntities(request4);
- expect(response4.items).toMatchObject([
+ expect(entitiesResponseToObjects(response4.items)).toMatchObject([
entityFrom('DD'),
entityFrom('AA', { namespace: 'namespace2' }),
]);
@@ -1797,7 +1871,7 @@ describe('DefaultEntitiesCatalog', () => {
credentials: mockCredentials.none(),
};
const response5 = await catalog.queryEntities(request5);
- expect(response5.items).toMatchObject([
+ expect(entitiesResponseToObjects(response5.items)).toMatchObject([
entityFrom('AA'),
entityFrom('CC'),
]);
@@ -1830,7 +1904,9 @@ describe('DefaultEntitiesCatalog', () => {
orderFields: [{ field: 'metadata.title', order: 'asc' }],
credentials: mockCredentials.none(),
})
- .then(r => r.items.map(e => e.metadata.name)),
+ .then(r =>
+ entitiesResponseToObjects(r.items).map(e => e!.metadata.name),
+ ),
).resolves.toEqual(['CC', 'BB', 'AA']); // 'AA' has no title, ends up last
await expect(
@@ -1839,7 +1915,9 @@ describe('DefaultEntitiesCatalog', () => {
orderFields: [{ field: 'metadata.title', order: 'desc' }],
credentials: mockCredentials.none(),
})
- .then(r => r.items.map(e => e.metadata.name)),
+ .then(r =>
+ entitiesResponseToObjects(r.items).map(e => e!.metadata.name),
+ ),
).resolves.toEqual(['BB', 'CC', 'AA']); // 'AA' has no title, ends up last
},
);
@@ -1869,7 +1947,9 @@ describe('DefaultEntitiesCatalog', () => {
limit: 10,
credentials: mockCredentials.none(),
})
- .then(r => r.items.map(e => e.metadata.name)),
+ .then(r =>
+ entitiesResponseToObjects(r.items).map(e => e!.metadata.name),
+ ),
).resolves.toEqual(['AA', 'BB']);
// simulate a situation where stitching is not yet complete
@@ -1884,7 +1964,9 @@ describe('DefaultEntitiesCatalog', () => {
limit: 10,
credentials: mockCredentials.none(),
})
- .then(r => r.items.map(e => e.metadata.name)),
+ .then(r =>
+ entitiesResponseToObjects(r.items).map(e => e!.metadata.name),
+ ),
).resolves.toEqual(['BB']);
},
);
diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts
index fa43eb79d2..f0e0667bef 100644
--- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts
+++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts
@@ -45,17 +45,16 @@ import {
import { Stitcher } from '../stitching/types';
import {
- expandLegacyCompoundRelationRefsInResponse,
+ expandLegacyCompoundRelationsInEntity,
isQueryEntitiesCursorRequest,
isQueryEntitiesInitialRequest,
} from './util';
-import {
- EntitiesSearchFilter,
- EntityFilter,
-} from '@backstage/plugin-catalog-node';
+import { EntityFilter } from '@backstage/plugin-catalog-node';
import { LoggerService } from '@backstage/backend-plugin-api';
+import { applyEntityFilterToQuery } from './request/applyEntityFilterToQuery';
+import { processRawEntitiesResult } from './response';
-const DEFAULT_LIMIT = 20;
+const DEFAULT_LIMIT = 200;
function parsePagination(input?: EntityPagination): EntityPagination {
if (!input) {
@@ -102,101 +101,29 @@ function stringifyPagination(
return base64;
}
-function addCondition(
- queryBuilder: Knex.QueryBuilder,
- db: Knex,
- filter: EntitiesSearchFilter,
- negate: boolean = false,
- entityIdField = 'entity_id',
-): void {
- const key = filter.key.toLowerCase();
- const values = filter.values?.map(v => v.toLowerCase());
-
- // NOTE(freben): This used to be a set of OUTER JOIN, which may seem to
- // make a lot of sense. However, it had abysmal performance on sqlite
- // when datasets grew large, so we're using IN instead.
- const matchQuery = db('search')
- .select('search.entity_id')
- .where({ key })
- .andWhere(function keyFilter() {
- if (values?.length === 1) {
- this.where({ value: values.at(0) });
- } else if (values) {
- this.andWhere('value', 'in', values);
- }
- });
- queryBuilder.andWhere(entityIdField, negate ? 'not in' : 'in', matchQuery);
-}
-
-function isEntitiesSearchFilter(
- filter: EntitiesSearchFilter | EntityFilter,
-): filter is EntitiesSearchFilter {
- return filter.hasOwnProperty('key');
-}
-
-function isOrEntityFilter(
- filter: { anyOf: EntityFilter[] } | EntityFilter,
-): filter is { anyOf: EntityFilter[] } {
- return filter.hasOwnProperty('anyOf');
-}
-
-function isNegationEntityFilter(
- filter: { not: EntityFilter } | EntityFilter,
-): filter is { not: EntityFilter } {
- return filter.hasOwnProperty('not');
-}
-
-function parseFilter(
- filter: EntityFilter,
- query: Knex.QueryBuilder,
- db: Knex,
- negate: boolean = false,
- entityIdField = 'entity_id',
-): Knex.QueryBuilder {
- if (isNegationEntityFilter(filter)) {
- return parseFilter(filter.not, query, db, !negate, entityIdField);
- }
-
- if (isEntitiesSearchFilter(filter)) {
- return query.andWhere(function filterFunction() {
- addCondition(this, db, filter, negate, entityIdField);
- });
- }
-
- return query[negate ? 'andWhereNot' : 'andWhere'](function filterFunction() {
- if (isOrEntityFilter(filter)) {
- for (const subFilter of filter.anyOf ?? []) {
- this.orWhere(subQuery =>
- parseFilter(subFilter, subQuery, db, false, entityIdField),
- );
- }
- } else {
- for (const subFilter of filter.allOf ?? []) {
- this.andWhere(subQuery =>
- parseFilter(subFilter, subQuery, db, false, entityIdField),
- );
- }
- }
- });
-}
-
export class DefaultEntitiesCatalog implements EntitiesCatalog {
private readonly database: Knex;
private readonly logger: LoggerService;
private readonly stitcher: Stitcher;
+ private readonly disableRelationsCompatibility: boolean;
constructor(options: {
database: Knex;
logger: LoggerService;
stitcher: Stitcher;
+ disableRelationsCompatibility?: boolean;
}) {
this.database = options.database;
this.logger = options.logger;
this.stitcher = options.stitcher;
+ this.disableRelationsCompatibility = Boolean(
+ options.disableRelationsCompatibility,
+ );
}
async entities(request?: EntitiesRequest): Promise {
const db = this.database;
+ const { limit, offset } = parsePagination(request?.pagination);
let entitiesQuery =
db('final_entities').select('final_entities.*');
@@ -216,13 +143,12 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
entitiesQuery = entitiesQuery.whereNotNull('final_entities.final_entity');
if (request?.filter) {
- entitiesQuery = parseFilter(
- request.filter,
- entitiesQuery,
- db,
- false,
- 'final_entities.entity_id',
- );
+ entitiesQuery = applyEntityFilterToQuery({
+ filter: request.filter,
+ targetQuery: entitiesQuery,
+ onEntityIdField: 'final_entities.entity_id',
+ knex: db,
+ });
}
request?.order?.forEach(({ order }, index) => {
@@ -248,7 +174,6 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
entitiesQuery.orderBy('final_entities.entity_id', 'asc'); // stable sort
}
- const { limit, offset } = parsePagination(request?.pagination);
if (limit !== undefined) {
entitiesQuery = entitiesQuery.limit(limit + 1);
}
@@ -271,16 +196,19 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
};
}
- let entities: Entity[] = rows.map(e => JSON.parse(e.final_entity!));
-
- if (request?.fields) {
- entities = entities.map(e => request.fields!(e));
- }
-
- expandLegacyCompoundRelationRefsInResponse(entities);
-
return {
- entities,
+ entities: processRawEntitiesResult(
+ rows.map(r => r.final_entity!),
+ this.disableRelationsCompatibility
+ ? request?.fields
+ : e => {
+ expandLegacyCompoundRelationsInEntity(e);
+ if (request?.fields) {
+ return request.fields(e);
+ }
+ return e;
+ },
+ ),
pageInfo,
};
}
@@ -288,7 +216,7 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
async entitiesBatch(
request: EntitiesBatchRequest,
): Promise {
- const lookup = new Map();
+ const lookup = new Map();
for (const chunk of lodashChunk(request.entityRefs, 200)) {
let query = this.database('final_entities')
@@ -299,34 +227,27 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
.whereIn('final_entities.entity_ref', chunk);
if (request?.filter) {
- query = parseFilter(
- request.filter,
- query,
- this.database,
- false,
- 'final_entities.entity_id',
- );
+ query = applyEntityFilterToQuery({
+ filter: request.filter,
+ targetQuery: query,
+ onEntityIdField: 'final_entities.entity_id',
+ knex: this.database,
+ });
}
for (const row of await query) {
- lookup.set(row.entityRef, row.entity ? JSON.parse(row.entity) : null);
+ lookup.set(row.entityRef, row.entity ? row.entity : null);
}
}
- let items = request.entityRefs.map(ref => lookup.get(ref) ?? null);
+ const items = request.entityRefs.map(ref => lookup.get(ref) ?? null);
- if (request.fields) {
- items = items.map(e => e && request.fields!(e));
- }
-
- return { items };
+ return { items: processRawEntitiesResult(items, request.fields) };
}
async queryEntities(
request: QueryEntitiesRequest,
): Promise {
- const db = this.database;
-
const limit = request.limit ?? DEFAULT_LIMIT;
const cursor: Omit & {
@@ -354,7 +275,7 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
// The first part of the query builder is a subquery that applies all of the
// filtering.
- const dbQuery = db.with(
+ const dbQuery = this.database.with(
'filtered',
['entity_id', 'final_entity', ...(sortField ? ['value'] : [])],
inner => {
@@ -383,13 +304,12 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
// Add regular filters, if given
if (cursor.filter) {
- parseFilter(
- cursor.filter,
- inner,
- db,
- false,
- 'final_entities.entity_id',
- );
+ applyEntityFilterToQuery({
+ filter: cursor.filter,
+ targetQuery: inner,
+ onEntityIdField: 'final_entities.entity_id',
+ knex: this.database,
+ });
}
// Add full text search filters, if given
@@ -406,20 +326,20 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
// If there is one item, apply the like query to the top level query which is already
// filtered based on the singular sortField.
inner.andWhereRaw(
- 'value like ?',
+ 'search.value like ?',
`%${normalizedFullTextFilterTerm.toLocaleLowerCase('en-US')}%`,
);
} else {
- const matchQuery = db('search')
- .select('entity_id')
+ const matchQuery = this.database('search')
+ .select('search.entity_id')
// textFilterFields must be lowercased to match searchable keys in database, i.e. spec.profile.displayName -> spec.profile.displayname
.whereIn(
- 'key',
+ 'search.key',
textFilterFields.map(field => field.toLocaleLowerCase('en-US')),
)
.andWhere(function keyFilter() {
this.andWhereRaw(
- 'value like ?',
+ 'search.value like ?',
`%${normalizedFullTextFilterTerm.toLocaleLowerCase(
'en-US',
)}%`,
@@ -457,13 +377,13 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
const [first, second] = cursor.orderFieldValues;
dbQuery.andWhere(function nested() {
this.where(
- 'value',
+ 'filtered.value',
isFetchingBackwards !== isOrderingDescending ? '<' : '>',
first,
)
- .orWhere('value', '=', first)
+ .orWhere('filtered.value', '=', first)
.andWhere(
- 'entity_id',
+ 'filtered.entity_id',
isFetchingBackwards !== isOrderingDescending ? '<' : '>',
second,
);
@@ -480,20 +400,20 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
if (isFetchingBackwards) {
order = invertOrder(order);
}
- if (db.client.config.client === 'pg') {
+ if (this.database.client.config.client === 'pg') {
// pg correctly orders by the column value and handling nulls in one go
dbQuery.orderBy([
...(sortField
? [
{
- column: 'value',
+ column: 'filtered.value',
order,
nulls: 'last',
},
]
: []),
{
- column: 'entity_id',
+ column: 'filtered.entity_id',
order,
},
]);
@@ -505,18 +425,18 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
...(sortField
? [
{
- column: 'value',
+ column: 'filtered.value',
order: undefined,
nulls: 'last',
},
{
- column: 'value',
+ column: 'filtered.value',
order,
},
]
: []),
{
- column: 'entity_id',
+ column: 'filtered.entity_id',
order,
},
]);
@@ -590,12 +510,11 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
}
: undefined;
- const items = rows
- .map(e => JSON.parse(e.final_entity!))
- .map(e => (request.fields ? request.fields(e) : e));
-
return {
- items,
+ items: processRawEntitiesResult(
+ rows.map(r => r.final_entity!),
+ request.fields,
+ ),
pageInfo: {
...(!!prevCursor && { prevCursor }),
...(!!nextCursor && { nextCursor }),
@@ -768,13 +687,12 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
.groupBy(['search.key', 'search.original_value']);
if (request.filter) {
- parseFilter(
- request.filter,
- query,
- this.database,
- false,
- 'search.entity_id',
- );
+ applyEntityFilterToQuery({
+ filter: request.filter,
+ targetQuery: query,
+ onEntityIdField: 'search.entity_id',
+ knex: this.database,
+ });
}
const rows = await query;
diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts
index e728017f0b..53f831d320 100644
--- a/plugins/catalog-backend/src/service/createRouter.test.ts
+++ b/plugins/catalog-backend/src/service/createRouter.test.ts
@@ -136,7 +136,7 @@ describe('createRouter readonly disabled', () => {
];
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items: [entities[0]],
+ items: { type: 'object', entities: [entities[0]] },
pageInfo: {},
totalItems: 1,
});
@@ -149,7 +149,7 @@ describe('createRouter readonly disabled', () => {
it('parses single and multiple request parameters and passes them down', async () => {
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items: [],
+ items: { type: 'object', entities: [] },
pageInfo: {},
totalItems: 0,
});
@@ -185,7 +185,7 @@ describe('createRouter readonly disabled', () => {
];
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items,
+ items: { type: 'object', entities: items },
totalItems: 100,
pageInfo: { nextCursor: mockCursor() },
});
@@ -203,7 +203,7 @@ describe('createRouter readonly disabled', () => {
it('parses initial request', async () => {
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items: [],
+ items: { type: 'object', entities: [] },
pageInfo: {},
totalItems: 0,
});
@@ -239,7 +239,7 @@ describe('createRouter readonly disabled', () => {
it('parses encoded params request', async () => {
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items: [],
+ items: { type: 'object', entities: [] },
pageInfo: {},
totalItems: 0,
});
@@ -283,7 +283,7 @@ describe('createRouter readonly disabled', () => {
];
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items,
+ items: { type: 'object', entities: items },
totalItems: 100,
pageInfo: { nextCursor: mockCursor() },
});
@@ -312,7 +312,7 @@ describe('createRouter readonly disabled', () => {
];
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items,
+ items: { type: 'object', entities: items },
totalItems: 100,
pageInfo: {
nextCursor: mockCursor({ fullTextFilter: { term: 'mySearch' } }),
@@ -354,7 +354,7 @@ describe('createRouter readonly disabled', () => {
];
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items,
+ items: { type: 'object', entities: items },
totalItems: 100,
pageInfo: { nextCursor: mockCursor() },
});
@@ -379,7 +379,7 @@ describe('createRouter readonly disabled', () => {
];
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items,
+ items: { type: 'object', entities: items },
totalItems: 100,
pageInfo: { nextCursor: mockCursor() },
});
@@ -402,7 +402,7 @@ describe('createRouter readonly disabled', () => {
},
};
entitiesCatalog.entities.mockResolvedValue({
- entities: [entity],
+ entities: { type: 'object', entities: [entity] },
pageInfo: { hasNextPage: false },
});
@@ -419,7 +419,7 @@ describe('createRouter readonly disabled', () => {
it('responds with a 404 for missing entities', async () => {
entitiesCatalog.entities.mockResolvedValue({
- entities: [],
+ entities: { type: 'object', entities: [] },
pageInfo: { hasNextPage: false },
});
@@ -446,7 +446,7 @@ describe('createRouter readonly disabled', () => {
},
};
entitiesCatalog.entitiesBatch.mockResolvedValue({
- items: [entity],
+ items: { type: 'object', entities: [entity] },
});
const response = await request(app).get('/entities/by-name/k/ns/n');
@@ -462,7 +462,7 @@ describe('createRouter readonly disabled', () => {
it('responds with a 404 for missing entities', async () => {
entitiesCatalog.entitiesBatch.mockResolvedValue({
- items: [null],
+ items: { type: 'object', entities: [null] },
});
const response = await request(app).get('/entities/by-name/b/d/c');
@@ -533,7 +533,9 @@ describe('createRouter readonly disabled', () => {
},
};
const entityRef = stringifyEntityRef(entity);
- entitiesCatalog.entitiesBatch.mockResolvedValue({ items: [entity] });
+ entitiesCatalog.entitiesBatch.mockResolvedValue({
+ items: { type: 'object', entities: [entity] },
+ });
const response = await request(app)
.post('/entities/by-refs?filter=kind=Component')
.set('Content-Type', 'application/json')
@@ -858,7 +860,7 @@ describe('createRouter readonly disabled', () => {
});
});
-describe('createRouter readonly enabled', () => {
+describe('createRouter readonly and raw json enabled', () => {
let entitiesCatalog: jest.Mocked;
let app: express.Express;
let locationService: jest.Mocked;
@@ -881,6 +883,7 @@ describe('createRouter readonly enabled', () => {
getLocationByEntity: jest.fn(),
};
const router = await createRouter({
+ disableRelationsCompatibility: true,
entitiesCatalog,
locationService,
logger: mockServices.logger.mock(),
@@ -908,7 +911,7 @@ describe('createRouter readonly enabled', () => {
];
entitiesCatalog.queryEntities.mockResolvedValueOnce({
- items: [entities[0]],
+ items: { type: 'raw', entities: [JSON.stringify(entities[0])] },
pageInfo: {},
totalItems: 1,
});
@@ -1128,7 +1131,7 @@ describe('NextRouter permissioning', () => {
},
};
entitiesCatalog.entities.mockResolvedValueOnce({
- entities: [spideySense],
+ entities: { type: 'object', entities: [spideySense] },
pageInfo: { hasNextPage: false },
});
diff --git a/plugins/catalog-backend/src/service/createRouter.ts b/plugins/catalog-backend/src/service/createRouter.ts
index d70419c565..601b0b1098 100644
--- a/plugins/catalog-backend/src/service/createRouter.ts
+++ b/plugins/catalog-backend/src/service/createRouter.ts
@@ -23,7 +23,7 @@ import {
stringifyEntityRef,
} from '@backstage/catalog-model';
import { Config } from '@backstage/config';
-import { InputError, NotFoundError, serializeError } from '@backstage/errors';
+import { InputError, serializeError } from '@backstage/errors';
import express from 'express';
import yn from 'yn';
import { z } from 'zod';
@@ -41,10 +41,9 @@ import { parseEntityFacetParams } from './request/parseEntityFacetParams';
import { parseEntityOrderParams } from './request/parseEntityOrderParams';
import { LocationService, RefreshService } from './types';
import {
- createEntityArrayJsonStream,
disallowReadonlyMode,
encodeCursor,
- expandLegacyCompoundRelationRefsInResponse,
+ expandLegacyCompoundRelationsInEntity,
locationInput,
validateRequestBody,
} from './util';
@@ -60,6 +59,12 @@ import {
import { LocationAnalyzer } from '@backstage/plugin-catalog-node';
import { AuthorizedValidationService } from './AuthorizedValidationService';
import { DeferredPromise, createDeferred } from '@backstage/types';
+import {
+ createEntityArrayJsonStream,
+ processEntitiesResponseItems,
+ writeEntitiesResponse,
+ writeSingleEntityResponse,
+} from './response';
/**
* Options used by {@link createRouter}.
@@ -80,6 +85,7 @@ export interface RouterOptions {
auth: AuthService;
httpAuth: HttpAuthService;
permissionsService: PermissionsService;
+ disableRelationsCompatibility?: boolean;
}
/**
@@ -107,6 +113,7 @@ export async function createRouter(
permissionsService,
auth,
httpAuth,
+ disableRelationsCompatibility = false,
} = options;
const readonlyEnabled =
@@ -164,7 +171,7 @@ export async function createRouter(
res.setHeader('link', `<${url.pathname}${url.search}>; rel="next"`);
}
- res.json(entities);
+ await writeEntitiesResponse(res, entities);
return;
}
@@ -203,12 +210,17 @@ export async function createRouter(
: { credentials, fields, limit, cursor },
);
- if (result.items.length) {
+ if (result.items.entities.length) {
await locks?.writeLock;
signal.throwIfAborted();
- expandLegacyCompoundRelationRefsInResponse(result.items);
+ if (!disableRelationsCompatibility) {
+ result.items = processEntitiesResponseItems(
+ result.items,
+ expandLegacyCompoundRelationsInEntity,
+ );
+ }
if (!responseStream.send(result.items)) {
// The kernel buffer is full. Create the lock but do not await it
// yet - we can better spend our time going to the next round of
@@ -241,8 +253,8 @@ export async function createRouter(
credentials: await httpAuth.credentials(req),
});
- res.json({
- items,
+ await writeEntitiesResponse(res, items, entities => ({
+ items: entities,
totalItems,
pageInfo: {
...(pageInfo.nextCursor && {
@@ -252,7 +264,7 @@ export async function createRouter(
prevCursor: encodeCursor(pageInfo.prevCursor),
}),
},
- });
+ }));
})
.get('/entities/by-uid/:uid', async (req, res) => {
const { uid } = req.params;
@@ -260,10 +272,7 @@ export async function createRouter(
filter: basicEntityFilter({ 'metadata.uid': uid }),
credentials: await httpAuth.credentials(req),
});
- if (!entities.length) {
- throw new NotFoundError(`No entity with uid ${uid}`);
- }
- res.status(200).json(entities[0]);
+ writeSingleEntityResponse(res, entities, `No entity with uid ${uid}`);
})
.delete('/entities/by-uid/:uid', async (req, res) => {
const { uid } = req.params;
@@ -278,12 +287,11 @@ export async function createRouter(
entityRefs: [stringifyEntityRef({ kind, namespace, name })],
credentials: await httpAuth.credentials(req),
});
- if (!items[0]) {
- throw new NotFoundError(
- `No entity named '${name}' found, with kind '${kind}' in namespace '${namespace}'`,
- );
- }
- res.status(200).json(items[0]);
+ writeSingleEntityResponse(
+ res,
+ items,
+ `No entity named '${name}' found, with kind '${kind}' in namespace '${namespace}'`,
+ );
})
.get(
'/entities/by-name/:kind/:namespace/:name/ancestry',
@@ -298,13 +306,15 @@ export async function createRouter(
)
.post('/entities/by-refs', async (req, res) => {
const request = entitiesBatchRequest(req);
- const response = await entitiesCatalog.entitiesBatch({
+ const { items } = await entitiesCatalog.entitiesBatch({
entityRefs: request.entityRefs,
filter: parseEntityFilterParams(req.query),
fields: parseEntityTransformParams(req.query, request.fields),
credentials: await httpAuth.credentials(req),
});
- res.status(200).json(response);
+ await writeEntitiesResponse(res, items, entities => ({
+ items: entities,
+ }));
})
.get('/entity-facets', async (req, res) => {
const response = await entitiesCatalog.facets({
diff --git a/plugins/catalog-backend/src/service/request/applyEntityFilterToQuery.test.ts b/plugins/catalog-backend/src/service/request/applyEntityFilterToQuery.test.ts
new file mode 100644
index 0000000000..ea64f5b400
--- /dev/null
+++ b/plugins/catalog-backend/src/service/request/applyEntityFilterToQuery.test.ts
@@ -0,0 +1,196 @@
+/*
+ * 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 { TestDatabases } from '@backstage/backend-test-utils';
+import { applyEntityFilterToQuery } from './applyEntityFilterToQuery';
+import {
+ DbFinalEntitiesRow,
+ DbRefreshStateRow,
+ DbSearchRow,
+} from '../../database/tables';
+import { Knex } from 'knex';
+import { applyDatabaseMigrations } from '../../database/migrations';
+import { EntityFilter } from '@backstage/plugin-catalog-node';
+import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
+import { v4 as uuid } from 'uuid';
+import { buildEntitySearch } from '../../database/operations/stitcher/buildEntitySearch';
+
+jest.setTimeout(60_000);
+
+const databases = TestDatabases.create();
+const strategies = ['in', 'join'] as const;
+
+describe.each(databases.eachSupportedId())(
+ 'applyEntityFilterToQuery, %p',
+ databaseId => {
+ // #region setup
+ let knex: Knex;
+
+ beforeAll(async () => {
+ knex = await databases.init(databaseId);
+ await applyDatabaseMigrations(knex);
+ await addEntity({
+ apiVersion: 'a',
+ kind: 'k',
+ metadata: { name: '1', namespace: 'default' },
+ spec: {
+ foo: 'a',
+ unique: true,
+ },
+ });
+ await addEntity({
+ apiVersion: 'a',
+ kind: 'k',
+ metadata: { name: '2', namespace: 'default' },
+ spec: {
+ foo: 'a',
+ },
+ });
+ await addEntity({
+ apiVersion: 'a',
+ kind: 'k',
+ metadata: { name: '3', namespace: 'default' },
+ spec: {
+ foo: 'b',
+ },
+ });
+ await addEntity({
+ apiVersion: 'a',
+ kind: 'k',
+ metadata: { name: '4', namespace: 'default' },
+ spec: {},
+ });
+ });
+
+ afterAll(async () => {
+ knex.destroy();
+ });
+
+ async function addEntity(entity: Entity) {
+ const id = uuid();
+ const entityRef = stringifyEntityRef(entity);
+ const entityJson = JSON.stringify(entity);
+
+ await knex('refresh_state').insert({
+ entity_id: id,
+ entity_ref: entityRef,
+ unprocessed_entity: entityJson,
+ errors: '[]',
+ next_update_at: '2031-01-01 23:00:00',
+ last_discovery_at: '2021-04-01 13:37:00',
+ });
+
+ await knex('final_entities').insert({
+ entity_id: id,
+ entity_ref: entityRef,
+ final_entity: entityJson,
+ hash: 'h',
+ stitch_ticket: '',
+ });
+
+ const search = await buildEntitySearch(id, entity);
+ await knex('search').insert(search);
+
+ return id;
+ }
+ // #endregion
+
+ describe.each(strategies)('with strategy %p', strategy => {
+ async function query(filter: EntityFilter): Promise {
+ const q =
+ knex('final_entities').whereNotNull(
+ 'final_entity',
+ );
+ applyEntityFilterToQuery({
+ filter: filter,
+ targetQuery: q,
+ onEntityIdField: 'final_entities.entity_id',
+ knex,
+ strategy,
+ });
+ return await q.then(rows =>
+ rows
+ .map(row => JSON.parse(row.final_entity!).metadata.name)
+ .toSorted(),
+ );
+ }
+
+ it('filters correctly', async () => {
+ await expect(query({ key: 'spec.foo' })).resolves.toEqual([
+ '1',
+ '2',
+ '3',
+ ]);
+
+ await expect(
+ query({ key: 'spec.foo', values: ['a'] }),
+ ).resolves.toEqual(['1', '2']);
+
+ await expect(
+ query({ key: 'spec.foo', values: ['b'] }),
+ ).resolves.toEqual(['3']);
+
+ await expect(
+ query({ key: 'spec.foo', values: ['a', 'b'] }),
+ ).resolves.toEqual(['1', '2', '3']);
+
+ await expect(
+ query({
+ anyOf: [
+ { key: 'spec.foo', values: ['a'] },
+ { key: 'spec.foo', values: ['b'] },
+ ],
+ }),
+ ).resolves.toEqual(['1', '2', '3']);
+
+ await expect(
+ query({ not: { key: 'spec.foo', values: ['a'] } }),
+ ).resolves.toEqual(['3', '4']);
+
+ await expect(
+ query({
+ not: {
+ anyOf: [
+ { key: 'spec.foo', values: ['a'] },
+ { key: 'spec.foo', values: ['b'] },
+ ],
+ },
+ }),
+ ).resolves.toEqual(['4']);
+
+ await expect(
+ query({
+ allOf: [
+ { key: 'spec.foo' },
+ { not: { key: 'spec.foo', values: ['a'] } },
+ ],
+ }),
+ ).resolves.toEqual(['3']);
+
+ await expect(query({ key: 'spec.unique' })).resolves.toEqual(['1']);
+
+ await expect(
+ query({
+ allOf: [
+ { key: 'spec.foo', values: ['a'] },
+ { not: { key: 'spec.unique' } },
+ ],
+ }),
+ ).resolves.toEqual(['2']);
+ });
+ });
+ },
+);
diff --git a/plugins/catalog-backend/src/service/request/applyEntityFilterToQuery.ts b/plugins/catalog-backend/src/service/request/applyEntityFilterToQuery.ts
new file mode 100644
index 0000000000..b2a7fb6708
--- /dev/null
+++ b/plugins/catalog-backend/src/service/request/applyEntityFilterToQuery.ts
@@ -0,0 +1,130 @@
+/*
+ * 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 {
+ EntitiesSearchFilter,
+ EntityFilter,
+} from '@backstage/plugin-catalog-node';
+import { Knex } from 'knex';
+import { DbSearchRow } from '../../database/tables';
+
+function isEntitiesSearchFilter(
+ filter: EntitiesSearchFilter | EntityFilter,
+): filter is EntitiesSearchFilter {
+ return filter.hasOwnProperty('key');
+}
+
+function isOrEntityFilter(
+ filter: EntityFilter,
+): filter is { anyOf: EntityFilter[] } {
+ return filter.hasOwnProperty('anyOf');
+}
+
+function isNegationEntityFilter(
+ filter: EntityFilter,
+): filter is { not: EntityFilter } {
+ return filter.hasOwnProperty('not');
+}
+
+/**
+ * Applies filtering through a number of WHERE IN subqueries. Example:
+ *
+ * ```
+ * SELECT * FROM final_entities
+ * WHERE
+ * entity_id IN (
+ * SELECT entity_id FROM search
+ * WHERE key = 'kind' AND value = 'component'
+ * )
+ * AND entity_id IN (
+ * SELECT entity_id FROM search
+ * WHERE key = 'spec.lifecycle' AND value = 'production'
+ * )
+ * AND final_entities.final_entity IS NOT NULL
+ * ```
+ *
+ * This strategy is a good all-rounder, in the sense that it has medium-good
+ * performance on most queries on all database engines. However, it does not
+ * scale well down to very short runtimes as well as the JOIN strategy.
+ */
+function applyInStrategy(
+ filter: EntityFilter,
+ targetQuery: Knex.QueryBuilder,
+ onEntityIdField: string,
+ knex: Knex,
+ negate: boolean,
+): Knex.QueryBuilder {
+ if (isNegationEntityFilter(filter)) {
+ return applyInStrategy(
+ filter.not,
+ targetQuery,
+ onEntityIdField,
+ knex,
+ !negate,
+ );
+ }
+
+ if (isEntitiesSearchFilter(filter)) {
+ const key = filter.key.toLowerCase();
+ const values = filter.values?.map(v => v.toLowerCase());
+ const matchQuery = knex('search')
+ .select('search.entity_id')
+ .where({ key })
+ .andWhere(function keyFilter() {
+ if (values?.length === 1) {
+ this.where({ value: values.at(0) });
+ } else if (values) {
+ this.andWhere('value', 'in', values);
+ }
+ });
+ return targetQuery.andWhere(
+ onEntityIdField,
+ negate ? 'not in' : 'in',
+ matchQuery,
+ );
+ }
+
+ return targetQuery[negate ? 'andWhereNot' : 'andWhere'](
+ function filterFunction() {
+ if (isOrEntityFilter(filter)) {
+ for (const subFilter of filter.anyOf ?? []) {
+ this.orWhere(subQuery =>
+ applyInStrategy(subFilter, subQuery, onEntityIdField, knex, false),
+ );
+ }
+ } else {
+ for (const subFilter of filter.allOf ?? []) {
+ this.andWhere(subQuery =>
+ applyInStrategy(subFilter, subQuery, onEntityIdField, knex, false),
+ );
+ }
+ }
+ },
+ );
+}
+
+// The actual exported function
+export function applyEntityFilterToQuery(options: {
+ filter: EntityFilter;
+ targetQuery: Knex.QueryBuilder;
+ onEntityIdField: string;
+ knex: Knex;
+ strategy?: 'in' | 'join';
+}): Knex.QueryBuilder {
+ const { filter, targetQuery, onEntityIdField, knex } = options;
+
+ return applyInStrategy(filter, targetQuery, onEntityIdField, knex, false);
+}
diff --git a/plugins/catalog-backend/src/service/response/createEntityArrayJsonStream.ts b/plugins/catalog-backend/src/service/response/createEntityArrayJsonStream.ts
new file mode 100644
index 0000000000..4762afd2d9
--- /dev/null
+++ b/plugins/catalog-backend/src/service/response/createEntityArrayJsonStream.ts
@@ -0,0 +1,79 @@
+/*
+ * 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 { EntitiesResponseItems } from '../../catalog/types';
+import { Response } from 'express';
+
+export interface EntityArrayJsonStream {
+ send(entities: EntitiesResponseItems): boolean;
+ complete(): void;
+ close(): void;
+}
+
+// Helps stream EntitiesResponseItems[] as a JSON response stream to avoid performance issues
+export function createEntityArrayJsonStream(
+ res: Response,
+): EntityArrayJsonStream {
+ // Imitate the httpRouter behavior of pretty-printing in development
+ const prettyPrint = process.env.NODE_ENV === 'development';
+ let firstSend = true;
+ let completed = false;
+
+ return {
+ send(response) {
+ if (firstSend) {
+ res.setHeader('Content-Type', 'application/json; charset=utf-8');
+ res.status(200);
+ res.flushHeaders();
+ }
+
+ if (response.type === 'raw') {
+ let needsDrain = false;
+ for (const item of response.entities) {
+ const prefix = firstSend ? '[' : ',';
+ firstSend = false;
+ needsDrain ||= !res.write(prefix + item, 'utf8');
+ }
+ return !needsDrain;
+ }
+
+ let data: string;
+ if (prettyPrint) {
+ data = JSON.stringify(response.entities, null, 2);
+ data = firstSend ? data.slice(0, -2) : `,\n${data.slice(2, -2)}`;
+ } else {
+ data = JSON.stringify(response.entities);
+ data = firstSend ? data.slice(0, -1) : `,${data.slice(1, -1)}`;
+ }
+
+ firstSend = false;
+ return res.write(data, 'utf8');
+ },
+ complete() {
+ if (firstSend) {
+ res.json([]);
+ } else {
+ res.end(prettyPrint ? '\n]' : ']', 'utf8');
+ }
+ completed = true;
+ },
+ close() {
+ if (!completed) {
+ res.end();
+ }
+ },
+ };
+}
diff --git a/plugins/catalog-backend/src/service/response/index.ts b/plugins/catalog-backend/src/service/response/index.ts
new file mode 100644
index 0000000000..2e01071dbd
--- /dev/null
+++ b/plugins/catalog-backend/src/service/response/index.ts
@@ -0,0 +1,23 @@
+/*
+ * 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 {
+ processRawEntitiesResult,
+ processEntitiesResponseItems,
+ entitiesResponseToObjects,
+} from './process';
+export { writeSingleEntityResponse, writeEntitiesResponse } from './write';
+export { createEntityArrayJsonStream } from './createEntityArrayJsonStream';
diff --git a/plugins/catalog-backend/src/service/response/process.test.ts b/plugins/catalog-backend/src/service/response/process.test.ts
new file mode 100644
index 0000000000..60b96608f7
--- /dev/null
+++ b/plugins/catalog-backend/src/service/response/process.test.ts
@@ -0,0 +1,115 @@
+/*
+ * 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 { Entity } from '@backstage/catalog-model';
+import {
+ entitiesResponseToObjects,
+ processEntitiesResponseItems,
+ processRawEntitiesResult,
+} from './process';
+
+const mockTransform = (entity: Entity): Entity => ({
+ ...entity,
+ kind: `transformed-${entity.kind}`,
+});
+
+describe('processRawEntitiesResult', () => {
+ it('should prefer keeping results in raw form', () => {
+ expect(processRawEntitiesResult(['{"kind":"test"}', null])).toEqual({
+ type: 'raw',
+ entities: ['{"kind":"test"}', null],
+ });
+
+ expect(
+ processRawEntitiesResult(['{"kind":"test"}', null], mockTransform),
+ ).toEqual({
+ type: 'object',
+ entities: [{ kind: 'transformed-test' }, null],
+ });
+ });
+});
+
+describe('processEntitiesResponseItems', () => {
+ it('should transform entities in object form', () => {
+ expect(
+ processEntitiesResponseItems({
+ type: 'object',
+ entities: [{ kind: 'test' } as Entity, null],
+ }),
+ ).toEqual({
+ type: 'object',
+ entities: [{ kind: 'test' }, null],
+ });
+
+ expect(
+ processEntitiesResponseItems(
+ {
+ type: 'object',
+ entities: [{ kind: 'test' } as Entity, null],
+ },
+ mockTransform,
+ ),
+ ).toEqual({
+ type: 'object',
+ entities: [{ kind: 'transformed-test' }, null],
+ });
+ });
+
+ it('should transform entities in raw form', () => {
+ expect(
+ processEntitiesResponseItems({
+ type: 'raw',
+ entities: ['{"kind":"test"}', null],
+ }),
+ ).toEqual({
+ type: 'raw',
+ entities: ['{"kind":"test"}', null],
+ });
+
+ expect(
+ processEntitiesResponseItems(
+ {
+ type: 'raw',
+ entities: ['{"kind":"test"}', null],
+ },
+ mockTransform,
+ ),
+ ).toEqual({
+ type: 'object',
+ entities: [{ kind: 'transformed-test' }, null],
+ });
+ });
+});
+
+describe('entitiesResponseToObjects', () => {
+ it('should convert entities in object form', () => {
+ expect(
+ entitiesResponseToObjects({
+ type: 'object',
+ entities: [null, { kind: 'test' } as Entity],
+ }),
+ ).toEqual([null, { kind: 'test' }]);
+ });
+
+ it('should convert entities in raw form', () => {
+ expect(
+ entitiesResponseToObjects({
+ type: 'raw',
+ entities: [null, '{"kind":"test"}'],
+ }),
+ ).toEqual([null, { kind: 'test' }]);
+ });
+});
diff --git a/plugins/catalog-backend/src/service/response/process.ts b/plugins/catalog-backend/src/service/response/process.ts
new file mode 100644
index 0000000000..fa07063f5b
--- /dev/null
+++ b/plugins/catalog-backend/src/service/response/process.ts
@@ -0,0 +1,62 @@
+/*
+ * 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 { Entity } from '@backstage/catalog-model';
+import { EntitiesResponseItems } from '../../catalog/types';
+
+export function processRawEntitiesResult(
+ serializedEntities: (string | null)[],
+ transform?: (entity: Entity) => Entity,
+): EntitiesResponseItems {
+ if (transform) {
+ return {
+ type: 'object',
+ entities: serializedEntities.map(e =>
+ e !== null ? transform(JSON.parse(e)) : e,
+ ),
+ };
+ }
+
+ return {
+ type: 'raw',
+ entities: serializedEntities,
+ };
+}
+
+export function processEntitiesResponseItems(
+ response: EntitiesResponseItems,
+ transform?: (entity: Entity) => Entity,
+): EntitiesResponseItems {
+ if (!transform) {
+ return response;
+ }
+ if (response.type === 'raw') {
+ return processRawEntitiesResult(response.entities, transform);
+ }
+ return {
+ type: 'object',
+ entities: response.entities.map(e => (e !== null ? transform(e) : e)),
+ };
+}
+
+export function entitiesResponseToObjects(
+ response: EntitiesResponseItems,
+): (Entity | null)[] {
+ if (response.type === 'object') {
+ return response.entities;
+ }
+ return response.entities.map(e => (e !== null ? JSON.parse(e) : e));
+}
diff --git a/plugins/catalog-backend/src/service/response/write.test.ts b/plugins/catalog-backend/src/service/response/write.test.ts
new file mode 100644
index 0000000000..fdca874904
--- /dev/null
+++ b/plugins/catalog-backend/src/service/response/write.test.ts
@@ -0,0 +1,317 @@
+/*
+ * 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 express from 'express';
+import { mockErrorHandler } from '@backstage/backend-test-utils';
+import request from 'supertest';
+import { writeEntitiesResponse, writeSingleEntityResponse } from './write';
+
+describe('writeSingleEntityResponse', () => {
+ const app = express();
+ app.use(express.json());
+ app.get('/echo', (req, res) => {
+ writeSingleEntityResponse(res, req.body, 'not found');
+ });
+ app.use(mockErrorHandler());
+
+ describe('in object form', () => {
+ it('should write a single entity', async () => {
+ const res = await request(app)
+ .get('/echo')
+ .send({
+ type: 'object',
+ entities: [{ kind: 'Component' }, { kind: 'User' }],
+ });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual({ kind: 'Component' });
+ });
+
+ it('should write a missing entity', async () => {
+ const res = await request(app)
+ .get('/echo')
+ .send({ type: 'object', entities: [null] });
+
+ expect(res.status).toBe(404);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toMatchObject({
+ error: { name: 'NotFoundError', message: 'not found' },
+ });
+ });
+
+ it('should write no entities', async () => {
+ const res = await request(app)
+ .get('/echo')
+ .send({ type: 'object', entities: [] });
+
+ expect(res.status).toBe(404);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toMatchObject({
+ error: { name: 'NotFoundError', message: 'not found' },
+ });
+ });
+ });
+
+ describe('in raw form', () => {
+ it('should write a single entity', async () => {
+ const res = await request(app)
+ .get('/echo')
+ .send({
+ type: 'raw',
+ entities: ['{"kind":"Component"}', '{"kind":"User"}'],
+ });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual({ kind: 'Component' });
+ });
+
+ it('should write a missing entity', async () => {
+ const res = await request(app)
+ .get('/echo')
+ .send({ type: 'raw', entities: [null] });
+
+ expect(res.status).toBe(404);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toMatchObject({
+ error: { name: 'NotFoundError', message: 'not found' },
+ });
+ });
+
+ it('should write no entities', async () => {
+ const res = await request(app)
+ .get('/echo')
+ .send({ type: 'raw', entities: [] });
+
+ expect(res.status).toBe(404);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toMatchObject({
+ error: { name: 'NotFoundError', message: 'not found' },
+ });
+ });
+ });
+});
+
+describe('writeEntitiesResponse', () => {
+ const app = express();
+ app.use(express.json());
+ app.get('/echo', (req, res) => {
+ writeEntitiesResponse(res, req.body);
+ });
+ app.get('/wrapped', (req, res) => {
+ writeEntitiesResponse(res, req.body, entities => ({
+ page: 1,
+ items: entities,
+ totalItems: 1337,
+ }));
+ });
+ app.use(mockErrorHandler());
+
+ describe('in object form', () => {
+ it('should return empty list', async () => {
+ const res = await request(app).get('/echo').send({
+ type: 'object',
+ entities: [],
+ });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual([]);
+ });
+
+ it('should return mixed objects', async () => {
+ const res = await request(app)
+ .get('/echo')
+ .send({
+ type: 'object',
+ entities: [{ kind: 'Component' }, null, { kind: 'User' }, null],
+ });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual([
+ { kind: 'Component' },
+ null,
+ { kind: 'User' },
+ null,
+ ]);
+ });
+
+ it('should wrap response of empty list', async () => {
+ const res = await request(app)
+ .get('/wrapped')
+ .send({ type: 'object', entities: [] });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual({ page: 1, items: [], totalItems: 1337 });
+ });
+
+ it('should wrap response of mixed list', async () => {
+ const res = await request(app)
+ .get('/wrapped')
+ .send({
+ type: 'object',
+ entities: [{ kind: 'Component' }, null, { kind: 'User' }, null],
+ });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual({
+ page: 1,
+ items: [{ kind: 'Component' }, null, { kind: 'User' }, null],
+ totalItems: 1337,
+ });
+ });
+ });
+
+ describe('in raw form', () => {
+ it('should return empty list', async () => {
+ const res = await request(app).get('/echo').send({
+ type: 'raw',
+ entities: [],
+ });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual([]);
+ });
+
+ it('should return mixed objects', async () => {
+ const res = await request(app)
+ .get('/echo')
+ .send({
+ type: 'raw',
+ entities: ['{"kind":"Component"}', null, '{"kind":"User"}', null],
+ });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual([
+ { kind: 'Component' },
+ null,
+ { kind: 'User' },
+ null,
+ ]);
+ });
+
+ it('should wrap response of empty list', async () => {
+ const res = await request(app)
+ .get('/wrapped')
+ .send({ type: 'raw', entities: [] });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual({ page: 1, items: [], totalItems: 1337 });
+ });
+
+ it('should wrap response of mixed list', async () => {
+ const res = await request(app)
+ .get('/wrapped')
+ .send({
+ type: 'raw',
+ entities: ['{"kind":"Component"}', null, '{"kind":"User"}', null],
+ });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual({
+ page: 1,
+ items: [{ kind: 'Component' }, null, { kind: 'User' }, null],
+ totalItems: 1337,
+ });
+ });
+
+ it('should write a large wrapped response', async () => {
+ const entityMock = JSON.stringify({
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Component',
+ metadata: {
+ name: 'my-component',
+ namespace: 'default',
+ annotations: {
+ 'backstage.io/managed-by-location': 'url:https://example.com',
+ },
+ },
+ spec: {
+ type: 'service',
+ owner: 'me',
+ lifecycle: 'production',
+ },
+ });
+ const res = await request(app)
+ .get('/wrapped')
+ .send({
+ type: 'raw',
+ entities: Array(300).fill(entityMock),
+ });
+
+ expect(res.status).toBe(200);
+ expect(res.type).toBe('application/json');
+ expect(res.header['content-type']).toBe(
+ 'application/json; charset=utf-8',
+ );
+ expect(res.body).toEqual({
+ page: 1,
+ items: expect.objectContaining({ length: 300 }),
+ totalItems: 1337,
+ });
+ });
+ });
+});
diff --git a/plugins/catalog-backend/src/service/response/write.ts b/plugins/catalog-backend/src/service/response/write.ts
new file mode 100644
index 0000000000..c2bca0953a
--- /dev/null
+++ b/plugins/catalog-backend/src/service/response/write.ts
@@ -0,0 +1,103 @@
+/*
+ * 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 { Response } from 'express';
+import { EntitiesResponseItems } from '../../catalog/types';
+import { JsonValue } from '@backstage/types';
+import { NotFoundError } from '@backstage/errors';
+
+const JSON_CONTENT_TYPE = 'application/json; charset=utf-8';
+
+export function writeSingleEntityResponse(
+ res: Response,
+ response: EntitiesResponseItems,
+ notFoundMessage: string,
+) {
+ if (response.type === 'object') {
+ if (!response.entities[0]) {
+ throw new NotFoundError(notFoundMessage);
+ }
+
+ res.json(response.entities[0]);
+ } else {
+ if (!response.entities[0]) {
+ throw new NotFoundError(notFoundMessage);
+ }
+
+ res.setHeader('Content-Type', JSON_CONTENT_TYPE);
+ res.end(response.entities[0]);
+ }
+}
+
+export async function writeEntitiesResponse(
+ res: Response,
+ response: EntitiesResponseItems,
+ responseWrapper?: (entities: JsonValue) => JsonValue,
+) {
+ if (response.type === 'object') {
+ res.json(
+ responseWrapper
+ ? responseWrapper?.(response.entities)
+ : response.entities,
+ );
+ return;
+ }
+
+ res.setHeader('Content-Type', JSON_CONTENT_TYPE);
+
+ // responseWrapper allows the caller to render the entities within an object
+ let trailing = '';
+ if (responseWrapper) {
+ const marker = `__MARKER_${Math.random().toString(36).slice(2, 10)}__`;
+ const wrapped = JSON.stringify(responseWrapper(marker));
+ const parts = wrapped.split(`"${marker}"`);
+ if (parts.length !== 2) {
+ throw new Error(
+ `Entity items response was incorrectly wrapped into ${parts.length} different parts`,
+ );
+ }
+ res.write(parts[0], 'utf8');
+ trailing = parts[1];
+ }
+
+ let first = true;
+ for (const entity of response.entities) {
+ const prefix = first ? '[' : ',';
+ first = false;
+
+ const needsDrain = !res.write(prefix + entity, 'utf8');
+ if (needsDrain) {
+ const closed = await new Promise(resolve => {
+ function onContinue() {
+ res.off('drain', onContinue);
+ res.off('close', onClose);
+ resolve(false);
+ }
+ function onClose() {
+ res.off('drain', onContinue);
+ res.off('close', onClose);
+ resolve(true);
+ }
+ res.on('drain', onContinue);
+ res.on('close', onClose);
+ });
+ if (closed) {
+ return;
+ }
+ }
+ }
+ res.end(`${first ? '[' : ''}]${trailing}`);
+}
diff --git a/plugins/catalog-backend/src/service/util.ts b/plugins/catalog-backend/src/service/util.ts
index c05fb14558..9847cb7225 100644
--- a/plugins/catalog-backend/src/service/util.ts
+++ b/plugins/catalog-backend/src/service/util.ts
@@ -15,7 +15,7 @@
*/
import { InputError, NotAllowedError } from '@backstage/errors';
-import { Request, Response } from 'express';
+import { Request } from 'express';
import lodash from 'lodash';
import { z } from 'zod';
import {
@@ -148,75 +148,21 @@ export function decodeCursor(encodedCursor: string) {
// sure that all adopters have re-stitched their entities so that the new
// targetRef field is present on them, and that they have stopped consuming
// the now-removed old field
-// TODO(jhaals): Remove this in April 2022
-export function expandLegacyCompoundRelationRefsInResponse(
- entities: Entity[],
-): void {
- for (const entity of entities) {
- if (entity.relations) {
- for (const relation of entity.relations as any) {
- if (!relation.targetRef && relation.target) {
- // This is the case where an old-form entity, not yet stitched with
- // the updated code, was in the database
- relation.targetRef = stringifyEntityRef(relation.target);
- } else if (!relation.target && relation.targetRef) {
- // This is the case where a new-form entity, stitched with the
- // updated code, was in the database but we still want to produce
- // the old data shape as well for compatibility reasons
- relation.target = parseEntityRef(relation.targetRef);
- }
+// TODO(patriko): Remove this in catalog 2.0
+export function expandLegacyCompoundRelationsInEntity(entity: Entity): Entity {
+ if (entity.relations) {
+ for (const relation of entity.relations as any) {
+ if (!relation.targetRef && relation.target) {
+ // This is the case where an old-form entity, not yet stitched with
+ // the updated code, was in the database
+ relation.targetRef = stringifyEntityRef(relation.target);
+ } else if (!relation.target && relation.targetRef) {
+ // This is the case where a new-form entity, stitched with the
+ // updated code, was in the database but we still want to produce
+ // the old data shape as well for compatibility reasons
+ relation.target = parseEntityRef(relation.targetRef);
}
}
}
-}
-
-export interface EntityArrayJsonStream {
- send(entities: Entity[]): boolean;
- complete(): void;
- close(): void;
-}
-
-// Helps stream Entity[] as a JSON response stream to avoid performance issues
-export function createEntityArrayJsonStream(
- res: Response,
-): EntityArrayJsonStream {
- // Imitate the httpRouter behavior of pretty-printing in development
- const prettyPrint = process.env.NODE_ENV === 'development';
- let firstSend = true;
- let completed = false;
-
- return {
- send(entities) {
- if (firstSend) {
- res.setHeader('Content-Type', 'application/json; charset=utf-8');
- res.status(200);
- res.flushHeaders();
- }
-
- let data: string;
- if (prettyPrint) {
- data = JSON.stringify(entities, null, 2);
- data = firstSend ? data.slice(0, -2) : `,\n${data.slice(2, -2)}`;
- } else {
- data = JSON.stringify(entities);
- data = firstSend ? data.slice(0, -1) : `,${data.slice(1, -1)}`;
- }
-
- firstSend = false;
- return res.write(data);
- },
- complete() {
- if (firstSend) {
- res.json([]);
- } else {
- res.end(prettyPrint ? '\n]' : ']');
- }
- completed = true;
- },
- close() {
- if (!completed) {
- res.end();
- }
- },
- };
+ return entity;
}
diff --git a/plugins/catalog-backend/src/tests/integration.test.ts b/plugins/catalog-backend/src/tests/integration.test.ts
index 737bb107ca..e85ebe48ce 100644
--- a/plugins/catalog-backend/src/tests/integration.test.ts
+++ b/plugins/catalog-backend/src/tests/integration.test.ts
@@ -30,7 +30,6 @@ import {
processingResult,
} from '@backstage/plugin-catalog-node';
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
-import { JsonObject } from '@backstage/types';
import { createHash } from 'crypto';
import { Knex } from 'knex';
import { EntitiesCatalog } from '../catalog/types';
@@ -55,6 +54,7 @@ import { DefaultStitcher } from '../stitching/DefaultStitcher';
import { mockServices } from '@backstage/backend-test-utils';
import { LoggerService } from '@backstage/backend-plugin-api';
import { DatabaseManager } from '@backstage/backend-common';
+import { entitiesResponseToObjects } from '../service/response';
const voidLogger = mockServices.logger.mock();
@@ -198,7 +198,7 @@ class TestHarness {
readonly #proxyProgressTracker: ProxyProgressTracker;
static async create(options?: {
- config?: JsonObject;
+ disableRelationsCompatibility?: boolean;
logger?: LoggerService;
db?: Knex;
permissions?: PermissionEvaluator;
@@ -208,21 +208,19 @@ class TestHarness {
emit: CatalogProcessorEmit,
): Promise;
}) {
- const config = new ConfigReader(
- options?.config ?? {
- backend: {
- database: {
- client: 'better-sqlite3',
- connection: ':memory:',
- },
- },
- catalog: {
- stitchingStrategy: {
- mode: 'immediate',
- },
+ const config = new ConfigReader({
+ backend: {
+ database: {
+ client: 'better-sqlite3',
+ connection: ':memory:',
},
},
- );
+ catalog: {
+ stitchingStrategy: {
+ mode: 'immediate',
+ },
+ },
+ });
const logger = options?.logger ?? mockServices.logger.mock();
const db =
options?.db ??
@@ -279,6 +277,7 @@ class TestHarness {
database: db,
logger,
stitcher,
+ disableRelationsCompatibility: options?.disableRelationsCompatibility,
});
const proxyProgressTracker = new ProxyProgressTracker(
new NoopProgressTracker(),
@@ -365,7 +364,12 @@ class TestHarness {
async getOutputEntities(): Promise> {
const { entities } = await this.#catalog.entities();
- return Object.fromEntries(entities.map(e => [stringifyEntityRef(e), e]));
+ return Object.fromEntries(
+ entitiesResponseToObjects(entities).map(e => [
+ stringifyEntityRef(e!),
+ e!,
+ ]),
+ );
}
async refresh(options: RefreshOptions) {
@@ -781,4 +785,57 @@ describe('Catalog Backend Integration', () => {
],
});
});
+
+ it('should return valid responses in raw JSON mode', async () => {
+ const harness = await TestHarness.create({
+ disableRelationsCompatibility: true,
+ });
+
+ const entityA = {
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Component',
+ metadata: {
+ name: 'a',
+ annotations: {
+ 'backstage.io/managed-by-location': 'url:.',
+ 'backstage.io/managed-by-origin-location': 'url:.',
+ },
+ },
+ };
+ const entityB = {
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Component',
+ metadata: {
+ name: 'b',
+ annotations: {
+ 'backstage.io/managed-by-location': 'url:.',
+ 'backstage.io/managed-by-origin-location': 'url:.',
+ },
+ },
+ };
+
+ await harness.setInputEntities([entityA, entityB]);
+ await expect(harness.process()).resolves.toEqual({});
+
+ await expect(harness.getOutputEntities()).resolves.toEqual({
+ 'component:default/a': {
+ ...entityA,
+ metadata: {
+ ...entityA.metadata,
+ etag: expect.any(String),
+ uid: expect.any(String),
+ },
+ relations: [],
+ },
+ 'component:default/b': {
+ ...entityB,
+ metadata: {
+ ...entityB.metadata,
+ etag: expect.any(String),
+ uid: expect.any(String),
+ },
+ relations: [],
+ },
+ });
+ });
});
diff --git a/plugins/catalog-common/CHANGELOG.md b/plugins/catalog-common/CHANGELOG.md
index 1eca771dd2..21f0f63e42 100644
--- a/plugins/catalog-common/CHANGELOG.md
+++ b/plugins/catalog-common/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-catalog-common
+## 1.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 1.1.1
### Patch Changes
diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json
index ecf16611ad..c7ba0aba6e 100644
--- a/plugins/catalog-common/package.json
+++ b/plugins/catalog-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-common",
- "version": "1.1.1",
+ "version": "1.1.2-next.0",
"description": "Common functionalities for the catalog plugin",
"backstage": {
"role": "common-library",
diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md
index fc773877c3..90cb575797 100644
--- a/plugins/catalog-graph/CHANGELOG.md
+++ b/plugins/catalog-graph/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-graph
+## 0.4.14-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/types@1.2.0
+
## 0.4.14-next.1
### Patch Changes
diff --git a/plugins/catalog-graph/README.md b/plugins/catalog-graph/README.md
index 0862abbc96..b9400e8e8b 100644
--- a/plugins/catalog-graph/README.md
+++ b/plugins/catalog-graph/README.md
@@ -137,6 +137,20 @@ return (
);
```
+Once you have your custom implementation, you can follow these steps to modify the required components:
+
+- In the `app.tsx` update the `CatalogGraphPage` component to include your custom styles:
+
+```tsx
+} />
+```
+
+- In the `Entity.tsx` file, update the `EntityCatalogGraphCard` component to this:
+
+```tsx
+
+```
+
## Development
Run `yarn` in the root of this plugin to install all dependencies and then `yarn start` to run a [development version](./dev/index.tsx) of this plugin.
diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json
index 2f6be0e50d..aa7649e01f 100644
--- a/plugins/catalog-graph/package.json
+++ b/plugins/catalog-graph/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-graph",
- "version": "0.4.14-next.1",
+ "version": "0.4.14-next.2",
"backstage": {
"role": "frontend-plugin",
"pluginId": "catalog-graph",
diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md
index d33d758529..323aaa0803 100644
--- a/plugins/catalog-import/CHANGELOG.md
+++ b/plugins/catalog-import/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-catalog-import
+## 0.12.8-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+
## 0.12.8-next.1
### Patch Changes
diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json
index 65f315a046..42929d872d 100644
--- a/plugins/catalog-import/package.json
+++ b/plugins/catalog-import/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-import",
- "version": "0.12.8-next.1",
+ "version": "0.12.8-next.2",
"description": "A Backstage plugin the helps you import entities into your catalog",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md
index 42162d4fe5..a0c09fdc48 100644
--- a/plugins/catalog-node/CHANGELOG.md
+++ b/plugins/catalog-node/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-node
+## 1.15.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-permission-node@0.8.6-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 1.15.0-next.1
### Minor Changes
diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json
index 23acfb724f..fbcdc1d95a 100644
--- a/plugins/catalog-node/package.json
+++ b/plugins/catalog-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-node",
- "version": "1.15.0-next.1",
+ "version": "1.15.0-next.2",
"description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend",
"backstage": {
"role": "node-library",
diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md
index dd00d333db..15f549c248 100644
--- a/plugins/catalog-react/CHANGELOG.md
+++ b/plugins/catalog-react/CHANGELOG.md
@@ -1,5 +1,27 @@
# @backstage/plugin-catalog-react
+## 1.14.3-next.2
+
+### Patch Changes
+
+- 95092a6: Fixed an issue where `` would re-render its children on page load for smaller screens, potentially leading to unnecessary additional backend requests.
+- 4a43398: Fixed an issue where the `EntityOwnerPicker` component failed to load when the `mode` prop was set to `owners-only`. In this mode, the `EntityOwnerPicker` does not load details about the owners, such as `displayName` or `title`. To display these details, use `mode=all` instead.
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/frontend-test-utils@0.2.4-next.2
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+ - @backstage/plugin-permission-react@0.4.29-next.0
+
## 1.14.3-next.1
### Patch Changes
diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json
index 8e02010362..243ffa483b 100644
--- a/plugins/catalog-react/package.json
+++ b/plugins/catalog-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-react",
- "version": "1.14.3-next.1",
+ "version": "1.14.3-next.2",
"description": "A frontend library that helps other Backstage plugins interact with the catalog",
"backstage": {
"role": "web-library",
diff --git a/plugins/catalog-react/src/components/CatalogFilterLayout/CatalogFilterLayout.tsx b/plugins/catalog-react/src/components/CatalogFilterLayout/CatalogFilterLayout.tsx
index ee51020cbb..793d4741ad 100644
--- a/plugins/catalog-react/src/components/CatalogFilterLayout/CatalogFilterLayout.tsx
+++ b/plugins/catalog-react/src/components/CatalogFilterLayout/CatalogFilterLayout.tsx
@@ -34,8 +34,10 @@ export const Filters = (props: {
drawerAnchor?: 'left' | 'right' | 'top' | 'bottom';
};
}) => {
- const isScreenSmallerThanBreakpoint = useMediaQuery((theme: Theme) =>
- theme.breakpoints.down(props.options?.drawerBreakpoint ?? 'md'),
+ const isScreenSmallerThanBreakpoint = useMediaQuery(
+ (theme: Theme) =>
+ theme.breakpoints.down(props.options?.drawerBreakpoint ?? 'md'),
+ { noSsr: true },
);
const theme = useTheme();
const [filterDrawerOpen, setFilterDrawerOpen] = useState(false);
diff --git a/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx b/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx
index eba4cc3a7a..fd88a7a31e 100644
--- a/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx
+++ b/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx
@@ -31,7 +31,7 @@ import {
useEntityList,
} from '../../hooks/useEntityListProvider';
import { EntityFilter } from '../../types';
-import { reduceBackendCatalogFilters } from '../../utils';
+import { reduceBackendCatalogFilters } from '../../utils/filters';
/** @public */
export type AllowedEntityFilters = {
diff --git a/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.ts b/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.ts
index cecd0e4db7..fa564382d8 100644
--- a/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.ts
+++ b/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.ts
@@ -20,7 +20,7 @@ import { useMemo, useRef } from 'react';
import useAsync from 'react-use/esm/useAsync';
import { catalogApiRef } from '../../api';
import { useEntityList } from '../../hooks';
-import { reduceCatalogFilters } from '../../utils';
+import { reduceCatalogFilters } from '../../utils/filters';
export function useAllEntitiesCount() {
const catalogApi = useApi(catalogApiRef);
diff --git a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts
index 10481e80a8..dbdc040165 100644
--- a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts
+++ b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts
@@ -21,7 +21,7 @@ import useAsync from 'react-use/esm/useAsync';
import { catalogApiRef } from '../../api';
import { EntityOwnerFilter, EntityUserFilter } from '../../filters';
import { useEntityList } from '../../hooks';
-import { CatalogFilters, reduceCatalogFilters } from '../../utils';
+import { CatalogFilters, reduceCatalogFilters } from '../../utils/filters';
import useAsyncFn from 'react-use/esm/useAsyncFn';
import useDeepCompareEffect from 'react-use/esm/useDeepCompareEffect';
diff --git a/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.ts b/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.ts
index 082c683642..70dde024f8 100644
--- a/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.ts
+++ b/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.ts
@@ -23,7 +23,7 @@ import useAsync from 'react-use/esm/useAsync';
import { catalogApiRef } from '../../api';
import { EntityUserFilter } from '../../filters';
import { useEntityList, useStarredEntities } from '../../hooks';
-import { reduceCatalogFilters } from '../../utils';
+import { reduceCatalogFilters } from '../../utils/filters';
export function useStarredEntitiesCount() {
const catalogApi = useApi(catalogApiRef);
diff --git a/plugins/catalog-react/src/filters.ts b/plugins/catalog-react/src/filters.ts
index 6c68dad9aa..c033298983 100644
--- a/plugins/catalog-react/src/filters.ts
+++ b/plugins/catalog-react/src/filters.ts
@@ -22,7 +22,7 @@ import {
} from '@backstage/catalog-model';
import { AlphaEntity } from '@backstage/catalog-model/alpha';
import { EntityFilter, UserListFilterKind } from './types';
-import { getEntityRelations } from './utils';
+import { getEntityRelations } from './utils/getEntityRelations';
/**
* Filter entities based on Kind.
diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx
index 274ec52a18..b96357eb62 100644
--- a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx
+++ b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx
@@ -48,7 +48,7 @@ import {
reduceBackendCatalogFilters,
reduceCatalogFilters,
reduceEntityFilters,
-} from '../utils';
+} from '../utils/filters';
import { useApi } from '@backstage/core-plugin-api';
import { QueryEntitiesResponse } from '@backstage/catalog-client';
diff --git a/plugins/catalog-react/src/utils/index.ts b/plugins/catalog-react/src/utils/index.ts
index 5afc32af63..5b2159ae2f 100644
--- a/plugins/catalog-react/src/utils/index.ts
+++ b/plugins/catalog-react/src/utils/index.ts
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-export * from './filters';
+
export { getEntityRelations } from './getEntityRelations';
export { getEntitySourceLocation } from './getEntitySourceLocation';
export type { EntitySourceLocation } from './getEntitySourceLocation';
diff --git a/plugins/catalog-unprocessed-entities-common/CHANGELOG.md b/plugins/catalog-unprocessed-entities-common/CHANGELOG.md
index 10a8d5ad0d..027c99666b 100644
--- a/plugins/catalog-unprocessed-entities-common/CHANGELOG.md
+++ b/plugins/catalog-unprocessed-entities-common/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-catalog-unprocessed-entities-common
+## 0.0.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.0.5
### Patch Changes
diff --git a/plugins/catalog-unprocessed-entities-common/package.json b/plugins/catalog-unprocessed-entities-common/package.json
index c570efd2da..4be731fc7d 100644
--- a/plugins/catalog-unprocessed-entities-common/package.json
+++ b/plugins/catalog-unprocessed-entities-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-unprocessed-entities-common",
- "version": "0.0.5",
+ "version": "0.0.6-next.0",
"description": "Common functionalities for the catalog-unprocessed-entities plugin",
"backstage": {
"role": "common-library",
diff --git a/plugins/catalog-unprocessed-entities/CHANGELOG.md b/plugins/catalog-unprocessed-entities/CHANGELOG.md
index 613954353c..f06c156ebd 100644
--- a/plugins/catalog-unprocessed-entities/CHANGELOG.md
+++ b/plugins/catalog-unprocessed-entities/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-catalog-unprocessed-entities
+## 0.2.12-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+
## 0.2.12-next.1
### Patch Changes
diff --git a/plugins/catalog-unprocessed-entities/package.json b/plugins/catalog-unprocessed-entities/package.json
index f1606efca7..e83b13e26f 100644
--- a/plugins/catalog-unprocessed-entities/package.json
+++ b/plugins/catalog-unprocessed-entities/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-unprocessed-entities",
- "version": "0.2.12-next.1",
+ "version": "0.2.12-next.2",
"backstage": {
"role": "frontend-plugin",
"pluginId": "catalog-unprocessed-entities",
diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md
index 4eb9dfcd09..4df5aa6fd7 100644
--- a/plugins/catalog/CHANGELOG.md
+++ b/plugins/catalog/CHANGELOG.md
@@ -1,5 +1,31 @@
# @backstage/plugin-catalog
+## 1.26.0-next.2
+
+### Minor Changes
+
+- 25beb82: Adds an optional columns attribute to HasSubdomainsCardProps and changes its default columns
+- 39f1abc: Consistent title behaviour across CatalogTable, CursorPaginatedCatalogTable, and OffsetPaginatedCatalogTable.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/types@1.2.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-permission-react@0.4.29-next.0
+ - @backstage/plugin-scaffolder-common@1.5.8-next.1
+ - @backstage/plugin-search-common@1.2.16-next.0
+ - @backstage/plugin-search-react@1.8.4-next.2
+
## 1.25.2-next.1
### Patch Changes
diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json
index 58106dbb11..4e030cb90b 100644
--- a/plugins/catalog/package.json
+++ b/plugins/catalog/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog",
- "version": "1.25.2-next.1",
+ "version": "1.26.0-next.2",
"description": "The Backstage plugin for browsing the Backstage catalog",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/catalog/report.api.md b/plugins/catalog/report.api.md
index 8bc620d221..3692a919b3 100644
--- a/plugins/catalog/report.api.md
+++ b/plugins/catalog/report.api.md
@@ -10,6 +10,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api';
import { CatalogApi } from '@backstage/plugin-catalog-react';
import { ComponentEntity } from '@backstage/catalog-model';
import { CompoundEntityRef } from '@backstage/catalog-model';
+import { DomainEntity } from '@backstage/catalog-model';
import { Entity } from '@backstage/catalog-model';
import { EntityListContextProps } from '@backstage/plugin-catalog-react';
import { EntityListPagination } from '@backstage/plugin-catalog-react';
@@ -585,6 +586,8 @@ export interface HasSubcomponentsCardProps {
// @public (undocumented)
export interface HasSubdomainsCardProps {
+ // (undocumented)
+ columns?: TableColumn[];
// (undocumented)
tableOptions?: TableOptions;
// (undocumented)
diff --git a/plugins/catalog/src/apis/StarredEntitiesApi/DefaultStarredEntitiesApi.ts b/plugins/catalog/src/apis/StarredEntitiesApi/DefaultStarredEntitiesApi.ts
index f4b7771d04..5c06dc1ca2 100644
--- a/plugins/catalog/src/apis/StarredEntitiesApi/DefaultStarredEntitiesApi.ts
+++ b/plugins/catalog/src/apis/StarredEntitiesApi/DefaultStarredEntitiesApi.ts
@@ -69,7 +69,7 @@ export class DefaultStarredEntitiesApi implements StarredEntitiesApi {
>();
private readonly observable = new ObservableImpl>(subscriber => {
- // forward the the latest value
+ // forward the latest value
subscriber.next(new Set(this.starredEntities));
this.subscribers.add(subscriber);
diff --git a/plugins/catalog/src/components/HasSubdomainsCard/HasSubdomainsCard.tsx b/plugins/catalog/src/components/HasSubdomainsCard/HasSubdomainsCard.tsx
index 71705ea90f..b52f5eacf7 100644
--- a/plugins/catalog/src/components/HasSubdomainsCard/HasSubdomainsCard.tsx
+++ b/plugins/catalog/src/components/HasSubdomainsCard/HasSubdomainsCard.tsx
@@ -14,12 +14,17 @@
* limitations under the License.
*/
-import { RELATION_HAS_PART } from '@backstage/catalog-model';
-import { InfoCardVariants, TableOptions } from '@backstage/core-components';
+import { DomainEntity, RELATION_HAS_PART } from '@backstage/catalog-model';
+import {
+ InfoCardVariants,
+ TableColumn,
+ TableOptions,
+} from '@backstage/core-components';
import React from 'react';
import {
- asComponentEntities,
- componentEntityColumns,
+ asDomainEntities,
+ domainEntityColumns,
+ domainEntityHelpLink,
RelatedEntitiesCard,
} from '../RelatedEntitiesCard';
import { catalogTranslationRef } from '../../alpha/translation';
@@ -29,6 +34,7 @@ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
export interface HasSubdomainsCardProps {
variant?: InfoCardVariants;
tableOptions?: TableOptions;
+ columns?: TableColumn[];
title?: string;
}
@@ -36,8 +42,9 @@ export function HasSubdomainsCard(props: HasSubdomainsCardProps) {
const { t } = useTranslationRef(catalogTranslationRef);
const {
variant = 'gridItem',
- tableOptions = {},
title = t('hasSubdomainsCard.title'),
+ columns = domainEntityColumns,
+ tableOptions = {},
} = props;
return (
);
diff --git a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx
index 5b57cbd80e..40481614e2 100644
--- a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx
+++ b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx
@@ -33,10 +33,13 @@ import {
} from '@backstage/core-components';
import {
asComponentEntities,
+ asDomainEntities,
asResourceEntities,
asSystemEntities,
componentEntityColumns,
componentEntityHelpLink,
+ domainEntityColumns,
+ domainEntityHelpLink,
resourceEntityColumns,
resourceEntityHelpLink,
systemEntityColumns,
@@ -137,3 +140,6 @@ RelatedEntitiesCard.asResourceEntities = asResourceEntities;
RelatedEntitiesCard.systemEntityColumns = systemEntityColumns;
RelatedEntitiesCard.systemEntityHelpLink = systemEntityHelpLink;
RelatedEntitiesCard.asSystemEntities = asSystemEntities;
+RelatedEntitiesCard.domainEntityColums = domainEntityColumns;
+RelatedEntitiesCard.domainEntityHelpLink = domainEntityHelpLink;
+RelatedEntitiesCard.asDomainEntities = asDomainEntities;
diff --git a/plugins/catalog/src/components/RelatedEntitiesCard/presets.ts b/plugins/catalog/src/components/RelatedEntitiesCard/presets.ts
index 8e3040ccf9..68930c578b 100644
--- a/plugins/catalog/src/components/RelatedEntitiesCard/presets.ts
+++ b/plugins/catalog/src/components/RelatedEntitiesCard/presets.ts
@@ -15,6 +15,7 @@
*/
import {
ComponentEntity,
+ DomainEntity,
Entity,
ResourceEntity,
SystemEntity,
@@ -55,3 +56,13 @@ export const systemEntityHelpLink: string =
'https://backstage.io/docs/features/software-catalog/descriptor-format#kind-system';
export const asSystemEntities = (entities: Entity[]): SystemEntity[] =>
entities as SystemEntity[];
+
+export const domainEntityColumns: TableColumn[] = [
+ EntityTable.columns.createEntityRefColumn({ defaultKind: 'domain' }),
+ EntityTable.columns.createOwnerColumn(),
+ EntityTable.columns.createMetadataDescriptionColumn(),
+];
+export const domainEntityHelpLink: string =
+ 'https://backstage.io/docs/features/software-catalog/descriptor-format#kind-domain';
+export const asDomainEntities = (entities: Entity[]): DomainEntity[] =>
+ entities as DomainEntity[];
diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md
index 6612b6aed2..b4393708db 100644
--- a/plugins/config-schema/CHANGELOG.md
+++ b/plugins/config-schema/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-config-schema
+## 0.1.63-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/types@1.2.0
+
## 0.1.63-next.1
### Patch Changes
diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json
index 693534bfde..d48ca8dbc3 100644
--- a/plugins/config-schema/package.json
+++ b/plugins/config-schema/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-config-schema",
- "version": "0.1.63-next.1",
+ "version": "0.1.63-next.2",
"description": "A Backstage plugin that lets you browse the configuration schema of your app",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/config-schema/src/components/SchemaView/ArrayView.tsx b/plugins/config-schema/src/components/SchemaView/ArrayView.tsx
deleted file mode 100644
index abe2cfc327..0000000000
--- a/plugins/config-schema/src/components/SchemaView/ArrayView.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2021 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 Box from '@material-ui/core/Box';
-import Typography from '@material-ui/core/Typography';
-import { Schema } from 'jsonschema';
-import React from 'react';
-import { ChildView } from './ChildView';
-import { MetadataView } from './MetadataView';
-import { SchemaViewProps } from './types';
-
-export function ArrayView({ path, depth, schema }: SchemaViewProps) {
- const itemDepth = depth + 1;
- const itemPath = path ? `${path}[]` : '[]';
- const itemSchema = schema.items;
-
- return (
- <>
-
- {schema.description && (
-
- {schema.description}
-
- )}
-
-
- Items
-
- {schema.additionalItems && schema.additionalItems !== true && (
- <>
- Additional Items
-
- >
- )}
- >
- );
-}
diff --git a/plugins/config-schema/src/components/SchemaView/ChildView.tsx b/plugins/config-schema/src/components/SchemaView/ChildView.tsx
deleted file mode 100644
index b39e445688..0000000000
--- a/plugins/config-schema/src/components/SchemaView/ChildView.tsx
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2021 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 { JsonValue } from '@backstage/types';
-import Box from '@material-ui/core/Box';
-import Chip from '@material-ui/core/Chip';
-import Divider from '@material-ui/core/Divider';
-import Typography from '@material-ui/core/Typography';
-import { makeStyles } from '@material-ui/core/styles';
-import { Schema } from 'jsonschema';
-import React, { useEffect, useRef } from 'react';
-import { useScrollTargets } from '../ScrollTargetsContext/ScrollTargetsContext';
-import { SchemaView } from './SchemaView';
-
-export interface MetadataViewRowProps {
- label: string;
- text?: string;
- data?: JsonValue;
-}
-
-function titleVariant(depth: number) {
- if (depth <= 1) {
- return 'h2';
- } else if (depth === 2) {
- return 'h3';
- } else if (depth === 3) {
- return 'h4';
- } else if (depth === 4) {
- return 'h5';
- }
- return 'h6';
-}
-
-const useChildViewStyles = makeStyles(theme => ({
- title: {
- marginBottom: 0,
- },
- chip: {
- marginLeft: theme.spacing(1),
- marginRight: 0,
- marginBottom: 0,
- },
-}));
-
-export function ChildView({
- path,
- depth,
- schema,
- required,
- lastChild,
-}: {
- path: string;
- depth: number;
- schema?: Schema;
- required?: boolean;
- lastChild?: boolean;
-}) {
- const classes = useChildViewStyles();
- const titleRef = useRef(null);
- const scroll = useScrollTargets();
-
- useEffect(() => {
- return scroll?.setScrollListener(path, () => {
- titleRef.current?.scrollIntoView({ behavior: 'smooth' });
- });
- }, [scroll, path]);
-
- const chips = new Array();
- const chipProps = { size: 'small' as const, classes: { root: classes.chip } };
-
- if (required) {
- chips.push(
- ,
- );
- }
-
- const visibility = (schema as { visibility?: string })?.visibility;
- if (visibility === 'frontend') {
- chips.push(
- ,
- );
- } else if (visibility === 'secret') {
- chips.push(
- ,
- );
- }
-
- return (
-
-
-
-
-
- {path}
-
- {chips.length > 0 && }
- {chips}
-
- {schema && (
-
- )}
-
-
- );
-}
diff --git a/plugins/config-schema/src/components/SchemaView/MatchView.tsx b/plugins/config-schema/src/components/SchemaView/MatchView.tsx
deleted file mode 100644
index ba97ff9db5..0000000000
--- a/plugins/config-schema/src/components/SchemaView/MatchView.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2021 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 Typography from '@material-ui/core/Typography';
-import { Schema } from 'jsonschema';
-import React from 'react';
-import { ChildView } from './ChildView';
-
-export function MatchView({
- path,
- depth,
- schema,
- label,
-}: {
- path: string;
- depth: number;
- schema: Schema[];
- label: string;
-}) {
- return (
- <>
- {label}
- {schema.map((optionSchema, index) => (
-
- ))}
- >
- );
-}
diff --git a/plugins/config-schema/src/components/SchemaView/MetadataView.tsx b/plugins/config-schema/src/components/SchemaView/MetadataView.tsx
deleted file mode 100644
index f3de041bed..0000000000
--- a/plugins/config-schema/src/components/SchemaView/MetadataView.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright 2021 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 { JsonValue } from '@backstage/types';
-import Paper from '@material-ui/core/Paper';
-import Table from '@material-ui/core/Table';
-import TableBody from '@material-ui/core/TableBody';
-import TableCell from '@material-ui/core/TableCell';
-import TableRow from '@material-ui/core/TableRow';
-import Typography from '@material-ui/core/Typography';
-import { Schema } from 'jsonschema';
-import React from 'react';
-
-export interface MetadataViewRowProps {
- label: string;
- text?: string;
- data?: JsonValue;
-}
-
-export function MetadataViewRow({ label, text, data }: MetadataViewRowProps) {
- if (text === undefined && data === undefined) {
- return null;
- }
- return (
-
-
-
- {label}
-
-
-
-
- {data ? JSON.stringify(data) : text}
-
-
-
- );
-}
-
-export function MetadataView({ schema }: { schema: Schema }) {
- return (
-
-
-
-
-
- {schema.additionalProperties === true && (
-
- )}
- {schema.additionalItems === true && (
-
- )}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/plugins/config-schema/src/components/SchemaView/ObjectView.tsx b/plugins/config-schema/src/components/SchemaView/ObjectView.tsx
deleted file mode 100644
index c7cf000e10..0000000000
--- a/plugins/config-schema/src/components/SchemaView/ObjectView.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2021 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 Box from '@material-ui/core/Box';
-import Typography from '@material-ui/core/Typography';
-import React from 'react';
-import { ChildView } from './ChildView';
-import { MetadataView } from './MetadataView';
-import { SchemaViewProps } from './types';
-
-function isRequired(name: string, required?: boolean | string[]) {
- if (required === true) {
- return true;
- }
- if (Array.isArray(required)) {
- return required.includes(name);
- }
- return false;
-}
-
-export function ObjectView({ path, depth, schema }: SchemaViewProps) {
- const properties = Object.entries(schema.properties ?? {});
- const patternProperties = Object.entries(schema.patternProperties ?? {});
-
- return (
- <>
- {depth > 0 && (
-
- {schema.description && (
-
- {schema.description}
-
- )}
-
-
- )}
- {properties.length > 0 && (
- <>
- {depth > 0 && Properties}
- {properties.map(([name, propSchema], index) => (
-
- ))}
- >
- )}
- {patternProperties.length > 0 && (
- <>
- {depth > 0 && (
- Pattern Properties
- )}
- {patternProperties.map(([name, propSchema], index) => (
- ` : name}
- depth={depth + 1}
- schema={propSchema}
- lastChild={index === patternProperties.length - 1}
- required={isRequired(name, schema.required)}
- />
- ))}
- >
- )}
- {schema.additionalProperties && schema.additionalProperties !== true && (
- <>
- Additional Properties
-
- >
- )}
- >
- );
-}
diff --git a/plugins/config-schema/src/components/SchemaView/ScalarView.tsx b/plugins/config-schema/src/components/SchemaView/ScalarView.tsx
deleted file mode 100644
index aeea1c04d7..0000000000
--- a/plugins/config-schema/src/components/SchemaView/ScalarView.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2021 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 Box from '@material-ui/core/Box';
-import Typography from '@material-ui/core/Typography';
-import React from 'react';
-import { MetadataView } from './MetadataView';
-import { SchemaViewProps } from './types';
-
-export function ScalarView({ schema }: SchemaViewProps) {
- return (
- <>
- {schema.description && (
-
- {schema.description}
-
- )}
-
- >
- );
-}
diff --git a/plugins/config-schema/src/components/SchemaView/SchemaView.tsx b/plugins/config-schema/src/components/SchemaView/SchemaView.tsx
index defb7fc353..d7a8db4f69 100644
--- a/plugins/config-schema/src/components/SchemaView/SchemaView.tsx
+++ b/plugins/config-schema/src/components/SchemaView/SchemaView.tsx
@@ -14,11 +14,20 @@
* limitations under the License.
*/
-import React from 'react';
-import { ArrayView } from './ArrayView';
-import { MatchView } from './MatchView';
-import { ObjectView } from './ObjectView';
-import { ScalarView } from './ScalarView';
+import { JsonValue } from '@backstage/types';
+import Box from '@material-ui/core/Box';
+import Chip from '@material-ui/core/Chip';
+import Divider from '@material-ui/core/Divider';
+import Paper from '@material-ui/core/Paper';
+import Table from '@material-ui/core/Table';
+import TableBody from '@material-ui/core/TableBody';
+import TableCell from '@material-ui/core/TableCell';
+import TableRow from '@material-ui/core/TableRow';
+import Typography from '@material-ui/core/Typography';
+import { makeStyles } from '@material-ui/core/styles';
+import { Schema } from 'jsonschema';
+import React, { useEffect, useRef } from 'react';
+import { useScrollTargets } from '../ScrollTargetsContext/ScrollTargetsContext';
import { SchemaViewProps } from './types';
export function SchemaView(props: SchemaViewProps) {
@@ -60,3 +69,337 @@ export function SchemaView(props: SchemaViewProps) {
return ;
}
}
+
+function ArrayView({ path, depth, schema }: SchemaViewProps) {
+ const itemDepth = depth + 1;
+ const itemPath = path ? `${path}[]` : '[]';
+ const itemSchema = schema.items;
+
+ return (
+ <>
+
+ {schema.description && (
+
+ {schema.description}
+
+ )}
+
+
+ Items
+
+ {schema.additionalItems && schema.additionalItems !== true && (
+ <>
+ Additional Items
+
+ >
+ )}
+ >
+ );
+}
+
+function isRequired(name: string, required?: boolean | string[]) {
+ if (required === true) {
+ return true;
+ }
+ if (Array.isArray(required)) {
+ return required.includes(name);
+ }
+ return false;
+}
+
+function ObjectView({ path, depth, schema }: SchemaViewProps) {
+ const properties = Object.entries(schema.properties ?? {});
+ const patternProperties = Object.entries(schema.patternProperties ?? {});
+
+ return (
+ <>
+ {depth > 0 && (
+
+ {schema.description && (
+
+ {schema.description}
+
+ )}
+
+
+ )}
+ {properties.length > 0 && (
+ <>
+ {depth > 0 && Properties}
+ {properties.map(([name, propSchema], index) => (
+
+ ))}
+ >
+ )}
+ {patternProperties.length > 0 && (
+ <>
+ {depth > 0 && (
+ Pattern Properties
+ )}
+ {patternProperties.map(([name, propSchema], index) => (
+ ` : name}
+ depth={depth + 1}
+ schema={propSchema}
+ lastChild={index === patternProperties.length - 1}
+ required={isRequired(name, schema.required)}
+ />
+ ))}
+ >
+ )}
+ {schema.additionalProperties && schema.additionalProperties !== true && (
+ <>
+ Additional Properties
+
+ >
+ )}
+ >
+ );
+}
+
+interface MetadataViewRowProps {
+ label: string;
+ text?: string;
+ data?: JsonValue;
+}
+
+function titleVariant(depth: number) {
+ if (depth <= 1) {
+ return 'h2';
+ } else if (depth === 2) {
+ return 'h3';
+ } else if (depth === 3) {
+ return 'h4';
+ } else if (depth === 4) {
+ return 'h5';
+ }
+ return 'h6';
+}
+
+const useChildViewStyles = makeStyles(theme => ({
+ title: {
+ marginBottom: 0,
+ },
+ chip: {
+ marginLeft: theme.spacing(1),
+ marginRight: 0,
+ marginBottom: 0,
+ },
+}));
+
+function ChildView({
+ path,
+ depth,
+ schema,
+ required,
+ lastChild,
+}: {
+ path: string;
+ depth: number;
+ schema?: Schema;
+ required?: boolean;
+ lastChild?: boolean;
+}) {
+ const classes = useChildViewStyles();
+ const titleRef = useRef(null);
+ const scroll = useScrollTargets();
+
+ useEffect(() => {
+ return scroll?.setScrollListener(path, () => {
+ titleRef.current?.scrollIntoView({ behavior: 'smooth' });
+ });
+ }, [scroll, path]);
+
+ const chips = new Array();
+ const chipProps = { size: 'small' as const, classes: { root: classes.chip } };
+
+ if (required) {
+ chips.push(
+ ,
+ );
+ }
+
+ const visibility = (schema as { visibility?: string })?.visibility;
+ if (visibility === 'frontend') {
+ chips.push(
+ ,
+ );
+ } else if (visibility === 'secret') {
+ chips.push(
+ ,
+ );
+ }
+
+ return (
+
+
+
+
+
+ {path}
+
+ {chips.length > 0 && }
+ {chips}
+
+ {schema && (
+
+ )}
+
+
+ );
+}
+
+function MatchView({
+ path,
+ depth,
+ schema,
+ label,
+}: {
+ path: string;
+ depth: number;
+ schema: Schema[];
+ label: string;
+}) {
+ return (
+ <>
+ {label}
+ {schema.map((optionSchema, index) => (
+
+ ))}
+ >
+ );
+}
+
+function ScalarView({ schema }: SchemaViewProps) {
+ return (
+ <>
+ {schema.description && (
+
+ {schema.description}
+
+ )}
+
+ >
+ );
+}
+
+interface MetadataViewRowProps {
+ label: string;
+ text?: string;
+ data?: JsonValue;
+}
+
+function MetadataViewRow({ label, text, data }: MetadataViewRowProps) {
+ if (text === undefined && data === undefined) {
+ return null;
+ }
+ return (
+
+
+
+ {label}
+
+
+
+
+ {data ? JSON.stringify(data) : text}
+
+
+
+ );
+}
+
+function MetadataView({ schema }: { schema: Schema }) {
+ return (
+
+
+
+
+
+ {schema.additionalProperties === true && (
+
+ )}
+ {schema.additionalItems === true && (
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md
index 26b7e591fa..a634afb3da 100644
--- a/plugins/devtools-backend/CHANGELOG.md
+++ b/plugins/devtools-backend/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-devtools-backend
+## 0.5.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-permission-node@0.8.6-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/config-loader@1.9.3-next.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-devtools-common@0.1.14-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.5.0-next.1
### Minor Changes
diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json
index 956858b0e6..68c3f78e60 100644
--- a/plugins/devtools-backend/package.json
+++ b/plugins/devtools-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-devtools-backend",
- "version": "0.5.0-next.1",
+ "version": "0.5.0-next.2",
"backstage": {
"role": "backend-plugin",
"pluginId": "devtools",
diff --git a/plugins/devtools-common/CHANGELOG.md b/plugins/devtools-common/CHANGELOG.md
index bfbe305c18..719d0a5dbc 100644
--- a/plugins/devtools-common/CHANGELOG.md
+++ b/plugins/devtools-common/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-devtools-common
+## 0.1.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.1.13
### Patch Changes
diff --git a/plugins/devtools-common/package.json b/plugins/devtools-common/package.json
index cc62fd1d07..713f515400 100644
--- a/plugins/devtools-common/package.json
+++ b/plugins/devtools-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-devtools-common",
- "version": "0.1.13",
+ "version": "0.1.14-next.0",
"description": "Common functionalities for the devtools plugin",
"backstage": {
"role": "common-library",
diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md
index 2d6fba2c73..8aac4d63cb 100644
--- a/plugins/devtools/CHANGELOG.md
+++ b/plugins/devtools/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-devtools
+## 0.1.22-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/plugin-devtools-common@0.1.14-next.0
+ - @backstage/plugin-permission-react@0.4.29-next.0
+
## 0.1.22-next.1
### Patch Changes
diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json
index a5530c7eae..c1ea874878 100644
--- a/plugins/devtools/package.json
+++ b/plugins/devtools/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-devtools",
- "version": "0.1.22-next.1",
+ "version": "0.1.22-next.2",
"backstage": {
"role": "frontend-plugin",
"pluginId": "devtools",
diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md
index cf813ac02c..72260d13e4 100644
--- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md
+++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-events-backend-module-aws-sqs
+## 0.4.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.4.6-next.1
### Patch Changes
diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json
index 4fa57975a7..dd051c85bd 100644
--- a/plugins/events-backend-module-aws-sqs/package.json
+++ b/plugins/events-backend-module-aws-sqs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-aws-sqs",
- "version": "0.4.6-next.1",
+ "version": "0.4.6-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md
index 80c6a9b182..a1072f96f3 100644
--- a/plugins/events-backend-module-azure/CHANGELOG.md
+++ b/plugins/events-backend-module-azure/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-events-backend-module-azure
+## 0.2.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+
## 0.2.15-next.1
### Patch Changes
diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json
index c3cecf42b8..2164f96939 100644
--- a/plugins/events-backend-module-azure/package.json
+++ b/plugins/events-backend-module-azure/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-azure",
- "version": "0.2.15-next.1",
+ "version": "0.2.15-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md
index 0185dd7118..1c363bdf7d 100644
--- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md
+++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-events-backend-module-bitbucket-cloud
+## 0.2.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+
## 0.2.15-next.1
### Patch Changes
diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json
index 71c38bd05c..2d6b86abba 100644
--- a/plugins/events-backend-module-bitbucket-cloud/package.json
+++ b/plugins/events-backend-module-bitbucket-cloud/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-bitbucket-cloud",
- "version": "0.2.15-next.1",
+ "version": "0.2.15-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md
index 26be191dc7..37fbc34575 100644
--- a/plugins/events-backend-module-gerrit/CHANGELOG.md
+++ b/plugins/events-backend-module-gerrit/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-events-backend-module-gerrit
+## 0.2.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+
## 0.2.15-next.1
### Patch Changes
diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json
index b78c285780..5cfd52ee0a 100644
--- a/plugins/events-backend-module-gerrit/package.json
+++ b/plugins/events-backend-module-gerrit/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-gerrit",
- "version": "0.2.15-next.1",
+ "version": "0.2.15-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md
index 8a37152557..8cf4a05752 100644
--- a/plugins/events-backend-module-github/CHANGELOG.md
+++ b/plugins/events-backend-module-github/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-events-backend-module-github
+## 0.2.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/config@1.3.1-next.0
+
## 0.2.15-next.1
### Patch Changes
diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json
index 112309cf33..17a920bc3c 100644
--- a/plugins/events-backend-module-github/package.json
+++ b/plugins/events-backend-module-github/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-github",
- "version": "0.2.15-next.1",
+ "version": "0.2.15-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md
index 707ee4f953..33c97e2ba3 100644
--- a/plugins/events-backend-module-gitlab/CHANGELOG.md
+++ b/plugins/events-backend-module-gitlab/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-events-backend-module-gitlab
+## 0.2.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/config@1.3.1-next.0
+
## 0.2.15-next.1
### Patch Changes
diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json
index d20065f195..3c28a76c43 100644
--- a/plugins/events-backend-module-gitlab/package.json
+++ b/plugins/events-backend-module-gitlab/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-gitlab",
- "version": "0.2.15-next.1",
+ "version": "0.2.15-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "events",
diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md
index 6b616e2346..f219442710 100644
--- a/plugins/events-backend-test-utils/CHANGELOG.md
+++ b/plugins/events-backend-test-utils/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-events-backend-test-utils
+## 0.1.39-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.6-next.2
+
## 0.1.39-next.1
### Patch Changes
diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json
index 2f3f5e1980..d6c40af29f 100644
--- a/plugins/events-backend-test-utils/package.json
+++ b/plugins/events-backend-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-test-utils",
- "version": "0.1.39-next.1",
+ "version": "0.1.39-next.2",
"description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node",
"backstage": {
"role": "node-library",
diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md
index dc65db0745..fe8e168607 100644
--- a/plugins/events-backend/CHANGELOG.md
+++ b/plugins/events-backend/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-events-backend
+## 0.4.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/backend-openapi-utils@0.4.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.4.0-next.1
### Minor Changes
diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json
index 68f0a0ed62..39d6068d3b 100644
--- a/plugins/events-backend/package.json
+++ b/plugins/events-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend",
- "version": "0.4.0-next.1",
+ "version": "0.4.0-next.2",
"backstage": {
"role": "backend-plugin",
"pluginId": "events",
diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md
index 4867d7c155..a1d6a6114e 100644
--- a/plugins/events-node/CHANGELOG.md
+++ b/plugins/events-node/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-events-node
+## 0.4.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/types@1.2.0
+
## 0.4.6-next.1
### Patch Changes
diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json
index ece517490c..62653d2966 100644
--- a/plugins/events-node/package.json
+++ b/plugins/events-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-node",
- "version": "0.4.6-next.1",
+ "version": "0.4.6-next.2",
"description": "The plugin-events-node module for @backstage/plugin-events-backend",
"backstage": {
"role": "node-library",
diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md
index 9bbed12b56..16018e8305 100644
--- a/plugins/example-todo-list-backend/CHANGELOG.md
+++ b/plugins/example-todo-list-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @internal/plugin-todo-list-backend
+## 1.0.34-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+
## 1.0.34-next.1
### Patch Changes
diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json
index 0c3308584e..d6f796625e 100644
--- a/plugins/example-todo-list-backend/package.json
+++ b/plugins/example-todo-list-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/plugin-todo-list-backend",
- "version": "1.0.34-next.1",
+ "version": "1.0.34-next.2",
"backstage": {
"role": "backend-plugin",
"pluginId": "todo-list",
diff --git a/plugins/example-todo-list-common/CHANGELOG.md b/plugins/example-todo-list-common/CHANGELOG.md
index be5d7d5096..ad6b7898a2 100644
--- a/plugins/example-todo-list-common/CHANGELOG.md
+++ b/plugins/example-todo-list-common/CHANGELOG.md
@@ -1,5 +1,12 @@
# @internal/plugin-todo-list-common
+## 1.0.23-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 1.0.22
### Patch Changes
diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json
index f9a310ba6c..a06daec424 100644
--- a/plugins/example-todo-list-common/package.json
+++ b/plugins/example-todo-list-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/plugin-todo-list-common",
- "version": "1.0.22",
+ "version": "1.0.23-next.0",
"backstage": {
"role": "common-library",
"pluginId": "todo-list",
diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md
index ba8d7ca11a..7bbc9e46a1 100644
--- a/plugins/example-todo-list/CHANGELOG.md
+++ b/plugins/example-todo-list/CHANGELOG.md
@@ -1,5 +1,13 @@
# @internal/plugin-todo-list
+## 1.0.34-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+
## 1.0.34-next.1
### Patch Changes
diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json
index fda1df0094..bc10e46156 100644
--- a/plugins/example-todo-list/package.json
+++ b/plugins/example-todo-list/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/plugin-todo-list",
- "version": "1.0.34-next.1",
+ "version": "1.0.34-next.2",
"backstage": {
"role": "frontend-plugin",
"pluginId": "todo-list",
diff --git a/plugins/home-react/CHANGELOG.md b/plugins/home-react/CHANGELOG.md
index 044b35eeda..28e6d96519 100644
--- a/plugins/home-react/CHANGELOG.md
+++ b/plugins/home-react/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-home-react
+## 0.1.21-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+
## 0.1.21-next.1
### Patch Changes
diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json
index c8ae406c91..c3c93f88f6 100644
--- a/plugins/home-react/package.json
+++ b/plugins/home-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-home-react",
- "version": "0.1.21-next.1",
+ "version": "0.1.21-next.2",
"description": "A Backstage plugin that contains react components helps you build a home page",
"backstage": {
"role": "web-library",
diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md
index 5479623747..0c08fa3175 100644
--- a/plugins/home/CHANGELOG.md
+++ b/plugins/home/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-home
+## 0.8.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-app-api@1.15.3-next.1
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/plugin-home-react@0.1.21-next.2
+
## 0.8.3-next.1
### Patch Changes
diff --git a/plugins/home/package.json b/plugins/home/package.json
index 9b8efd2335..f7d5f2ff4a 100644
--- a/plugins/home/package.json
+++ b/plugins/home/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-home",
- "version": "0.8.3-next.1",
+ "version": "0.8.3-next.2",
"description": "A Backstage plugin that helps you build a home page",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md
index 23a4dbc6a3..37d7d9dedb 100644
--- a/plugins/kubernetes-backend/CHANGELOG.md
+++ b/plugins/kubernetes-backend/CHANGELOG.md
@@ -1,5 +1,24 @@
# @backstage/plugin-kubernetes-backend
+## 0.19.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-permission-node@0.8.6-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-kubernetes-node@0.2.1-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration-aws-node@0.1.14-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-kubernetes-common@0.9.1-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.19.1-next.1
### Patch Changes
diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json
index 59b9c4c300..7f55f24417 100644
--- a/plugins/kubernetes-backend/package.json
+++ b/plugins/kubernetes-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-backend",
- "version": "0.19.1-next.1",
+ "version": "0.19.1-next.2",
"description": "A Backstage backend plugin that integrates towards Kubernetes",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts
index 3491268d39..ac6a59a7c4 100644
--- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts
+++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts
@@ -31,6 +31,7 @@ import {
registerMswTestHooks,
} from '@backstage/backend-test-utils';
import {
+ CustomResourceFetchResponse,
FetchResponse,
KubernetesRequestAuth,
ObjectsByEntityResponse,
@@ -1428,5 +1429,78 @@ describe('KubernetesFanOutHandler', () => {
}),
);
});
+ it('fetch pod metrics when pods used', async () => {
+ getClustersByEntity.mockImplementation(() =>
+ Promise.resolve({
+ clusters: [
+ {
+ name: 'test-cluster',
+ title: 'cluster-title',
+ url: '',
+ authMetadata: {},
+ },
+ ],
+ }),
+ );
+
+ sut = getKubernetesFanOutHandler([]);
+
+ const resources: CustomResourceFetchResponse[] = [
+ {
+ type: 'customresources',
+ resources: [
+ {
+ apiVersion: 'v1',
+ kind: 'Pod',
+ metadata: {
+ namespace: `ns-test-component-test-cluster`,
+ },
+ },
+ ],
+ },
+ ];
+
+ fetchObjectsForService.mockImplementation(async () => ({
+ responses: resources,
+ errors: [],
+ }));
+
+ const result = await sut.getCustomResourcesByEntity(
+ {
+ entity,
+ auth: {},
+ customResources: [
+ {
+ group: '',
+ apiVersion: 'v1',
+ plural: 'pods',
+ },
+ ],
+ },
+ { credentials: mockCredentials },
+ );
+
+ expect(fetchObjectsForService).toHaveBeenCalledTimes(1);
+ expect(fetchPodMetricsByNamespaces).toHaveBeenCalledTimes(1);
+ expect(fetchPodMetricsByNamespaces).toHaveBeenCalledWith(
+ expect.anything(),
+ { type: 'anonymous' },
+ new Set(['ns-test-component-test-cluster']),
+ expect.anything(),
+ );
+ expect(result).toStrictEqual({
+ items: [
+ {
+ cluster: {
+ name: 'test-cluster',
+ title: 'cluster-title',
+ },
+ errors: [],
+ podMetrics: [POD_METRICS_FIXTURE],
+ resources,
+ },
+ ],
+ });
+ });
});
});
diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts
index 54a038fffd..31c0c91807 100644
--- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts
+++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts
@@ -147,7 +147,11 @@ export interface KubernetesFanOutHandlerOptions
export interface KubernetesRequestBody extends ObjectsByEntityRequest {}
const isPodFetchResponse = (fr: FetchResponse): fr is PodFetchResponse =>
- fr.type === 'pods';
+ fr.type === 'pods' ||
+ (fr.type === 'customresources' &&
+ fr.resources.length > 0 &&
+ fr.resources[0].apiVersion === 'v1' &&
+ fr.resources[0].kind === 'Pod');
const isString = (str: string | undefined): str is string => str !== undefined;
const numberOrBigIntToNumberOrString = (
diff --git a/plugins/kubernetes-cluster/CHANGELOG.md b/plugins/kubernetes-cluster/CHANGELOG.md
index f25cba07f4..359515568b 100644
--- a/plugins/kubernetes-cluster/CHANGELOG.md
+++ b/plugins/kubernetes-cluster/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-kubernetes-cluster
+## 0.0.20-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/plugin-kubernetes-common@0.9.1-next.0
+ - @backstage/plugin-kubernetes-react@0.5.2-next.2
+
## 0.0.20-next.1
### Patch Changes
diff --git a/plugins/kubernetes-cluster/package.json b/plugins/kubernetes-cluster/package.json
index df03ec1321..29f1e857f5 100644
--- a/plugins/kubernetes-cluster/package.json
+++ b/plugins/kubernetes-cluster/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-cluster",
- "version": "0.0.20-next.1",
+ "version": "0.0.20-next.2",
"description": "A Backstage plugin that shows details of Kubernetes clusters",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md
index 8766aa9e6d..3b594da93a 100644
--- a/plugins/kubernetes-common/CHANGELOG.md
+++ b/plugins/kubernetes-common/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-kubernetes-common
+## 0.9.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.9.0
### Minor Changes
diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json
index fe1bb5e154..0f01a38dd4 100644
--- a/plugins/kubernetes-common/package.json
+++ b/plugins/kubernetes-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-common",
- "version": "0.9.0",
+ "version": "0.9.1-next.0",
"description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin",
"backstage": {
"role": "common-library",
diff --git a/plugins/kubernetes-node/CHANGELOG.md b/plugins/kubernetes-node/CHANGELOG.md
index 812fb7218f..d4d69efd81 100644
--- a/plugins/kubernetes-node/CHANGELOG.md
+++ b/plugins/kubernetes-node/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-kubernetes-node
+## 0.2.1-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-kubernetes-common@0.9.1-next.0
+
## 0.2.1-next.1
### Patch Changes
diff --git a/plugins/kubernetes-node/package.json b/plugins/kubernetes-node/package.json
index 1a23a35ef2..b15d289766 100644
--- a/plugins/kubernetes-node/package.json
+++ b/plugins/kubernetes-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-node",
- "version": "0.2.1-next.1",
+ "version": "0.2.1-next.2",
"description": "Node.js library for the kubernetes plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/kubernetes-react/CHANGELOG.md b/plugins/kubernetes-react/CHANGELOG.md
index a76a42894c..902d065b8b 100644
--- a/plugins/kubernetes-react/CHANGELOG.md
+++ b/plugins/kubernetes-react/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-kubernetes-react
+## 0.5.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-kubernetes-common@0.9.1-next.0
+
## 0.5.2-next.1
### Patch Changes
diff --git a/plugins/kubernetes-react/package.json b/plugins/kubernetes-react/package.json
index 101e903e3c..f84cc7d881 100644
--- a/plugins/kubernetes-react/package.json
+++ b/plugins/kubernetes-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes-react",
- "version": "0.5.2-next.1",
+ "version": "0.5.2-next.2",
"description": "Web library for the kubernetes-react plugin",
"backstage": {
"role": "web-library",
diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md
index 513d5ec768..760c72b323 100644
--- a/plugins/kubernetes/CHANGELOG.md
+++ b/plugins/kubernetes/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-kubernetes
+## 0.12.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/plugin-kubernetes-common@0.9.1-next.0
+ - @backstage/plugin-kubernetes-react@0.5.2-next.2
+
## 0.12.2-next.1
### Patch Changes
diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json
index 6336ff286d..b13743f3bf 100644
--- a/plugins/kubernetes/package.json
+++ b/plugins/kubernetes/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-kubernetes",
- "version": "0.12.2-next.1",
+ "version": "0.12.2-next.2",
"description": "A Backstage plugin that integrates towards Kubernetes",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/notifications-backend-module-email/CHANGELOG.md b/plugins/notifications-backend-module-email/CHANGELOG.md
index dab3c8b735..0fc9419cfc 100644
--- a/plugins/notifications-backend-module-email/CHANGELOG.md
+++ b/plugins/notifications-backend-module-email/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-notifications-backend-module-email
+## 0.3.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-notifications-node@0.2.10-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration-aws-node@0.1.14-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-notifications-common@0.0.7-next.0
+
## 0.3.4-next.1
### Patch Changes
diff --git a/plugins/notifications-backend-module-email/package.json b/plugins/notifications-backend-module-email/package.json
index e534053904..f86214a7c0 100644
--- a/plugins/notifications-backend-module-email/package.json
+++ b/plugins/notifications-backend-module-email/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-notifications-backend-module-email",
- "version": "0.3.4-next.1",
+ "version": "0.3.4-next.2",
"description": "The email backend module for the notifications plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/notifications-backend/CHANGELOG.md b/plugins/notifications-backend/CHANGELOG.md
index 9613b6c8d2..f8aab11db2 100644
--- a/plugins/notifications-backend/CHANGELOG.md
+++ b/plugins/notifications-backend/CHANGELOG.md
@@ -1,5 +1,27 @@
# @backstage/plugin-notifications-backend
+## 0.5.0-next.2
+
+### Minor Changes
+
+- fc15b77: **BREAKING**: Removed redundant `/health` endpoint, switch to using [the built-in endpoint instead](https://backstage.io/docs/backend-system/core-services/root-health).
+
+### Patch Changes
+
+- fc15b77: Deprecated root '/' endpoints, moving them under `/notifications` instead.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/plugin-notifications-node@0.2.10-next.2
+ - @backstage/plugin-signals-node@0.1.15-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-notifications-common@0.0.7-next.0
+
## 0.4.4-next.1
### Patch Changes
diff --git a/plugins/notifications-backend/README.md b/plugins/notifications-backend/README.md
index a6b6615d9f..080f1e746b 100644
--- a/plugins/notifications-backend/README.md
+++ b/plugins/notifications-backend/README.md
@@ -29,5 +29,5 @@ To be able to do so, `external access` needs to be enabled as described in the [
Once the API can be accessed, the request can look like:
```
-curl -X POST [YOUR_SERVER_URL]/api/notifications -H "Content-Type: application/json" -H "Authorization: Bearer [BASE64_ENCODED_ACCESS_TOKEN]" -d '{"recipients":{"type":"entity","entityRef":"user:development/guest"},"payload": {"title": "Title of user-targeted external message","description": "The description","link": "http://foo.com/bar","severity": "high","topic": "The topic"}}'
+curl -X POST [YOUR_SERVER_URL]/api/notifications/notifications -H "Content-Type: application/json" -H "Authorization: Bearer [BASE64_ENCODED_ACCESS_TOKEN]" -d '{"recipients":{"type":"entity","entityRef":"user:development/guest"},"payload": {"title": "Title of user-targeted external message","description": "The description","link": "http://foo.com/bar","severity": "high","topic": "The topic"}}'
```
diff --git a/plugins/notifications-backend/package.json b/plugins/notifications-backend/package.json
index e1e3519418..a1ba6a8b54 100644
--- a/plugins/notifications-backend/package.json
+++ b/plugins/notifications-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-notifications-backend",
- "version": "0.4.4-next.1",
+ "version": "0.5.0-next.2",
"backstage": {
"role": "backend-plugin",
"pluginId": "notifications",
diff --git a/plugins/notifications-backend/src/service/router.test.ts b/plugins/notifications-backend/src/service/router.test.ts
index 470532b2dc..5126181c4f 100644
--- a/plugins/notifications-backend/src/service/router.test.ts
+++ b/plugins/notifications-backend/src/service/router.test.ts
@@ -23,7 +23,11 @@ import request from 'supertest';
import { createRouter } from './router';
import { ConfigReader } from '@backstage/config';
import { SignalsService } from '@backstage/plugin-signals-node';
-import { mockCredentials, mockServices } from '@backstage/backend-test-utils';
+import {
+ mockCredentials,
+ mockErrorHandler,
+ mockServices,
+} from '@backstage/backend-test-utils';
import { NotificationSendOptions } from '@backstage/plugin-notifications-node';
import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils';
@@ -68,26 +72,17 @@ describe('createRouter', () => {
auth,
catalog,
});
- app = express().use(router);
+ app = express().use(router).use(mockErrorHandler());
});
beforeEach(() => {
jest.resetAllMocks();
});
- describe('GET /health', () => {
- it('returns ok', async () => {
- const response = await request(app).get('/health');
-
- expect(response.status).toEqual(200);
- expect(response.body).toEqual({ status: 'ok' });
- });
- });
-
- describe('POST /', () => {
+ describe('POST /notifications', () => {
const sendNotification = async (data: NotificationSendOptions) =>
request(app)
- .post('/')
+ .post('/notifications')
.send(data)
.set('Content-Type', 'application/json')
.set('Accept', 'application/json');
diff --git a/plugins/notifications-backend/src/service/router.ts b/plugins/notifications-backend/src/service/router.ts
index 88cd1fd337..8a12a53be5 100644
--- a/plugins/notifications-backend/src/service/router.ts
+++ b/plugins/notifications-backend/src/service/router.ts
@@ -14,8 +14,7 @@
* limitations under the License.
*/
-import { errorHandler, PluginDatabaseManager } from '@backstage/backend-common';
-import express, { Request } from 'express';
+import express, { Request, Response } from 'express';
import Router from 'express-promise-router';
import {
DatabaseNotificationsStore,
@@ -31,6 +30,7 @@ import {
import { InputError, NotFoundError } from '@backstage/errors';
import {
AuthService,
+ DatabaseService,
HttpAuthService,
LoggerService,
UserInfoService,
@@ -53,7 +53,7 @@ import { Config } from '@backstage/config';
export interface RouterOptions {
logger: LoggerService;
config: Config;
- database: PluginDatabaseManager;
+ database: DatabaseService;
auth: AuthService;
httpAuth: HttpAuthService;
userInfo: UserInfoService;
@@ -250,12 +250,7 @@ export async function createRouter(
const router = Router();
router.use(express.json());
- router.get('/health', (_, response) => {
- logger.info('PONG!');
- response.json({ status: 'ok' });
- });
-
- router.get('/', async (req, res) => {
+ const listNotificationsHandler = async (req: Request, res: Response) => {
const user = await getUser(req);
const opts: NotificationGetOptions = {
user: user,
@@ -310,7 +305,10 @@ export async function createRouter(
totalCount,
notifications,
});
- });
+ };
+
+ router.get('/', listNotificationsHandler); // Deprecated endpoint
+ router.get('/notifications', listNotificationsHandler);
router.get('/status', async (req: Request, res) => {
const user = await getUser(req);
@@ -345,8 +343,7 @@ export async function createRouter(
},
);
- // Make sure this is the last "GET" handler
- router.get('/:id', async (req, res) => {
+ const getNotificationHandler = async (req: Request, res: Response) => {
const user = await getUser(req);
const opts: NotificationGetOptions = {
user: user,
@@ -358,9 +355,13 @@ export async function createRouter(
throw new NotFoundError('Not found');
}
res.json(notifications[0]);
- });
+ };
- router.post('/update', async (req, res) => {
+ // Make sure this is the last "GET" handler
+ router.get('/:id', getNotificationHandler); // Deprecated endpoint
+ router.get('/notifications/:id', getNotificationHandler);
+
+ const updateNotificationsHandler = async (req: Request, res: Response) => {
const user = await getUser(req);
const { ids, read, saved } = req.body;
if (!ids || !Array.isArray(ids)) {
@@ -397,7 +398,10 @@ export async function createRouter(
const notifications = await store.getNotifications({ ids, user: user });
res.json(notifications);
- });
+ };
+
+ router.post('/update', updateNotificationsHandler); // Deprecated endpoint
+ router.post('/notifications/update', updateNotificationsHandler);
const sendBroadcastNotification = async (
baseNotification: Omit,
@@ -509,77 +513,79 @@ export async function createRouter(
return notifications;
};
- // Add new notification
- router.post(
- '/',
- async (req: Request, res) => {
- const credentials = await httpAuth.credentials(req, {
- allow: ['service'],
- });
+ const createNotificationHandler = async (
+ req: Request,
+ res: Response,
+ ) => {
+ const credentials = await httpAuth.credentials(req, {
+ allow: ['service'],
+ });
- const origin = credentials.principal.subject;
- const opts = await processOptions(req.body, origin);
- const { recipients, payload } = opts;
- const { title, link } = payload;
- const notifications: Notification[] = [];
- let users = [];
+ const origin = credentials.principal.subject;
+ const opts = await processOptions(req.body, origin);
+ const { recipients, payload } = opts;
+ const { title, link } = payload;
+ const notifications: Notification[] = [];
+ let users = [];
- if (!recipients || !title) {
- logger.error(`Invalid notification request received`);
- throw new InputError(`Invalid notification request received`);
+ if (!recipients || !title) {
+ logger.error(`Invalid notification request received`);
+ throw new InputError(`Invalid notification request received`);
+ }
+
+ if (link) {
+ try {
+ validateLink(link);
+ } catch (e) {
+ throw new InputError('Invalid link provided', e);
}
+ }
- if (link) {
- try {
- validateLink(link);
- } catch (e) {
- throw new InputError('Invalid link provided', e);
- }
- }
+ const baseNotification = {
+ payload: {
+ ...payload,
+ severity: payload.severity ?? 'normal',
+ },
+ origin,
+ created: new Date(),
+ };
- const baseNotification = {
- payload: {
- ...payload,
- severity: payload.severity ?? 'normal',
- },
+ if (recipients.type === 'broadcast') {
+ const broadcast = await sendBroadcastNotification(
+ baseNotification,
+ opts,
origin,
- created: new Date(),
- };
+ );
+ notifications.push(broadcast);
+ } else {
+ const entityRef = recipients.entityRef;
- if (recipients.type === 'broadcast') {
- const broadcast = await sendBroadcastNotification(
- baseNotification,
- opts,
- origin,
+ try {
+ users = await getUsersForEntityRef(
+ entityRef,
+ recipients.excludeEntityRef ?? [],
+ { auth, catalogClient: catalog },
);
- notifications.push(broadcast);
- } else {
- const entityRef = recipients.entityRef;
-
- try {
- users = await getUsersForEntityRef(
- entityRef,
- recipients.excludeEntityRef ?? [],
- { auth, catalogClient: catalog },
- );
- } catch (e) {
- logger.error(`Failed to resolve notification receivers: ${e}`);
- throw new InputError('Failed to resolve notification receivers', e);
- }
-
- const userNotifications = await sendUserNotifications(
- baseNotification,
- users,
- opts,
- origin,
- );
- notifications.push(...userNotifications);
+ } catch (e) {
+ logger.error(`Failed to resolve notification receivers: ${e}`);
+ throw new InputError('Failed to resolve notification receivers', e);
}
- res.json(notifications);
- },
- );
+ const userNotifications = await sendUserNotifications(
+ baseNotification,
+ users,
+ opts,
+ origin,
+ );
+ notifications.push(...userNotifications);
+ }
+
+ res.json(notifications);
+ };
+
+ // Add new notification
+ router.post('/', createNotificationHandler);
+ router.post('/notifications', createNotificationHandler);
- router.use(errorHandler());
return router;
}
diff --git a/plugins/notifications-common/CHANGELOG.md b/plugins/notifications-common/CHANGELOG.md
index d5efc02e1a..8b536cc17f 100644
--- a/plugins/notifications-common/CHANGELOG.md
+++ b/plugins/notifications-common/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-notifications-common
+## 0.0.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.1-next.0
+
## 0.0.6
### Patch Changes
diff --git a/plugins/notifications-common/package.json b/plugins/notifications-common/package.json
index 3044b7fe9b..7d5689fb77 100644
--- a/plugins/notifications-common/package.json
+++ b/plugins/notifications-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-notifications-common",
- "version": "0.0.6",
+ "version": "0.0.7-next.0",
"description": "Common functionalities for the notifications plugin",
"backstage": {
"role": "common-library",
diff --git a/plugins/notifications-node/CHANGELOG.md b/plugins/notifications-node/CHANGELOG.md
index 817dbda543..d35c6a9c9a 100644
--- a/plugins/notifications-node/CHANGELOG.md
+++ b/plugins/notifications-node/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-notifications-node
+## 0.2.10-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-signals-node@0.1.15-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/plugin-notifications-common@0.0.7-next.0
+
## 0.2.10-next.1
### Patch Changes
diff --git a/plugins/notifications-node/package.json b/plugins/notifications-node/package.json
index c330e0db58..56db67f3cf 100644
--- a/plugins/notifications-node/package.json
+++ b/plugins/notifications-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-notifications-node",
- "version": "0.2.10-next.1",
+ "version": "0.2.10-next.2",
"description": "Node.js library for the notifications plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/notifications/CHANGELOG.md b/plugins/notifications/CHANGELOG.md
index 111f59eab3..06ce8f8206 100644
--- a/plugins/notifications/CHANGELOG.md
+++ b/plugins/notifications/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-notifications
+## 0.5.0-next.2
+
+### Minor Changes
+
+- fc15b77: Switched to using the new `/notifications` endpoints. Be sure to update the `notifications` plugin backend before deploying this frontend plugin change.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-notifications-common@0.0.7-next.0
+ - @backstage/plugin-signals-react@0.0.8-next.0
+
## 0.4.2-next.1
### Patch Changes
diff --git a/plugins/notifications/package.json b/plugins/notifications/package.json
index 5634b44c0e..a2ca6a3f20 100644
--- a/plugins/notifications/package.json
+++ b/plugins/notifications/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-notifications",
- "version": "0.4.2-next.1",
+ "version": "0.5.0-next.2",
"backstage": {
"role": "frontend-plugin",
"pluginId": "notifications",
diff --git a/plugins/notifications/src/api/NotificationsClient.test.ts b/plugins/notifications/src/api/NotificationsClient.test.ts
index f378269e45..8248ea9331 100644
--- a/plugins/notifications/src/api/NotificationsClient.test.ts
+++ b/plugins/notifications/src/api/NotificationsClient.test.ts
@@ -48,7 +48,7 @@ describe('NotificationsClient', () => {
it('should fetch notifications from correct endpoint', async () => {
server.use(
- rest.get(`${mockBaseUrl}/`, (_, res, ctx) =>
+ rest.get(`${mockBaseUrl}/notifications`, (_, res, ctx) =>
res(ctx.json(expectedResp)),
),
);
@@ -58,7 +58,7 @@ describe('NotificationsClient', () => {
it('should fetch notifications with options', async () => {
server.use(
- rest.get(`${mockBaseUrl}/`, (req, res, ctx) => {
+ rest.get(`${mockBaseUrl}/notifications`, (req, res, ctx) => {
expect(req.url.search).toBe(
'?limit=10&offset=0&search=find+me&read=true&createdAfter=1970-01-01T00%3A00%3A00.005Z',
);
@@ -77,7 +77,7 @@ describe('NotificationsClient', () => {
it('should omit unselected fetch options', async () => {
server.use(
- rest.get(`${mockBaseUrl}/`, (req, res, ctx) => {
+ rest.get(`${mockBaseUrl}/notifications`, (req, res, ctx) => {
expect(req.url.search).toBe('?limit=10');
return res(ctx.json(expectedResp));
}),
@@ -91,7 +91,7 @@ describe('NotificationsClient', () => {
it('should fetch single notification', async () => {
server.use(
- rest.get(`${mockBaseUrl}/:id`, (req, res, ctx) => {
+ rest.get(`${mockBaseUrl}/notifications/:id`, (req, res, ctx) => {
expect(req.params.id).toBe('acdaa8ca-262b-43c1-b74b-de06e5f3b3c7');
return res(ctx.json(testNotification));
}),
@@ -115,12 +115,15 @@ describe('NotificationsClient', () => {
it('should update notifications', async () => {
server.use(
- rest.post(`${mockBaseUrl}/update`, async (req, res, ctx) => {
- expect(await req.json()).toEqual({
- ids: ['acdaa8ca-262b-43c1-b74b-de06e5f3b3c7'],
- });
- return res(ctx.json(expectedResp));
- }),
+ rest.post(
+ `${mockBaseUrl}/notifications/update`,
+ async (req, res, ctx) => {
+ expect(await req.json()).toEqual({
+ ids: ['acdaa8ca-262b-43c1-b74b-de06e5f3b3c7'],
+ });
+ return res(ctx.json(expectedResp));
+ },
+ ),
);
const response = await client.updateNotifications({
ids: ['acdaa8ca-262b-43c1-b74b-de06e5f3b3c7'],
diff --git a/plugins/notifications/src/api/NotificationsClient.ts b/plugins/notifications/src/api/NotificationsClient.ts
index 983065f96e..5e763ecb8c 100644
--- a/plugins/notifications/src/api/NotificationsClient.ts
+++ b/plugins/notifications/src/api/NotificationsClient.ts
@@ -71,23 +71,26 @@ export class NotificationsClient implements NotificationsApi {
if (options?.minimumSeverity !== undefined) {
queryString.append('minimumSeverity', options.minimumSeverity);
}
- const urlSegment = `?${queryString}`;
- return await this.request(urlSegment);
+ return await this.request(
+ `/notifications?${queryString}`,
+ );
}
async getNotification(id: string): Promise {
- return await this.request(`${id}`);
+ return await this.request(
+ `/notifications/${encodeURIComponent(id)}`,
+ );
}
async getStatus(): Promise {
- return await this.request('status');
+ return await this.request('/status');
}
async updateNotifications(
options: UpdateNotificationsOptions,
): Promise {
- return await this.request('update', {
+ return await this.request('/notifications/update', {
method: 'POST',
body: JSON.stringify(options),
headers: { 'Content-Type': 'application/json' },
@@ -95,29 +98,27 @@ export class NotificationsClient implements NotificationsApi {
}
async getNotificationSettings(): Promise {
- return await this.request('settings');
+ return await this.request('/settings');
}
async updateNotificationSettings(
settings: NotificationSettings,
): Promise {
- return await this.request('settings', {
+ return await this.request('/settings', {
method: 'POST',
body: JSON.stringify(settings),
headers: { 'Content-Type': 'application/json' },
});
}
- private async request(path: string, init?: any): Promise {
- const baseUrl = `${await this.discoveryApi.getBaseUrl('notifications')}/`;
- const url = new URL(path, baseUrl);
+ private async request(path: string, init?: RequestInit): Promise {
+ const baseUrl = await this.discoveryApi.getBaseUrl('notifications');
+ const res = await this.fetchApi.fetch(`${baseUrl}${path}`, init);
- const response = await this.fetchApi.fetch(url.toString(), init);
-
- if (!response.ok) {
- throw await ResponseError.fromResponse(response);
+ if (!res.ok) {
+ throw await ResponseError.fromResponse(res);
}
- return response.json() as Promise;
+ return res.json() as Promise;
}
}
diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md
index 2527cdfd83..2cdb42440f 100644
--- a/plugins/org-react/CHANGELOG.md
+++ b/plugins/org-react/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-org-react
+## 0.1.33-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+
## 0.1.33-next.1
### Patch Changes
diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json
index 2e2091aa6c..7317cdf019 100644
--- a/plugins/org-react/package.json
+++ b/plugins/org-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-org-react",
- "version": "0.1.33-next.1",
+ "version": "0.1.33-next.2",
"backstage": {
"role": "web-library",
"pluginId": "org",
diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md
index 0cf9b74c8f..090168e075 100644
--- a/plugins/org/CHANGELOG.md
+++ b/plugins/org/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-org
+## 0.6.34-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+
## 0.6.34-next.1
### Patch Changes
diff --git a/plugins/org/package.json b/plugins/org/package.json
index 605d766ab8..d5efb6d5d8 100644
--- a/plugins/org/package.json
+++ b/plugins/org/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-org",
- "version": "0.6.34-next.1",
+ "version": "0.6.34-next.2",
"description": "A Backstage plugin that helps you create entity pages for your organization",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md
index 83b2218ee5..71f4a57fdc 100644
--- a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md
+++ b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-permission-backend-module-allow-all-policy
+## 0.2.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-permission-node@0.8.6-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.2.3-next.1
### Patch Changes
diff --git a/plugins/permission-backend-module-policy-allow-all/package.json b/plugins/permission-backend-module-policy-allow-all/package.json
index 0970bd05a1..8ec39d74c7 100644
--- a/plugins/permission-backend-module-policy-allow-all/package.json
+++ b/plugins/permission-backend-module-policy-allow-all/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-backend-module-allow-all-policy",
- "version": "0.2.3-next.1",
+ "version": "0.2.3-next.2",
"description": "Allow all policy backend module for the permission plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md
index 57d7750698..ba1968408a 100644
--- a/plugins/permission-backend/CHANGELOG.md
+++ b/plugins/permission-backend/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-permission-backend
+## 0.5.52-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-permission-node@0.8.6-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.5.52-next.1
### Patch Changes
diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json
index 605cb35dfc..b358be1cb7 100644
--- a/plugins/permission-backend/package.json
+++ b/plugins/permission-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-backend",
- "version": "0.5.52-next.1",
+ "version": "0.5.52-next.2",
"backstage": {
"role": "backend-plugin",
"pluginId": "permission",
diff --git a/plugins/permission-common/CHANGELOG.md b/plugins/permission-common/CHANGELOG.md
index 6314d92b02..7731cc583e 100644
--- a/plugins/permission-common/CHANGELOG.md
+++ b/plugins/permission-common/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-permission-common
+## 0.8.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.8.2
### Patch Changes
diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json
index a384550bcd..5ed838a42f 100644
--- a/plugins/permission-common/package.json
+++ b/plugins/permission-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-common",
- "version": "0.8.2",
+ "version": "0.8.3-next.0",
"description": "Isomorphic types and client for Backstage permissions and authorization",
"backstage": {
"role": "common-library",
diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md
index 01cfa00d9a..a99a573ad1 100644
--- a/plugins/permission-node/CHANGELOG.md
+++ b/plugins/permission-node/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-permission-node
+## 0.8.6-next.2
+
+### Patch Changes
+
+- b149e2a: The `createPermissionIntegrationRouter` function now detects and prevents the exposure of duplicate permissions.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.8.6-next.1
### Patch Changes
diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json
index 94bf4e0ac5..631006daee 100644
--- a/plugins/permission-node/package.json
+++ b/plugins/permission-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-node",
- "version": "0.8.6-next.1",
+ "version": "0.8.6-next.2",
"description": "Common permission and authorization utilities for backend plugins",
"backstage": {
"role": "node-library",
diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts
index 24e1b91065..a38059e547 100644
--- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts
+++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts
@@ -904,7 +904,7 @@ describe('createPermissionIntegrationRouter', () => {
const response = await request(
express().use(
createPermissionIntegrationRouter({
- permissions: [aPermission],
+ permissions: [aPermission, testPermission],
resources: [
{
resourceType: 'test-resource',
diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts
index 40d215d515..5210e6fb1c 100644
--- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts
+++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts
@@ -328,11 +328,16 @@ export function createPermissionIntegrationRouter<
>
).rules || [],
);
- const allPermissions = [
- ...((options as { permissions: Permission[] }).permissions || []),
- ...(optionsWithResources.resources?.flatMap(o => o.permissions || []) ||
- []),
- ];
+
+ const allPermissions = Array.from(
+ new Map(
+ [
+ ...((options as { permissions: Permission[] }).permissions || []),
+ ...(optionsWithResources.resources?.flatMap(o => o.permissions || []) ||
+ []),
+ ].map(i => [i.name, i]),
+ ).values(),
+ );
const allResourceTypes = allOptions.reduce((acc, option) => {
if (
diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md
index fa87a388f8..fa68a10367 100644
--- a/plugins/permission-react/CHANGELOG.md
+++ b/plugins/permission-react/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-permission-react
+## 0.4.29-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 0.4.28
### Patch Changes
diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json
index a6765949b2..6d7fe9af18 100644
--- a/plugins/permission-react/package.json
+++ b/plugins/permission-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-react",
- "version": "0.4.28",
+ "version": "0.4.29-next.0",
"backstage": {
"role": "web-library",
"pluginId": "permission",
diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md
index 9adc093541..2fe259d217 100644
--- a/plugins/proxy-backend/CHANGELOG.md
+++ b/plugins/proxy-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-proxy-backend
+## 0.5.9-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.5.9-next.1
### Patch Changes
diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json
index 3c23b95c3e..90e52a1367 100644
--- a/plugins/proxy-backend/package.json
+++ b/plugins/proxy-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-proxy-backend",
- "version": "0.5.9-next.1",
+ "version": "0.5.9-next.2",
"description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/scaffolder-backend-module-azure/CHANGELOG.md b/plugins/scaffolder-backend-module-azure/CHANGELOG.md
index e4e9315dc4..5fe7df4a13 100644
--- a/plugins/scaffolder-backend-module-azure/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-azure/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-azure
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.2.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-azure/package.json b/plugins/scaffolder-backend-module-azure/package.json
index 15d78a9102..4b3b42046f 100644
--- a/plugins/scaffolder-backend-module-azure/package.json
+++ b/plugins/scaffolder-backend-module-azure/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-azure",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"description": "The azure module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md
index 092eb08124..0bfa509d93 100644
--- a/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-bitbucket-cloud/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-scaffolder-backend-module-bitbucket-cloud
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.1
+
## 0.2.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json
index 970b0d6abd..349e6cc60a 100644
--- a/plugins/scaffolder-backend-module-bitbucket-cloud/package.json
+++ b/plugins/scaffolder-backend-module-bitbucket-cloud/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"description": "The Bitbucket Cloud module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md
index d6ff8431a3..af3ec86cb8 100644
--- a/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-bitbucket-server/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-bitbucket-server
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.2.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-bitbucket-server/package.json b/plugins/scaffolder-backend-module-bitbucket-server/package.json
index 0d0a89c521..ef35f60c72 100644
--- a/plugins/scaffolder-backend-module-bitbucket-server/package.json
+++ b/plugins/scaffolder-backend-module-bitbucket-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-bitbucket-server",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"description": "The Bitbucket Server module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md
index dc440b7510..f56a30d4ed 100644
--- a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-scaffolder-backend-module-bitbucket
+## 0.3.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.4-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.4-next.2
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.3.5-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-bitbucket/package.json b/plugins/scaffolder-backend-module-bitbucket/package.json
index b8d4d25cff..d89b8c660d 100644
--- a/plugins/scaffolder-backend-module-bitbucket/package.json
+++ b/plugins/scaffolder-backend-module-bitbucket/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-bitbucket",
- "version": "0.3.5-next.1",
+ "version": "0.3.5-next.2",
"description": "The bitbucket module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md
index a593356ba2..abb3df3b1b 100644
--- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-confluence-to-markdown
+## 0.3.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.3.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
index 0a0f81610e..099f9e4bf9 100644
--- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
+++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown",
- "version": "0.3.4-next.1",
+ "version": "0.3.4-next.2",
"description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md
index 352198452a..942a2b2684 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-scaffolder-backend-module-cookiecutter
+## 0.3.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/types@1.2.0
+
## 0.3.5-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json
index 43c78111f8..c36132c064 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/package.json
+++ b/plugins/scaffolder-backend-module-cookiecutter/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-cookiecutter",
- "version": "0.3.5-next.1",
+ "version": "0.3.5-next.2",
"description": "A module for the scaffolder backend that lets you template projects using cookiecutter",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md
index fc9c71d097..cd7a705579 100644
--- a/plugins/scaffolder-backend-module-gcp/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-gcp/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-gcp
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.2.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-gcp/package.json b/plugins/scaffolder-backend-module-gcp/package.json
index 1bb792fe59..d3ab1865d2 100644
--- a/plugins/scaffolder-backend-module-gcp/package.json
+++ b/plugins/scaffolder-backend-module-gcp/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-gcp",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"description": "The GCP Bucket module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md
index 1914c68fb1..0d393f9a93 100644
--- a/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-gerrit/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-gerrit
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.2.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-gerrit/package.json b/plugins/scaffolder-backend-module-gerrit/package.json
index 1f0385538f..1aacbdbaaf 100644
--- a/plugins/scaffolder-backend-module-gerrit/package.json
+++ b/plugins/scaffolder-backend-module-gerrit/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-gerrit",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"description": "The gerrit module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md
index 9cca747af6..793f1ef556 100644
--- a/plugins/scaffolder-backend-module-gitea/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-gitea/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-gitea
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.2.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-gitea/package.json b/plugins/scaffolder-backend-module-gitea/package.json
index 7a7d959e47..db2104ac36 100644
--- a/plugins/scaffolder-backend-module-gitea/package.json
+++ b/plugins/scaffolder-backend-module-gitea/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-gitea",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"description": "The gitea module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-github/CHANGELOG.md b/plugins/scaffolder-backend-module-github/CHANGELOG.md
index 098cf48194..0cb2dd5d70 100644
--- a/plugins/scaffolder-backend-module-github/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-github/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-scaffolder-backend-module-github
+## 0.5.4-next.2
+
+### Patch Changes
+
+- e913fdf: Add github backend module to create-app and improve error messages
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.5.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-github/package.json b/plugins/scaffolder-backend-module-github/package.json
index 5ecdf0ceec..13d5af409a 100644
--- a/plugins/scaffolder-backend-module-github/package.json
+++ b/plugins/scaffolder-backend-module-github/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-github",
- "version": "0.5.4-next.1",
+ "version": "0.5.4-next.2",
"description": "The github module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-github/report.api.md b/plugins/scaffolder-backend-module-github/report.api.md
index 547c61768f..e954384444 100644
--- a/plugins/scaffolder-backend-module-github/report.api.md
+++ b/plugins/scaffolder-backend-module-github/report.api.md
@@ -3,6 +3,7 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
+import { AuthService } from '@backstage/backend-plugin-api';
import { BackendFeature } from '@backstage/backend-plugin-api';
import { CatalogApi } from '@backstage/catalog-client';
import { Config } from '@backstage/config';
@@ -103,6 +104,7 @@ export function createGithubDeployKeyAction(options: {
export function createGithubEnvironmentAction(options: {
integrations: ScmIntegrationRegistry;
catalogClient?: CatalogApi;
+ auth?: AuthService;
}): TemplateAction<
{
repoUrl: string;
diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubEnvironment.test.ts b/plugins/scaffolder-backend-module-github/src/actions/githubEnvironment.test.ts
index 1397942a7c..898e1842f7 100644
--- a/plugins/scaffolder-backend-module-github/src/actions/githubEnvironment.test.ts
+++ b/plugins/scaffolder-backend-module-github/src/actions/githubEnvironment.test.ts
@@ -20,6 +20,7 @@ import { TemplateAction } from '@backstage/plugin-scaffolder-node';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { CatalogApi } from '@backstage/catalog-client';
+import { mockCredentials, mockServices } from '@backstage/backend-test-utils';
const mockOctokit = {
rest: {
@@ -71,6 +72,14 @@ describe('github:environment:create', () => {
});
const integrations = ScmIntegrations.fromConfig(config);
+
+ const credentials = mockCredentials.user();
+
+ const token = mockCredentials.service.token({
+ onBehalfOf: credentials,
+ targetPluginId: 'catalog',
+ });
+
let action: TemplateAction;
const mockContext = createMockActionContext({
@@ -78,6 +87,7 @@ describe('github:environment:create', () => {
repoUrl: 'github.com?repo=repository&owner=owner',
name: 'envname',
},
+ secrets: { backstageToken: token },
});
beforeEach(() => {
@@ -122,6 +132,7 @@ describe('github:environment:create', () => {
action = createGithubEnvironmentAction({
integrations,
catalogClient: mockCatalogClient as CatalogApi,
+ auth: mockServices.auth(),
});
});
@@ -453,6 +464,13 @@ describe('github:environment:create', () => {
},
});
+ expect(mockCatalogClient.getEntitiesByRefs).toHaveBeenCalledWith(
+ {
+ entityRefs: ['group:default/team-a', 'user:default/johndoe'],
+ },
+ { token },
+ );
+
expect(
mockOctokit.rest.repos.createOrUpdateEnvironment,
).toHaveBeenCalledWith({
diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubEnvironment.ts b/plugins/scaffolder-backend-module-github/src/actions/githubEnvironment.ts
index 29c0a3ce38..ef59b611fe 100644
--- a/plugins/scaffolder-backend-module-github/src/actions/githubEnvironment.ts
+++ b/plugins/scaffolder-backend-module-github/src/actions/githubEnvironment.ts
@@ -26,6 +26,7 @@ import Sodium from 'libsodium-wrappers';
import { examples } from './gitHubEnvironment.examples';
import { CatalogApi } from '@backstage/catalog-client';
import { Entity } from '@backstage/catalog-model';
+import { AuthService } from '@backstage/backend-plugin-api';
/**
* Creates an `github:environment:create` Scaffolder action that creates a Github Environment.
@@ -35,8 +36,9 @@ import { Entity } from '@backstage/catalog-model';
export function createGithubEnvironmentAction(options: {
integrations: ScmIntegrationRegistry;
catalogClient?: CatalogApi;
+ auth?: AuthService;
}) {
- const { integrations, catalogClient } = options;
+ const { integrations, catalogClient, auth } = options;
// For more information on how to define custom actions, see
// https://backstage.io/docs/features/software-templates/writing-custom-actions
return createTemplateAction<{
@@ -140,7 +142,8 @@ export function createGithubEnvironmentAction(options: {
reviewers: {
title: 'Reviewers',
type: 'array',
- description: 'Reviewers for this environment',
+ description:
+ 'Reviewers for this environment. Must be a list of Backstage entity references.',
items: {
type: 'string',
},
@@ -163,6 +166,11 @@ export function createGithubEnvironmentAction(options: {
reviewers,
} = ctx.input;
+ const { token } = (await auth?.getPluginRequestToken({
+ onBehalfOf: await ctx.getInitiatorCredentials(),
+ targetPluginId: 'catalog',
+ })) ?? { token: ctx.secrets?.backstageToken };
+
// When environment creation step is executed right after a repo publish step, the repository might not be available immediately.
// Add a 2-second delay before initiating the steps in this action.
await new Promise(resolve => setTimeout(resolve, 2000));
@@ -190,9 +198,14 @@ export function createGithubEnvironmentAction(options: {
if (reviewers) {
let reviewersEntityRefs: Array = [];
// Fetch reviewers from Catalog
- const catalogResponse = await catalogClient?.getEntitiesByRefs({
- entityRefs: reviewers,
- });
+ const catalogResponse = await catalogClient?.getEntitiesByRefs(
+ {
+ entityRefs: reviewers,
+ },
+ {
+ token,
+ },
+ );
if (catalogResponse?.items?.length) {
reviewersEntityRefs = catalogResponse.items;
}
diff --git a/plugins/scaffolder-backend-module-github/src/actions/githubPagesEnable.ts b/plugins/scaffolder-backend-module-github/src/actions/githubPagesEnable.ts
index 044005961e..42b9c47030 100644
--- a/plugins/scaffolder-backend-module-github/src/actions/githubPagesEnable.ts
+++ b/plugins/scaffolder-backend-module-github/src/actions/githubPagesEnable.ts
@@ -67,14 +67,13 @@ export function createGithubPagesEnableAction(options: {
sourceBranch: {
title: 'Source Branch',
type: 'string',
- description:
- 'The the GitHub Pages source branch. Default is "main"',
+ description: 'The GitHub Pages source branch. Default is "main"',
},
sourcePath: {
title: 'Source Path',
type: 'string',
description:
- 'The the GitHub Pages source path - "/" or "/docs". Default is "/"',
+ 'The GitHub Pages source path - "/" or "/docs". Default is "/"',
},
token: {
title: 'Authorization Token',
diff --git a/plugins/scaffolder-backend-module-github/src/actions/helpers.ts b/plugins/scaffolder-backend-module-github/src/actions/helpers.ts
index 0ae1cad3fb..b28c35105c 100644
--- a/plugins/scaffolder-backend-module-github/src/actions/helpers.ts
+++ b/plugins/scaffolder-backend-module-github/src/actions/helpers.ts
@@ -93,7 +93,7 @@ export async function getOctokitOptions(options: {
if (!credentialProviderToken) {
throw new InputError(
- `No token available for host: ${host}, with owner ${owner}, and repo ${repo}`,
+ `No token available for host: ${host}, with owner ${owner}, and repo ${repo}. Make sure GitHub auth is configured correctly. See https://backstage.io/docs/auth/github/provider for more details.`,
);
}
diff --git a/plugins/scaffolder-backend-module-github/src/module.ts b/plugins/scaffolder-backend-module-github/src/module.ts
index f837ad0456..0387473fdb 100644
--- a/plugins/scaffolder-backend-module-github/src/module.ts
+++ b/plugins/scaffolder-backend-module-github/src/module.ts
@@ -51,8 +51,9 @@ export const githubModule = createBackendModule({
scaffolder: scaffolderActionsExtensionPoint,
config: coreServices.rootConfig,
discovery: coreServices.discovery,
+ auth: coreServices.auth,
},
- async init({ scaffolder, config, discovery }) {
+ async init({ scaffolder, config, discovery, auth }) {
const integrations = ScmIntegrations.fromConfig(config);
const githubCredentialsProvider =
DefaultGithubCredentialsProvider.fromIntegrations(integrations);
@@ -75,6 +76,7 @@ export const githubModule = createBackendModule({
createGithubEnvironmentAction({
integrations,
catalogClient,
+ auth,
}),
createGithubIssuesLabelAction({
integrations,
diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md
index bf7f88f11e..87ff348fc6 100644
--- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-scaffolder-backend-module-gitlab
+## 0.7.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+
## 0.7.0-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json
index ced90b0dfa..b3244783f9 100644
--- a/plugins/scaffolder-backend-module-gitlab/package.json
+++ b/plugins/scaffolder-backend-module-gitlab/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-gitlab",
- "version": "0.7.0-next.1",
+ "version": "0.7.0-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "scaffolder",
diff --git a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md
index de06f2a966..5a9e37810d 100644
--- a/plugins/scaffolder-backend-module-notifications/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-notifications/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-scaffolder-backend-module-notifications
+## 0.1.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-notifications-node@0.2.10-next.2
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/plugin-notifications-common@0.0.7-next.0
+
## 0.1.5-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-notifications/package.json b/plugins/scaffolder-backend-module-notifications/package.json
index 678a77b561..c1ff7c6f0f 100644
--- a/plugins/scaffolder-backend-module-notifications/package.json
+++ b/plugins/scaffolder-backend-module-notifications/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-notifications",
- "version": "0.1.5-next.1",
+ "version": "0.1.5-next.2",
"description": "The notifications backend module for the scaffolder plugin.",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md
index c92428f2f5..dd877ba2dd 100644
--- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-scaffolder-backend-module-rails
+## 0.5.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/types@1.2.0
+
## 0.5.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json
index e0c85ebdbf..fe0046f17f 100644
--- a/plugins/scaffolder-backend-module-rails/package.json
+++ b/plugins/scaffolder-backend-module-rails/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-rails",
- "version": "0.5.4-next.1",
+ "version": "0.5.4-next.2",
"description": "A module for the scaffolder backend that lets you template projects using Rails",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md
index 39992498bf..9c30e449bb 100644
--- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-scaffolder-backend-module-sentry
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/config@1.3.1-next.0
+
## 0.2.4-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json
index 54ba3f504a..27ace7cec6 100644
--- a/plugins/scaffolder-backend-module-sentry/package.json
+++ b/plugins/scaffolder-backend-module-sentry/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-sentry",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "scaffolder",
diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md
index 94ba8564f3..d09b9c097c 100644
--- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-scaffolder-backend-module-yeoman
+## 0.4.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.17-next.2
+ - @backstage/types@1.2.0
+
## 0.4.5-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json
index 5781e0bbcf..7afce254e3 100644
--- a/plugins/scaffolder-backend-module-yeoman/package.json
+++ b/plugins/scaffolder-backend-module-yeoman/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-yeoman",
- "version": "0.4.5-next.1",
+ "version": "0.4.5-next.2",
"backstage": {
"role": "backend-plugin-module",
"pluginId": "scaffolder",
diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md
index 964bfdcf5f..c4e642e793 100644
--- a/plugins/scaffolder-backend/CHANGELOG.md
+++ b/plugins/scaffolder-backend/CHANGELOG.md
@@ -1,5 +1,40 @@
# @backstage/plugin-scaffolder-backend
+## 1.28.0-next.2
+
+### Patch Changes
+
+- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`.
+- 6c326cf: The --no-node-snapshot check needs to be done against process.execArgv instead of process.argv
+- e913fdf: Add github backend module to create-app and improve error messages
+- 0851834: Resolved an issue where the `templateManagementPermission` was not being exposed through the `/permissions/metadata` endpoint.
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.2
+ - @backstage/plugin-permission-node@0.8.6-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.4-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.5-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.4-next.2
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.4-next.2
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.4-next.2
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.4-next.2
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.2
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/types@1.2.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.26-next.1
+ - @backstage/plugin-permission-common@0.8.3-next.0
+ - @backstage/plugin-scaffolder-common@1.5.8-next.1
+
## 1.28.0-next.1
### Patch Changes
diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json
index 98c5c61694..beabffd2b0 100644
--- a/plugins/scaffolder-backend/package.json
+++ b/plugins/scaffolder-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend",
- "version": "1.28.0-next.1",
+ "version": "1.28.0-next.2",
"description": "The Backstage backend plugin that helps you create new things",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile b/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile
index 0c8b305de5..fb6f3a1f50 100644
--- a/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile
+++ b/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile
@@ -1,4 +1,4 @@
-FROM alpine:3.20
+FROM alpine:3.21
RUN apk add --update \
git \
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/TemplateActionRegistry.ts b/plugins/scaffolder-backend/src/scaffolder/actions/TemplateActionRegistry.ts
index 3868380919..f00d7afad1 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/TemplateActionRegistry.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/TemplateActionRegistry.ts
@@ -37,7 +37,7 @@ export class TemplateActionRegistry {
const action = this.actions.get(actionId);
if (!action) {
throw new NotFoundError(
- `Template action with ID '${actionId}' is not registered.`,
+ `Template action with ID '${actionId}' is not registered. See https://backstage.io/docs/features/software-templates/builtin-actions/ on how to add a new action module.`,
);
}
return action;
diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts
index 6ddd2e579e..7e204d35df 100644
--- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts
@@ -208,7 +208,7 @@ describe('NunjucksWorkflowRunner', () => {
});
await expect(runner.execute(task)).rejects.toThrow(
- "Template action with ID 'does-not-exist' is not registered.",
+ /Template action with ID 'does-not-exist' is not registered/,
);
});
diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts
index d8888058e8..1758eb3fba 100644
--- a/plugins/scaffolder-backend/src/service/router.ts
+++ b/plugins/scaffolder-backend/src/service/router.ts
@@ -41,7 +41,7 @@ import {
RESOURCE_TYPE_SCAFFOLDER_ACTION,
RESOURCE_TYPE_SCAFFOLDER_TEMPLATE,
scaffolderActionPermissions,
- scaffolderTaskPermissions,
+ scaffolderPermissions,
scaffolderTemplatePermissions,
taskCancelPermission,
taskCreatePermission,
@@ -445,7 +445,7 @@ export async function createRouter(
rules: actionRules,
},
],
- permissions: scaffolderTaskPermissions,
+ permissions: scaffolderPermissions,
});
router.use(permissionIntegrationRouter);
diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md
index 7f763a710b..183d67cc8c 100644
--- a/plugins/scaffolder-common/CHANGELOG.md
+++ b/plugins/scaffolder-common/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-scaffolder-common
+## 1.5.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 1.5.8-next.0
### Patch Changes
diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json
index eecadc853f..34f8469776 100644
--- a/plugins/scaffolder-common/package.json
+++ b/plugins/scaffolder-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-common",
- "version": "1.5.8-next.0",
+ "version": "1.5.8-next.1",
"description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin",
"backstage": {
"role": "common-library",
diff --git a/plugins/scaffolder-node-test-utils/CHANGELOG.md b/plugins/scaffolder-node-test-utils/CHANGELOG.md
index 4b567eaeaa..6ba7bffacd 100644
--- a/plugins/scaffolder-node-test-utils/CHANGELOG.md
+++ b/plugins/scaffolder-node-test-utils/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-scaffolder-node-test-utils
+## 0.1.17-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-test-utils@1.2.0-next.2
+ - @backstage/plugin-scaffolder-node@0.6.2-next.2
+ - @backstage/types@1.2.0
+
## 0.1.17-next.1
### Patch Changes
diff --git a/plugins/scaffolder-node-test-utils/package.json b/plugins/scaffolder-node-test-utils/package.json
index e0348a5e68..362c69ccb0 100644
--- a/plugins/scaffolder-node-test-utils/package.json
+++ b/plugins/scaffolder-node-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-node-test-utils",
- "version": "0.1.17-next.1",
+ "version": "0.1.17-next.2",
"backstage": {
"role": "node-library",
"pluginId": "scaffolder",
diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md
index f5ef6683ce..327dbf0741 100644
--- a/plugins/scaffolder-node/CHANGELOG.md
+++ b/plugins/scaffolder-node/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-scaffolder-node
+## 0.6.2-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/types@1.2.0
+ - @backstage/plugin-scaffolder-common@1.5.8-next.1
+
## 0.6.2-next.1
### Patch Changes
diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json
index 83eeb51836..e8d52add6b 100644
--- a/plugins/scaffolder-node/package.json
+++ b/plugins/scaffolder-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-node",
- "version": "0.6.2-next.1",
+ "version": "0.6.2-next.2",
"description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend",
"backstage": {
"role": "node-library",
diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md
index bed2f6d3e5..4efe1d95c8 100644
--- a/plugins/scaffolder-react/CHANGELOG.md
+++ b/plugins/scaffolder-react/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-scaffolder-react
+## 1.14.2-next.2
+
+### Patch Changes
+
+- 184161f: Scaffolder field extensions registered with `FormFieldBlueprint` are now collected in the `useCustomFieldExtensions` hook, enabling them for use in the scaffolder.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-permission-react@0.4.29-next.0
+ - @backstage/plugin-scaffolder-common@1.5.8-next.1
+
## 1.14.2-next.1
### Patch Changes
diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json
index ecaea17fb5..208fa93633 100644
--- a/plugins/scaffolder-react/package.json
+++ b/plugins/scaffolder-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-react",
- "version": "1.14.2-next.1",
+ "version": "1.14.2-next.2",
"description": "A frontend library that helps other Backstage plugins interact with the Scaffolder",
"backstage": {
"role": "web-library",
diff --git a/plugins/scaffolder-react/report-alpha.api.md b/plugins/scaffolder-react/report-alpha.api.md
index 2cc8416b3c..4f9f86d1ac 100644
--- a/plugins/scaffolder-react/report-alpha.api.md
+++ b/plugins/scaffolder-react/report-alpha.api.md
@@ -5,13 +5,17 @@
```ts
///
+import { AnyApiFactory } from '@backstage/frontend-plugin-api';
import { AnyApiRef } from '@backstage/core-plugin-api';
import { ApiHolder } from '@backstage/core-plugin-api';
+import { ApiRef } from '@backstage/frontend-plugin-api';
import { ComponentType } from 'react';
import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api';
import { CustomFieldValidator } from '@backstage/plugin-scaffolder-react';
import { Dispatch } from 'react';
import { ExtensionBlueprint } from '@backstage/frontend-plugin-api';
+import { ExtensionDefinition } from '@backstage/frontend-plugin-api';
+import { ExtensionInput } from '@backstage/frontend-plugin-api';
import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react';
import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react';
import { FieldSchema } from '@backstage/plugin-scaffolder-react';
@@ -171,6 +175,34 @@ export type FormFieldExtensionData<
schema?: FieldSchema, z.output>;
};
+// @alpha (undocumented)
+export const formFieldsApi: ExtensionDefinition<{
+ config: {};
+ configInput: {};
+ output: ConfigurableExtensionDataRef;
+ inputs: {
+ formFields: ExtensionInput<
+ ConfigurableExtensionDataRef<
+ () => Promise,
+ 'scaffolder.form-field-loader',
+ {}
+ >,
+ {
+ singleton: false;
+ optional: false;
+ }
+ >;
+ };
+ kind: 'api';
+ name: 'form-fields';
+ params: {
+ factory: AnyApiFactory;
+ };
+}>;
+
+// @alpha (undocumented)
+export const formFieldsApiRef: ApiRef;
+
// @alpha (undocumented)
export type FormValidation = {
[name: string]: FieldValidation | FormValidation;
@@ -245,6 +277,12 @@ export type ScaffolderFormDecoratorContext<
) => void;
};
+// @alpha (undocumented)
+export interface ScaffolderFormFieldsApi {
+ // (undocumented)
+ getFormFields(): Promise;
+}
+
// @alpha (undocumented)
export function ScaffolderPageContextMenu(
props: ScaffolderPageContextMenuProps,
diff --git a/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.test.tsx b/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.test.tsx
new file mode 100644
index 0000000000..c21d43d6ff
--- /dev/null
+++ b/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.test.tsx
@@ -0,0 +1,129 @@
+/*
+ * 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, { PropsWithChildren } from 'react';
+import { createPlugin } from '@backstage/core-plugin-api';
+import { TestApiProvider, wrapInTestApp } from '@backstage/test-utils';
+import { renderHook, waitFor } from '@testing-library/react';
+import { ScaffolderFormFieldsApi, formFieldsApiRef } from '../alpha';
+import { useCustomFieldExtensions } from './useCustomFieldExtensions';
+import {
+ ScaffolderFieldExtensions,
+ createScaffolderFieldExtension,
+} from '../extensions';
+
+const plugin = createPlugin({
+ id: 'scaffolder',
+ apis: [],
+ routes: {},
+ externalRoutes: {},
+});
+
+describe('useCustomFieldExtensions', () => {
+ const mockFormFieldsApi: jest.Mocked = {
+ getFormFields: jest.fn(),
+ };
+ const wrapper = ({ children }: PropsWithChildren<{}>) =>
+ wrapInTestApp(
+
+ {children}
+ ,
+ );
+
+ beforeEach(() => {
+ jest.resetAllMocks();
+ });
+
+ it('should return field extensions from the React tree', async () => {
+ mockFormFieldsApi.getFormFields.mockResolvedValue([]);
+ const CustomFieldExtension = plugin.provide(
+ createScaffolderFieldExtension({
+ name: 'test',
+ component: () => Test
,
+ }),
+ );
+
+ const { result } = renderHook(
+ () =>
+ useCustomFieldExtensions(
+
+
+ ,
+ ),
+ {
+ wrapper,
+ },
+ );
+
+ expect(result.current).toEqual([expect.objectContaining({ name: 'test' })]);
+ });
+
+ it('should return field extensions from formFieldsApi', async () => {
+ mockFormFieldsApi.getFormFields.mockResolvedValue([
+ {
+ name: 'blueprint',
+ component: () => Test
,
+ },
+ ]);
+
+ const { result } = renderHook(() => useCustomFieldExtensions(), {
+ wrapper,
+ });
+
+ await waitFor(() => {
+ expect(result.current.length).toBeGreaterThan(0);
+ });
+
+ expect(result.current).toEqual([
+ expect.objectContaining({ name: 'blueprint' }),
+ ]);
+ });
+
+ it('should return field extensions from both sources', async () => {
+ mockFormFieldsApi.getFormFields.mockResolvedValue([
+ {
+ name: 'blueprint',
+ component: () => Test
,
+ },
+ ]);
+
+ const CustomFieldExtension = plugin.provide(
+ createScaffolderFieldExtension({
+ name: 'test',
+ component: () => Test
,
+ }),
+ );
+
+ const { result } = renderHook(
+ () =>
+ useCustomFieldExtensions(
+
+
+ ,
+ ),
+ {
+ wrapper,
+ },
+ );
+
+ await waitFor(() => {
+ expect(result.current).toHaveLength(2);
+ });
+
+ const fieldNames = result.current.map(field => field.name);
+ expect(fieldNames).toEqual(expect.arrayContaining(['test', 'blueprint']));
+ });
+});
diff --git a/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts b/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts
index 7e0aafd53f..d1e670330e 100644
--- a/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts
+++ b/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts
@@ -13,7 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { useElementFilter } from '@backstage/core-plugin-api';
+import { useAsync, useMountEffect } from '@react-hookz/web';
+import { useApi, useElementFilter } from '@backstage/core-plugin-api';
+import { formFieldsApiRef } from '../next';
import { FieldExtensionOptions } from '../extensions';
import {
FIELD_EXTENSION_KEY,
@@ -25,11 +27,21 @@ import {
* @public
*/
export const useCustomFieldExtensions = <
+ // todo(blam): this shouldn't be here, should remove this, but this is a breaking change to remove the generic.
TComponentDataType = FieldExtensionOptions,
>(
outlet: React.ReactNode,
) => {
- return useElementFilter(outlet, elements =>
+ // Get custom fields created with FormFieldBlueprint
+ const formFieldsApi = useApi(formFieldsApiRef);
+ const [{ result: blueprintFields }, methods] = useAsync(
+ formFieldsApi.getFormFields,
+ [],
+ );
+ useMountEffect(methods.execute);
+
+ // Get custom fields created with ScaffolderFieldExtensions
+ const outletFields = useElementFilter(outlet, elements =>
elements
.selectByComponentData({
key: FIELD_EXTENSION_WRAPPER_KEY,
@@ -38,4 +50,18 @@ export const useCustomFieldExtensions = <
key: FIELD_EXTENSION_KEY,
}),
);
+
+ // This should really be a different type moving foward, but we do this to keep type compatibility.
+ // should probably also move the defaults into the API eventually too, but that will come with the move
+ // to the new frontend system.
+ const blueprintsToLegacy: FieldExtensionOptions[] = blueprintFields?.map(
+ field => ({
+ component: field.component,
+ name: field.name,
+ validation: field.validation,
+ schema: field.schema?.schema,
+ }),
+ );
+
+ return [...blueprintsToLegacy, ...outletFields] as TComponentDataType[];
};
diff --git a/plugins/scaffolder/src/alpha/api/FormFieldsApi.ts b/plugins/scaffolder-react/src/next/api/FormFieldsApi.ts
similarity index 95%
rename from plugins/scaffolder/src/alpha/api/FormFieldsApi.ts
rename to plugins/scaffolder-react/src/next/api/FormFieldsApi.ts
index 35141463d5..7712b91a18 100644
--- a/plugins/scaffolder/src/alpha/api/FormFieldsApi.ts
+++ b/plugins/scaffolder-react/src/next/api/FormFieldsApi.ts
@@ -21,7 +21,7 @@ import {
} from '@backstage/frontend-plugin-api';
import { formFieldsApiRef } from './ref';
import { ScaffolderFormFieldsApi } from './types';
-import { FormFieldBlueprint } from '@backstage/plugin-scaffolder-react/alpha';
+import { FormFieldBlueprint } from '../blueprints';
import { FormField, OpaqueFormField } from '@internal/scaffolder';
class DefaultScaffolderFormFieldsApi implements ScaffolderFormFieldsApi {
@@ -40,6 +40,7 @@ class DefaultScaffolderFormFieldsApi implements ScaffolderFormFieldsApi {
}
}
+/** @alpha */
export const formFieldsApi = ApiBlueprint.makeWithOverrides({
name: 'form-fields',
inputs: {
diff --git a/plugins/scaffolder-react/src/next/api/index.ts b/plugins/scaffolder-react/src/next/api/index.ts
new file mode 100644
index 0000000000..ecc62e5acf
--- /dev/null
+++ b/plugins/scaffolder-react/src/next/api/index.ts
@@ -0,0 +1,19 @@
+/*
+ * 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 { formFieldsApi } from './FormFieldsApi';
+export { formFieldsApiRef } from './ref';
+export type { ScaffolderFormFieldsApi } from './types';
diff --git a/plugins/scaffolder-react/src/next/api/ref.ts b/plugins/scaffolder-react/src/next/api/ref.ts
new file mode 100644
index 0000000000..eaa6f49c21
--- /dev/null
+++ b/plugins/scaffolder-react/src/next/api/ref.ts
@@ -0,0 +1,23 @@
+/*
+ * 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 { createApiRef } from '@backstage/frontend-plugin-api';
+import { ScaffolderFormFieldsApi } from './types';
+
+/** @alpha */
+export const formFieldsApiRef = createApiRef({
+ id: 'plugin.scaffolder.form-fields',
+});
diff --git a/packages/canon/docs/components/Columns/columns.css.ts b/plugins/scaffolder-react/src/next/api/types.ts
similarity index 77%
rename from packages/canon/docs/components/Columns/columns.css.ts
rename to plugins/scaffolder-react/src/next/api/types.ts
index 0b5ec18aef..2c98111b1c 100644
--- a/packages/canon/docs/components/Columns/columns.css.ts
+++ b/plugins/scaffolder-react/src/next/api/types.ts
@@ -14,11 +14,9 @@
* limitations under the License.
*/
-import { style } from '@vanilla-extract/css';
+import { FormFieldExtensionData } from '../blueprints';
-export const styles = style({
- display: 'grid',
- gridTemplateColumns: 'repeat(3, 1fr)',
- rowGap: '20px',
- columnGap: '80px',
-});
+/** @alpha */
+export interface ScaffolderFormFieldsApi {
+ getFormFields(): Promise;
+}
diff --git a/plugins/scaffolder-react/src/next/index.ts b/plugins/scaffolder-react/src/next/index.ts
index c4e94f36a3..9c967a5db9 100644
--- a/plugins/scaffolder-react/src/next/index.ts
+++ b/plugins/scaffolder-react/src/next/index.ts
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+export * from './api';
export * from './components';
export * from './lib';
export * from './hooks';
diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md
index e4c99d833d..98f1eb2f0b 100644
--- a/plugins/scaffolder/CHANGELOG.md
+++ b/plugins/scaffolder/CHANGELOG.md
@@ -1,5 +1,27 @@
# @backstage/plugin-scaffolder
+## 1.27.2-next.2
+
+### Patch Changes
+
+- 184161f: Scaffolder field extensions registered with `FormFieldBlueprint` are now collected in the `useCustomFieldExtensions` hook, enabling them for use in the scaffolder.
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/plugin-scaffolder-react@1.14.2-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/types@1.2.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-permission-react@0.4.29-next.0
+ - @backstage/plugin-scaffolder-common@1.5.8-next.1
+
## 1.27.2-next.1
### Patch Changes
diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json
index 2f32b1ccd9..96f189506d 100644
--- a/plugins/scaffolder/package.json
+++ b/plugins/scaffolder/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder",
- "version": "1.27.2-next.1",
+ "version": "1.27.2-next.2",
"description": "The Backstage plugin that helps you create new things",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/scaffolder/report-alpha.api.md b/plugins/scaffolder/report-alpha.api.md
index 15ec32fa49..e272b57655 100644
--- a/plugins/scaffolder/report-alpha.api.md
+++ b/plugins/scaffolder/report-alpha.api.md
@@ -14,7 +14,7 @@ import { ExtensionInput } from '@backstage/frontend-plugin-api';
import { ExternalRouteRef } from '@backstage/frontend-plugin-api';
import { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react';
import { FormField } from '@internal/scaffolder';
-import { FormFieldExtensionData } from '@backstage/plugin-scaffolder-react/alpha';
+import { formFieldsApiRef } from '@backstage/plugin-scaffolder-react/alpha';
import type { FormProps as FormProps_2 } from '@rjsf/core';
import { FormProps as FormProps_3 } from '@backstage/plugin-scaffolder-react';
import { FrontendPlugin } from '@backstage/frontend-plugin-api';
@@ -26,6 +26,7 @@ import { default as React_2 } from 'react';
import { ReviewStepProps } from '@backstage/plugin-scaffolder-react';
import { RouteRef } from '@backstage/frontend-plugin-api';
import { ScaffolderFormDecorator } from '@backstage/plugin-scaffolder-react/alpha';
+import { ScaffolderFormFieldsApi } from '@backstage/plugin-scaffolder-react/alpha';
import { SubRouteRef } from '@backstage/frontend-plugin-api';
import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
import { TemplateGroupFilter } from '@backstage/plugin-scaffolder-react';
@@ -52,6 +53,33 @@ const _default: FrontendPlugin<
}>;
},
{
+ 'api:scaffolder/form-fields': ExtensionDefinition<{
+ config: {};
+ configInput: {};
+ output: ConfigurableExtensionDataRef<
+ AnyApiFactory,
+ 'core.api.factory',
+ {}
+ >;
+ inputs: {
+ formFields: ExtensionInput<
+ ConfigurableExtensionDataRef<
+ () => Promise,
+ 'scaffolder.form-field-loader',
+ {}
+ >,
+ {
+ singleton: false;
+ optional: false;
+ }
+ >;
+ };
+ kind: 'api';
+ name: 'form-fields';
+ params: {
+ factory: AnyApiFactory;
+ };
+ }>;
'page:scaffolder': ExtensionDefinition<{
kind: 'page';
name: undefined;
@@ -129,33 +157,6 @@ const _default: FrontendPlugin<
factory: AnyApiFactory;
};
}>;
- 'api:scaffolder/form-fields': ExtensionDefinition<{
- config: {};
- configInput: {};
- output: ConfigurableExtensionDataRef<
- AnyApiFactory,
- 'core.api.factory',
- {}
- >;
- inputs: {
- formFields: ExtensionInput<
- ConfigurableExtensionDataRef<
- () => Promise,
- 'scaffolder.form-field-loader',
- {}
- >,
- {
- singleton: false;
- optional: false;
- }
- >;
- };
- kind: 'api';
- name: 'form-fields';
- params: {
- factory: AnyApiFactory;
- };
- }>;
}
>;
export default _default;
@@ -175,8 +176,7 @@ export class DefaultScaffolderFormDecoratorsApi
// @alpha (undocumented)
export const formDecoratorsApiRef: ApiRef;
-// @alpha (undocumented)
-export const formFieldsApiRef: ApiRef;
+export { formFieldsApiRef };
// @alpha @deprecated
export type FormProps = Pick<
@@ -197,11 +197,7 @@ export interface ScaffolderFormDecoratorsApi {
getFormDecorators(): Promise;
}
-// @alpha (undocumented)
-export interface ScaffolderFormFieldsApi {
- // (undocumented)
- getFormFields(): Promise;
-}
+export { ScaffolderFormFieldsApi };
// @public (undocumented)
export type ScaffolderTemplateEditorClassKey =
diff --git a/plugins/scaffolder/src/alpha/api/index.ts b/plugins/scaffolder/src/alpha/api/index.ts
index 0afefe17a5..07d4b65a3b 100644
--- a/plugins/scaffolder/src/alpha/api/index.ts
+++ b/plugins/scaffolder/src/alpha/api/index.ts
@@ -14,9 +14,6 @@
* limitations under the License.
*/
-export { formFieldsApiRef, formDecoratorsApiRef } from './ref';
-export type {
- ScaffolderFormFieldsApi,
- ScaffolderFormDecoratorsApi,
-} from './types';
+export { formDecoratorsApiRef } from './ref';
+export type { ScaffolderFormDecoratorsApi } from './types';
export { DefaultScaffolderFormDecoratorsApi } from './FormDecoratorsApi';
diff --git a/plugins/scaffolder/src/alpha/api/ref.ts b/plugins/scaffolder/src/alpha/api/ref.ts
index 9890a9a9b2..532669d0ad 100644
--- a/plugins/scaffolder/src/alpha/api/ref.ts
+++ b/plugins/scaffolder/src/alpha/api/ref.ts
@@ -15,12 +15,7 @@
*/
import { createApiRef } from '@backstage/frontend-plugin-api';
-import { ScaffolderFormFieldsApi, ScaffolderFormDecoratorsApi } from './types';
-
-/** @alpha */
-export const formFieldsApiRef = createApiRef({
- id: 'plugin.scaffolder.form-fields',
-});
+import { ScaffolderFormDecoratorsApi } from './types';
/** @alpha */
export const formDecoratorsApiRef = createApiRef({
diff --git a/plugins/scaffolder/src/alpha/api/types.ts b/plugins/scaffolder/src/alpha/api/types.ts
index 10f97a6a10..1d2d331adf 100644
--- a/plugins/scaffolder/src/alpha/api/types.ts
+++ b/plugins/scaffolder/src/alpha/api/types.ts
@@ -14,15 +14,7 @@
* limitations under the License.
*/
-import {
- FormFieldExtensionData,
- ScaffolderFormDecorator,
-} from '@backstage/plugin-scaffolder-react/alpha';
-
-/** @alpha */
-export interface ScaffolderFormFieldsApi {
- getFormFields(): Promise;
-}
+import { ScaffolderFormDecorator } from '@backstage/plugin-scaffolder-react/alpha';
/** @alpha */
export interface ScaffolderFormDecoratorsApi {
diff --git a/plugins/scaffolder/src/alpha/index.ts b/plugins/scaffolder/src/alpha/index.ts
index 53e2b8f0bf..d239f44b4f 100644
--- a/plugins/scaffolder/src/alpha/index.ts
+++ b/plugins/scaffolder/src/alpha/index.ts
@@ -25,4 +25,9 @@ export {
export { scaffolderTranslationRef } from '../translation';
export * from './api';
+export {
+ formFieldsApiRef,
+ type ScaffolderFormFieldsApi,
+} from '@backstage/plugin-scaffolder-react/alpha';
+
export { default } from './plugin';
diff --git a/plugins/scaffolder/src/alpha/plugin.tsx b/plugins/scaffolder/src/alpha/plugin.tsx
index f3f0e9ed9e..44ec1f5d4c 100644
--- a/plugins/scaffolder/src/alpha/plugin.tsx
+++ b/plugins/scaffolder/src/alpha/plugin.tsx
@@ -32,7 +32,7 @@ import {
scaffolderPage,
scaffolderApi,
} from './extensions';
-import { formFieldsApi } from './api/FormFieldsApi';
+import { formFieldsApi } from '@backstage/plugin-scaffolder-react/alpha';
/** @alpha */
export default createFrontendPlugin({
diff --git a/plugins/scaffolder/src/components/Router/Router.test.tsx b/plugins/scaffolder/src/components/Router/Router.test.tsx
index c062c723cf..9c752ed3c1 100644
--- a/plugins/scaffolder/src/components/Router/Router.test.tsx
+++ b/plugins/scaffolder/src/components/Router/Router.test.tsx
@@ -15,7 +15,11 @@
*/
import React from 'react';
import { Router } from './Router';
-import { renderInTestApp } from '@backstage/test-utils';
+import {
+ renderInTestApp,
+ TestApiProvider,
+ TestAppOptions,
+} from '@backstage/test-utils';
import {
createScaffolderFieldExtension,
ScaffolderFieldExtensions,
@@ -26,12 +30,26 @@ import {
ScaffolderLayouts,
} from '@backstage/plugin-scaffolder-react';
import { TemplateListPage, TemplateWizardPage } from '../../alpha/components';
+import { formFieldsApiRef } from '@backstage/plugin-scaffolder-react/alpha';
jest.mock('../../alpha/components', () => ({
TemplateWizardPage: jest.fn(() => null),
TemplateListPage: jest.fn(() => null),
}));
+const wrapInApisAndRender = (
+ element: React.ReactElement,
+ opts?: TestAppOptions,
+) =>
+ renderInTestApp(
+ [] }]]}
+ >
+ {element}
+ ,
+ opts,
+ );
+
describe('Router', () => {
beforeEach(() => {
(TemplateWizardPage as jest.Mock).mockClear();
@@ -39,13 +57,13 @@ describe('Router', () => {
});
describe('/', () => {
it('should render the TemplateListPage', async () => {
- await renderInTestApp();
+ await wrapInApisAndRender();
expect(TemplateListPage).toHaveBeenCalled();
});
it('should render user-provided TemplateListPage', async () => {
- const { getByText } = await renderInTestApp(
+ const { getByText } = await wrapInApisAndRender(
<>foobar>,
@@ -62,7 +80,7 @@ describe('Router', () => {
describe('/templates/:templateName', () => {
it('should render the TemplateWizard page', async () => {
- await renderInTestApp(, {
+ await wrapInApisAndRender(, {
routeEntries: ['/templates/default/foo'],
});
@@ -70,7 +88,7 @@ describe('Router', () => {
});
it('should render user-provided TemplateWizardPage', async () => {
- const { getByText } = await renderInTestApp(
+ const { getByText } = await wrapInApisAndRender(
<>foobar>,
@@ -87,13 +105,14 @@ describe('Router', () => {
it('should pass through the FormProps property', async () => {
const transformErrorsMock = jest.fn();
- await renderInTestApp(
+ await wrapInApisAndRender(
,
+
{
routeEntries: ['/templates/default/foo'],
},
@@ -118,7 +137,7 @@ describe('Router', () => {
}),
);
- await renderInTestApp(
+ await wrapInApisAndRender(
@@ -146,7 +165,7 @@ describe('Router', () => {
}),
);
- await renderInTestApp(
+ await wrapInApisAndRender(
diff --git a/plugins/scaffolder/src/plugin.tsx b/plugins/scaffolder/src/plugin.tsx
index a6ccdef32c..17592b5826 100644
--- a/plugins/scaffolder/src/plugin.tsx
+++ b/plugins/scaffolder/src/plugin.tsx
@@ -80,6 +80,7 @@ import { RepoBranchPicker } from './components/fields/RepoBranchPicker/RepoBranc
import { RepoBranchPickerSchema } from './components/fields/RepoBranchPicker/schema';
import { formDecoratorsApiRef } from './alpha/api/ref';
import { DefaultScaffolderFormDecoratorsApi } from './alpha/api/FormDecoratorsApi';
+import { formFieldsApiRef } from '@backstage/plugin-scaffolder-react/alpha';
/**
* The main plugin export for the scaffolder.
@@ -109,6 +110,11 @@ export const scaffolderPlugin = createPlugin({
deps: {},
factory: () => DefaultScaffolderFormDecoratorsApi.create(),
}),
+ createApiFactory({
+ api: formFieldsApiRef,
+ deps: {},
+ factory: () => ({ getFormFields: async () => [] }),
+ }),
],
routes: {
root: rootRouteRef,
diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md
index 50426ca6d4..cc3e8edf26 100644
--- a/plugins/search-backend-module-catalog/CHANGELOG.md
+++ b/plugins/search-backend-module-catalog/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-search-backend-module-catalog
+## 0.2.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-search-backend-node@1.3.6-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 0.2.6-next.1
### Patch Changes
diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json
index 1f96cbbcdd..c25990cee0 100644
--- a/plugins/search-backend-module-catalog/package.json
+++ b/plugins/search-backend-module-catalog/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-catalog",
- "version": "0.2.6-next.1",
+ "version": "0.2.6-next.2",
"description": "A module for the search backend that exports catalog modules",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md
index d8c78dcb85..4e6344382b 100644
--- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md
+++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-search-backend-module-elasticsearch
+## 1.6.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-search-backend-node@1.3.6-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration-aws-node@0.1.14-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 1.6.3-next.1
### Patch Changes
diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json
index 81edcc9a3f..b53dd1f095 100644
--- a/plugins/search-backend-module-elasticsearch/package.json
+++ b/plugins/search-backend-module-elasticsearch/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-elasticsearch",
- "version": "1.6.3-next.1",
+ "version": "1.6.3-next.2",
"description": "A module for the search backend that implements search using ElasticSearch",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md
index e6fbe40fe0..ba73639260 100644
--- a/plugins/search-backend-module-explore/CHANGELOG.md
+++ b/plugins/search-backend-module-explore/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-search-backend-module-explore
+## 0.2.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-search-backend-node@1.3.6-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 0.2.6-next.1
### Patch Changes
diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json
index 481ba5326e..6adf7c2dd3 100644
--- a/plugins/search-backend-module-explore/package.json
+++ b/plugins/search-backend-module-explore/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-explore",
- "version": "0.2.6-next.1",
+ "version": "0.2.6-next.2",
"description": "A module for the search backend that exports explore modules",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md
index fe223ee285..c922d8ac0e 100644
--- a/plugins/search-backend-module-pg/CHANGELOG.md
+++ b/plugins/search-backend-module-pg/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-search-backend-module-pg
+## 0.5.39-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-search-backend-node@1.3.6-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 0.5.39-next.1
### Patch Changes
diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json
index eb57d59afc..cc9ee21240 100644
--- a/plugins/search-backend-module-pg/package.json
+++ b/plugins/search-backend-module-pg/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-pg",
- "version": "0.5.39-next.1",
+ "version": "0.5.39-next.2",
"description": "A module for the search backend that implements search using PostgreSQL",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md
index f999456842..15d4ca465b 100644
--- a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md
+++ b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-search-backend-module-stack-overflow-collator
+## 0.3.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-search-backend-node@1.3.6-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 0.3.4-next.1
### Patch Changes
diff --git a/plugins/search-backend-module-stack-overflow-collator/package.json b/plugins/search-backend-module-stack-overflow-collator/package.json
index 531c9d9e6b..6138afa68d 100644
--- a/plugins/search-backend-module-stack-overflow-collator/package.json
+++ b/plugins/search-backend-module-stack-overflow-collator/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-stack-overflow-collator",
- "version": "0.3.4-next.1",
+ "version": "0.3.4-next.2",
"description": "A module for the search backend that exports stack overflow modules",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md
index 23b303dafb..6c95c3a9e0 100644
--- a/plugins/search-backend-module-techdocs/CHANGELOG.md
+++ b/plugins/search-backend-module-techdocs/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-search-backend-module-techdocs
+## 0.3.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-search-backend-node@1.3.6-next.2
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-techdocs-node@1.12.15-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 0.3.4-next.1
### Patch Changes
diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json
index b6c211dcfd..e519fbc483 100644
--- a/plugins/search-backend-module-techdocs/package.json
+++ b/plugins/search-backend-module-techdocs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-module-techdocs",
- "version": "0.3.4-next.1",
+ "version": "0.3.4-next.2",
"description": "A module for the search backend that exports techdocs modules",
"backstage": {
"role": "backend-plugin-module",
diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md
index cfda048db9..a1ad348d43 100644
--- a/plugins/search-backend-node/CHANGELOG.md
+++ b/plugins/search-backend-node/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-search-backend-node
+## 1.3.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 1.3.6-next.1
### Patch Changes
diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json
index 3183045d78..be0dedcee6 100644
--- a/plugins/search-backend-node/package.json
+++ b/plugins/search-backend-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-node",
- "version": "1.3.6-next.1",
+ "version": "1.3.6-next.2",
"description": "A library for Backstage backend plugins that want to interact with the search backend plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md
index 8942ebc723..4ff7f3d774 100644
--- a/plugins/search-backend/CHANGELOG.md
+++ b/plugins/search-backend/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-search-backend
+## 1.8.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-permission-node@0.8.6-next.2
+ - @backstage/backend-openapi-utils@0.4.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-search-backend-node@1.3.6-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 1.8.0-next.1
### Minor Changes
diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json
index acd16f671f..b64ab4d306 100644
--- a/plugins/search-backend/package.json
+++ b/plugins/search-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend",
- "version": "1.8.0-next.1",
+ "version": "1.8.0-next.2",
"description": "The Backstage backend plugin that provides your backstage app with search",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/search-common/CHANGELOG.md b/plugins/search-common/CHANGELOG.md
index 53a63b4c22..279d2450de 100644
--- a/plugins/search-common/CHANGELOG.md
+++ b/plugins/search-common/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-search-common
+## 1.2.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+
## 1.2.15
### Patch Changes
diff --git a/plugins/search-common/package.json b/plugins/search-common/package.json
index 652a48ba96..ece78fae8c 100644
--- a/plugins/search-common/package.json
+++ b/plugins/search-common/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-common",
- "version": "1.2.15",
+ "version": "1.2.16-next.0",
"description": "Common functionalities for Search, to be shared between various search-enabled plugins",
"backstage": {
"role": "common-library",
diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md
index 317923e258..b49d54c56b 100644
--- a/plugins/search-react/CHANGELOG.md
+++ b/plugins/search-react/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-search-react
+## 1.8.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-search-common@1.2.16-next.0
+
## 1.8.4-next.1
### Patch Changes
diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json
index 8729885428..163165fe37 100644
--- a/plugins/search-react/package.json
+++ b/plugins/search-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-react",
- "version": "1.8.4-next.1",
+ "version": "1.8.4-next.2",
"backstage": {
"role": "web-library",
"pluginId": "search",
diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md
index 31350a44d7..0ba1ed8577 100644
--- a/plugins/search/CHANGELOG.md
+++ b/plugins/search/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-search
+## 1.4.21-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/types@1.2.0
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-search-common@1.2.16-next.0
+ - @backstage/plugin-search-react@1.8.4-next.2
+
## 1.4.21-next.1
### Patch Changes
diff --git a/plugins/search/package.json b/plugins/search/package.json
index 7a223542fe..2437e82fb0 100644
--- a/plugins/search/package.json
+++ b/plugins/search/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search",
- "version": "1.4.21-next.1",
+ "version": "1.4.21-next.2",
"description": "The Backstage plugin that provides your backstage app with search",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/signals-backend/CHANGELOG.md b/plugins/signals-backend/CHANGELOG.md
index 8569df8056..1f150846bf 100644
--- a/plugins/signals-backend/CHANGELOG.md
+++ b/plugins/signals-backend/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-signals-backend
+## 0.2.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/plugin-signals-node@0.1.15-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.2.4-next.1
### Patch Changes
diff --git a/plugins/signals-backend/package.json b/plugins/signals-backend/package.json
index 34eb99d79f..d02600143e 100644
--- a/plugins/signals-backend/package.json
+++ b/plugins/signals-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-signals-backend",
- "version": "0.2.4-next.1",
+ "version": "0.2.4-next.2",
"backstage": {
"role": "backend-plugin",
"pluginId": "signals",
diff --git a/plugins/signals-node/CHANGELOG.md b/plugins/signals-node/CHANGELOG.md
index 0a3b28b3fa..942c47d4ef 100644
--- a/plugins/signals-node/CHANGELOG.md
+++ b/plugins/signals-node/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-signals-node
+## 0.1.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/plugin-events-node@0.4.6-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+
## 0.1.15-next.1
### Patch Changes
diff --git a/plugins/signals-node/package.json b/plugins/signals-node/package.json
index 15dbad8e4e..4e0d5a2212 100644
--- a/plugins/signals-node/package.json
+++ b/plugins/signals-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-signals-node",
- "version": "0.1.15-next.1",
+ "version": "0.1.15-next.2",
"description": "Node.js library for the signals plugin",
"backstage": {
"role": "node-library",
diff --git a/plugins/signals-react/CHANGELOG.md b/plugins/signals-react/CHANGELOG.md
index f417bf94a9..9d95a4c6b8 100644
--- a/plugins/signals-react/CHANGELOG.md
+++ b/plugins/signals-react/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-signals-react
+## 0.0.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/types@1.2.0
+
## 0.0.7
### Patch Changes
diff --git a/plugins/signals-react/package.json b/plugins/signals-react/package.json
index 70368dc02c..e665f58814 100644
--- a/plugins/signals-react/package.json
+++ b/plugins/signals-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-signals-react",
- "version": "0.0.7",
+ "version": "0.0.8-next.0",
"description": "Web library for the signals plugin",
"backstage": {
"role": "web-library",
diff --git a/plugins/signals/CHANGELOG.md b/plugins/signals/CHANGELOG.md
index b9dc92853a..daf237cbd1 100644
--- a/plugins/signals/CHANGELOG.md
+++ b/plugins/signals/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-signals
+## 0.0.14-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-signals-react@0.0.8-next.0
+
## 0.0.14-next.1
### Patch Changes
diff --git a/plugins/signals/package.json b/plugins/signals/package.json
index 7f07fcd116..46a061bce9 100644
--- a/plugins/signals/package.json
+++ b/plugins/signals/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-signals",
- "version": "0.0.14-next.1",
+ "version": "0.0.14-next.2",
"backstage": {
"role": "frontend-plugin",
"pluginId": "signals",
diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md
index 4b0854cfd2..83b4e6aff5 100644
--- a/plugins/techdocs-addons-test-utils/CHANGELOG.md
+++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-techdocs-addons-test-utils
+## 1.0.43-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.26.0-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/core-app-api@1.15.3-next.1
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/test-utils@1.7.3-next.1
+ - @backstage/plugin-search-react@1.8.4-next.2
+ - @backstage/plugin-techdocs@1.11.3-next.2
+ - @backstage/plugin-techdocs-react@1.2.12-next.2
+
## 1.0.43-next.1
### Patch Changes
diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json
index 5142b39abe..5e02da282f 100644
--- a/plugins/techdocs-addons-test-utils/package.json
+++ b/plugins/techdocs-addons-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs-addons-test-utils",
- "version": "1.0.43-next.1",
+ "version": "1.0.43-next.2",
"backstage": {
"role": "web-library",
"pluginId": "techdocs-addons",
diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md
index a6aaa5833f..af73504d8d 100644
--- a/plugins/techdocs-backend/CHANGELOG.md
+++ b/plugins/techdocs-backend/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-techdocs-backend
+## 1.11.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-catalog-node@1.15.0-next.2
+ - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.2
+ - @backstage/plugin-techdocs-node@1.12.15-next.2
+ - @backstage/catalog-client@1.9.0-next.2
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/plugin-catalog-common@1.1.2-next.0
+ - @backstage/plugin-permission-common@0.8.3-next.0
+ - @backstage/plugin-techdocs-common@0.1.0
+
## 1.11.4-next.1
### Patch Changes
diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json
index 2af1e6cd14..95d87a2d37 100644
--- a/plugins/techdocs-backend/package.json
+++ b/plugins/techdocs-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs-backend",
- "version": "1.11.4-next.1",
+ "version": "1.11.4-next.2",
"description": "The Backstage backend plugin that renders technical documentation for your components",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md
index 5db4ab9749..53dff26045 100644
--- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md
+++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-techdocs-module-addons-contrib
+## 1.1.19-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/plugin-techdocs-react@1.2.12-next.2
+
## 1.1.19-next.1
### Patch Changes
diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json
index 4e9c5e9bf5..38409d7da1 100644
--- a/plugins/techdocs-module-addons-contrib/package.json
+++ b/plugins/techdocs-module-addons-contrib/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs-module-addons-contrib",
- "version": "1.1.19-next.1",
+ "version": "1.1.19-next.2",
"description": "Plugin module for contributed TechDocs Addons",
"backstage": {
"role": "frontend-plugin-module",
diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md
index 929b8ae72a..aaa30561a0 100644
--- a/plugins/techdocs-node/CHANGELOG.md
+++ b/plugins/techdocs-node/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-techdocs-node
+## 1.12.15-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/integration-aws-node@0.1.14-next.0
+ - @backstage/plugin-search-common@1.2.16-next.0
+ - @backstage/plugin-techdocs-common@0.1.0
+
## 1.12.15-next.1
### Patch Changes
diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json
index aef23deb5d..00af4b6925 100644
--- a/plugins/techdocs-node/package.json
+++ b/plugins/techdocs-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs-node",
- "version": "1.12.15-next.1",
+ "version": "1.12.15-next.2",
"description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli",
"backstage": {
"role": "node-library",
diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md
index 2bb1849def..f7718a56ae 100644
--- a/plugins/techdocs-react/CHANGELOG.md
+++ b/plugins/techdocs-react/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-techdocs-react
+## 1.2.12-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/version-bridge@1.0.10
+
## 1.2.12-next.1
### Patch Changes
diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json
index 47104ec6b1..63975614ca 100644
--- a/plugins/techdocs-react/package.json
+++ b/plugins/techdocs-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs-react",
- "version": "1.2.12-next.1",
+ "version": "1.2.12-next.2",
"description": "Shared frontend utilities for TechDocs and Addons",
"backstage": {
"role": "web-library",
diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md
index 5453e7209e..4b26300756 100644
--- a/plugins/techdocs/CHANGELOG.md
+++ b/plugins/techdocs/CHANGELOG.md
@@ -1,5 +1,27 @@
# @backstage/plugin-techdocs
+## 1.11.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/config@1.3.1-next.0
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/integration@1.16.0-next.1
+ - @backstage/integration-react@1.2.2-next.1
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/plugin-auth-react@0.1.10-next.2
+ - @backstage/plugin-search-common@1.2.16-next.0
+ - @backstage/plugin-search-react@1.8.4-next.2
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-react@1.2.12-next.2
+
## 1.11.3-next.1
### Patch Changes
diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json
index 97f58f30aa..637fc42c35 100644
--- a/plugins/techdocs/package.json
+++ b/plugins/techdocs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs",
- "version": "1.11.3-next.1",
+ "version": "1.11.3-next.2",
"description": "The Backstage plugin that renders technical documentation for your components",
"backstage": {
"role": "frontend-plugin",
diff --git a/plugins/techdocs/report.api.md b/plugins/techdocs/report.api.md
index 2cc3934f62..c577de5eac 100644
--- a/plugins/techdocs/report.api.md
+++ b/plugins/techdocs/report.api.md
@@ -12,6 +12,7 @@ import { Config } from '@backstage/config';
import { CSSProperties } from '@material-ui/styles/withStyles';
import { DiscoveryApi } from '@backstage/core-plugin-api';
import { Entity } from '@backstage/catalog-model';
+import { EntityListPagination } from '@backstage/plugin-catalog-react';
import { EntityOwnerPickerProps } from '@backstage/plugin-catalog-react';
import { FetchApi } from '@backstage/core-plugin-api';
import { IdentityApi } from '@backstage/core-plugin-api';
@@ -309,6 +310,7 @@ export type TechDocsIndexPageProps = {
columns?: TableColumn[];
actions?: TableProps['actions'];
ownerPickerMode?: EntityOwnerPickerProps['mode'];
+ pagination?: EntityListPagination;
};
// @public @deprecated (undocumented)
diff --git a/plugins/techdocs/src/home/components/DefaultTechDocsHome.tsx b/plugins/techdocs/src/home/components/DefaultTechDocsHome.tsx
index 2fbd5bb50a..f9757f29cc 100644
--- a/plugins/techdocs/src/home/components/DefaultTechDocsHome.tsx
+++ b/plugins/techdocs/src/home/components/DefaultTechDocsHome.tsx
@@ -46,7 +46,13 @@ export type DefaultTechDocsHomeProps = TechDocsIndexPageProps;
* @public
*/
export const DefaultTechDocsHome = (props: TechDocsIndexPageProps) => {
- const { initialFilter = 'owned', columns, actions, ownerPickerMode } = props;
+ const {
+ initialFilter = 'owned',
+ columns,
+ actions,
+ ownerPickerMode,
+ pagination,
+ } = props;
return (
@@ -55,7 +61,7 @@ export const DefaultTechDocsHome = (props: TechDocsIndexPageProps) => {
Discover documentation in your ecosystem.
-
+
diff --git a/plugins/techdocs/src/home/components/Tables/CursorPaginatedDocsTable.test.tsx b/plugins/techdocs/src/home/components/Tables/CursorPaginatedDocsTable.test.tsx
new file mode 100644
index 0000000000..d7ab3827e1
--- /dev/null
+++ b/plugins/techdocs/src/home/components/Tables/CursorPaginatedDocsTable.test.tsx
@@ -0,0 +1,168 @@
+/*
+ * 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, { ReactNode } from 'react';
+import { fireEvent, screen, waitFor } from '@testing-library/react';
+import { CursorPaginatedDocsTable } from './CursorPaginatedDocsTable';
+import { DocsTableRow } from './types';
+import { renderInTestApp } from '@backstage/test-utils';
+import {
+ DefaultEntityFilters,
+ EntityKindFilter,
+ EntityListContextProps,
+} from '@backstage/plugin-catalog-react';
+import { MockEntityListContextProvider } from '@backstage/plugin-catalog-react/testUtils';
+
+describe('CursorPaginatedDocsTable', () => {
+ const data = new Array(100).fill(0).map((_, index) => {
+ const name = `techdocs-${index}`;
+ return {
+ entity: {
+ apiVersion: '1',
+ kind: 'TestKind',
+ metadata: {
+ name,
+ },
+ },
+ resolved: {
+ docsUrl: 'https://example.com',
+ ownedByRelationsTitle: 'owned',
+ ownedByRelations: [],
+ },
+ } as DocsTableRow;
+ });
+
+ const columns = [
+ {
+ title: 'Title',
+ field: 'entity.metadata.name',
+ searchable: true,
+ },
+ ];
+
+ const wrapInContext = (
+ node: ReactNode,
+ value?: Partial>,
+ ) => {
+ return (
+
+ {node}
+
+ );
+ };
+
+ it('should display all the items', async () => {
+ await renderInTestApp(
+ wrapInContext(),
+ );
+
+ for (const item of data) {
+ expect(screen.queryByText(item.entity.metadata.name)).toBeInTheDocument();
+ }
+ });
+
+ it('should display and invoke the next button', async () => {
+ const { rerender } = await renderInTestApp(
+ wrapInContext(
+ ,
+ ),
+ );
+
+ expect(
+ screen.queryAllByRole('button', { name: 'Next Page' })[0],
+ ).toBeDisabled();
+
+ const fn = jest.fn();
+
+ rerender(
+ wrapInContext(
+ ,
+ ),
+ );
+
+ const nextButton = screen.queryAllByRole('button', {
+ name: 'Next Page',
+ })[0];
+ expect(nextButton).toBeEnabled();
+
+ fireEvent.click(nextButton);
+ expect(fn).toHaveBeenCalled();
+ });
+
+ it('should display and invoke the prev button', async () => {
+ const { rerender } = await renderInTestApp(
+ wrapInContext(
+ ,
+ ),
+ );
+
+ expect(
+ screen.queryAllByRole('button', { name: 'Next Page' })[0],
+ ).toBeDisabled();
+
+ const fn = jest.fn();
+
+ rerender(
+ wrapInContext(
+ ,
+ ),
+ );
+
+ const prevButton = screen.queryAllByRole('button', {
+ name: 'Previous Page',
+ })[0];
+ expect(prevButton).toBeEnabled();
+
+ fireEvent.click(prevButton);
+ expect(fn).toHaveBeenCalled();
+ });
+
+ it('should display entity names when loading has finished and no error occurred', async () => {
+ await renderInTestApp(
+ e.entity),
+ totalItems: data.length,
+ filters: {
+ kind: new EntityKindFilter('techdocs'),
+ },
+ }}
+ >
+
+ ,
+ );
+
+ expect(screen.getByText(/techdocs-0/)).toBeInTheDocument();
+ expect(screen.getByText(/techdocs-50/)).toBeInTheDocument();
+ expect(screen.getByText(/techdocs-99/)).toBeInTheDocument();
+ await waitFor(() => {
+ expect(screen.getByText(/My title/)).toBeInTheDocument();
+ });
+ });
+});
diff --git a/plugins/techdocs/src/home/components/Tables/CursorPaginatedDocsTable.tsx b/plugins/techdocs/src/home/components/Tables/CursorPaginatedDocsTable.tsx
new file mode 100644
index 0000000000..48a1ecddce
--- /dev/null
+++ b/plugins/techdocs/src/home/components/Tables/CursorPaginatedDocsTable.tsx
@@ -0,0 +1,75 @@
+/*
+ * 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 { Table, TableProps } from '@backstage/core-components';
+import { DocsTableRow } from './types';
+
+type PaginatedDocsTableProps = {
+ prev?(): void;
+ next?(): void;
+} & TableProps;
+
+/**
+ * @internal
+ */
+
+export function CursorPaginatedDocsTable(props: PaginatedDocsTableProps) {
+ const {
+ actions,
+ columns,
+ data,
+ next,
+ prev,
+ title,
+ isLoading,
+ options,
+ ...restProps
+ } = props;
+
+ return (
+ {
+ if (page > 0) {
+ next?.();
+ } else {
+ prev?.();
+ }
+ }}
+ /* this will enable the prev button accordingly */
+ page={prev ? 1 : 0}
+ /* this will enable the next button accordingly */
+ totalCount={next ? Number.MAX_VALUE : Number.MAX_SAFE_INTEGER}
+ localization={{ pagination: { labelDisplayedRows: '' } }}
+ isLoading={isLoading}
+ {...restProps}
+ />
+ );
+}
diff --git a/plugins/techdocs/src/home/components/Tables/DocsTable.tsx b/plugins/techdocs/src/home/components/Tables/DocsTable.tsx
index b1537affdb..29dbb3fd4f 100644
--- a/plugins/techdocs/src/home/components/Tables/DocsTable.tsx
+++ b/plugins/techdocs/src/home/components/Tables/DocsTable.tsx
@@ -18,11 +18,7 @@ import React from 'react';
import useCopyToClipboard from 'react-use/esm/useCopyToClipboard';
import { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';
-import { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model';
-import {
- getEntityRelations,
- humanizeEntityRef,
-} from '@backstage/plugin-catalog-react';
+import { Entity } from '@backstage/catalog-model';
import { rootDocsRouteRef } from '../../../routes';
import {
EmptyState,
@@ -33,9 +29,9 @@ import {
TableProps,
} from '@backstage/core-components';
import { actionFactories } from './actions';
-import { columnFactories } from './columns';
-import { toLowerMaybe } from '../../../helpers';
+import { columnFactories, defaultColumns } from './columns';
import { DocsTableRow } from './types';
+import { entitiesToDocsMapper } from './helpers';
/**
* Props for {@link DocsTable}.
@@ -51,14 +47,6 @@ export type DocsTableProps = {
options?: TableOptions;
};
-const defaultColumns: TableColumn[] = [
- columnFactories.createTitleColumn({ hidden: true }),
- columnFactories.createNameColumn(),
- columnFactories.createOwnerColumn(),
- columnFactories.createKindColumn(),
- columnFactories.createTypeColumn(),
-];
-
/**
* Component which renders a table documents
*
@@ -71,26 +59,11 @@ export const DocsTable = (props: DocsTableProps) => {
const config = useApi(configApiRef);
if (!entities) return null;
- const documents = entities.map(entity => {
- const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY);
- return {
- entity,
- resolved: {
- docsUrl: getRouteToReaderPageFor({
- namespace: toLowerMaybe(
- entity.metadata.namespace ?? 'default',
- config,
- ),
- kind: toLowerMaybe(entity.kind, config),
- name: toLowerMaybe(entity.metadata.name, config),
- }),
- ownedByRelations,
- ownedByRelationsTitle: ownedByRelations
- .map(r => humanizeEntityRef(r, { defaultKind: 'group' }))
- .join(', '),
- },
- };
- });
+ const documents = entitiesToDocsMapper(
+ entities,
+ getRouteToReaderPageFor,
+ config,
+ );
const defaultActions: TableProps['actions'] = [
actionFactories.createCopyDocsUrlAction(copyToClipboard),
diff --git a/plugins/techdocs/src/home/components/Tables/EntityListDocsTable.tsx b/plugins/techdocs/src/home/components/Tables/EntityListDocsTable.tsx
index 563bec4d22..08702d2fde 100644
--- a/plugins/techdocs/src/home/components/Tables/EntityListDocsTable.tsx
+++ b/plugins/techdocs/src/home/components/Tables/EntityListDocsTable.tsx
@@ -24,14 +24,19 @@ import {
TableProps,
WarningPanel,
} from '@backstage/core-components';
+import { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';
import {
useEntityList,
useStarredEntities,
} from '@backstage/plugin-catalog-react';
import { DocsTable } from './DocsTable';
+import { OffsetPaginatedDocsTable } from './OffsetPaginatedDocsTable';
+import { CursorPaginatedDocsTable } from './CursorPaginatedDocsTable';
import { actionFactories } from './actions';
-import { columnFactories } from './columns';
+import { columnFactories, defaultColumns } from './columns';
import { DocsTableRow } from './types';
+import { rootDocsRouteRef } from '../../../routes';
+import { entitiesToDocsMapper } from './helpers';
/**
* Props for {@link EntityListDocsTable}.
@@ -51,9 +56,12 @@ export type EntityListDocsTableProps = {
*/
export const EntityListDocsTable = (props: EntityListDocsTableProps) => {
const { columns, actions, options } = props;
- const { loading, error, entities, filters } = useEntityList();
+ const { loading, error, entities, filters, paginationMode, pageInfo } =
+ useEntityList();
const { isStarredEntity, toggleStarredEntity } = useStarredEntities();
const [, copyToClipboard] = useCopyToClipboard();
+ const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);
+ const config = useApi(configApiRef);
const title = capitalize(filters.user?.value ?? 'all');
@@ -65,6 +73,38 @@ export const EntityListDocsTable = (props: EntityListDocsTableProps) => {
),
];
+ const documents = entitiesToDocsMapper(
+ entities,
+ getRouteToReaderPageFor,
+ config,
+ );
+
+ if (paginationMode === 'cursor') {
+ return (
+
+ );
+ } else if (paginationMode === 'offset') {
+ return (
+
+ );
+ }
+
if (error) {
return (
{
+ const data = new Array(100).fill(0).map((_, index) => {
+ const name = `tectdocs-${index}`;
+ return {
+ entity: {
+ apiVersion: '1',
+ kind: 'TestKind',
+ metadata: {
+ name,
+ },
+ },
+ resolved: {
+ docsUrl: 'https://example.com',
+ ownedByRelationsTitle: 'owned',
+ ownedByRelations: [],
+ },
+ } as DocsTableRow;
+ });
+
+ const columns = [
+ {
+ title: 'Title',
+ field: 'entity.metadata.name',
+ searchable: true,
+ },
+ ];
+
+ const wrapInContext = (
+ node: ReactNode,
+ value?: Partial>,
+ ) => {
+ return (
+
+ {node}
+
+ );
+ };
+
+ it('should display all the items', async () => {
+ await renderInTestApp(
+ wrapInContext(
+ ,
+ {
+ setOffset: jest.fn(),
+ limit: Number.MAX_SAFE_INTEGER,
+ offset: 0,
+ totalItems: data.length,
+ },
+ ),
+ );
+
+ for (const item of data) {
+ expect(screen.queryByText(item.entity.metadata.name)).toBeInTheDocument();
+ }
+ });
+
+ it('should display and invoke the next and previous buttons', async () => {
+ const offsetFn = jest.fn();
+
+ await renderInTestApp(
+ wrapInContext(
+ ,
+ { setOffset: offsetFn, limit: 10, totalItems: data.length, offset: 0 },
+ ),
+ );
+
+ expect(offsetFn).toHaveBeenNthCalledWith(1, 0);
+ const nextButton = screen.queryAllByRole('button', {
+ name: 'Next Page',
+ })[0];
+ expect(nextButton).toBeEnabled();
+
+ fireEvent.click(nextButton);
+ expect(offsetFn).toHaveBeenNthCalledWith(2, 10);
+
+ const prevButton = screen.queryAllByRole('button', {
+ name: 'Previous Page',
+ })[0];
+ expect(prevButton).toBeEnabled();
+
+ fireEvent.click(prevButton);
+ expect(offsetFn).toHaveBeenNthCalledWith(3, 0);
+ });
+});
diff --git a/plugins/techdocs/src/home/components/Tables/OffsetPaginatedDocsTable.tsx b/plugins/techdocs/src/home/components/Tables/OffsetPaginatedDocsTable.tsx
new file mode 100644
index 0000000000..9f4572117d
--- /dev/null
+++ b/plugins/techdocs/src/home/components/Tables/OffsetPaginatedDocsTable.tsx
@@ -0,0 +1,75 @@
+/*
+ * 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, { useEffect } from 'react';
+
+import { Table, TableProps } from '@backstage/core-components';
+import { DocsTableRow } from './types';
+import {
+ EntityTextFilter,
+ useEntityList,
+} from '@backstage/plugin-catalog-react';
+
+/**
+ * @internal
+ */
+export function OffsetPaginatedDocsTable(props: TableProps) {
+ const { actions, columns, data, isLoading, options } = props;
+ const { updateFilters, setLimit, setOffset, limit, totalItems, offset } =
+ useEntityList();
+ const [page, setPage] = React.useState(
+ offset && limit ? Math.floor(offset / limit) : 0,
+ );
+
+ useEffect(() => {
+ if (totalItems && page * limit >= totalItems) {
+ setOffset!(Math.max(0, totalItems - limit));
+ } else {
+ setOffset!(Math.max(0, page * limit));
+ }
+ }, [setOffset, page, limit, totalItems]);
+
+ return (
+
+ columns={columns}
+ data={data}
+ options={{
+ paginationPosition: 'both',
+ pageSizeOptions: [5, 10, 20, 50, 100],
+ pageSize: limit,
+ emptyRowsWhenPaging: false,
+ actionsColumnIndex: -1,
+ ...options,
+ }}
+ actions={actions}
+ onSearchChange={(searchText: string) =>
+ updateFilters({
+ text: searchText ? new EntityTextFilter(searchText) : undefined,
+ })
+ }
+ page={page}
+ onPageChange={newPage => {
+ setPage(newPage);
+ }}
+ onRowsPerPageChange={pageSize => {
+ setLimit(pageSize);
+ }}
+ totalCount={totalItems}
+ localization={{ pagination: { labelDisplayedRows: '' } }}
+ isLoading={isLoading}
+ />
+ );
+}
diff --git a/plugins/techdocs/src/home/components/Tables/columns.tsx b/plugins/techdocs/src/home/components/Tables/columns.tsx
index ef22f6d288..9947e1de9e 100644
--- a/plugins/techdocs/src/home/components/Tables/columns.tsx
+++ b/plugins/techdocs/src/home/components/Tables/columns.tsx
@@ -85,3 +85,11 @@ export const columnFactories = {
};
},
};
+
+export const defaultColumns: TableColumn[] = [
+ columnFactories.createTitleColumn({ hidden: true }),
+ columnFactories.createNameColumn(),
+ columnFactories.createOwnerColumn(),
+ columnFactories.createKindColumn(),
+ columnFactories.createTypeColumn(),
+];
diff --git a/plugins/techdocs/src/home/components/Tables/helpers.ts b/plugins/techdocs/src/home/components/Tables/helpers.ts
new file mode 100644
index 0000000000..4c6383c35e
--- /dev/null
+++ b/plugins/techdocs/src/home/components/Tables/helpers.ts
@@ -0,0 +1,56 @@
+/*
+ * 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 { RELATION_OWNED_BY, Entity } from '@backstage/catalog-model';
+import {
+ getEntityRelations,
+ humanizeEntityRef,
+} from '@backstage/plugin-catalog-react';
+import { toLowerMaybe } from '../../../helpers';
+import { ConfigApi, RouteFunc } from '@backstage/core-plugin-api';
+
+type getRouteFunc = RouteFunc<{
+ namespace: string;
+ kind: string;
+ name: string;
+}>;
+
+export function entitiesToDocsMapper(
+ entities: Entity[],
+ getRouteToReaderPageFor: getRouteFunc,
+ config: ConfigApi,
+) {
+ return entities.map(entity => {
+ const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY);
+ return {
+ entity,
+ resolved: {
+ docsUrl: getRouteToReaderPageFor({
+ namespace: toLowerMaybe(
+ entity.metadata.namespace ?? 'default',
+ config,
+ ),
+ kind: toLowerMaybe(entity.kind, config),
+ name: toLowerMaybe(entity.metadata.name, config),
+ }),
+ ownedByRelations,
+ ownedByRelationsTitle: ownedByRelations
+ .map(r => humanizeEntityRef(r, { defaultKind: 'group' }))
+ .join(', '),
+ },
+ };
+ });
+}
diff --git a/plugins/techdocs/src/home/components/TechDocsCustomHome.test.tsx b/plugins/techdocs/src/home/components/TechDocsCustomHome.test.tsx
index 409d68a593..585248c6c9 100644
--- a/plugins/techdocs/src/home/components/TechDocsCustomHome.test.tsx
+++ b/plugins/techdocs/src/home/components/TechDocsCustomHome.test.tsx
@@ -14,7 +14,11 @@
* limitations under the License.
*/
-import { catalogApiRef } from '@backstage/plugin-catalog-react';
+import {
+ catalogApiRef,
+ starredEntitiesApiRef,
+ MockStarredEntitiesApi,
+} from '@backstage/plugin-catalog-react';
import { catalogApiMock } from '@backstage/plugin-catalog-react/testUtils';
import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils';
import { screen } from '@testing-library/react';
@@ -37,7 +41,10 @@ const mockCatalogApi = catalogApiMock({
});
describe('TechDocsCustomHome', () => {
- const apiRegistry = TestApiRegistry.from([catalogApiRef, mockCatalogApi]);
+ const apiRegistry = TestApiRegistry.from(
+ [catalogApiRef, mockCatalogApi],
+ [starredEntitiesApiRef, new MockStarredEntitiesApi()],
+ );
it('should render a TechDocs home page', async () => {
const tabsConfig = [
diff --git a/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx b/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx
index 56d086acfc..d89bc5ee1b 100644
--- a/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx
+++ b/plugins/techdocs/src/home/components/TechDocsCustomHome.tsx
@@ -23,6 +23,7 @@ import {
catalogApiRef,
CatalogApi,
useEntityOwnership,
+ EntityListProvider,
} from '@backstage/plugin-catalog-react';
import { Entity } from '@backstage/catalog-model';
import { DocsTable } from './Tables';
@@ -127,7 +128,9 @@ const CustomPanel = ({
) : null}
>
);
diff --git a/plugins/techdocs/src/home/components/TechDocsIndexPage.tsx b/plugins/techdocs/src/home/components/TechDocsIndexPage.tsx
index adbb68d3e9..cc89d22c08 100644
--- a/plugins/techdocs/src/home/components/TechDocsIndexPage.tsx
+++ b/plugins/techdocs/src/home/components/TechDocsIndexPage.tsx
@@ -18,6 +18,7 @@ import React from 'react';
import { useOutlet } from 'react-router-dom';
import { TableColumn, TableProps } from '@backstage/core-components';
import {
+ EntityListPagination,
EntityOwnerPickerProps,
UserListFilterKind,
} from '@backstage/plugin-catalog-react';
@@ -34,6 +35,7 @@ export type TechDocsIndexPageProps = {
columns?: TableColumn[];
actions?: TableProps['actions'];
ownerPickerMode?: EntityOwnerPickerProps['mode'];
+ pagination?: EntityListPagination;
};
export const TechDocsIndexPage = (props: TechDocsIndexPageProps) => {
diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md
index f757f72741..43a06fba57 100644
--- a/plugins/user-settings-backend/CHANGELOG.md
+++ b/plugins/user-settings-backend/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-user-settings-backend
+## 0.2.28-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.2
+ - @backstage/backend-plugin-api@1.1.0-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/plugin-auth-node@0.5.5-next.2
+ - @backstage/plugin-signals-node@0.1.15-next.2
+ - @backstage/config@1.3.1-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-user-settings-common@0.0.1
+
## 0.2.28-next.1
### Patch Changes
diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json
index 6a8d4a4a0c..93942be61f 100644
--- a/plugins/user-settings-backend/package.json
+++ b/plugins/user-settings-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-user-settings-backend",
- "version": "0.2.28-next.1",
+ "version": "0.2.28-next.2",
"description": "The Backstage backend plugin to manage user settings",
"backstage": {
"role": "backend-plugin",
diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md
index c14cae5ee4..90a75362e3 100644
--- a/plugins/user-settings/CHANGELOG.md
+++ b/plugins/user-settings/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-user-settings
+## 0.8.17-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-compat-api@0.3.4-next.2
+ - @backstage/plugin-catalog-react@1.14.3-next.2
+ - @backstage/errors@1.2.6-next.0
+ - @backstage/catalog-model@1.7.2-next.0
+ - @backstage/core-app-api@1.15.3-next.1
+ - @backstage/core-components@0.16.2-next.2
+ - @backstage/core-plugin-api@1.10.2-next.0
+ - @backstage/frontend-plugin-api@0.9.3-next.2
+ - @backstage/theme@0.6.3-next.0
+ - @backstage/types@1.2.0
+ - @backstage/plugin-signals-react@0.0.8-next.0
+ - @backstage/plugin-user-settings-common@0.0.1
+
## 0.8.17-next.1
### Patch Changes
diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json
index 79b21a2f51..6aaadd9161 100644
--- a/plugins/user-settings/package.json
+++ b/plugins/user-settings/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-user-settings",
- "version": "0.8.17-next.1",
+ "version": "0.8.17-next.2",
"description": "A Backstage plugin that provides a settings page",
"backstage": {
"role": "frontend-plugin",
diff --git a/yarn.lock b/yarn.lock
index 2f2dcea0d2..1baea64682 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3646,13 +3646,13 @@ __metadata:
node-forge: ^1.3.1
node-mocks-http: ^1.0.0
p-limit: ^3.1.0
+ p-throttle: ^4.1.1
path-to-regexp: ^8.0.0
pg: ^8.11.3
pg-connection-string: ^2.3.0
pg-format: ^1.0.4
raw-body: ^2.4.1
selfsigned: ^2.0.0
- stoppable: ^1.1.0
supertest: ^7.0.0
tar: ^6.1.12
triple-beam: ^1.4.1
@@ -3842,9 +3842,6 @@ __metadata:
"@testing-library/jest-dom": ^6.0.0
"@types/react": ^18.0.0
"@types/react-dom": ^18.0.0
- "@vanilla-extract/css": ^1.16.0
- "@vanilla-extract/dynamic": ^2.1.2
- "@vanilla-extract/recipes": ^0.5.5
"@vanilla-extract/rollup-plugin": ^1.3.10
"@vanilla-extract/sprinkles": ^1.6.3
"@vanilla-extract/webpack-plugin": ^2.3.14
@@ -3892,7 +3889,19 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/catalog-model@^1.4.3, @backstage/catalog-model@^1.7.0, @backstage/catalog-model@^1.7.1, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model":
+"@backstage/catalog-model@npm:^1.4.3, @backstage/catalog-model@npm:^1.7.0, @backstage/catalog-model@npm:^1.7.1":
+ version: 1.7.1
+ resolution: "@backstage/catalog-model@npm:1.7.1"
+ dependencies:
+ "@backstage/errors": ^1.2.5
+ "@backstage/types": ^1.2.0
+ ajv: ^8.10.0
+ lodash: ^4.17.21
+ checksum: 05e2b386aac897f8ac87c1e479101f8da90d96c517c837b99796a4118cce63932ffbb29fbb1f8ec156258370ff5bab65555bbe2fd7091be438f8c554f0a5bdff
+ languageName: node
+ linkType: hard
+
+"@backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model":
version: 0.0.0-use.local
resolution: "@backstage/catalog-model@workspace:packages/catalog-model"
dependencies:
@@ -3963,7 +3972,7 @@ __metadata:
"@backstage/theme": "workspace:^"
"@backstage/types": "workspace:^"
"@manypkg/get-packages": ^1.1.3
- "@module-federation/enhanced": ^0.7.0
+ "@module-federation/enhanced": ^0.8.0
"@octokit/graphql": ^5.0.0
"@octokit/graphql-schema": ^13.7.0
"@octokit/oauth-app": ^4.2.0
@@ -4018,7 +4027,7 @@ __metadata:
commander: ^12.0.0
cross-fetch: ^4.0.0
cross-spawn: ^7.0.3
- css-loader: ^7.0.0
+ css-loader: ^6.5.1
ctrlc-windows: ^2.1.0
del: ^8.0.0
esbuild: ^0.24.0
@@ -4190,7 +4199,18 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/config@^1.1.1, @backstage/config@^1.2.0, @backstage/config@^1.3.0, @backstage/config@workspace:^, @backstage/config@workspace:packages/config":
+"@backstage/config@npm:^1.1.1, @backstage/config@npm:^1.2.0, @backstage/config@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "@backstage/config@npm:1.3.0"
+ dependencies:
+ "@backstage/errors": ^1.2.5
+ "@backstage/types": ^1.2.0
+ ms: ^2.1.3
+ checksum: 8e117d677889a5170c62f4b867830cded1cddc2f3f52c86fef7df60a974e7f9e38f428d12e30b6dcc038971e736162d52469f6d98917a401f825e544443e0e4e
+ languageName: node
+ linkType: hard
+
+"@backstage/config@workspace:^, @backstage/config@workspace:packages/config":
version: 0.0.0-use.local
resolution: "@backstage/config@workspace:packages/config"
dependencies:
@@ -4310,7 +4330,7 @@ __metadata:
"@backstage/test-utils": "workspace:^"
"@backstage/types": "workspace:^"
"@backstage/version-bridge": "workspace:^"
- "@oriflame/backstage-plugin-score-card": ^0.8.0
+ "@oriflame/backstage-plugin-score-card": ^0.9.0
"@testing-library/jest-dom": ^6.0.0
"@testing-library/react": ^16.0.0
"@types/react": ^18.0.0
@@ -4564,7 +4584,28 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/core-plugin-api@^1.10.0, @backstage/core-plugin-api@^1.10.1, @backstage/core-plugin-api@^1.8.2, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api":
+"@backstage/core-plugin-api@npm:^1.10.0, @backstage/core-plugin-api@npm:^1.10.1, @backstage/core-plugin-api@npm:^1.8.2":
+ version: 1.10.1
+ resolution: "@backstage/core-plugin-api@npm:1.10.1"
+ dependencies:
+ "@backstage/config": ^1.3.0
+ "@backstage/errors": ^1.2.5
+ "@backstage/types": ^1.2.0
+ "@backstage/version-bridge": ^1.0.10
+ history: ^5.0.0
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ 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
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: b9897e92cc595463c11b5719f3d6305debf00dccead6befe04548e7b08c9c03a54c610f64515f443e980c43a6f28e1302ab590d1351bc536d90826f934f336ea
+ languageName: node
+ linkType: hard
+
+"@backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api":
version: 0.0.0-use.local
resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api"
dependencies:
@@ -4675,7 +4716,17 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/errors@^1.2.3, @backstage/errors@^1.2.4, @backstage/errors@^1.2.5, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors":
+"@backstage/errors@npm:^1.2.3, @backstage/errors@npm:^1.2.4, @backstage/errors@npm:^1.2.5":
+ version: 1.2.5
+ resolution: "@backstage/errors@npm:1.2.5"
+ dependencies:
+ "@backstage/types": ^1.2.0
+ serialize-error: ^8.0.1
+ checksum: 8b4411cca1a9038b136ffa766d3ec284d0dac730ef27b1f565dc7f471249ce87a3d6599fe5c21c7643363ee13f0b0457d5c4fa29d20da64ca3a09fecec3ccd31
+ languageName: node
+ linkType: hard
+
+"@backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors":
version: 0.0.0-use.local
resolution: "@backstage/errors@workspace:packages/errors"
dependencies:
@@ -4922,7 +4973,22 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/integration-aws-node@^0.1.12, @backstage/integration-aws-node@workspace:^, @backstage/integration-aws-node@workspace:packages/integration-aws-node":
+"@backstage/integration-aws-node@npm:^0.1.12":
+ version: 0.1.13
+ resolution: "@backstage/integration-aws-node@npm:0.1.13"
+ dependencies:
+ "@aws-sdk/client-sts": ^3.350.0
+ "@aws-sdk/credential-provider-node": ^3.350.0
+ "@aws-sdk/credential-providers": ^3.350.0
+ "@aws-sdk/types": ^3.347.0
+ "@aws-sdk/util-arn-parser": ^3.310.0
+ "@backstage/config": ^1.3.0
+ "@backstage/errors": ^1.2.5
+ checksum: 042617852482685c2452549ad1e16ca319f09e9dc366ad90d7307da6e6763c23ada7bce78e415da9ffef3da7a1287c2ce8c4eddabd1deeaf3f0e7249fdc6e3ee
+ languageName: node
+ linkType: hard
+
+"@backstage/integration-aws-node@workspace:^, @backstage/integration-aws-node@workspace:packages/integration-aws-node":
version: 0.0.0-use.local
resolution: "@backstage/integration-aws-node@workspace:packages/integration-aws-node"
dependencies:
@@ -4941,7 +5007,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/integration-react@npm:^1.2.1":
+"@backstage/integration-react@npm:^1.1.24, @backstage/integration-react@npm:^1.2.1":
version: 1.2.1
resolution: "@backstage/integration-react@npm:1.2.1"
dependencies:
@@ -4993,7 +5059,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/integration@npm:^1.15.0, @backstage/integration@npm:^1.15.2":
+"@backstage/integration@npm:^1.15.0, @backstage/integration@npm:^1.15.2, @backstage/integration@npm:^1.9.0":
version: 1.15.2
resolution: "@backstage/integration@npm:1.15.2"
dependencies:
@@ -5876,6 +5942,7 @@ __metadata:
"@backstage/plugin-catalog-node": "workspace:^"
luxon: ^3.0.0
msw: ^1.0.0
+ p-throttle: ^4.1.1
uuid: ^11.0.0
languageName: unknown
linkType: soft
@@ -6210,7 +6277,18 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-catalog-common@^1.0.20, @backstage/plugin-catalog-common@^1.1.1, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common":
+"@backstage/plugin-catalog-common@npm:^1.0.20, @backstage/plugin-catalog-common@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "@backstage/plugin-catalog-common@npm:1.1.1"
+ dependencies:
+ "@backstage/catalog-model": ^1.7.1
+ "@backstage/plugin-permission-common": ^0.8.2
+ "@backstage/plugin-search-common": ^1.2.15
+ checksum: de2205ef4ab6ce43dd46d20daed31b9fd5d395b0d78d0e579c7269a5be0741f65ccc690c2346b5945fdb1c5a11a384b9745cdaa495997a179bea9ed55fc5df86
+ languageName: node
+ linkType: hard
+
+"@backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common":
version: 0.0.0-use.local
resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common"
dependencies:
@@ -7327,7 +7405,22 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-permission-common@^0.8.2, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common":
+"@backstage/plugin-permission-common@npm:^0.8.2":
+ version: 0.8.2
+ resolution: "@backstage/plugin-permission-common@npm:0.8.2"
+ dependencies:
+ "@backstage/config": ^1.3.0
+ "@backstage/errors": ^1.2.5
+ "@backstage/types": ^1.2.0
+ cross-fetch: ^4.0.0
+ uuid: ^11.0.0
+ zod: ^3.22.4
+ zod-to-json-schema: ^3.20.4
+ checksum: f58f205d255c41e39ed331ccb64e807a1ec7728bb7f32c406e52c4d1e4b5e9e2195aa73a1fccbe427c191b0db263f8aa64310dbf5862b4e3834f68a4591de8c3
+ languageName: node
+ linkType: hard
+
+"@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common":
version: 0.0.0-use.local
resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common"
dependencies:
@@ -7366,7 +7459,27 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-permission-react@^0.4.28, @backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react":
+"@backstage/plugin-permission-react@npm:^0.4.28":
+ version: 0.4.28
+ resolution: "@backstage/plugin-permission-react@npm:0.4.28"
+ dependencies:
+ "@backstage/config": ^1.3.0
+ "@backstage/core-plugin-api": ^1.10.1
+ "@backstage/plugin-permission-common": ^0.8.2
+ swr: ^2.0.0
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
+ 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
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: ad070512472315556cc456c1edb7bcd70be20e352583f4eca7cc1c21d0b75c6d28eb28a47b07cee18594ff554bf4f78f48e034f56c0bbd6fbd1a28b5efe46763
+ languageName: node
+ linkType: hard
+
+"@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react":
version: 0.0.0-use.local
resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react"
dependencies:
@@ -8157,6 +8270,16 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/plugin-search-common@npm:^1.2.15":
+ version: 1.2.15
+ resolution: "@backstage/plugin-search-common@npm:1.2.15"
+ dependencies:
+ "@backstage/plugin-permission-common": ^0.8.2
+ "@backstage/types": ^1.2.0
+ checksum: 9ea3aafef93074a59127a3e775f82fca1358d330524312c64baaca921baa85e5d80a4042ede050e492ef43c9b6ff9f6eb0a4ea81cb40e09f38834dfc1b57cd57
+ languageName: node
+ linkType: hard
+
"@backstage/plugin-search-common@workspace:^, @backstage/plugin-search-common@workspace:plugins/search-common":
version: 0.0.0-use.local
resolution: "@backstage/plugin-search-common@workspace:plugins/search-common"
@@ -9320,10 +9443,12 @@ __metadata:
languageName: node
linkType: hard
-"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1, @codemirror/state@npm:^6.4.0":
- version: 6.4.0
- resolution: "@codemirror/state@npm:6.4.0"
- checksum: c5236fe5786f1b85d17273a5c17fa8aeb063658c1404ab18caeb6e7591663ec96b65d453ab8162f75839c3801b04cd55ba4bc48f44cb61ebfeeee383f89553c7
+"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1, @codemirror/state@npm:^6.5.0":
+ version: 6.5.0
+ resolution: "@codemirror/state@npm:6.5.0"
+ dependencies:
+ "@marijn/find-cluster-break": ^1.0.0
+ checksum: f7fbed072cc67bf250f7d231668a00b988748cacaaa2ce3ea74ff13c7c392db76000e7d517933521cc6ad9dc3651c7b6d33accab3e3d4b9816cd3c5714661a84
languageName: node
linkType: hard
@@ -9340,13 +9465,13 @@ __metadata:
linkType: hard
"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.23.0":
- version: 6.35.2
- resolution: "@codemirror/view@npm:6.35.2"
+ version: 6.35.3
+ resolution: "@codemirror/view@npm:6.35.3"
dependencies:
- "@codemirror/state": ^6.4.0
+ "@codemirror/state": ^6.5.0
style-mod: ^4.1.0
w3c-keyname: ^2.2.4
- checksum: 18cc95a38fe451758fda93927873334584714ab9e2f1f8a823c5be00b90576f3f755ce01c399bf861c24449c0cb735b2bb0c6ea8ebda7030f93d7b8fe414e88b
+ checksum: 09c2685c9345b23ea69d28f323f29d6e73a269e9ffa29ffbf6443c139b2c97fd1a87eced1c59553a3416a08aed3246e30dd5eb70d516159ac352ae422ff4394d
languageName: node
linkType: hard
@@ -10351,15 +10476,15 @@ __metadata:
linkType: hard
"@google-cloud/firestore@npm:^7.0.0":
- version: 7.10.0
- resolution: "@google-cloud/firestore@npm:7.10.0"
+ version: 7.11.0
+ resolution: "@google-cloud/firestore@npm:7.11.0"
dependencies:
"@opentelemetry/api": ^1.3.0
fast-deep-equal: ^3.1.1
functional-red-black-tree: ^1.0.1
google-gax: ^4.3.3
protobufjs: ^7.2.6
- checksum: c534e49c6b52b7b46366eba009e3f56e8ee10ca0501896a7794470cab32513c6a314f364ff5a3fe5a44b832ba39d1afc86d38b42be3826a615c0a59108185c7d
+ checksum: b926123db5e3f37704c0aa51baee1726b72910a37c7fe99bbfe048afb1fba7fa40d7e5f7c017c7284ebd9273c0237da5c00fac81772ba0de1bed97dc9b71e709
languageName: node
linkType: hard
@@ -11667,6 +11792,13 @@ __metadata:
languageName: node
linkType: hard
+"@marijn/find-cluster-break@npm:^1.0.0":
+ version: 1.0.2
+ resolution: "@marijn/find-cluster-break@npm:1.0.2"
+ checksum: 0d836de25e04d58325813401ef3c2d34caf040da985a5935fcbc9d84e7b47a21bdb15f57d70c2bf0960bd29ed3dbbb1afd00cdd0fc4fafbee7fd0ffe7d508ae1
+ languageName: node
+ linkType: hard
+
"@material-table/core@npm:^3.1.0":
version: 3.2.5
resolution: "@material-table/core@npm:3.2.5"
@@ -11981,39 +12113,39 @@ __metadata:
languageName: node
linkType: hard
-"@module-federation/bridge-react-webpack-plugin@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/bridge-react-webpack-plugin@npm:0.7.7"
+"@module-federation/bridge-react-webpack-plugin@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/bridge-react-webpack-plugin@npm:0.8.1"
dependencies:
- "@module-federation/sdk": 0.7.7
+ "@module-federation/sdk": 0.8.1
"@types/semver": 7.5.8
semver: 7.6.3
- checksum: 4f023e718e02195fb1555fd43e2ddbe88b71a1df29903d1f76297fe0a388421a6819a8d0375d8f4459e259388ee8fd6f00f7701d02d11b1fc6a6300a846b8d31
+ checksum: d8c68cd1ddd387e9ef6fba688aec68ef0fe59ec5138f3fc897d033227c0ddd04c4307b52c352a42e85c4b9ad5bc759cd811280960166f752f217df7aeb27a55b
languageName: node
linkType: hard
-"@module-federation/data-prefetch@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/data-prefetch@npm:0.7.7"
+"@module-federation/data-prefetch@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/data-prefetch@npm:0.8.1"
dependencies:
- "@module-federation/runtime": 0.7.7
- "@module-federation/sdk": 0.7.7
+ "@module-federation/runtime": 0.8.1
+ "@module-federation/sdk": 0.8.1
fs-extra: 9.1.0
peerDependencies:
react: ">=16.9.0"
react-dom: ">=16.9.0"
- checksum: 9701f1ba3d50b4e5739c9ef76c55ca0ed7c7d66060fd79fed599612673fafd766681987fedfb8e7e0f0c435e86db79bfbc56d4aeadc461a400d845a7a7b61e78
+ checksum: 25a67256c1900d3989c2f393aca50a0f38faeb9aa1023327ce0716585fb4e19593efb147f20eac883d4eeae619400a95ec41e64f8b10a780b2e3a6e22495440c
languageName: node
linkType: hard
-"@module-federation/dts-plugin@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/dts-plugin@npm:0.7.7"
+"@module-federation/dts-plugin@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/dts-plugin@npm:0.8.1"
dependencies:
- "@module-federation/error-codes": 0.7.7
- "@module-federation/managers": 0.7.7
- "@module-federation/sdk": 0.7.7
- "@module-federation/third-party-dts-extractor": 0.7.7
+ "@module-federation/error-codes": 0.8.1
+ "@module-federation/managers": 0.8.1
+ "@module-federation/sdk": 0.8.1
+ "@module-federation/third-party-dts-extractor": 0.8.1
adm-zip: ^0.5.10
ansi-colors: ^4.1.3
axios: ^1.7.4
@@ -12032,22 +12164,22 @@ __metadata:
peerDependenciesMeta:
vue-tsc:
optional: true
- checksum: d5cbd4c552673e0b561cba0ffbc92086c8e6102a0cf18df0131f16c8c7f63371e90dba6b3a65c765cf515af61cf31611d6773f9bbada436f1fa74e5ed0c8e95f
+ checksum: 7f3f6b000f2427b3ba06c14a3cf7332bec1a4f843d46d11fd267d041f0916ebe4458187284d640524187bae3c871714df29c817d136a45f0a59ae915cc8d77f2
languageName: node
linkType: hard
-"@module-federation/enhanced@npm:^0.7.0":
- version: 0.7.7
- resolution: "@module-federation/enhanced@npm:0.7.7"
+"@module-federation/enhanced@npm:^0.8.0":
+ version: 0.8.1
+ resolution: "@module-federation/enhanced@npm:0.8.1"
dependencies:
- "@module-federation/bridge-react-webpack-plugin": 0.7.7
- "@module-federation/data-prefetch": 0.7.7
- "@module-federation/dts-plugin": 0.7.7
- "@module-federation/managers": 0.7.7
- "@module-federation/manifest": 0.7.7
- "@module-federation/rspack": 0.7.7
- "@module-federation/runtime-tools": 0.7.7
- "@module-federation/sdk": 0.7.7
+ "@module-federation/bridge-react-webpack-plugin": 0.8.1
+ "@module-federation/data-prefetch": 0.8.1
+ "@module-federation/dts-plugin": 0.8.1
+ "@module-federation/managers": 0.8.1
+ "@module-federation/manifest": 0.8.1
+ "@module-federation/rspack": 0.8.1
+ "@module-federation/runtime-tools": 0.8.1
+ "@module-federation/sdk": 0.8.1
btoa: ^1.2.1
upath: 2.0.1
peerDependencies:
@@ -12061,52 +12193,53 @@ __metadata:
optional: true
webpack:
optional: true
- checksum: 3b22c92072265cfd63d1f8a3ef2f3b8cdf1bfe6379eb893d7f6a771da2d56102aac0e4acb80b6dc08708ba33a6db95f0e14fb1fba24727d9ee79996aef54d6a8
+ checksum: a4902eff5e6379c70638efd1cd80daa156dee8e3eded0bdf431535dd89abc1fbf14c0bd858905595ea9963639f2b72a404f4c8ddc2c8b45d7bc760fc3b2a361b
languageName: node
linkType: hard
-"@module-federation/error-codes@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/error-codes@npm:0.7.7"
- checksum: 05762cafcc7346d9693bd8f815023325e46d35e8a5fbedcca4365bc9c1e0867d1020fe662f24a3681a09e992089194cd7a7fe49dae2f2fe3c64315609daba24d
+"@module-federation/error-codes@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/error-codes@npm:0.8.1"
+ checksum: 36d899d2d3e00904c8aa74f1611edfceb88937ee56cc5cf2302f30e010752c68c0486cf5251ee83c1f3c2471bcea1e1ea0e8047173e92e4f10bad83125b1721d
languageName: node
linkType: hard
-"@module-federation/managers@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/managers@npm:0.7.7"
+"@module-federation/managers@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/managers@npm:0.8.1"
dependencies:
- "@module-federation/sdk": 0.7.7
+ "@module-federation/sdk": 0.8.1
find-pkg: 2.0.0
fs-extra: 9.1.0
- checksum: 5e4a310530368a164e8b8a4d41f11d49d1b83f9e8fbafac3b09d1287d54e90708a00449d0ce6d961fe4634279ce132623b32d8a489e59807ed6ff520f020596d
+ checksum: 9f608960e5353934d85c99d68e41a156d79ca592ec52bb81ce869084cb7428d821165b17600ffd440b4640205d11fdd463165df35d6b9163250b64815c20e48b
languageName: node
linkType: hard
-"@module-federation/manifest@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/manifest@npm:0.7.7"
+"@module-federation/manifest@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/manifest@npm:0.8.1"
dependencies:
- "@module-federation/dts-plugin": 0.7.7
- "@module-federation/managers": 0.7.7
- "@module-federation/sdk": 0.7.7
+ "@module-federation/dts-plugin": 0.8.1
+ "@module-federation/managers": 0.8.1
+ "@module-federation/sdk": 0.8.1
chalk: 3.0.0
find-pkg: 2.0.0
- checksum: 95b7789bc7990aabdf0b57f685d6664233f6637019194bad28cebfe27494001cbfa345e8435aa967936c87105a4b6589e1c555dee6d4d9a316b92c2a691a4c58
+ checksum: 570eeb5fb36ecaac45ff150475cf09b69cf7fd2f7544527510732be65238957ef8f71faeebbeaf4d5fdfc2df2b3c88617982dcdbc93110a6766424306b8744cc
languageName: node
linkType: hard
-"@module-federation/rspack@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/rspack@npm:0.7.7"
+"@module-federation/rspack@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/rspack@npm:0.8.1"
dependencies:
- "@module-federation/bridge-react-webpack-plugin": 0.7.7
- "@module-federation/dts-plugin": 0.7.7
- "@module-federation/managers": 0.7.7
- "@module-federation/manifest": 0.7.7
- "@module-federation/runtime-tools": 0.7.7
- "@module-federation/sdk": 0.7.7
+ "@module-federation/bridge-react-webpack-plugin": 0.8.1
+ "@module-federation/dts-plugin": 0.8.1
+ "@module-federation/managers": 0.8.1
+ "@module-federation/manifest": 0.8.1
+ "@module-federation/runtime-tools": 0.8.1
+ "@module-federation/sdk": 0.8.1
peerDependencies:
+ "@rspack/core": ">=0.7"
typescript: ^4.9.0 || ^5.0.0
vue-tsc: ">=1.0.24"
peerDependenciesMeta:
@@ -12114,7 +12247,7 @@ __metadata:
optional: true
vue-tsc:
optional: true
- checksum: b974e6082c7a2b56b5ea3a3bc2ccc6dfc44d8bd65b7ff87601154c340ff808e70933ae5a240aa0d39208879ec2a426f12284b86ca73bba7cd6b9daeeef4b142c
+ checksum: a03ef54111d16fcf388acac7e1a8b4c6f2cb0af7a907d6e8d14aca2e321864997fa343902170f455e456aea978e6330a9050f070ff0a3503047c0bbed4ef08bb
languageName: node
linkType: hard
@@ -12128,13 +12261,13 @@ __metadata:
languageName: node
linkType: hard
-"@module-federation/runtime-tools@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/runtime-tools@npm:0.7.7"
+"@module-federation/runtime-tools@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/runtime-tools@npm:0.8.1"
dependencies:
- "@module-federation/runtime": 0.7.7
- "@module-federation/webpack-bundler-runtime": 0.7.7
- checksum: dab2e0e9a49ca2e00c34991d4af59ca07cf212c3f7c670d4577b9825e2cd516c2487d6199e6fa09f9fa47966649f3afce21eba9ec4f0a887112e965950d1930b
+ "@module-federation/runtime": 0.8.1
+ "@module-federation/webpack-bundler-runtime": 0.8.1
+ checksum: b10eca911e0a8611a7337f653c0efbd308805b561c22b27a3695092f674a95b349bbf7048659f53bddc558de82b3ffd3bda1757934edfcc298c60a779bfea319
languageName: node
linkType: hard
@@ -12147,13 +12280,13 @@ __metadata:
languageName: node
linkType: hard
-"@module-federation/runtime@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/runtime@npm:0.7.7"
+"@module-federation/runtime@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/runtime@npm:0.8.1"
dependencies:
- "@module-federation/error-codes": 0.7.7
- "@module-federation/sdk": 0.7.7
- checksum: 1b8c95e57496a40d056762434d9946a550300ae3bd5f2e9229d3a1ad0f808ce707932bf7aec458c76f0eacd61581f01a8c8d75133a622e0498741e75f00be52b
+ "@module-federation/error-codes": 0.8.1
+ "@module-federation/sdk": 0.8.1
+ checksum: 31b4b23237ea105f85d316036819df1cab8d79e845e70b7a0365640f5cfb02850876c3b9fe1eb680aea8ae56454e58e6dfaa49a58c473d82c929307d6000c1f6
languageName: node
linkType: hard
@@ -12164,23 +12297,23 @@ __metadata:
languageName: node
linkType: hard
-"@module-federation/sdk@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/sdk@npm:0.7.7"
+"@module-federation/sdk@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/sdk@npm:0.8.1"
dependencies:
isomorphic-rslog: 0.0.6
- checksum: dc156ff0cf6dcc5f85eca80eeb3d0d576000803de158ef1c63887f662b46005a32ea21bdeef115a59f12533929cd0367827d8ec0d6d364ec0514c989faeb1311
+ checksum: 41858b512cba814ea4a483a03043c3fda7c50796be5ef9b360b73fc1a2903f1edc58194663efbbcb36cb8035d088db8fe94369f08735761c88fa342bf4d569d8
languageName: node
linkType: hard
-"@module-federation/third-party-dts-extractor@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/third-party-dts-extractor@npm:0.7.7"
+"@module-federation/third-party-dts-extractor@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/third-party-dts-extractor@npm:0.8.1"
dependencies:
find-pkg: 2.0.0
fs-extra: 9.1.0
resolve: 1.22.8
- checksum: c1fa64a740469fa7ca0bfbc280359e22768c8e01df8325b9eb36346e06b60061432fd1ebe5d38335480e1fce3b8308daf8f0cf9a82d91b78270db2c21b92980c
+ checksum: fcf0eb87296f8a393db77adb74423af174bc5f0018201471af129d831e4c1c6cf9ab9ea4ae66b91785964a4b421fcfc2dc2079aeb687ad2c6ce891022c8d3adf
languageName: node
linkType: hard
@@ -12194,13 +12327,13 @@ __metadata:
languageName: node
linkType: hard
-"@module-federation/webpack-bundler-runtime@npm:0.7.7":
- version: 0.7.7
- resolution: "@module-federation/webpack-bundler-runtime@npm:0.7.7"
+"@module-federation/webpack-bundler-runtime@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@module-federation/webpack-bundler-runtime@npm:0.8.1"
dependencies:
- "@module-federation/runtime": 0.7.7
- "@module-federation/sdk": 0.7.7
- checksum: c0caeb9a5a7d5fbb360813ee880760ed2f72ea3ae4e39b37ba20accdfd8c60cfb625ead09455c68808e8461b744315cbfe89a1203824e33d9dc8f1c14c60dbd6
+ "@module-federation/runtime": 0.8.1
+ "@module-federation/sdk": 0.8.1
+ checksum: 512ce759214bb82abaf51a2bcdb1eb6db524a819890822689f3be31d189b169827894195f6a5ad53e5afaacb1f08772123f37bce0b7b1dcc72545344e2c4fa31
languageName: node
linkType: hard
@@ -12401,8 +12534,8 @@ __metadata:
linkType: hard
"@mui/styles@npm:^5.14.18":
- version: 5.16.9
- resolution: "@mui/styles@npm:5.16.9"
+ version: 5.16.10
+ resolution: "@mui/styles@npm:5.16.10"
dependencies:
"@babel/runtime": ^7.23.9
"@emotion/hash": ^0.9.1
@@ -12427,7 +12560,7 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
- checksum: 8167e70518b7328a4f9d0ae51f46fc9ea5b023cf934e3007b307a0e871ac818771a7634d4a57b4486d456b067fd9aba967eb119f1e803d7c2cf241a3c167cdc9
+ checksum: 7e85e030993f9e2d93f2f32c4c6f65febd882c8f8d324a1d9476845c8bf8e26fce588fb1336caeb7eea19453454eead92ee8493caa36fed5ce51089899c8ca1b
languageName: node
linkType: hard
@@ -12652,6 +12785,19 @@ __metadata:
languageName: node
linkType: hard
+"@npmcli/agent@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "@npmcli/agent@npm:3.0.0"
+ dependencies:
+ agent-base: ^7.1.0
+ http-proxy-agent: ^7.0.0
+ https-proxy-agent: ^7.0.1
+ lru-cache: ^10.0.1
+ socks-proxy-agent: ^8.0.3
+ checksum: e8fc25d536250ed3e669813b36e8c6d805628b472353c57afd8c4fde0fcfcf3dda4ffe22f7af8c9070812ec2e7a03fb41d7151547cef3508efe661a5a3add20f
+ languageName: node
+ linkType: hard
+
"@npmcli/arborist@npm:^4.0.4":
version: 4.3.1
resolution: "@npmcli/arborist@npm:4.3.1"
@@ -12723,6 +12869,15 @@ __metadata:
languageName: node
linkType: hard
+"@npmcli/fs@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@npmcli/fs@npm:4.0.0"
+ dependencies:
+ semver: ^7.3.5
+ checksum: 68951c589e9a4328698a35fd82fe71909a257d6f2ede0434d236fa55634f0fbcad9bb8755553ce5849bd25ee6f019f4d435921ac715c853582c4a7f5983c8d4a
+ languageName: node
+ linkType: hard
+
"@npmcli/git@npm:^2.1.0":
version: 2.1.0
resolution: "@npmcli/git@npm:2.1.0"
@@ -13640,16 +13795,7 @@ __metadata:
languageName: node
linkType: hard
-"@opentelemetry/api-logs@npm:0.54.1":
- version: 0.54.1
- resolution: "@opentelemetry/api-logs@npm:0.54.1"
- dependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: da3d2bd36f138ec1a56ea34b1601c6bf30be22f443b3a24f5df2cf293ed3f2601fb01ff00cb34a4ef08bd955b78f8259243dc757195f9ace7af4196896d32291
- languageName: node
- linkType: hard
-
-"@opentelemetry/api-logs@npm:0.54.2, @opentelemetry/api-logs@npm:^0.54.0":
+"@opentelemetry/api-logs@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/api-logs@npm:0.54.2"
dependencies:
@@ -13658,6 +13804,15 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/api-logs@npm:0.56.0, @opentelemetry/api-logs@npm:^0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/api-logs@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: a6bbad94e638316ef3a6e4835124e6a53c3675f0e9a29bb1a37e7905d38ecb72cba20b4289d0e740d6a7a4b16136ee1b393e55d8c14ade9808b44cfb2533eeea
+ languageName: node
+ linkType: hard
+
"@opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.4.0, @opentelemetry/api@npm:^1.9.0":
version: 1.9.0
resolution: "@opentelemetry/api@npm:1.9.0"
@@ -13665,60 +13820,60 @@ __metadata:
languageName: node
linkType: hard
-"@opentelemetry/auto-instrumentations-node@npm:^0.52.0":
- version: 0.52.1
- resolution: "@opentelemetry/auto-instrumentations-node@npm:0.52.1"
+"@opentelemetry/auto-instrumentations-node@npm:^0.54.0":
+ version: 0.54.0
+ resolution: "@opentelemetry/auto-instrumentations-node@npm:0.54.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
- "@opentelemetry/instrumentation-amqplib": ^0.43.0
- "@opentelemetry/instrumentation-aws-lambda": ^0.47.0
- "@opentelemetry/instrumentation-aws-sdk": ^0.46.0
- "@opentelemetry/instrumentation-bunyan": ^0.42.0
- "@opentelemetry/instrumentation-cassandra-driver": ^0.42.0
- "@opentelemetry/instrumentation-connect": ^0.40.0
- "@opentelemetry/instrumentation-cucumber": ^0.10.0
- "@opentelemetry/instrumentation-dataloader": ^0.13.0
- "@opentelemetry/instrumentation-dns": ^0.40.0
- "@opentelemetry/instrumentation-express": ^0.44.0
- "@opentelemetry/instrumentation-fastify": ^0.41.0
- "@opentelemetry/instrumentation-fs": ^0.16.0
- "@opentelemetry/instrumentation-generic-pool": ^0.40.0
- "@opentelemetry/instrumentation-graphql": ^0.44.0
- "@opentelemetry/instrumentation-grpc": ^0.54.0
- "@opentelemetry/instrumentation-hapi": ^0.42.0
- "@opentelemetry/instrumentation-http": ^0.54.0
- "@opentelemetry/instrumentation-ioredis": ^0.44.0
- "@opentelemetry/instrumentation-kafkajs": ^0.4.0
- "@opentelemetry/instrumentation-knex": ^0.41.0
- "@opentelemetry/instrumentation-koa": ^0.44.0
- "@opentelemetry/instrumentation-lru-memoizer": ^0.41.0
- "@opentelemetry/instrumentation-memcached": ^0.40.0
- "@opentelemetry/instrumentation-mongodb": ^0.48.0
- "@opentelemetry/instrumentation-mongoose": ^0.43.0
- "@opentelemetry/instrumentation-mysql": ^0.42.0
- "@opentelemetry/instrumentation-mysql2": ^0.42.1
- "@opentelemetry/instrumentation-nestjs-core": ^0.41.0
- "@opentelemetry/instrumentation-net": ^0.40.0
- "@opentelemetry/instrumentation-pg": ^0.47.1
- "@opentelemetry/instrumentation-pino": ^0.43.0
- "@opentelemetry/instrumentation-redis": ^0.43.0
- "@opentelemetry/instrumentation-redis-4": ^0.43.0
- "@opentelemetry/instrumentation-restify": ^0.42.0
- "@opentelemetry/instrumentation-router": ^0.41.0
- "@opentelemetry/instrumentation-socket.io": ^0.43.0
- "@opentelemetry/instrumentation-tedious": ^0.15.0
- "@opentelemetry/instrumentation-undici": ^0.7.1
- "@opentelemetry/instrumentation-winston": ^0.41.0
- "@opentelemetry/resource-detector-alibaba-cloud": ^0.29.4
- "@opentelemetry/resource-detector-aws": ^1.7.0
- "@opentelemetry/resource-detector-azure": ^0.2.12
- "@opentelemetry/resource-detector-container": ^0.5.0
- "@opentelemetry/resource-detector-gcp": ^0.29.13
+ "@opentelemetry/instrumentation": ^0.56.0
+ "@opentelemetry/instrumentation-amqplib": ^0.45.0
+ "@opentelemetry/instrumentation-aws-lambda": ^0.49.0
+ "@opentelemetry/instrumentation-aws-sdk": ^0.48.0
+ "@opentelemetry/instrumentation-bunyan": ^0.44.0
+ "@opentelemetry/instrumentation-cassandra-driver": ^0.44.0
+ "@opentelemetry/instrumentation-connect": ^0.42.0
+ "@opentelemetry/instrumentation-cucumber": ^0.12.0
+ "@opentelemetry/instrumentation-dataloader": ^0.15.0
+ "@opentelemetry/instrumentation-dns": ^0.42.0
+ "@opentelemetry/instrumentation-express": ^0.46.0
+ "@opentelemetry/instrumentation-fastify": ^0.43.0
+ "@opentelemetry/instrumentation-fs": ^0.18.0
+ "@opentelemetry/instrumentation-generic-pool": ^0.42.0
+ "@opentelemetry/instrumentation-graphql": ^0.46.0
+ "@opentelemetry/instrumentation-grpc": ^0.56.0
+ "@opentelemetry/instrumentation-hapi": ^0.44.0
+ "@opentelemetry/instrumentation-http": ^0.56.0
+ "@opentelemetry/instrumentation-ioredis": ^0.46.0
+ "@opentelemetry/instrumentation-kafkajs": ^0.6.0
+ "@opentelemetry/instrumentation-knex": ^0.43.0
+ "@opentelemetry/instrumentation-koa": ^0.46.0
+ "@opentelemetry/instrumentation-lru-memoizer": ^0.43.0
+ "@opentelemetry/instrumentation-memcached": ^0.42.0
+ "@opentelemetry/instrumentation-mongodb": ^0.50.0
+ "@opentelemetry/instrumentation-mongoose": ^0.45.0
+ "@opentelemetry/instrumentation-mysql": ^0.44.0
+ "@opentelemetry/instrumentation-mysql2": ^0.44.0
+ "@opentelemetry/instrumentation-nestjs-core": ^0.43.0
+ "@opentelemetry/instrumentation-net": ^0.42.0
+ "@opentelemetry/instrumentation-pg": ^0.49.0
+ "@opentelemetry/instrumentation-pino": ^0.45.0
+ "@opentelemetry/instrumentation-redis": ^0.45.0
+ "@opentelemetry/instrumentation-redis-4": ^0.45.0
+ "@opentelemetry/instrumentation-restify": ^0.44.0
+ "@opentelemetry/instrumentation-router": ^0.43.0
+ "@opentelemetry/instrumentation-socket.io": ^0.45.0
+ "@opentelemetry/instrumentation-tedious": ^0.17.0
+ "@opentelemetry/instrumentation-undici": ^0.9.0
+ "@opentelemetry/instrumentation-winston": ^0.43.0
+ "@opentelemetry/resource-detector-alibaba-cloud": ^0.29.6
+ "@opentelemetry/resource-detector-aws": ^1.9.0
+ "@opentelemetry/resource-detector-azure": ^0.4.0
+ "@opentelemetry/resource-detector-container": ^0.5.2
+ "@opentelemetry/resource-detector-gcp": ^0.31.0
"@opentelemetry/resources": ^1.24.0
- "@opentelemetry/sdk-node": ^0.54.0
+ "@opentelemetry/sdk-node": ^0.56.0
peerDependencies:
"@opentelemetry/api": ^1.4.1
- checksum: bcff9f9f9c2d118c4cb18b5bb671257a5ec2c445dd8663f4184919488203b672c18085bf7121541c01a29dcbf2f96cbac7248d986d779f694f59abd06c7158ab
+ checksum: a8f5fe11d4b5090de584b9780dd8358834db8e4ea9dfa12b21c3fe021471b198354f3416a1cf7c6621cae95199d1d1553b7ae7d5f69044d44f767942a90492dc
languageName: node
linkType: hard
@@ -13731,7 +13886,16 @@ __metadata:
languageName: node
linkType: hard
-"@opentelemetry/core@npm:1.27.0, @opentelemetry/core@npm:^1.0.0, @opentelemetry/core@npm:^1.1.0, @opentelemetry/core@npm:^1.25.0, @opentelemetry/core@npm:^1.25.1, @opentelemetry/core@npm:^1.26.0, @opentelemetry/core@npm:^1.8.0":
+"@opentelemetry/context-async-hooks@npm:1.29.0":
+ version: 1.29.0
+ resolution: "@opentelemetry/context-async-hooks@npm:1.29.0"
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: edbd8d20cee2adaec276e4ec723dca023036c004eccc8bfbfff59e9a8a25a196b05540ed33813f30f9b6e51bc8e51b3de95c927157e874cfaa6510af00d9cf0e
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/core@npm:1.27.0":
version: 1.27.0
resolution: "@opentelemetry/core@npm:1.27.0"
dependencies:
@@ -13742,6 +13906,17 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/core@npm:1.29.0, @opentelemetry/core@npm:^1.0.0, @opentelemetry/core@npm:^1.1.0, @opentelemetry/core@npm:^1.25.0, @opentelemetry/core@npm:^1.25.1, @opentelemetry/core@npm:^1.26.0, @opentelemetry/core@npm:^1.8.0":
+ version: 1.29.0
+ resolution: "@opentelemetry/core@npm:1.29.0"
+ dependencies:
+ "@opentelemetry/semantic-conventions": 1.28.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: bf025473175ceee9a64c6d31f01f7d9924b54ebcb603b38dae56d2ef664acb5fe43f393ae9b0aff41deb3a80b7222b74b9fd2764712db30ee2547280aecff509
+ languageName: node
+ linkType: hard
+
"@opentelemetry/exporter-logs-otlp-grpc@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/exporter-logs-otlp-grpc@npm:0.54.2"
@@ -13757,6 +13932,21 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/exporter-logs-otlp-grpc@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/exporter-logs-otlp-grpc@npm:0.56.0"
+ dependencies:
+ "@grpc/grpc-js": ^1.7.1
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/otlp-grpc-exporter-base": 0.56.0
+ "@opentelemetry/otlp-transformer": 0.56.0
+ "@opentelemetry/sdk-logs": 0.56.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 107336fd62fc917bc75b745b219bff7ea5410e4688f2621c1f8bf05af57275113e64ecc3af23ff843afb1cc44fb4112f96c79b135b5246a6bad2a01c93c7938d
+ languageName: node
+ linkType: hard
+
"@opentelemetry/exporter-logs-otlp-http@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/exporter-logs-otlp-http@npm:0.54.2"
@@ -13772,6 +13962,21 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/exporter-logs-otlp-http@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/exporter-logs-otlp-http@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/api-logs": 0.56.0
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/otlp-exporter-base": 0.56.0
+ "@opentelemetry/otlp-transformer": 0.56.0
+ "@opentelemetry/sdk-logs": 0.56.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 538c05f27821c447fe0463e159ee526baae6978393fe630943d415c115e6db8132c028ed82eaa0f4001e7418697870919b641696b89e355f2567b16323eff732
+ languageName: node
+ linkType: hard
+
"@opentelemetry/exporter-logs-otlp-proto@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/exporter-logs-otlp-proto@npm:0.54.2"
@@ -13789,6 +13994,23 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/exporter-logs-otlp-proto@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/exporter-logs-otlp-proto@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/api-logs": 0.56.0
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/otlp-exporter-base": 0.56.0
+ "@opentelemetry/otlp-transformer": 0.56.0
+ "@opentelemetry/resources": 1.29.0
+ "@opentelemetry/sdk-logs": 0.56.0
+ "@opentelemetry/sdk-trace-base": 1.29.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 77737c7007ee6f062f854b267044bca6d2fd8a19128771834fe943a3e1597aba5931f83ceb6c9ff2375ddc8a6b94ed67a92132396ef3ddd9e7e4db2c1f2864f3
+ languageName: node
+ linkType: hard
+
"@opentelemetry/exporter-prometheus@npm:^0.54.0":
version: 0.54.2
resolution: "@opentelemetry/exporter-prometheus@npm:0.54.2"
@@ -13818,6 +14040,22 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/exporter-trace-otlp-grpc@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.56.0"
+ dependencies:
+ "@grpc/grpc-js": ^1.7.1
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/otlp-grpc-exporter-base": 0.56.0
+ "@opentelemetry/otlp-transformer": 0.56.0
+ "@opentelemetry/resources": 1.29.0
+ "@opentelemetry/sdk-trace-base": 1.29.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 90501836c2c300ef47fcbe3fa5af46f6868de658f0f64a72f2fd115639c6673bf8fd7a24a537ba7a402313727136deeeefe8f97ff93453370f0f1ee7d80ef1e5
+ languageName: node
+ linkType: hard
+
"@opentelemetry/exporter-trace-otlp-http@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.54.2"
@@ -13833,6 +14071,21 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/exporter-trace-otlp-http@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/otlp-exporter-base": 0.56.0
+ "@opentelemetry/otlp-transformer": 0.56.0
+ "@opentelemetry/resources": 1.29.0
+ "@opentelemetry/sdk-trace-base": 1.29.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 4d436ab37c0c5a35e602fa418d69d8830bf4d8e99487206b178e1351a2db7f2a83fd31407e1517ed6dba8c7589d336604d7f44f5f3d30394a13956188d15fee5
+ languageName: node
+ linkType: hard
+
"@opentelemetry/exporter-trace-otlp-proto@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.54.2"
@@ -13848,6 +14101,21 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/exporter-trace-otlp-proto@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/otlp-exporter-base": 0.56.0
+ "@opentelemetry/otlp-transformer": 0.56.0
+ "@opentelemetry/resources": 1.29.0
+ "@opentelemetry/sdk-trace-base": 1.29.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: e0e94aa50326fa78fd6fa1b8f2c05ad15b6a3a920fd61a13895a9cef935359221b87af233a053cbc3bbc7296ca96aa5dc242dda0aa93b70d291db7fe5580fc8a
+ languageName: node
+ linkType: hard
+
"@opentelemetry/exporter-zipkin@npm:1.27.0":
version: 1.27.0
resolution: "@opentelemetry/exporter-zipkin@npm:1.27.0"
@@ -13862,514 +14130,512 @@ __metadata:
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-amqplib@npm:^0.43.0":
- version: 0.43.0
- resolution: "@opentelemetry/instrumentation-amqplib@npm:0.43.0"
+"@opentelemetry/exporter-zipkin@npm:1.29.0":
+ version: 1.29.0
+ resolution: "@opentelemetry/exporter-zipkin@npm:1.29.0"
dependencies:
- "@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
- "@opentelemetry/semantic-conventions": ^1.27.0
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/resources": 1.29.0
+ "@opentelemetry/sdk-trace-base": 1.29.0
+ "@opentelemetry/semantic-conventions": 1.28.0
peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: 5eb17469d5c3ce2e8495d7e97684cd3b85d1e6aed4081ec1e4103f90bb5ef64633a6913844c5f0afecc2485f77c5b1adfe34c80ed5b7ea48873d9f92b9d04ef2
+ "@opentelemetry/api": ^1.0.0
+ checksum: 6455c96f28a1f6275459c513fab905c602cc60921cccd4b506050a242145bff5ce2a81268cc1c5531eb238de565cfa54c320231cdfa4bc1a6be6eb31517780a5
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-aws-lambda@npm:^0.47.0":
- version: 0.47.0
- resolution: "@opentelemetry/instrumentation-aws-lambda@npm:0.47.0"
+"@opentelemetry/instrumentation-amqplib@npm:^0.45.0":
+ version: 0.45.0
+ resolution: "@opentelemetry/instrumentation-amqplib@npm:0.45.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.56.0
+ "@opentelemetry/semantic-conventions": ^1.27.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 3b009e67974f25c37265cbff30ab39e66b46852778e038197c228178f3ac5e6dfab647a24621f5f8aa9f4f1633ad6257c9f7a3638d957d9d81503c1f43179023
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation-aws-lambda@npm:^0.49.0":
+ version: 0.49.0
+ resolution: "@opentelemetry/instrumentation-aws-lambda@npm:0.49.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
"@types/aws-lambda": 8.10.143
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 72925ac1c5d5de107342bf859e0aa5c43b4cda7191b2b0489a7a17ddb3fd7e831a53ee2d20c9d4331918ecf290563d6e4927fa445091b2828d27c2254de05ba3
+ checksum: 8f18748d606bd6d6a32fadcee5e127e939a48e8aac49de0edbe1dac61094c4dcabce6457f306c81c527c5c014abdbeb736b95be43c6312e77dffff5c90a68592
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-aws-sdk@npm:^0.46.0":
- version: 0.46.0
- resolution: "@opentelemetry/instrumentation-aws-sdk@npm:0.46.0"
+"@opentelemetry/instrumentation-aws-sdk@npm:^0.48.0":
+ version: 0.48.0
+ resolution: "@opentelemetry/instrumentation-aws-sdk@npm:0.48.0"
dependencies:
"@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
- "@opentelemetry/propagation-utils": ^0.30.12
+ "@opentelemetry/instrumentation": ^0.56.0
+ "@opentelemetry/propagation-utils": ^0.30.14
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 8e797ab8e8e976c7a87f7ac44c8e132079bbd0e0822b2a1a9596ca62ddfccffb2feb18b0cb63c52a3eeca83fcf0c03fc6cd3210d1bbf07138e6aee2ac273d2c3
+ checksum: 0538f38b42a6cd7279ab6f9c85af19525b463a9873fd429163c30ddf817ed17916ab6a53ea05c034d8e6861d10bb031c7ebcbf607b49e3e3c4b89e589a381576
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-bunyan@npm:^0.42.0":
- version: 0.42.0
- resolution: "@opentelemetry/instrumentation-bunyan@npm:0.42.0"
+"@opentelemetry/instrumentation-bunyan@npm:^0.44.0":
+ version: 0.44.0
+ resolution: "@opentelemetry/instrumentation-bunyan@npm:0.44.0"
dependencies:
- "@opentelemetry/api-logs": ^0.54.0
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/api-logs": ^0.56.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@types/bunyan": 1.8.9
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 476850eff4e5c2864b0512c014db71a01372e5cce97e870b915450193f5eaee2cec294cdd32340cf5394cf40de3209ccfb47298630d8e3131572e6f0f568a964
+ checksum: 4d176289ffbc26e268c24995c385349d4a817abdc1104eea8bc97d5abd7d6e105cc3dd9f69ac568d1094ec33992597a2b8666b94dbfc1e3d9d3e8f103dafb007
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-cassandra-driver@npm:^0.42.0":
- version: 0.42.0
- resolution: "@opentelemetry/instrumentation-cassandra-driver@npm:0.42.0"
+"@opentelemetry/instrumentation-cassandra-driver@npm:^0.44.0":
+ version: 0.44.0
+ resolution: "@opentelemetry/instrumentation-cassandra-driver@npm:0.44.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: fa9139efc7cb10702cc71aba388d8efdd8a08bbab37864c28f61fb20c1cfa47dd79131a02571231ae14245b2d37bd53877fd359ffe61f86db99117532910f213
+ checksum: b4c809a3abd7ddefe14345da1a287958cc80de1470e72232363cf03467e1dbd4a99dc081361fea1472040e5e9ca9c377f997af3782c1ba32121bdb76a5966b60
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-connect@npm:^0.40.0":
- version: 0.40.0
- resolution: "@opentelemetry/instrumentation-connect@npm:0.40.0"
+"@opentelemetry/instrumentation-connect@npm:^0.42.0":
+ version: 0.42.0
+ resolution: "@opentelemetry/instrumentation-connect@npm:0.42.0"
dependencies:
"@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
"@types/connect": 3.4.36
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 3fe2f82105abc740c813765594f0cce37cbcced2610ac2d48d97311e2bc853695c4953cedb88ed620c163e39492f4549476b3fa1b2b65034abd0fd5b2a1bb1b2
+ checksum: 45c749871feedf8af72de48968027005ab560d73054e55da3426f3091a422b9646fd0170ea5b597d4abd4efc585e2e2a6f9e91253d7fb38dccd42f486cb3ea30
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-cucumber@npm:^0.10.0":
- version: 0.10.0
- resolution: "@opentelemetry/instrumentation-cucumber@npm:0.10.0"
+"@opentelemetry/instrumentation-cucumber@npm:^0.12.0":
+ version: 0.12.0
+ resolution: "@opentelemetry/instrumentation-cucumber@npm:0.12.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.0.0
- checksum: a6c516b7a301141741a1e74d1e674434bdc99fa381217889dbcf2a03a2d8269a92cdb8517f25bda80b73019d30970980a98f859eb23e5ba10fbb5c899cdc7bf1
+ checksum: 2976f1b5ac2b6d218db4b64c173c25ccc4f2230ecfdc934223f1e27ba0cab2aeee8a0ed344646b001610898bf60aa0cd94ada3e1a05a688b6a4980db2d94b11b
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-dataloader@npm:^0.13.0":
- version: 0.13.0
- resolution: "@opentelemetry/instrumentation-dataloader@npm:0.13.0"
+"@opentelemetry/instrumentation-dataloader@npm:^0.15.0":
+ version: 0.15.0
+ resolution: "@opentelemetry/instrumentation-dataloader@npm:0.15.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: f423888d71c9b15c02dce863cccb5fa677c625bd3b864ba545be368275e3f88b03284073a24f7f3cb4c0c1f3544c92580b53abdf15dd098fd33c60c6d8326c24
+ checksum: a1f217be8064be3cbd116c0fb58feef46b6e05fe9ac3c0333d5cc43ac9df182550bb8f5b084e9557f73e0af7fe917a81d79d69f640009ef64624b97e17f1bb85
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-dns@npm:^0.40.0":
- version: 0.40.0
- resolution: "@opentelemetry/instrumentation-dns@npm:0.40.0"
- dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
- peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: dbc1a4b31b3fe78c46cd19c76162dedec175d07d09d6a553d9b31560ceab4ee6781ca88e5246fd9b371260bfa48c8ab26640d3e5ac914d4d6e8284214a7f86de
- languageName: node
- linkType: hard
-
-"@opentelemetry/instrumentation-express@npm:^0.44.0":
- version: 0.44.0
- resolution: "@opentelemetry/instrumentation-express@npm:0.44.0"
- dependencies:
- "@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
- "@opentelemetry/semantic-conventions": ^1.27.0
- peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: 0ab8be80c817021b7a96fa94bf55c635fa664d2c03058e1485311f4f4bf964e5cf7756185c9003a4d59ac6fc766eff52a7b390a91ca3946ce3d371f3135ea4d5
- languageName: node
- linkType: hard
-
-"@opentelemetry/instrumentation-fastify@npm:^0.41.0":
- version: 0.41.0
- resolution: "@opentelemetry/instrumentation-fastify@npm:0.41.0"
- dependencies:
- "@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
- "@opentelemetry/semantic-conventions": ^1.27.0
- peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: dc790cd6ee7ea2322be2e35ce259e10a1f42827970b0b83a6ca7a5a934a986dea7239fe1a29cc772529c1504f24d3afe91c0923a87efc12e8ea1b1321df18514
- languageName: node
- linkType: hard
-
-"@opentelemetry/instrumentation-fs@npm:^0.16.0":
- version: 0.16.0
- resolution: "@opentelemetry/instrumentation-fs@npm:0.16.0"
- dependencies:
- "@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
- peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: d74b3ab430c909b7840322540ab51664c29e8ff43fd4eaa77edf11828e5b2234b519771f8d64d051d6a508c1c20c377e606f032fa758ef08eb23e0336e3746bc
- languageName: node
- linkType: hard
-
-"@opentelemetry/instrumentation-generic-pool@npm:^0.40.0":
- version: 0.40.0
- resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.40.0"
- dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
- peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: 665d687191983bd756db1e510b604e244100c42fa6667d7512d42d58a2d319d114d41c96ada15cfa3344763022774138acaee1bec43fdbbfae5aa5bc65a72e0a
- languageName: node
- linkType: hard
-
-"@opentelemetry/instrumentation-graphql@npm:^0.44.0":
- version: 0.44.0
- resolution: "@opentelemetry/instrumentation-graphql@npm:0.44.0"
- dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
- peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: c4f0f771e1d939de844a97b0e5c0416d5c0d12d2d94e369566b61ec3819193c7eb113c9b3101581c83bb44bdb2b289a33623488ab7446be370e3577ebe37a198
- languageName: node
- linkType: hard
-
-"@opentelemetry/instrumentation-grpc@npm:^0.54.0":
- version: 0.54.1
- resolution: "@opentelemetry/instrumentation-grpc@npm:0.54.1"
- dependencies:
- "@opentelemetry/instrumentation": 0.54.1
- "@opentelemetry/semantic-conventions": 1.27.0
- peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: fc85c6d1f93f4e0a9368c458b4569c0e60f86976f22c9e9a9d903f79079f93b5a280f3ab14b548149984241e5efd6d04f9b5018709e1377159c3cd41d3a08495
- languageName: node
- linkType: hard
-
-"@opentelemetry/instrumentation-hapi@npm:^0.42.0":
+"@opentelemetry/instrumentation-dns@npm:^0.42.0":
version: 0.42.0
- resolution: "@opentelemetry/instrumentation-hapi@npm:0.42.0"
+ resolution: "@opentelemetry/instrumentation-dns@npm:0.42.0"
dependencies:
- "@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
- "@opentelemetry/semantic-conventions": ^1.27.0
+ "@opentelemetry/instrumentation": ^0.56.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 4e755b3ad4426820d6172f01cd603f14ac75a4521292d912cd31eeaef3e5aa0b9caad5a617b2543a07824b5e385c9bbf256a45acc8a66127096cae03fc48a20d
+ checksum: 4717331b7429c5a427eb48d7ebd210584806bf672b71dde0bacf677488e39a201a593f3ac16ef7a7ce1ed75cc37e6ea5daff9dccfcd2ec79f09808b77ad55352
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-http@npm:^0.54.0":
- version: 0.54.1
- resolution: "@opentelemetry/instrumentation-http@npm:0.54.1"
+"@opentelemetry/instrumentation-express@npm:^0.46.0":
+ version: 0.46.0
+ resolution: "@opentelemetry/instrumentation-express@npm:0.46.0"
dependencies:
- "@opentelemetry/core": 1.27.0
- "@opentelemetry/instrumentation": 0.54.1
- "@opentelemetry/semantic-conventions": 1.27.0
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.56.0
+ "@opentelemetry/semantic-conventions": ^1.27.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 799938a06ded695d9e5f32f902d5f6d960e6756ec2d09f34b2373d74a441ea0b9dfeed6f0c1668cf97c9b33991a724fe5be8dec328f0c8cacc0ac8507df10687
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation-fastify@npm:^0.43.0":
+ version: 0.43.0
+ resolution: "@opentelemetry/instrumentation-fastify@npm:0.43.0"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.56.0
+ "@opentelemetry/semantic-conventions": ^1.27.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 008c6f2567ecabe69552f78f8fbcefdf2492d85b0e3e0ac36bd47e6f13a8d02680e7cee1748cd4a70ca9f27213abd30c28bf14d7791ead8a06bf1c85986ef7f9
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation-fs@npm:^0.18.0":
+ version: 0.18.0
+ resolution: "@opentelemetry/instrumentation-fs@npm:0.18.0"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.56.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 2fe2694f5dd4ef9bfe7b75e66655cbde93afe2bb4f55731841b8ec5ac5af18912d4428edfe6901806452442060262edef14e46719f1faf85e5f11bb0274a054b
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation-generic-pool@npm:^0.42.0":
+ version: 0.42.0
+ resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.42.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.56.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 5f35a30b76705f4527f0ab8ec83d83014615612f40a7bd16a87a75f922a7aeff113042ae99d30f7ab809853841d2769ddee2e03ce304de80251f1d8370ec2d89
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation-graphql@npm:^0.46.0":
+ version: 0.46.0
+ resolution: "@opentelemetry/instrumentation-graphql@npm:0.46.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.56.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: b8c9faa2c002846bf85a4ccf4e9aba343d8f38a08e85d8c4e77a016da2d0b84291d6b8505aec7de70088761d4a341192a26163aafc23a2fc04a918c94c1686b6
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation-grpc@npm:^0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/instrumentation-grpc@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/instrumentation": 0.56.0
+ "@opentelemetry/semantic-conventions": 1.28.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 8bb00759e74d05bc7ca3ba7c46fe6ab01ff16adcb5c658a3e1679c5ea6d10b0f381ffae970a694b014881cbaa707ec24076967fa47643187365b765f34f4094e
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation-hapi@npm:^0.44.0":
+ version: 0.44.0
+ resolution: "@opentelemetry/instrumentation-hapi@npm:0.44.0"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.56.0
+ "@opentelemetry/semantic-conventions": ^1.27.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 0ee7610e9a1149d087dc8883f6d20ed7d0a15c7b1da273fc170220daec5e68a1240e0624743b000c8d263bb8b21615ecf84b8a179508763523108de88fedadb4
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation-http@npm:^0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/instrumentation-http@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/instrumentation": 0.56.0
+ "@opentelemetry/semantic-conventions": 1.28.0
forwarded-parse: 2.1.2
semver: ^7.5.2
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 49a1bda0417ef5866398b89114a7f61d9eb040faa338603746af074dab315eca791443b35b9a1fa00d3b176f807b4a88f9003323570d50ee174f8c86cd3614d6
+ checksum: f8033d8410d8b06bb222090959479fe4f24c8d52281ce3e240458a449eab8009cb889d09240f67135699b7a543a4708c2f401060cbf1bfa0663ee8687c451a15
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-ioredis@npm:^0.44.0":
- version: 0.44.0
- resolution: "@opentelemetry/instrumentation-ioredis@npm:0.44.0"
+"@opentelemetry/instrumentation-ioredis@npm:^0.46.0":
+ version: 0.46.0
+ resolution: "@opentelemetry/instrumentation-ioredis@npm:0.46.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/redis-common": ^0.36.2
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 774e7cfdf6cd96e6f88a671fdd2d43fdf4591b5e821820971d91cc2b3a83b01c8cf56297fbd5d4578c2b2b8e404c4426222de09198da9915eb6cc9e4b3489636
+ checksum: 02a816026d950726562104be37a434b13174fea5120639462a43d70dc011a4c334f402ff5d763a986aa3795d0c9ee9fc200d41ae77b57ea55a4eca14068216f4
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-kafkajs@npm:^0.4.0":
- version: 0.4.0
- resolution: "@opentelemetry/instrumentation-kafkajs@npm:0.4.0"
+"@opentelemetry/instrumentation-kafkajs@npm:^0.6.0":
+ version: 0.6.0
+ resolution: "@opentelemetry/instrumentation-kafkajs@npm:0.6.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 23d8d8aa2945f372aaab8ab9a583821339c523d8203090e29652eb90c9600fc273e131d5a0b9464fe09cacde6b35f44e3046effa1b20f936a064872ba18352ec
+ checksum: 169877945296fa042b5468e25759a67dc81d169a7a4f22ee142e8e9bf0a9d82219397500596060554324f1a9a89c9843ac68633830cec11c99e838fd37d997f5
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-knex@npm:^0.41.0":
- version: 0.41.0
- resolution: "@opentelemetry/instrumentation-knex@npm:0.41.0"
+"@opentelemetry/instrumentation-knex@npm:^0.43.0":
+ version: 0.43.0
+ resolution: "@opentelemetry/instrumentation-knex@npm:0.43.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: c3b463e2b909a1d82a789f7cb5477efd60857f18ffb088903bf4bc06cd237f249e16b29338bebd7c16f72dd49ed61251f57cf81af2cc7708ebf37e628f27eafd
+ checksum: e31af57cb7f3f24ec5ac0748eba0e785e3bb2bb7ad5cdaec2af1f37a077a73ea4b545521450fb5ddfceff3dd8388abbe660959a43222bb2252a155354c346c0b
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-koa@npm:^0.44.0":
- version: 0.44.0
- resolution: "@opentelemetry/instrumentation-koa@npm:0.44.0"
+"@opentelemetry/instrumentation-koa@npm:^0.46.0":
+ version: 0.46.0
+ resolution: "@opentelemetry/instrumentation-koa@npm:0.46.0"
dependencies:
"@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 09d8a87e874d9d5050a5f866fbd9ac90bc432c3934f99f68acc11a3936dc594097c31ba9622afeb4b5fc379a255f6e331b978935b360f918e784b27e1de70234
+ checksum: b22a6cc9036b0766b5ea2fd8078944877d22cac916d310123af12f317a78b898039dd3ca788cccfce018ec2f6e6220850573ea006cdce1205dc858526fb6a6f9
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-lru-memoizer@npm:^0.41.0":
- version: 0.41.0
- resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.41.0"
+"@opentelemetry/instrumentation-lru-memoizer@npm:^0.43.0":
+ version: 0.43.0
+ resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.43.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 409c13e0e095fbbfdef0d001b4b881fc1cf470eab97e9c391e51b0f0e185ecfebf2b03487b30aed3aab77ad600944525375fdd276e5b763be7bb1b1903e8a553
+ checksum: a7c52fe37c25acab54d64d9d8944477925bce311d08794eb5fbe5e75e7d66ee00585f37c331a489f62947b511b3089b8848ff2de2954a49cc7a1c3cb58dd7ede
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-memcached@npm:^0.40.0":
- version: 0.40.0
- resolution: "@opentelemetry/instrumentation-memcached@npm:0.40.0"
+"@opentelemetry/instrumentation-memcached@npm:^0.42.0":
+ version: 0.42.0
+ resolution: "@opentelemetry/instrumentation-memcached@npm:0.42.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
"@types/memcached": ^2.2.6
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: e33438c31ea6482382013603c0a81b2247757fe46fc433dbf7ca9c9577ef61175a7ff7d9a2d1560c0a4b6382616fa3a6bce3c21f82a7072cc5d27b4bb2a14efc
+ checksum: 80bd1c3d5d14fb738b061dd61ff41950e146797ad18775da862d8e35401335e7506b33d3f9682235e5dcfed2371e4b2fe7cddad3b22aa1db588f47b6356325f9
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-mongodb@npm:^0.48.0":
- version: 0.48.0
- resolution: "@opentelemetry/instrumentation-mongodb@npm:0.48.0"
+"@opentelemetry/instrumentation-mongodb@npm:^0.50.0":
+ version: 0.50.0
+ resolution: "@opentelemetry/instrumentation-mongodb@npm:0.50.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 910925d26cf7af63001c483c790deb75365bdeb314ecbf8d84b908eea4d3ecb1025a53b0f86a903c367a538a47756e423d6f697418782dc84d06dff49b483494
+ checksum: 4d7c1823a3de297f8c68e1669792fa007028346eeb005103dc66d70a7f0cdb5bce323b97e4e247b7aa50e2a830b1c645ab718da432b319c31f3d714f85f1e629
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-mongoose@npm:^0.43.0":
- version: 0.43.0
- resolution: "@opentelemetry/instrumentation-mongoose@npm:0.43.0"
+"@opentelemetry/instrumentation-mongoose@npm:^0.45.0":
+ version: 0.45.0
+ resolution: "@opentelemetry/instrumentation-mongoose@npm:0.45.0"
dependencies:
"@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 2eced33f6262e7eb47113cdbe2d518e719bcfb5f570a195d70f0cdf916baf87165bb527487c9bef8c2d67ae6f963bfb50c98f706b3724d0ebae6c27ec576e965
+ checksum: 3288fdaa0bc141609f54fad75275d8e1bfaf55dafdce63dd54db76cf0eb955fdcf1788d475c577156138880120fcc179f55f55b7849636b228d8f482b2aa024c
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-mysql2@npm:^0.42.1":
- version: 0.42.1
- resolution: "@opentelemetry/instrumentation-mysql2@npm:0.42.1"
+"@opentelemetry/instrumentation-mysql2@npm:^0.44.0":
+ version: 0.44.0
+ resolution: "@opentelemetry/instrumentation-mysql2@npm:0.44.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
"@opentelemetry/sql-common": ^0.40.1
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 421f5c44102f74e3439c72bb58a341a69956e8f8f9ea04eb1d5f951003119d4124a23a75509ea2264380bc8c9321579fc24a8424a313c961b5b16365305c0644
+ checksum: 72d5b5658d39d5f92ff5b8c1771d8d6ed28979b4d7fb16121dd5a6d76fd231cae364d162bf04a83de3682e149f829766a61c2715eb9959b34ee8ac303cb724c2
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-mysql@npm:^0.42.0":
- version: 0.42.0
- resolution: "@opentelemetry/instrumentation-mysql@npm:0.42.0"
+"@opentelemetry/instrumentation-mysql@npm:^0.44.0":
+ version: 0.44.0
+ resolution: "@opentelemetry/instrumentation-mysql@npm:0.44.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
"@types/mysql": 2.15.26
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 27ed48852ede4380499c6fde38103c9e9775b59e3f7f08ff48757eea93308c9305fb5d441bb17ddcd8003bbc35179a4da9a5fd8e6dfcfc855a0dbb83c5e38929
+ checksum: a1c55777fef8b8aa349f16a0c5f511bc06f553e6ac1d316a0cd768f49d92d1f75cdabce73d5a2e5590588773bae93521953eb27bf04444105a3727dfd8e10788
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-nestjs-core@npm:^0.41.0":
- version: 0.41.0
- resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.41.0"
+"@opentelemetry/instrumentation-nestjs-core@npm:^0.43.0":
+ version: 0.43.0
+ resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.43.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 2fb0365dbc6c6aa83953039698e2df339517bcf797d376e6a0bde2b857dccb1dd5799559cf7f2532f8d794227069663f7fbe0cab2f2e0cddaccc5ad99e74148c
+ checksum: f967f3f96ce6bf402f5acd9cedefca6f0548bbc786fc849e07a6229c3a7b16ce7b05cd864657ec1af2a8285ea9ea58c4199e8ec2610d115b85db7e4c50a5c1e6
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-net@npm:^0.40.0":
- version: 0.40.0
- resolution: "@opentelemetry/instrumentation-net@npm:0.40.0"
+"@opentelemetry/instrumentation-net@npm:^0.42.0":
+ version: 0.42.0
+ resolution: "@opentelemetry/instrumentation-net@npm:0.42.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 88821c24332532f1100fe2b2dd80a5ac5246595a4e5b8d51a8d2909918f8c4cab52a7bba2f9db616ffac268ff44e30a111bc20ac7cc94dd8f55b918b81723383
+ checksum: ebad2b908081f1c69a07b14ee273958216845e197d7059bee51eb1a12701c2c1406d6a0ad989c27300b7563166808bb1557a54419850f7c40fecf602ee1132ac
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-pg@npm:^0.47.1":
- version: 0.47.1
- resolution: "@opentelemetry/instrumentation-pg@npm:0.47.1"
+"@opentelemetry/instrumentation-pg@npm:^0.49.0":
+ version: 0.49.0
+ resolution: "@opentelemetry/instrumentation-pg@npm:0.49.0"
dependencies:
"@opentelemetry/core": ^1.26.0
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": 1.27.0
"@opentelemetry/sql-common": ^0.40.1
"@types/pg": 8.6.1
"@types/pg-pool": 2.0.6
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: eec188f1c41456e044842d7aa89f9bb4ba7755906292666949ccb4add37ecad3b28abb17f4f736f72be78ec99b68ad797ba4a57dbfb4c1e07eb18ce5283b8e1d
+ checksum: a91ab43d5cc3e1ead331125207b1447edcfb9cfc13a7b3eced2b9965236b3b76bdbe43dc91a634c0253afdfc7996f6286b7e1748c63d82848b64a4d060df19d8
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-pino@npm:^0.43.0":
- version: 0.43.0
- resolution: "@opentelemetry/instrumentation-pino@npm:0.43.0"
+"@opentelemetry/instrumentation-pino@npm:^0.45.0":
+ version: 0.45.0
+ resolution: "@opentelemetry/instrumentation-pino@npm:0.45.0"
dependencies:
- "@opentelemetry/api-logs": ^0.54.0
+ "@opentelemetry/api-logs": ^0.56.0
"@opentelemetry/core": ^1.25.0
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 76efd25275edb0159057ac90fc3152dd9e76640a4e4986bbd6065c0d3dd2ece043817260e4230e203dffcf9f962f11f379bb4e35aed95c537679d6c0b026f4d3
+ checksum: 4c3393b9bfd60b04baf9640763aa5f2873926384ec243d075fcd5f4000025453aa310cc523f946bc12a464c7aa084f6b8f88dd4bd257450486bd8603b0d2c6d6
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-redis-4@npm:^0.43.0":
- version: 0.43.0
- resolution: "@opentelemetry/instrumentation-redis-4@npm:0.43.0"
+"@opentelemetry/instrumentation-redis-4@npm:^0.45.0":
+ version: 0.45.0
+ resolution: "@opentelemetry/instrumentation-redis-4@npm:0.45.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/redis-common": ^0.36.2
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: eb0dbedcccaca2a98cdefe741f14613a2de89c53dfd4393bbbfd97b341a2754c7c88d868429754bb9bf3dbcf17c2610d0070898bfe14b4dd9e5830d0f0c2e5f7
+ checksum: d6a3f657d4c81c80b83b3c7f95d4d59fcb65dfd56ccc4da12bbe32d67837b6a91aa87d49373302a82dccc9c62a6090fefbcb1bc650e2858a70f3667df7a8ded7
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-redis@npm:^0.43.0":
- version: 0.43.0
- resolution: "@opentelemetry/instrumentation-redis@npm:0.43.0"
+"@opentelemetry/instrumentation-redis@npm:^0.45.0":
+ version: 0.45.0
+ resolution: "@opentelemetry/instrumentation-redis@npm:0.45.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/redis-common": ^0.36.2
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: ce0032edec122cd4feb0cfa5c365098c66858dc462dbb3cf95f36a24321460a1eddbe93552249bc9f43ce1b0692f88e971a2a432c26843d40776340debae48db
+ checksum: 7e0c9de80bc785c5e8bf83cb21a5647d24b512cd50d82f6b6e7b64267e49cfa02557dddb40eba13ca722dcb634a49ce82e1c9898d17f5fffe7bc3dd768cbb507
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-restify@npm:^0.42.0":
- version: 0.42.0
- resolution: "@opentelemetry/instrumentation-restify@npm:0.42.0"
+"@opentelemetry/instrumentation-restify@npm:^0.44.0":
+ version: 0.44.0
+ resolution: "@opentelemetry/instrumentation-restify@npm:0.44.0"
dependencies:
"@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 19ae0540538b1150b802c03ea4e4cf65c66230518b4396d75e4abf570350ca69b591eb45bc30a3282df4a157057ac5eb85614715d49c7b225f3ae90b6c43e740
+ checksum: 98ef2da10c5faa03db17032399565343dd2fbfbb70788cb7112653ed8ebe2a7920ec50416c9a7b406f239b9363e5ec49e8e56519f224ece6e63f4aaa193fc5ed
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-router@npm:^0.41.0":
- version: 0.41.0
- resolution: "@opentelemetry/instrumentation-router@npm:0.41.0"
- dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
- "@opentelemetry/semantic-conventions": ^1.27.0
- peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: 2291f8f7ab314e0e12d5dcc1ec6efcade2ce662a5e9214390a89689513b6742a4be71227c7076ff49061049a622ba924cb0905198bdd3343a7bb1c02ed3c1a46
- languageName: node
- linkType: hard
-
-"@opentelemetry/instrumentation-socket.io@npm:^0.43.0":
+"@opentelemetry/instrumentation-router@npm:^0.43.0":
version: 0.43.0
- resolution: "@opentelemetry/instrumentation-socket.io@npm:0.43.0"
+ resolution: "@opentelemetry/instrumentation-router@npm:0.43.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 1805d39201cb2f00e9765017c4e037faf1fa54d6f6cef2dcbbb5f07e90dc94d694736bbddb8c41b3bc8db0411b7e43b2d1d008342aaaa27302620617622b0ff5
+ checksum: c1045bd51631a5d1c4654a0b7c3c4a2ab2c2bca331e840bf16ab31ecf2a34effd3366db44e679c534b51232120f1ae0ea7bf4d04cbdfd3e6ea736a9133d4f348
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-tedious@npm:^0.15.0":
- version: 0.15.0
- resolution: "@opentelemetry/instrumentation-tedious@npm:0.15.0"
+"@opentelemetry/instrumentation-socket.io@npm:^0.45.0":
+ version: 0.45.0
+ resolution: "@opentelemetry/instrumentation-socket.io@npm:0.45.0"
dependencies:
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
+ "@opentelemetry/semantic-conventions": ^1.27.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 0849eb3118ba223aaff324eda86d5b519e85ba24d66c1027dbd2e669fe94ee05d7f292f10e9ef8aa85b96e7e4bcb6934d796a3380c3e2835240d772df69806ce
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation-tedious@npm:^0.17.0":
+ version: 0.17.0
+ resolution: "@opentelemetry/instrumentation-tedious@npm:0.17.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.56.0
"@opentelemetry/semantic-conventions": ^1.27.0
"@types/tedious": ^4.0.14
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 75ece9a359c81cdf31eb3e16be570418775817ff2b7b315e49fcc5d2365f635e0fb2af734de029f4d2faa720c3d977325d5e636d69008fb64b53afb6544bb67f
+ checksum: d4179b6d2010455cb00abf4a64d2276b10db8d572bf15454d62d458a9ca4b54a9df29d16fb455b3936868f5f64b2f69c8112d467efcf02e447172c0d2caa6f22
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-undici@npm:^0.7.1":
- version: 0.7.1
- resolution: "@opentelemetry/instrumentation-undici@npm:0.7.1"
+"@opentelemetry/instrumentation-undici@npm:^0.9.0":
+ version: 0.9.0
+ resolution: "@opentelemetry/instrumentation-undici@npm:0.9.0"
dependencies:
"@opentelemetry/core": ^1.8.0
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/instrumentation": ^0.56.0
peerDependencies:
"@opentelemetry/api": ^1.7.0
- checksum: a086224407d814c3a7476a09be8ec5b46ea743d21583821381a8efc4e12a05091c5bab4a6738b8019a01df71026afdd4243830615ec21ba261d3b1df07444cf8
+ checksum: f64615394a511e1aeb88a2095940832b9f6bfa1244c8736234b9a4108da81d227cf8a7218216df30333918cc07b336fe8559fb127de6afc2cbfaa5ed7a49ee86
languageName: node
linkType: hard
-"@opentelemetry/instrumentation-winston@npm:^0.41.0":
- version: 0.41.0
- resolution: "@opentelemetry/instrumentation-winston@npm:0.41.0"
+"@opentelemetry/instrumentation-winston@npm:^0.43.0":
+ version: 0.43.0
+ resolution: "@opentelemetry/instrumentation-winston@npm:0.43.0"
dependencies:
- "@opentelemetry/api-logs": ^0.54.0
- "@opentelemetry/instrumentation": ^0.54.0
+ "@opentelemetry/api-logs": ^0.56.0
+ "@opentelemetry/instrumentation": ^0.56.0
peerDependencies:
"@opentelemetry/api": ^1.3.0
- checksum: 10d2769925ae9a9982c8da9bb81c6e121f9c1c3437ac99216eb8c68fddea8a3527b5f9acfb09275646e3bc05183bf5bd2b719576756fa40ea3b98a6950a7533f
+ checksum: f8eafb7d943956f8daf0b432fce421fd85ac910f499f9bb6ec6fe048caafa33705d793c6fe8c6c969ba22951f888553f8862bef13f1cae78ef43d8f402173785
languageName: node
linkType: hard
-"@opentelemetry/instrumentation@npm:0.54.1":
- version: 0.54.1
- resolution: "@opentelemetry/instrumentation@npm:0.54.1"
- dependencies:
- "@opentelemetry/api-logs": 0.54.1
- "@types/shimmer": ^1.2.0
- import-in-the-middle: ^1.8.1
- require-in-the-middle: ^7.1.1
- semver: ^7.5.2
- shimmer: ^1.2.1
- peerDependencies:
- "@opentelemetry/api": ^1.3.0
- checksum: 3109540b953aa8d06c8e57882c9af240be475a28d7a3245de8d93667997e70c2a528b72f75af8faaa82436690068aa8a6caaa65ca0aa329429d0b3c9ae6e703e
- languageName: node
- linkType: hard
-
-"@opentelemetry/instrumentation@npm:0.54.2, @opentelemetry/instrumentation@npm:^0.54.0":
+"@opentelemetry/instrumentation@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/instrumentation@npm:0.54.2"
dependencies:
@@ -14385,6 +14651,22 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation@npm:0.56.0, @opentelemetry/instrumentation@npm:^0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/instrumentation@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/api-logs": 0.56.0
+ "@types/shimmer": ^1.2.0
+ import-in-the-middle: ^1.8.1
+ require-in-the-middle: ^7.1.1
+ semver: ^7.5.2
+ shimmer: ^1.2.1
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 2c0cf2c91a5ac36a9e95978bfcc92ed9e770d93346fb87cc6e62ca7e028b219695e921142eef3ff5541bdfb9045996817bd7cefdb668e0419a27abde4854d2e0
+ languageName: node
+ linkType: hard
+
"@opentelemetry/otlp-exporter-base@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/otlp-exporter-base@npm:0.54.2"
@@ -14397,6 +14679,18 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/otlp-exporter-base@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/otlp-exporter-base@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/otlp-transformer": 0.56.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 19537be39eed2969003f244de9f0616af5fae4dbfceaf24918b9f051ab906817f1c32a657d9b548c4c24742eb45c48a21b75cd2bee0b33068cedb0b592a002ae
+ languageName: node
+ linkType: hard
+
"@opentelemetry/otlp-grpc-exporter-base@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.54.2"
@@ -14411,6 +14705,20 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/otlp-grpc-exporter-base@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.56.0"
+ dependencies:
+ "@grpc/grpc-js": ^1.7.1
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/otlp-exporter-base": 0.56.0
+ "@opentelemetry/otlp-transformer": 0.56.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: d2188bd77c192df2a72cdf2bc3e219da26b599e03eb4ca32ab76eac83419ddb0729efe472e756a0c00500a071e10940d0f06e63ff879ced5204cce4213ba2598
+ languageName: node
+ linkType: hard
+
"@opentelemetry/otlp-transformer@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/otlp-transformer@npm:0.54.2"
@@ -14428,12 +14736,29 @@ __metadata:
languageName: node
linkType: hard
-"@opentelemetry/propagation-utils@npm:^0.30.12":
- version: 0.30.12
- resolution: "@opentelemetry/propagation-utils@npm:0.30.12"
+"@opentelemetry/otlp-transformer@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/otlp-transformer@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/api-logs": 0.56.0
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/resources": 1.29.0
+ "@opentelemetry/sdk-logs": 0.56.0
+ "@opentelemetry/sdk-metrics": 1.29.0
+ "@opentelemetry/sdk-trace-base": 1.29.0
+ protobufjs: ^7.3.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 3b95605194f126be450fd7b5a7522a08bb563f716a43c863e21f7c5e4175101833a94d8f0955e1181ce75211e2b2acfe8691efd0302afa7b41d8b26ddaba3a10
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/propagation-utils@npm:^0.30.14":
+ version: 0.30.14
+ resolution: "@opentelemetry/propagation-utils@npm:0.30.14"
peerDependencies:
"@opentelemetry/api": ^1.0.0
- checksum: 1bf6b1a9d00ab0950768f4acb2ccf888592aecfcffde1554b55ffd28c50025920de2725c20f07307b8f4c189c95c413f74b84edb088df3e1d8ce182e83b5cf36
+ checksum: 2f7ddc71d39b4d095973087b437191d276fea341750d8e1843da230f83bef9779ca61fe70515bb7a8b8e45671d069ce910ad0d578110860cf08b211fc514801a
languageName: node
linkType: hard
@@ -14448,6 +14773,17 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/propagator-b3@npm:1.29.0":
+ version: 1.29.0
+ resolution: "@opentelemetry/propagator-b3@npm:1.29.0"
+ dependencies:
+ "@opentelemetry/core": 1.29.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: 36720d2f4572c45d80149dda1cf1000cd6da8baf7bf1679fa4a58b000668837133b9ab9d8fad93af4752bcc14946364a41ad5e71c0262e4dcdcb43926132df6d
+ languageName: node
+ linkType: hard
+
"@opentelemetry/propagator-jaeger@npm:1.27.0":
version: 1.27.0
resolution: "@opentelemetry/propagator-jaeger@npm:1.27.0"
@@ -14459,6 +14795,17 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/propagator-jaeger@npm:1.29.0":
+ version: 1.29.0
+ resolution: "@opentelemetry/propagator-jaeger@npm:1.29.0"
+ dependencies:
+ "@opentelemetry/core": 1.29.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: eb19ad74c16ef2bd7805f06cf3c6e5ab654889c49221678be75933c45f47d6b496343947b364ec57860d8d9432ce5542d6ac43f8bd0d153b9b47f251abff6653
+ languageName: node
+ linkType: hard
+
"@opentelemetry/redis-common@npm:^0.36.2":
version: 0.36.2
resolution: "@opentelemetry/redis-common@npm:0.36.2"
@@ -14466,61 +14813,61 @@ __metadata:
languageName: node
linkType: hard
-"@opentelemetry/resource-detector-alibaba-cloud@npm:^0.29.4":
- version: 0.29.4
- resolution: "@opentelemetry/resource-detector-alibaba-cloud@npm:0.29.4"
+"@opentelemetry/resource-detector-alibaba-cloud@npm:^0.29.6":
+ version: 0.29.6
+ resolution: "@opentelemetry/resource-detector-alibaba-cloud@npm:0.29.6"
dependencies:
"@opentelemetry/core": ^1.26.0
"@opentelemetry/resources": ^1.10.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.0.0
- checksum: 78d4100e8dfb814a6ea35c2b9ef12fd93d402ffab93d7a592f3c2d486392e281cd751c2312482e75440eab3a6cd235866c5b14993bf6f6a12a9f3ade91ed3539
+ checksum: d8cef13063b0e674fb581312c4fdeab41c95829d72f8a0971e49a8ea667fcd0bd235fb6e44f248412205bf9dfb8c307aeb3af11ade482f19864e0b4eb16d863d
languageName: node
linkType: hard
-"@opentelemetry/resource-detector-aws@npm:^1.7.0":
- version: 1.7.0
- resolution: "@opentelemetry/resource-detector-aws@npm:1.7.0"
+"@opentelemetry/resource-detector-aws@npm:^1.9.0":
+ version: 1.9.0
+ resolution: "@opentelemetry/resource-detector-aws@npm:1.9.0"
dependencies:
"@opentelemetry/core": ^1.0.0
"@opentelemetry/resources": ^1.10.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.0.0
- checksum: cbe754b5ea525064478e572a73d05979f6bc8d9bf5b063d3ea104545f0e50e04fbc0ae1376bb2543262d20ef2aad9388b1ff0e485d96ac1446efbc542ab8d818
+ checksum: 11d8a3a4ffb66124f420f800488dfb1e46eed3ff9328693ee47b5ba65638c4f2ac16ac2b6e9edcd271d1a35bcc9044766daa17754d9f95f1ebbba10ec63507e4
languageName: node
linkType: hard
-"@opentelemetry/resource-detector-azure@npm:^0.2.12":
- version: 0.2.12
- resolution: "@opentelemetry/resource-detector-azure@npm:0.2.12"
+"@opentelemetry/resource-detector-azure@npm:^0.4.0":
+ version: 0.4.0
+ resolution: "@opentelemetry/resource-detector-azure@npm:0.4.0"
dependencies:
"@opentelemetry/core": ^1.25.1
"@opentelemetry/resources": ^1.10.1
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.0.0
- checksum: b0a170ac928248021ea6b63bea1f25d670bb3c2a0260eae115097d84461732ff602a65f56ef84651ae1e70be3e9729ae5068c3038732a009ec2e3a2d1eccce40
+ checksum: 1dce98349bc0bcaaf933f8e243026bb7d93f872ce08f3bd214ecc0125dad27afd84b607f0aae50c18316d10efa755c7e8c0b71a5a728408dacee71df2c8f02f6
languageName: node
linkType: hard
-"@opentelemetry/resource-detector-container@npm:^0.5.0":
- version: 0.5.0
- resolution: "@opentelemetry/resource-detector-container@npm:0.5.0"
+"@opentelemetry/resource-detector-container@npm:^0.5.2":
+ version: 0.5.2
+ resolution: "@opentelemetry/resource-detector-container@npm:0.5.2"
dependencies:
"@opentelemetry/core": ^1.26.0
"@opentelemetry/resources": ^1.10.0
"@opentelemetry/semantic-conventions": ^1.27.0
peerDependencies:
"@opentelemetry/api": ^1.0.0
- checksum: 912762621d55ddffe69b6ba3f5c470cbb9bf3a465303d9f3ab542d9fd2dbe660927cb173783397b47f11588f60c66ec06ff1572d7bcf72ff6da10bc4f1fdd4d0
+ checksum: 7d09a68f0e6f3f455f075e499eb5229f8f561124813b55a727e17d7de7c430470906634d97265a365971ffec67c70f0a3271b4e6c25ade8a65a48f9668c67c68
languageName: node
linkType: hard
-"@opentelemetry/resource-detector-gcp@npm:^0.29.13":
- version: 0.29.13
- resolution: "@opentelemetry/resource-detector-gcp@npm:0.29.13"
+"@opentelemetry/resource-detector-gcp@npm:^0.31.0":
+ version: 0.31.0
+ resolution: "@opentelemetry/resource-detector-gcp@npm:0.31.0"
dependencies:
"@opentelemetry/core": ^1.0.0
"@opentelemetry/resources": ^1.10.0
@@ -14528,11 +14875,11 @@ __metadata:
gcp-metadata: ^6.0.0
peerDependencies:
"@opentelemetry/api": ^1.0.0
- checksum: 64d6995f3775a599985e5787276d81f1aeefa3352017965a797c3b33196f155eb3886633d1b22974aa1cae7425eff9229b4b8c0eb9ed7a454e50e1f94f1fed31
+ checksum: d62de94728ca67f03d9aa75a8a291285061cb058a8f245c2ca7b4a8e92e8c480e9958cc9dfd4550ba39475c5f06e0a692e19f6c0762f02005b617622082e3cc1
languageName: node
linkType: hard
-"@opentelemetry/resources@npm:1.27.0, @opentelemetry/resources@npm:^1.10.0, @opentelemetry/resources@npm:^1.10.1, @opentelemetry/resources@npm:^1.24.0":
+"@opentelemetry/resources@npm:1.27.0":
version: 1.27.0
resolution: "@opentelemetry/resources@npm:1.27.0"
dependencies:
@@ -14544,6 +14891,18 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/resources@npm:1.29.0, @opentelemetry/resources@npm:^1.10.0, @opentelemetry/resources@npm:^1.10.1, @opentelemetry/resources@npm:^1.24.0":
+ version: 1.29.0
+ resolution: "@opentelemetry/resources@npm:1.29.0"
+ dependencies:
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/semantic-conventions": 1.28.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: dfa68245089fe4eb8983503539e2109753fd232d769f8bba675c3277ababde88b4e7d60af7ed34a7529a021af0f0df457e3782563597a58ba0599f0161b502b2
+ languageName: node
+ linkType: hard
+
"@opentelemetry/sdk-logs@npm:0.54.2":
version: 0.54.2
resolution: "@opentelemetry/sdk-logs@npm:0.54.2"
@@ -14557,6 +14916,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/sdk-logs@npm:0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/sdk-logs@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/api-logs": 0.56.0
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/resources": 1.29.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.4.0 <1.10.0"
+ checksum: f0aed974f93a1b4e21a8d8a4fdc1ae87defe1f7b45dc58f56bb5d7bd41d0dc400ca9bb28af72b193baa4ddef4a1ec1168aee17aa4bf62c58caf1070e521ddfe2
+ languageName: node
+ linkType: hard
+
"@opentelemetry/sdk-metrics@npm:1.27.0":
version: 1.27.0
resolution: "@opentelemetry/sdk-metrics@npm:1.27.0"
@@ -14569,6 +14941,18 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/sdk-metrics@npm:1.29.0":
+ version: 1.29.0
+ resolution: "@opentelemetry/sdk-metrics@npm:1.29.0"
+ dependencies:
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/resources": 1.29.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.3.0 <1.10.0"
+ checksum: 036f2da0adff7ffd69cd2b7892b81ef4dcd0caa0c3d176dbfec9282a004f56af46956b66949f8e3ce27db589c99fa56a996e3854599979fa35dab876109f533a
+ languageName: node
+ linkType: hard
+
"@opentelemetry/sdk-node@npm:^0.54.0":
version: 0.54.2
resolution: "@opentelemetry/sdk-node@npm:0.54.2"
@@ -14595,6 +14979,32 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/sdk-node@npm:^0.56.0":
+ version: 0.56.0
+ resolution: "@opentelemetry/sdk-node@npm:0.56.0"
+ dependencies:
+ "@opentelemetry/api-logs": 0.56.0
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/exporter-logs-otlp-grpc": 0.56.0
+ "@opentelemetry/exporter-logs-otlp-http": 0.56.0
+ "@opentelemetry/exporter-logs-otlp-proto": 0.56.0
+ "@opentelemetry/exporter-trace-otlp-grpc": 0.56.0
+ "@opentelemetry/exporter-trace-otlp-http": 0.56.0
+ "@opentelemetry/exporter-trace-otlp-proto": 0.56.0
+ "@opentelemetry/exporter-zipkin": 1.29.0
+ "@opentelemetry/instrumentation": 0.56.0
+ "@opentelemetry/resources": 1.29.0
+ "@opentelemetry/sdk-logs": 0.56.0
+ "@opentelemetry/sdk-metrics": 1.29.0
+ "@opentelemetry/sdk-trace-base": 1.29.0
+ "@opentelemetry/sdk-trace-node": 1.29.0
+ "@opentelemetry/semantic-conventions": 1.28.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.3.0 <1.10.0"
+ checksum: f3261c1bf8a43f4a45bdc08fc80abf2abc9e0f59fbe557f7b6109078cfbd4bebfdd7c4289a907d02d0d2ef944efb72647718a68a3feb6c9676345ffbfe4e90bb
+ languageName: node
+ linkType: hard
+
"@opentelemetry/sdk-trace-base@npm:1.27.0":
version: 1.27.0
resolution: "@opentelemetry/sdk-trace-base@npm:1.27.0"
@@ -14608,6 +15018,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/sdk-trace-base@npm:1.29.0":
+ version: 1.29.0
+ resolution: "@opentelemetry/sdk-trace-base@npm:1.29.0"
+ dependencies:
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/resources": 1.29.0
+ "@opentelemetry/semantic-conventions": 1.28.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: 750aa58f5323bda8391213d5bdabadbf2dfb28462198b87f7f41586fa7825cccfd04bdb1c199d3fd368f9837ba7d5f890cae1f7f5d29ec2aeb9e2b7f6a88ba37
+ languageName: node
+ linkType: hard
+
"@opentelemetry/sdk-trace-node@npm:1.27.0":
version: 1.27.0
resolution: "@opentelemetry/sdk-trace-node@npm:1.27.0"
@@ -14624,13 +15047,36 @@ __metadata:
languageName: node
linkType: hard
-"@opentelemetry/semantic-conventions@npm:1.27.0, @opentelemetry/semantic-conventions@npm:^1.27.0":
+"@opentelemetry/sdk-trace-node@npm:1.29.0":
+ version: 1.29.0
+ resolution: "@opentelemetry/sdk-trace-node@npm:1.29.0"
+ dependencies:
+ "@opentelemetry/context-async-hooks": 1.29.0
+ "@opentelemetry/core": 1.29.0
+ "@opentelemetry/propagator-b3": 1.29.0
+ "@opentelemetry/propagator-jaeger": 1.29.0
+ "@opentelemetry/sdk-trace-base": 1.29.0
+ semver: ^7.5.2
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: f55a0ca916482d97227529783aa8506ab569a8835c0d39baadf93451e06b5eb44dbe8399be78ff080a89b24ab9a582d0fc1c5163bba641cbc4383a0f3da5f8b3
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/semantic-conventions@npm:1.27.0":
version: 1.27.0
resolution: "@opentelemetry/semantic-conventions@npm:1.27.0"
checksum: 26d85f8d13c8c64024f7a84528cff41d56afc9829e7ff8a654576404f8b2c1a9c264adcc6fa5a9551bacdd938a4a464041fa9493e0a722e5605f2c2ae6752398
languageName: node
linkType: hard
+"@opentelemetry/semantic-conventions@npm:1.28.0, @opentelemetry/semantic-conventions@npm:^1.27.0":
+ version: 1.28.0
+ resolution: "@opentelemetry/semantic-conventions@npm:1.28.0"
+ checksum: 1d708afa654990236cdb6b5da84f7ab899b70bff9f753bc49d93616a5c7f7f339ba1eba6a9fbb57dee596995334f4e7effa57a4624741882ab5b3c419c3511e2
+ languageName: node
+ linkType: hard
+
"@opentelemetry/sql-common@npm:^0.40.1":
version: 0.40.1
resolution: "@opentelemetry/sql-common@npm:0.40.1"
@@ -14642,14 +15088,16 @@ __metadata:
languageName: node
linkType: hard
-"@oriflame/backstage-plugin-score-card@npm:^0.8.0":
- version: 0.8.0
- resolution: "@oriflame/backstage-plugin-score-card@npm:0.8.0"
+"@oriflame/backstage-plugin-score-card@npm:^0.9.0":
+ version: 0.9.1
+ resolution: "@oriflame/backstage-plugin-score-card@npm:0.9.1"
dependencies:
"@backstage/catalog-model": ^1.4.3
"@backstage/config": ^1.1.1
"@backstage/core-components": ^0.13.10
"@backstage/core-plugin-api": ^1.8.2
+ "@backstage/integration": ^1.9.0
+ "@backstage/integration-react": ^1.1.24
"@backstage/plugin-catalog-common": ^1.0.20
"@backstage/plugin-catalog-react": ^1.9.3
"@backstage/theme": ^0.5.0
@@ -14658,13 +15106,13 @@ __metadata:
"@material-ui/core": ^4.12.2
"@material-ui/icons": ^4.11.2
"@material-ui/lab": ^4.0.0-alpha.57
- "@types/react": ^18.0.0
+ "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0
react-use: ^17.2.4
peerDependencies:
- react: ^18.0.0
- react-dom: ^18.0.0
- react-router-dom: ^6.4.3
- checksum: 4d1bf78b3fc6cce80b3cbc1abef5613bb609d2262e0d410aa57cc7e175eaf5cb727796ab61b44507f5c826b1f059f4ec03c280ce6cdbf7291d4461d745a9b5b6
+ 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
+ checksum: cebd9fd9f7d31e1b96765a02eefa2c817e401654bc28a40fe40236e0d79589760188e460797dbaf23ab56478120a60604403339267fb9ae9a9d23fcdfdb674a1
languageName: node
linkType: hard
@@ -14676,13 +15124,13 @@ __metadata:
linkType: hard
"@playwright/test@npm:^1.32.3":
- version: 1.49.0
- resolution: "@playwright/test@npm:1.49.0"
+ version: 1.49.1
+ resolution: "@playwright/test@npm:1.49.1"
dependencies:
- playwright: 1.49.0
+ playwright: 1.49.1
bin:
playwright: cli.js
- checksum: f8477aa61d59fd22c6161c48221ab246340dc37bbe2804e1a7d1be8cbd0fd861747fcb7ca559f4bc7328226ff2c90ccb7efa588a7d7d7829f3e57902b28fe39a
+ checksum: cdbd16df3d773dc8e522d79b4b961e25c2e1b1d4f3ec45eb711078ab5d11bca47caafe833e2be2f923328fbd012405a9ee31d9b449d184077598546a36847e69
languageName: node
linkType: hard
@@ -15896,8 +16344,8 @@ __metadata:
linkType: hard
"@rspack/dev-server@npm:^1.0.9":
- version: 1.0.9
- resolution: "@rspack/dev-server@npm:1.0.9"
+ version: 1.0.10
+ resolution: "@rspack/dev-server@npm:1.0.10"
dependencies:
chokidar: ^3.6.0
connect-history-api-fallback: ^2.0.0
@@ -15910,7 +16358,7 @@ __metadata:
ws: ^8.16.0
peerDependencies:
"@rspack/core": "*"
- checksum: 46b6ad1e8f52a44c178042b6b9306fe54ad28ab24b86015f118d03a69628b04bf9563201686e0738b8c06ee8c5dedbc0bb4d6705c7f2d7d3959f2a449ff95cd6
+ checksum: 0df53d1a655e5eb95c3a84b8ef34bcab6d32f8c7b23ba080f9691aa15edeee6dd79236c3942c1d55834ff9ae9f427b6e5f58cbf5e10aae015979f3d171bd65ef
languageName: node
linkType: hard
@@ -15922,17 +16370,17 @@ __metadata:
linkType: hard
"@rspack/plugin-react-refresh@npm:^1.0.0":
- version: 1.0.0
- resolution: "@rspack/plugin-react-refresh@npm:1.0.0"
+ version: 1.0.1
+ resolution: "@rspack/plugin-react-refresh@npm:1.0.1"
dependencies:
- error-stack-parser: ^2.0.6
- html-entities: ^2.1.0
+ error-stack-parser: ^2.1.4
+ html-entities: ^2.5.2
peerDependencies:
react-refresh: ">=0.10.0 <1.0.0"
peerDependenciesMeta:
react-refresh:
optional: true
- checksum: 88212e66da7e51d99228c7d77b683ef020ba2f70ea7ed546158167eaa4d6e3fa228da2f7d660c3f7a74ad69a47bc98c67a2d11e4a403f3e1ff8523cded67c6c0
+ checksum: 876e75b28cbafa0b405cc68768cb9fd4e394531e5c8e1515dc20fb4bd72e1bef23cb055475fc286f5d215f16ab38e4c571731c38398a85e5066b8fbee86449b0
languageName: node
linkType: hard
@@ -19981,11 +20429,11 @@ __metadata:
linkType: hard
"@types/react-dom@npm:^18":
- version: 18.3.2
- resolution: "@types/react-dom@npm:18.3.2"
- dependencies:
- "@types/react": ^18
- checksum: 7fd2bb31152c302febc8e18451f8351d6e48ee57dcf74f9b974a71f4f462945b9f1d8d96bed998c9e6aafa2b314fe64fdc210131c707539d3fdc9279ab73eb0e
+ version: 18.3.5
+ resolution: "@types/react-dom@npm:18.3.5"
+ peerDependencies:
+ "@types/react": ^18.0.0
+ checksum: 95c757684f71e761515c5a11299e5feec550c72bb52975487f360e6f0d359b26454c26eaf2ce45dd22748205aa9b2c2fe0abe7005ebcbd233a7615283ac39a7d
languageName: node
linkType: hard
@@ -20083,12 +20531,12 @@ __metadata:
linkType: hard
"@types/react@npm:^18":
- version: 18.3.14
- resolution: "@types/react@npm:18.3.14"
+ version: 18.3.16
+ resolution: "@types/react@npm:18.3.16"
dependencies:
"@types/prop-types": "*"
csstype: ^3.0.2
- checksum: 40e2112301d784106bdc713e3eb925c8c710e676a3a31ef65c76ca7df8529cdde3dda2db6e0f6f1878253a79bc6cf87a461aa114bd8364f453bdd2be52c175e5
+ checksum: 467c2a325870580b88b4e3bf439749b51b27cb13f52408653cb8c3e7e1b7eff86ada87e384b1aa4d34aa6027c187ca27df00bea77140fda524d726992f5b93ef
languageName: node
linkType: hard
@@ -21128,7 +21576,7 @@ __metadata:
languageName: node
linkType: hard
-"@vanilla-extract/css@npm:^1.16.0, @vanilla-extract/css@npm:^1.16.1":
+"@vanilla-extract/css@npm:^1.16.1":
version: 1.16.1
resolution: "@vanilla-extract/css@npm:1.16.1"
dependencies:
@@ -21148,15 +21596,6 @@ __metadata:
languageName: node
linkType: hard
-"@vanilla-extract/dynamic@npm:^2.1.2":
- version: 2.1.2
- resolution: "@vanilla-extract/dynamic@npm:2.1.2"
- dependencies:
- "@vanilla-extract/private": ^1.0.6
- checksum: ec6ec9b02c7ec8a9d60aebf63225fd3f930c06ad824321f03f683f1948eb6d4e554d934303da140b3230b4af2fa15bab494c6da2a3b9a172e4118c245b4f942a
- languageName: node
- linkType: hard
-
"@vanilla-extract/integration@npm:^7.1.11":
version: 7.1.11
resolution: "@vanilla-extract/integration@npm:7.1.11"
@@ -21184,15 +21623,6 @@ __metadata:
languageName: node
linkType: hard
-"@vanilla-extract/recipes@npm:^0.5.5":
- version: 0.5.5
- resolution: "@vanilla-extract/recipes@npm:0.5.5"
- peerDependencies:
- "@vanilla-extract/css": ^1.0.0
- checksum: 8d2b4f8163369424226ec9a47e754002b8a095bcf86c1a60a91b2183f59508519bd31ed41baefc950ad7ca225d75b3184c3b84d3c741c5c60d91618dd70452aa
- languageName: node
- linkType: hard
-
"@vanilla-extract/rollup-plugin@npm:^1.3.10":
version: 1.3.11
resolution: "@vanilla-extract/rollup-plugin@npm:1.3.11"
@@ -22289,12 +22719,10 @@ __metadata:
languageName: node
linkType: hard
-"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1":
- version: 7.1.1
- resolution: "agent-base@npm:7.1.1"
- dependencies:
- debug: ^4.3.4
- checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037
+"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.2":
+ version: 7.1.3
+ resolution: "agent-base@npm:7.1.3"
+ checksum: 87bb7ee54f5ecf0ccbfcba0b07473885c43ecd76cb29a8db17d6137a19d9f9cd443a2a7c5fd8a3f24d58ad8145f9eb49116344a66b107e1aeab82cf2383f4753
languageName: node
linkType: hard
@@ -24187,6 +24615,26 @@ __metadata:
languageName: node
linkType: hard
+"cacache@npm:^19.0.1":
+ version: 19.0.1
+ resolution: "cacache@npm:19.0.1"
+ dependencies:
+ "@npmcli/fs": ^4.0.0
+ fs-minipass: ^3.0.0
+ glob: ^10.2.2
+ lru-cache: ^10.0.1
+ minipass: ^7.0.3
+ minipass-collect: ^2.0.1
+ minipass-flush: ^1.0.5
+ minipass-pipeline: ^1.2.4
+ p-map: ^7.0.2
+ ssri: ^12.0.0
+ tar: ^7.4.3
+ unique-filename: ^4.0.0
+ checksum: e95684717de6881b4cdaa949fa7574e3171946421cd8291769dd3d2417dbf7abf4aa557d1f968cca83dcbc95bed2a281072b09abfc977c942413146ef7ed4525
+ languageName: node
+ linkType: hard
+
"cache-content-type@npm:^1.0.0":
version: 1.0.1
resolution: "cache-content-type@npm:1.0.1"
@@ -25891,7 +26339,7 @@ __metadata:
languageName: node
linkType: hard
-"css-loader@npm:^6.7.1":
+"css-loader@npm:^6.5.1, css-loader@npm:^6.7.1":
version: 6.11.0
resolution: "css-loader@npm:6.11.0"
dependencies:
@@ -25915,30 +26363,6 @@ __metadata:
languageName: node
linkType: hard
-"css-loader@npm:^7.0.0":
- version: 7.1.2
- resolution: "css-loader@npm:7.1.2"
- dependencies:
- icss-utils: ^5.1.0
- postcss: ^8.4.33
- postcss-modules-extract-imports: ^3.1.0
- postcss-modules-local-by-default: ^4.0.5
- postcss-modules-scope: ^3.2.0
- postcss-modules-values: ^4.0.0
- postcss-value-parser: ^4.2.0
- semver: ^7.5.4
- peerDependencies:
- "@rspack/core": 0.x || 1.x
- webpack: ^5.27.0
- peerDependenciesMeta:
- "@rspack/core":
- optional: true
- webpack:
- optional: true
- checksum: 15bfd90d778ddab90ee1d04c8c8bcc13ea6c0791d01b52b09d1b1c753b3410f7a7788a510d93726a9878e70b7c1a140f21efdf5c96e1857872107551d3897822
- languageName: node
- linkType: hard
-
"css-select@npm:^4.1.3, css-select@npm:^4.2.1":
version: 4.3.0
resolution: "css-select@npm:4.3.0"
@@ -26407,15 +26831,15 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.6":
- version: 4.3.7
- resolution: "debug@npm:4.3.7"
+"debug@npm:4, debug@npm:^4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.4.0":
+ version: 4.4.0
+ resolution: "debug@npm:4.4.0"
dependencies:
ms: ^2.1.3
peerDependenciesMeta:
supports-color:
optional: true
- checksum: 822d74e209cd910ef0802d261b150314bbcf36c582ccdbb3e70f0894823c17e49a50d3e66d96b633524263975ca16b6a833f3e3b7e030c157169a5fabac63160
+ checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479
languageName: node
linkType: hard
@@ -27496,12 +27920,12 @@ __metadata:
languageName: node
linkType: hard
-"error-stack-parser@npm:^2.0.6":
- version: 2.0.6
- resolution: "error-stack-parser@npm:2.0.6"
+"error-stack-parser@npm:^2.0.6, error-stack-parser@npm:^2.1.4":
+ version: 2.1.4
+ resolution: "error-stack-parser@npm:2.1.4"
dependencies:
- stackframe: ^1.1.1
- checksum: bd8e048fcb1c0c74ab201271fec3b39c097a7c24bdef1718828d053c0584da5d7ad845253b5e4773803ee8e7450b23b0920e60a3b60dd403c1568c843058cb12
+ stackframe: ^1.3.4
+ checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18
languageName: node
linkType: hard
@@ -28845,7 +29269,7 @@ __metadata:
"@backstage/plugin-search-backend-node": "workspace:^"
"@backstage/plugin-signals-backend": "workspace:^"
"@backstage/plugin-techdocs-backend": "workspace:^"
- "@opentelemetry/auto-instrumentations-node": ^0.52.0
+ "@opentelemetry/auto-instrumentations-node": ^0.54.0
"@opentelemetry/exporter-prometheus": ^0.54.0
"@opentelemetry/sdk-node": ^0.54.0
example-app: "link:../app"
@@ -33466,11 +33890,11 @@ __metadata:
linkType: hard
"jest-when@npm:^3.1.0":
- version: 3.6.0
- resolution: "jest-when@npm:3.6.0"
+ version: 3.7.0
+ resolution: "jest-when@npm:3.7.0"
peerDependencies:
jest: ">= 25"
- checksum: ed32ed84e5802bb6fec98966cdf862ce59677551be33d3795e6ac7a6207acf467ed559573d671c8d94c59f7fc0780cf358d2d165d81cdc7d9611250d975ee024
+ checksum: d805e2af8e76bf172e33dfde5280590fbc3510427a2d671d3a36df1c90c1bb68ebfee2ea4c87132e265973c7092d3ad20efb69398bd70141f7abef8815d5ad00
languageName: node
linkType: hard
@@ -34372,8 +34796,8 @@ __metadata:
linkType: hard
"knip@npm:^5.0.0":
- version: 5.38.2
- resolution: "knip@npm:5.38.2"
+ version: 5.39.4
+ resolution: "knip@npm:5.39.4"
dependencies:
"@nodelib/fs.walk": 1.2.8
"@snyk/github-codeowners": 1.1.0
@@ -34397,7 +34821,7 @@ __metadata:
bin:
knip: bin/knip.js
knip-bun: bin/knip-bun.js
- checksum: dd2b9dd20f1e940e07057f60d04c39da12130e3c2246bc600500af3fe7fa8251ef170d63cd492e4b70bd946beef44ef797afe103b6805b355430ea4057d7cba3
+ checksum: 0a67865d11e015e324097616caec95f2bec15081daf1a969efcabd0f183020a6c6460326d2ea8cfc1c60b3ecf285710420c328c3ff4093018aec1d077b5815d7
languageName: node
linkType: hard
@@ -34619,10 +35043,10 @@ __metadata:
languageName: node
linkType: hard
-"lilconfig@npm:~3.1.2":
- version: 3.1.2
- resolution: "lilconfig@npm:3.1.2"
- checksum: 4e8b83ddd1d0ad722600994e6ba5d858ddca14f0587aa6b9c8185e17548149b5e13d4d583d811e9e9323157fa8c6a527e827739794c7502b59243c58e210b8c3
+"lilconfig@npm:~3.1.3":
+ version: 3.1.3
+ resolution: "lilconfig@npm:3.1.3"
+ checksum: 644eb10830350f9cdc88610f71a921f510574ed02424b57b0b3abb66ea725d7a082559552524a842f4e0272c196b88dfe1ff7d35ffcc6f45736777185cd67c9a
languageName: node
linkType: hard
@@ -34669,22 +35093,22 @@ __metadata:
linkType: hard
"lint-staged@npm:^15.0.0":
- version: 15.2.10
- resolution: "lint-staged@npm:15.2.10"
+ version: 15.2.11
+ resolution: "lint-staged@npm:15.2.11"
dependencies:
chalk: ~5.3.0
commander: ~12.1.0
- debug: ~4.3.6
+ debug: ~4.4.0
execa: ~8.0.1
- lilconfig: ~3.1.2
- listr2: ~8.2.4
+ lilconfig: ~3.1.3
+ listr2: ~8.2.5
micromatch: ~4.0.8
pidtree: ~0.6.0
string-argv: ~0.3.2
- yaml: ~2.5.0
+ yaml: ~2.6.1
bin:
lint-staged: bin/lint-staged.js
- checksum: 7ab255b848478ca47c6b94aad0e7a3cfe5ba48ae1fb353cfa86635741333b83b1fd793d7cac6d44bf0388ad087d7e0250c7ec0a8ebece63fbcf7a8d175279809
+ checksum: 9668e67791fd73aa91cf9268641a5b41191b4221ac9e4d34b51bb10088a082548aa5984d9b38066c3832e41f5a01bbb36aa41d9a8c96bbc775301cb5c9071e13
languageName: node
linkType: hard
@@ -34695,9 +35119,9 @@ __metadata:
languageName: node
linkType: hard
-"listr2@npm:~8.2.4":
- version: 8.2.4
- resolution: "listr2@npm:8.2.4"
+"listr2@npm:~8.2.5":
+ version: 8.2.5
+ resolution: "listr2@npm:8.2.5"
dependencies:
cli-truncate: ^4.0.0
colorette: ^2.0.20
@@ -34705,7 +35129,7 @@ __metadata:
log-update: ^6.1.0
rfdc: ^1.4.1
wrap-ansi: ^9.0.0
- checksum: b1cdcae653ff967a9b28637e346df2d6614165b4ad1e9e36b1403bc972550c51f57ec0e6d307dc3921ceea0601e244e848ab79457c6d570ab1f088b577a63d90
+ checksum: 0ca2387b067eb11bbe91863f36903f3a5a040790422a499cc1a15806d8497979e7d1990bd129061c0510906b2971eaa97a74a9635e3ec5abd5830c9749b655b9
languageName: node
linkType: hard
@@ -35338,6 +35762,25 @@ __metadata:
languageName: node
linkType: hard
+"make-fetch-happen@npm:^14.0.3":
+ version: 14.0.3
+ resolution: "make-fetch-happen@npm:14.0.3"
+ dependencies:
+ "@npmcli/agent": ^3.0.0
+ cacache: ^19.0.1
+ http-cache-semantics: ^4.1.1
+ minipass: ^7.0.2
+ minipass-fetch: ^4.0.0
+ minipass-flush: ^1.0.5
+ minipass-pipeline: ^1.2.4
+ negotiator: ^1.0.0
+ proc-log: ^5.0.0
+ promise-retry: ^2.0.1
+ ssri: ^12.0.0
+ checksum: 6fb2fee6da3d98f1953b03d315826b5c5a4ea1f908481afc113782d8027e19f080c85ae998454de4e5f27a681d3ec58d57278f0868d4e0b736f51d396b661691
+ languageName: node
+ linkType: hard
+
"make-fetch-happen@npm:^9.1.0":
version: 9.1.0
resolution: "make-fetch-happen@npm:9.1.0"
@@ -36417,6 +36860,15 @@ __metadata:
languageName: node
linkType: hard
+"minipass-collect@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "minipass-collect@npm:2.0.1"
+ dependencies:
+ minipass: ^7.0.3
+ checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342
+ languageName: node
+ linkType: hard
+
"minipass-fetch@npm:^1.3.2, minipass-fetch@npm:^1.4.1":
version: 1.4.1
resolution: "minipass-fetch@npm:1.4.1"
@@ -36462,6 +36914,21 @@ __metadata:
languageName: node
linkType: hard
+"minipass-fetch@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "minipass-fetch@npm:4.0.0"
+ dependencies:
+ encoding: ^0.1.13
+ minipass: ^7.0.3
+ minipass-sized: ^1.0.3
+ minizlib: ^3.0.1
+ dependenciesMeta:
+ encoding:
+ optional: true
+ checksum: 7d59a31011ab9e4d1af6562dd4c4440e425b2baf4c5edbdd2e22fb25a88629e1cdceca39953ff209da504a46021df520f18fd9a519f36efae4750ff724ddadea
+ languageName: node
+ linkType: hard
+
"minipass-flush@npm:^1.0.5":
version: 1.0.5
resolution: "minipass-flush@npm:1.0.5"
@@ -37047,6 +37514,13 @@ __metadata:
languageName: node
linkType: hard
+"negotiator@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "negotiator@npm:1.0.0"
+ checksum: 20ebfe79b2d2e7cf9cbc8239a72662b584f71164096e6e8896c8325055497c96f6b80cd22c258e8a2f2aa382a787795ec3ee8b37b422a302c7d4381b0d5ecfbb
+ languageName: node
+ linkType: hard
+
"neo-async@npm:^2.5.0, neo-async@npm:^2.6.2":
version: 2.6.2
resolution: "neo-async@npm:2.6.2"
@@ -37210,9 +37684,9 @@ __metadata:
languageName: node
linkType: hard
-"node-gyp@npm:^10.0.0, node-gyp@npm:latest":
- version: 10.2.0
- resolution: "node-gyp@npm:10.2.0"
+"node-gyp@npm:^10.0.0":
+ version: 10.3.1
+ resolution: "node-gyp@npm:10.3.1"
dependencies:
env-paths: ^2.2.0
exponential-backoff: ^3.1.1
@@ -37226,7 +37700,7 @@ __metadata:
which: ^4.0.0
bin:
node-gyp: bin/node-gyp.js
- checksum: 0233759d8c19765f7fdc259a35eb046ad86c3d09e22f7384613ae2b89647dd27fcf833fdf5293d9335041e91f9b1c539494225959cdb312a5c8080b7534b926f
+ checksum: 91b0690ab504fe051ad66863226dc5ecac72b8471f85e8428e4d5ca3217d3a2adfffae48cd555e8d009a4164689fff558b88d2bc9bfd246452a3336ab308cf99
languageName: node
linkType: hard
@@ -37250,6 +37724,26 @@ __metadata:
languageName: node
linkType: hard
+"node-gyp@npm:latest":
+ version: 11.0.0
+ resolution: "node-gyp@npm:11.0.0"
+ dependencies:
+ env-paths: ^2.2.0
+ exponential-backoff: ^3.1.1
+ glob: ^10.3.10
+ graceful-fs: ^4.2.6
+ make-fetch-happen: ^14.0.3
+ nopt: ^8.0.0
+ proc-log: ^5.0.0
+ semver: ^7.3.5
+ tar: ^7.4.3
+ which: ^5.0.0
+ bin:
+ node-gyp: bin/node-gyp.js
+ checksum: d7d5055ccc88177f721c7cd4f8f9440c29a0eb40e7b79dba89ef882ec957975dfc1dcb8225e79ab32481a02016eb13bbc051a913ea88d482d3cbdf2131156af4
+ languageName: node
+ linkType: hard
+
"node-html-markdown@npm:^1.3.0":
version: 1.3.0
resolution: "node-html-markdown@npm:1.3.0"
@@ -37325,8 +37819,8 @@ __metadata:
linkType: hard
"node-mocks-http@npm:^1.0.0":
- version: 1.16.1
- resolution: "node-mocks-http@npm:1.16.1"
+ version: 1.16.2
+ resolution: "node-mocks-http@npm:1.16.2"
dependencies:
accepts: ^1.3.7
content-disposition: ^0.5.3
@@ -37346,7 +37840,7 @@ __metadata:
optional: true
"@types/node":
optional: true
- checksum: 198030725eac236062eb3547a7d5cec2d6f2d44bf05efab0ea621e90f671d6966dca2873faaea9bcbb5dde92a222aff0610a01d453c2f76b0bc5dbdf4bd8057a
+ checksum: 9d148c49947e2161dbfd55204f07352f3fd976a41dfe355a97bd932cb8d4dbf584be4058fc78b121a9d83f0b86397e00a591e87afa9a1ecfb0335608ef1ace96
languageName: node
linkType: hard
@@ -37469,6 +37963,17 @@ __metadata:
languageName: node
linkType: hard
+"nopt@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "nopt@npm:8.0.0"
+ dependencies:
+ abbrev: ^2.0.0
+ bin:
+ nopt: bin/nopt.js
+ checksum: 2cfc65e7ee38af2e04aea98f054753b0230011c0eeca4ecf131bd7d25984cbbf6f214586e0ae5dfcc2e830bc0bffa5a7fb28ea8d0b306ffd4ae8ea2d814c1ab3
+ languageName: node
+ linkType: hard
+
"nopt@npm:~1.0.10":
version: 1.0.10
resolution: "nopt@npm:1.0.10"
@@ -39245,27 +39750,27 @@ __metadata:
languageName: node
linkType: hard
-"playwright-core@npm:1.49.0":
- version: 1.49.0
- resolution: "playwright-core@npm:1.49.0"
+"playwright-core@npm:1.49.1":
+ version: 1.49.1
+ resolution: "playwright-core@npm:1.49.1"
bin:
playwright-core: cli.js
- checksum: d8423ad0cab2e672856529bf6b98b406e7e605da098b847b9b54ee8ebd8d716ed8880a9afff4b38f0a2e3f59b95661c74589116ce3ff2b5e0ae3561507086c94
+ checksum: a940f4b10ff1de033b4b8594b5104b02849a892d9adda0d42330a872cd3d8d287ffd2b01fc33f33ccd34f8904bb8ae8220b878b62e899f3d9bcd1b0945ab45c7
languageName: node
linkType: hard
-"playwright@npm:1.49.0":
- version: 1.49.0
- resolution: "playwright@npm:1.49.0"
+"playwright@npm:1.49.1":
+ version: 1.49.1
+ resolution: "playwright@npm:1.49.1"
dependencies:
fsevents: 2.3.2
- playwright-core: 1.49.0
+ playwright-core: 1.49.1
dependenciesMeta:
fsevents:
optional: true
bin:
playwright: cli.js
- checksum: f1bfb2fff65cad2ce996edab74ec231dfd21aeb5961554b765ce1eaec27efb87eaba37b00e91ecd27727b82861e5d8c230abe4960e93f6ada8be5ad1020df306
+ checksum: c136d42d625e32614f90e5228a165dc8be48c5bfb52aca9210c6ff04161a409dbe42fe5ae4f05a2653f6a1b836876a04d3b0f24bcbbc053d1509c1d605b7c8d5
languageName: node
linkType: hard
@@ -39996,6 +40501,13 @@ __metadata:
languageName: node
linkType: hard
+"proc-log@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "proc-log@npm:5.0.0"
+ checksum: c78b26ecef6d5cce4a7489a1e9923d7b4b1679028c8654aef0463b27f4a90b0946cd598f55799da602895c52feb085ec76381d007ab8dcceebd40b89c2f9dfe0
+ languageName: node
+ linkType: hard
+
"process-nextick-args@npm:^2.0.0, process-nextick-args@npm:~2.0.0":
version: 2.0.1
resolution: "process-nextick-args@npm:2.0.1"
@@ -43225,14 +43737,14 @@ __metadata:
languageName: node
linkType: hard
-"socks-proxy-agent@npm:^8.0.1, socks-proxy-agent@npm:^8.0.2, socks-proxy-agent@npm:^8.0.4":
- version: 8.0.4
- resolution: "socks-proxy-agent@npm:8.0.4"
+"socks-proxy-agent@npm:^8.0.1, socks-proxy-agent@npm:^8.0.2, socks-proxy-agent@npm:^8.0.3, socks-proxy-agent@npm:^8.0.4":
+ version: 8.0.5
+ resolution: "socks-proxy-agent@npm:8.0.5"
dependencies:
- agent-base: ^7.1.1
+ agent-base: ^7.1.2
debug: ^4.3.4
socks: ^2.8.3
- checksum: b2ec5051d85fe49072f9a250c427e0e9571fd09d5db133819192d078fd291276e1f0f50f6dbc04329b207738b1071314cee8bdbb4b12e27de42dbcf1d4233c67
+ checksum: b4fbcdb7ad2d6eec445926e255a1fb95c975db0020543fbac8dfa6c47aecc6b3b619b7fb9c60a3f82c9b2969912a5e7e174a056ae4d98cb5322f3524d6036e1d
languageName: node
linkType: hard
@@ -43534,6 +44046,15 @@ __metadata:
languageName: node
linkType: hard
+"ssri@npm:^12.0.0":
+ version: 12.0.0
+ resolution: "ssri@npm:12.0.0"
+ dependencies:
+ minipass: ^7.0.3
+ checksum: ef4b6b0ae47b4a69896f5f1c4375f953b9435388c053c36d27998bc3d73e046969ccde61ab659e679142971a0b08e50478a1228f62edb994105b280f17900c98
+ languageName: node
+ linkType: hard
+
"ssri@npm:^6.0.1":
version: 6.0.2
resolution: "ssri@npm:6.0.2"
@@ -43593,10 +44114,10 @@ __metadata:
languageName: node
linkType: hard
-"stackframe@npm:^1.1.1":
- version: 1.1.1
- resolution: "stackframe@npm:1.1.1"
- checksum: 6031b30cc070972be6b12f4f4109e62150912ddbc8d6d2bc1707387bfa74b69ec298aa1211b9bf8dc4cf4f5245a5cdb72dda4b7c0467ea0cce2d10e4f10ffe3a
+"stackframe@npm:^1.1.1, stackframe@npm:^1.3.4":
+ version: 1.3.4
+ resolution: "stackframe@npm:1.3.4"
+ checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d
languageName: node
linkType: hard
@@ -44550,7 +45071,7 @@ __metadata:
languageName: node
linkType: hard
-"tar@npm:^7.0.0":
+"tar@npm:^7.0.0, tar@npm:^7.4.3":
version: 7.4.3
resolution: "tar@npm:7.4.3"
dependencies:
@@ -45874,6 +46395,15 @@ __metadata:
languageName: node
linkType: hard
+"unique-filename@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "unique-filename@npm:4.0.0"
+ dependencies:
+ unique-slug: ^5.0.0
+ checksum: 6a62094fcac286b9ec39edbd1f8f64ff92383baa430af303dfed1ffda5e47a08a6b316408554abfddd9730c78b6106bef4ca4d02c1231a735ddd56ced77573df
+ languageName: node
+ linkType: hard
+
"unique-slug@npm:^2.0.0":
version: 2.0.2
resolution: "unique-slug@npm:2.0.2"
@@ -45892,6 +46422,15 @@ __metadata:
languageName: node
linkType: hard
+"unique-slug@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "unique-slug@npm:5.0.0"
+ dependencies:
+ imurmurhash: ^0.1.4
+ checksum: 222d0322bc7bbf6e45c08967863212398313ef73423f4125e075f893a02405a5ffdbaaf150f7dd1e99f8861348a486dd079186d27c5f2c60e465b7dcbb1d3e5b
+ languageName: node
+ linkType: hard
+
"unique-string@npm:^2.0.0":
version: 2.0.0
resolution: "unique-string@npm:2.0.0"
@@ -47202,6 +47741,17 @@ __metadata:
languageName: node
linkType: hard
+"which@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "which@npm:5.0.0"
+ dependencies:
+ isexe: ^3.1.1
+ bin:
+ node-which: bin/which.js
+ checksum: 6ec99e89ba32c7e748b8a3144e64bfc74aa63e2b2eacbb61a0060ad0b961eb1a632b08fb1de067ed59b002cec3e21de18299216ebf2325ef0f78e0f121e14e90
+ languageName: node
+ linkType: hard
+
"wide-align@npm:^1.1.2":
version: 1.1.5
resolution: "wide-align@npm:1.1.5"
@@ -47591,7 +48141,7 @@ __metadata:
languageName: node
linkType: hard
-"yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.1.1, yaml@npm:^2.2.1, yaml@npm:^2.2.2, yaml@npm:^2.3.2, yaml@npm:^2.3.3, yaml@npm:^2.3.4":
+"yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.1.1, yaml@npm:^2.2.1, yaml@npm:^2.2.2, yaml@npm:^2.3.2, yaml@npm:^2.3.3, yaml@npm:^2.3.4, yaml@npm:~2.6.1":
version: 2.6.1
resolution: "yaml@npm:2.6.1"
bin:
@@ -47600,15 +48150,6 @@ __metadata:
languageName: node
linkType: hard
-"yaml@npm:~2.5.0":
- version: 2.5.1
- resolution: "yaml@npm:2.5.1"
- bin:
- yaml: bin.mjs
- checksum: 31275223863fbd0b47ba9d2b248fbdf085db8d899e4ca43fff8a3a009497c5741084da6871d11f40e555d61360951c4c910b98216c1325d2c94753c0036d8172
- languageName: node
- linkType: hard
-
"yargs-parser@npm:^20.2.2":
version: 20.2.9
resolution: "yargs-parser@npm:20.2.9"