+
);
};
diff --git a/packages/canon/docs/components/Banner/index.ts b/canon-docs/src/components/Banner/index.ts
similarity index 100%
rename from packages/canon/docs/components/Banner/index.ts
rename to canon-docs/src/components/Banner/index.ts
diff --git a/canon-docs/src/components/Banner/styles.module.css b/canon-docs/src/components/Banner/styles.module.css
new file mode 100644
index 0000000000..9666c5d521
--- /dev/null
+++ b/canon-docs/src/components/Banner/styles.module.css
@@ -0,0 +1,41 @@
+.banner {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ line-height: 28px;
+ padding: 16px;
+ border-radius: 6px;
+ margin-bottom: 16px;
+ border: 1px solid #e0e0e0;
+
+ & > p {
+ margin: 0;
+ }
+}
+
+.info {
+ background-color: #f2f2f2;
+ border-color: #cdcdcd;
+ color: #888888;
+}
+
+.warning {
+ background-color: #fff2b9;
+ border-color: #ffd000;
+ color: #d79927;
+}
+
+.icon {
+ width: 32px;
+ height: 32px;
+ background-color: rgba(215, 153, 39, 0.2);
+ border-radius: 6px;
+ margin-right: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.text {
+ line-height: 1.5;
+}
diff --git a/packages/canon/docs/components/Chip/Chip.tsx b/canon-docs/src/components/Chip/Chip.tsx
similarity index 82%
rename from packages/canon/docs/components/Chip/Chip.tsx
rename to canon-docs/src/components/Chip/Chip.tsx
index e6e1d1b1c4..d6a74502e0 100644
--- a/packages/canon/docs/components/Chip/Chip.tsx
+++ b/canon-docs/src/components/Chip/Chip.tsx
@@ -15,6 +15,7 @@
*/
import React from 'react';
+import styles from './styles.module.css';
export const Chip = ({
children,
@@ -23,5 +24,9 @@ export const Chip = ({
children: React.ReactNode;
head?: boolean;
}) => {
- return
{children};
+ return (
+
+ {children}
+
+ );
};
diff --git a/packages/canon/docs/components/Chip/index.ts b/canon-docs/src/components/Chip/index.ts
similarity index 100%
rename from packages/canon/docs/components/Chip/index.ts
rename to canon-docs/src/components/Chip/index.ts
diff --git a/packages/canon/docs/components/Chip/styles.css b/canon-docs/src/components/Chip/styles.module.css
similarity index 77%
rename from packages/canon/docs/components/Chip/styles.css
rename to canon-docs/src/components/Chip/styles.module.css
index 95cf7cef34..44337afb0a 100644
--- a/packages/canon/docs/components/Chip/styles.css
+++ b/canon-docs/src/components/Chip/styles.module.css
@@ -25,9 +25,19 @@
margin-right: 4px;
background-color: #f0f0f0;
color: #5d5d5d;
-
- &.head {
- background-color: #eaf2fd;
- color: #2563eb;
- }
+ transition: background-color 0.2s ease-in-out;
+}
+
+.head {
+ background-color: #eaf2fd;
+ color: #2563eb;
+}
+
+[data-theme='dark'] .chip {
+ background-color: #2c2c2c;
+ color: #fff;
+}
+
+[data-theme='dark'] .chip.head {
+ background-color: #26417b;
}
diff --git a/canon-docs/src/components/CodeBlock/index.tsx b/canon-docs/src/components/CodeBlock/index.tsx
new file mode 100644
index 0000000000..bbcf4d63da
--- /dev/null
+++ b/canon-docs/src/components/CodeBlock/index.tsx
@@ -0,0 +1,32 @@
+import React from 'react';
+import type { BundledLanguage } from 'shiki';
+import { codeToHtml } from 'shiki';
+import { Text } from '../../../../packages/canon/src/components/Text';
+import styles from './styles.module.css';
+
+interface CodeBlockProps {
+ lang?: BundledLanguage;
+ title?: string;
+ code?: string;
+}
+
+export async function CodeBlock({ lang = 'tsx', title, code }: CodeBlockProps) {
+ const out = await codeToHtml(code || '', {
+ lang: lang,
+ themes: {
+ light: 'min-light',
+ dark: 'min-dark',
+ },
+ });
+
+ return (
+
+ {title && (
+
+ {title}
+
+ )}
+
+
+ );
+}
diff --git a/canon-docs/src/components/CodeBlock/styles.module.css b/canon-docs/src/components/CodeBlock/styles.module.css
new file mode 100644
index 0000000000..b5f005f962
--- /dev/null
+++ b/canon-docs/src/components/CodeBlock/styles.module.css
@@ -0,0 +1,26 @@
+.codeBlock {
+ border-radius: 4px;
+ border: 1px solid var(--canon-border);
+ position: relative;
+ background: transparent;
+ overflow-x: auto;
+ font-family: var(--canon-font-monospace);
+ background-color: #fff;
+ transition: background-color 0.2s ease-in-out;
+ margin-bottom: 1rem;
+}
+
+[data-theme='dark'] .codeBlock {
+ background-color: #121212;
+}
+
+.title {
+ border-bottom: 1px solid var(--canon-border);
+ padding: 12px 20px;
+ font-size: 0.875rem;
+ color: var(--canon-text-secondary);
+}
+
+.code {
+ padding: 20px;
+}
diff --git a/packages/canon/docs/components/Columns/Columns.tsx b/canon-docs/src/components/Columns/Columns.tsx
similarity index 100%
rename from packages/canon/docs/components/Columns/Columns.tsx
rename to canon-docs/src/components/Columns/Columns.tsx
diff --git a/packages/canon/docs/components/Columns/index.ts b/canon-docs/src/components/Columns/index.ts
similarity index 100%
rename from packages/canon/docs/components/Columns/index.ts
rename to canon-docs/src/components/Columns/index.ts
diff --git a/packages/canon/docs/components/Columns/styles.css b/canon-docs/src/components/Columns/styles.css
similarity index 100%
rename from packages/canon/docs/components/Columns/styles.css
rename to canon-docs/src/components/Columns/styles.css
diff --git a/canon-docs/src/components/CustomTheme/customTheme.tsx b/canon-docs/src/components/CustomTheme/customTheme.tsx
new file mode 100644
index 0000000000..6f76267725
--- /dev/null
+++ b/canon-docs/src/components/CustomTheme/customTheme.tsx
@@ -0,0 +1,147 @@
+'use client';
+
+import { useEffect, useState, useCallback } from 'react';
+import CodeMirror from '@uiw/react-codemirror';
+import { sass } from '@codemirror/lang-sass';
+import styles from './styles.module.css';
+import { usePlayground } from '@/utils/playground-context';
+import { AnimatePresence, motion } from 'framer-motion';
+import { Icon } from '../../../../packages/canon';
+import { createTheme } from '@uiw/codemirror-themes';
+import { tags as t } from '@lezer/highlight';
+
+const defaultTheme = `:root {
+ --canon-bg-accent: #000;
+}`;
+
+const myTheme = createTheme({
+ theme: 'light',
+ settings: {
+ background: 'var(--canon-bg-elevated)',
+ backgroundImage: '',
+ foreground: '#6182B8',
+ caret: '#5d00ff',
+ selection: '#036dd626',
+ selectionMatch: '#036dd626',
+ lineHighlight: '#8a91991a',
+ gutterBackground: '#fff',
+ gutterForeground: '#8a919966',
+ },
+ styles: [
+ { tag: t.comment, color: '#787b8099' },
+ { tag: t.variableName, color: '#0080ff' },
+ { tag: [t.string, t.special(t.brace)], color: '#6182B8' },
+ { tag: t.number, color: '#6182B8' },
+ { tag: t.bool, color: '#6182B8' },
+ { tag: t.null, color: '#6182B8' },
+ { tag: t.keyword, color: '#6182B8' },
+ { tag: t.operator, color: '#6182B8' },
+ { tag: t.className, color: '#6182B8' },
+ { tag: t.definition(t.typeName), color: '#6182B8' },
+ { tag: t.typeName, color: '#6182B8' },
+ { tag: t.angleBracket, color: '#6182B8' },
+ { tag: t.tagName, color: '#6182B8' },
+ { tag: t.attributeName, color: '#6182B8' },
+ ],
+});
+
+export const CustomTheme = () => {
+ const [isClient, setIsClient] = useState(false);
+ const [open, setOpen] = useState(true);
+ const [customTheme, setCustomTheme] = useState
(undefined);
+ const { selectedThemeName } = usePlayground();
+ const [savedMessage, setSavedMessage] = useState('Save');
+
+ const updateStyleElement = (theme: string) => {
+ let styleElement = document.getElementById(
+ 'custom-theme-style',
+ ) as HTMLStyleElement;
+
+ if (!styleElement) {
+ styleElement = document.createElement('style');
+ styleElement.id = 'custom-theme-style';
+ document.head.appendChild(styleElement);
+ }
+
+ styleElement.textContent = theme;
+ };
+
+ useEffect(() => {
+ if (selectedThemeName === 'custom') {
+ let storedTheme = localStorage.getItem('customThemeCss');
+ if (!storedTheme) {
+ storedTheme = defaultTheme;
+ localStorage.setItem('customThemeCss', storedTheme);
+ }
+ setCustomTheme(storedTheme);
+ updateStyleElement(storedTheme);
+ } else {
+ const styleElement = document.getElementById(
+ 'custom-theme-style',
+ ) as HTMLStyleElement;
+ if (styleElement) {
+ styleElement.remove();
+ }
+ }
+ }, [selectedThemeName]);
+
+ useEffect(() => {
+ setIsClient(true);
+ }, []);
+
+ const handleSave = () => {
+ if (customTheme) {
+ localStorage.setItem('customThemeCss', customTheme);
+ updateStyleElement(customTheme);
+ setSavedMessage('Saved!');
+ setTimeout(() => setSavedMessage('Save'), 1000);
+ }
+ };
+
+ const handleChange = useCallback((val: string) => {
+ setCustomTheme(val);
+ }, []);
+
+ if (isClient === false) return null;
+
+ return (
+
+ {selectedThemeName === 'custom' && (
+
+
+
Custom Theme
+
+ {open && (
+
+ )}
+
+
+
+
+
+
+
+ )}
+
+ );
+};
diff --git a/canon-docs/src/components/CustomTheme/index.ts b/canon-docs/src/components/CustomTheme/index.ts
new file mode 100644
index 0000000000..6805b2c087
--- /dev/null
+++ b/canon-docs/src/components/CustomTheme/index.ts
@@ -0,0 +1 @@
+export { CustomTheme } from './customTheme';
diff --git a/canon-docs/src/components/CustomTheme/styles.module.css b/canon-docs/src/components/CustomTheme/styles.module.css
new file mode 100644
index 0000000000..fdb2d00fba
--- /dev/null
+++ b/canon-docs/src/components/CustomTheme/styles.module.css
@@ -0,0 +1,77 @@
+.container {
+ position: fixed;
+ bottom: 16px;
+ right: 16px;
+ width: 240px;
+ height: 47px;
+ background-color: var(--canon-bg-elevated);
+ border-radius: 0.375rem;
+ border: 1px solid var(--canon-border);
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+ transition-property: background-color, border-color, height, width;
+ transition-duration: 0.2s;
+ transition-timing-function: ease-in-out;
+}
+
+.open {
+ width: 36%;
+ height: 348px;
+}
+
+.editor {
+ flex: 1;
+}
+
+.editorContainer {
+ overflow: hidden;
+}
+
+.header {
+ height: 46px;
+ flex-shrink: 0;
+ border-bottom: 1px solid var(--canon-border);
+ background-color: var(--canon-bg-elevated);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 12px 0 16px;
+ transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
+}
+
+.headerLeft {
+ font-size: 0.875rem;
+}
+
+.headerRight {
+ display: flex;
+ gap: 8px;
+}
+
+.buttonSave {
+ all: unset;
+ height: 28px;
+ padding: 0 8px;
+ color: #fff;
+ background-color: #000;
+ border-radius: 0.25rem;
+ cursor: pointer;
+ font-size: 0.75rem;
+}
+
+.buttonClose {
+ all: unset;
+ height: 28px;
+ padding: 0 8px;
+ color: #fff;
+ background-color: var(--canon-bg);
+ color: var(--canon-text-primary);
+ transition: background-color 0.2s ease-in-out;
+ border-radius: 0.25rem;
+ cursor: pointer;
+ font-size: 0.875rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
diff --git a/canon-docs/src/components/DecorativeBox/index.tsx b/canon-docs/src/components/DecorativeBox/index.tsx
new file mode 100644
index 0000000000..a5c20725bc
--- /dev/null
+++ b/canon-docs/src/components/DecorativeBox/index.tsx
@@ -0,0 +1,5 @@
+import styles from './styles.module.css';
+
+export const DecorativeBox = () => {
+ return ;
+};
diff --git a/canon-docs/src/components/DecorativeBox/styles.module.css b/canon-docs/src/components/DecorativeBox/styles.module.css
new file mode 100644
index 0000000000..84a6b579a0
--- /dev/null
+++ b/canon-docs/src/components/DecorativeBox/styles.module.css
@@ -0,0 +1,8 @@
+.box {
+ min-width: 64px;
+ min-height: 64px;
+ background-color: #eaf2fd;
+ border-radius: 4px;
+ box-shadow: 0 0 0 1px #2563eb;
+ background-image: url("data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%232563eb' fill-opacity='0.3' fill-rule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E");
+}
diff --git a/canon-docs/src/components/Frame/index.tsx b/canon-docs/src/components/Frame/index.tsx
new file mode 100644
index 0000000000..c7e930df74
--- /dev/null
+++ b/canon-docs/src/components/Frame/index.tsx
@@ -0,0 +1,33 @@
+/* eslint-disable @next/next/no-css-tags */
+'use client';
+
+import { useEffect, useState } from 'react';
+import ReactFrame from 'react-frame-component';
+
+export const Frame = ({ children }: { children: React.ReactNode }) => {
+ const [show, setShow] = useState(false);
+
+ useEffect(() => {
+ setShow(true);
+ }, []);
+
+ if (!show) return null;
+
+ return (
+ `}
+ mountTarget=".frame-root"
+ head={
+ <>
+
+
+
+ >
+ }
+ >
+ {children}
+
+ );
+};
diff --git a/canon-docs/src/components/HeadlessBanners/BaseUI.tsx b/canon-docs/src/components/HeadlessBanners/BaseUI.tsx
new file mode 100644
index 0000000000..6d3a727333
--- /dev/null
+++ b/canon-docs/src/components/HeadlessBanners/BaseUI.tsx
@@ -0,0 +1,43 @@
+import styles from './styles.module.css';
+import { Text } from '../../../../packages/canon/src/components/Text';
+import { Icon } from '../../../../packages/canon/src/components/Icon';
+
+interface BaseUIProps {
+ href: string;
+}
+
+export const BaseUI = ({ href }: BaseUIProps) => {
+ return (
+
+
+
+
+ Base UI
+
+
+
+ This component is using Base UI under the hood. While most of the
+ original props are available, we have made some changes to the API
+ to fit our needs.
+
+
+ {href && (
+
+ Discover more
+
+
+ )}
+
+
+ );
+};
diff --git a/canon-docs/src/components/HeadlessBanners/styles.module.css b/canon-docs/src/components/HeadlessBanners/styles.module.css
new file mode 100644
index 0000000000..1353f150bb
--- /dev/null
+++ b/canon-docs/src/components/HeadlessBanners/styles.module.css
@@ -0,0 +1,42 @@
+.container {
+ display: flex;
+ background-color: var(--canon-bg-elevated);
+ padding: var(--canon-space-6);
+ border-radius: var(--canon-radius-2);
+ border: 1px solid var(--canon-border);
+ margin-bottom: var(--canon-space-6);
+ gap: var(--canon-space-6);
+ transition: background-color 0.2s ease-in-out;
+}
+
+.icon path {
+ fill: var(--canon-text-primary);
+}
+
+.content {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+}
+
+.description {
+ max-width: 700px;
+}
+
+.button {
+ all: unset;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ background-color: var(--canon-bg);
+ border: 1px solid var(--canon-border);
+ border-radius: var(--canon-radius-2);
+ padding: 0 var(--canon-space-3);
+ height: 28px;
+ border-radius: 100px;
+ margin-top: var(--canon-space-3);
+ font-size: var(--canon-font-size-3);
+ color: var(--canon-text-primary);
+ gap: var(--canon-space-2);
+}
diff --git a/packages/canon/docs/components/IconLibrary/IconLibrary.tsx b/canon-docs/src/components/IconLibrary/IconLibrary.tsx
similarity index 57%
rename from packages/canon/docs/components/IconLibrary/IconLibrary.tsx
rename to canon-docs/src/components/IconLibrary/IconLibrary.tsx
index e32f4c08a4..b8ca8acdea 100644
--- a/packages/canon/docs/components/IconLibrary/IconLibrary.tsx
+++ b/canon-docs/src/components/IconLibrary/IconLibrary.tsx
@@ -13,23 +13,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
import React from 'react';
-import { Icon } from '@backstage/canon';
-import type { IconNames } from '@backstage/canon';
-import { defaultIcons } from '../../../src/components/Icon/icons';
-import { Text } from '../Text/Text';
+import { Icon } from '../../../../packages/canon/src/components/Icon';
+import type { IconNames } from '../../../../packages/canon/src/components/Icon';
+import { Text } from '../../../../packages/canon/src/components/Text';
+import { icons } from '../../../../packages/canon/src/components/Icon/icons';
+import styles from './styles.module.css';
export const IconLibrary = () => {
- const icons = Object.keys(defaultIcons);
+ const list = Object.keys(icons);
return (
-
- {icons.map(icon => (
-
-
+
+ {list.map(icon => (
+
))}
diff --git a/packages/canon/docs/components/IconLibrary/index.ts b/canon-docs/src/components/IconLibrary/index.ts
similarity index 100%
rename from packages/canon/docs/components/IconLibrary/index.ts
rename to canon-docs/src/components/IconLibrary/index.ts
diff --git a/packages/canon/docs/components/IconLibrary/styles.css b/canon-docs/src/components/IconLibrary/styles.module.css
similarity index 63%
rename from packages/canon/docs/components/IconLibrary/styles.css
rename to canon-docs/src/components/IconLibrary/styles.module.css
index 1a6f63ca79..8cef221620 100644
--- a/packages/canon/docs/components/IconLibrary/styles.css
+++ b/canon-docs/src/components/IconLibrary/styles.module.css
@@ -1,17 +1,17 @@
-.icon-library {
+.library {
display: grid;
grid-template-columns: repeat(6, 1fr);
gap: 1rem;
}
-.icon-library-item {
+.item {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
}
-.icon-library-item-icon {
+.icon {
display: flex;
width: 100%;
justify-content: center;
@@ -19,4 +19,10 @@
height: 80px;
border: 1px solid #d3d3d3;
border-radius: 0.5rem;
+ background-color: var(--canon-bg);
+ transition: background-color 0.2s ease-in-out;
+
+ &:hover {
+ background-color: var(--canon-bg-elevated);
+ }
}
diff --git a/packages/canon/docs/components/LayoutComponents/styles.css b/canon-docs/src/components/LayoutComponents/LayoutComponents.module.css
similarity index 93%
rename from packages/canon/docs/components/LayoutComponents/styles.css
rename to canon-docs/src/components/LayoutComponents/LayoutComponents.module.css
index 9319121224..0e42bc6fb6 100644
--- a/packages/canon/docs/components/LayoutComponents/styles.css
+++ b/canon-docs/src/components/LayoutComponents/LayoutComponents.module.css
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-.layout-components {
+.layoutComponents {
display: flex;
justify-content: flex-start;
gap: 1rem;
@@ -30,7 +30,7 @@
& .content {
flex: none;
- background: linear-gradient(180deg, #f3f3f3 0%, #fff 100%);
+ background-color: #fff;
border-radius: 4px;
width: 100%;
height: 180px;
diff --git a/canon-docs/src/components/LayoutComponents/LayoutComponents.tsx b/canon-docs/src/components/LayoutComponents/LayoutComponents.tsx
new file mode 100644
index 0000000000..7262b837b3
--- /dev/null
+++ b/canon-docs/src/components/LayoutComponents/LayoutComponents.tsx
@@ -0,0 +1,60 @@
+import React from 'react';
+import { BoxSvg } from './svgs/box';
+import { StackSvg } from './svgs/stack';
+import { GridSvg } from './svgs/grid';
+import { InlineSvg } from './svgs/inline';
+import { ContainerSvg } from './svgs/container';
+import styles from './LayoutComponents.module.css';
+import Link from 'next/link';
+
+export const LayoutComponents = () => {
+ return (
+
+
+
+
+
+
Box
+
+ The most basic layout component
+
+
+
+
+
+
+
Stack
+
+ Arrange your components vertically
+
+
+
+
+
+
+
Grid
+
+ Arrange your components in a grid
+
+
+
+
+
+
+
Inline
+
+ Arrange your components in a row
+
+
+
+
+
+
+
Container
+
+ A container for your components
+
+
+
+ );
+};
diff --git a/packages/canon/docs/components/LayoutComponents/index.ts b/canon-docs/src/components/LayoutComponents/index.ts
similarity index 100%
rename from packages/canon/docs/components/LayoutComponents/index.ts
rename to canon-docs/src/components/LayoutComponents/index.ts
diff --git a/packages/canon/docs/components/LayoutComponents/svgs/box.tsx b/canon-docs/src/components/LayoutComponents/svgs/box.tsx
similarity index 79%
rename from packages/canon/docs/components/LayoutComponents/svgs/box.tsx
rename to canon-docs/src/components/LayoutComponents/svgs/box.tsx
index 1749b38c6f..5b90f971c3 100644
--- a/packages/canon/docs/components/LayoutComponents/svgs/box.tsx
+++ b/canon-docs/src/components/LayoutComponents/svgs/box.tsx
@@ -24,30 +24,30 @@ export const BoxSvg = () => {
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
-
+
);
diff --git a/packages/canon/docs/components/LayoutComponents/svgs/container.tsx b/canon-docs/src/components/LayoutComponents/svgs/container.tsx
similarity index 71%
rename from packages/canon/docs/components/LayoutComponents/svgs/container.tsx
rename to canon-docs/src/components/LayoutComponents/svgs/container.tsx
index 62fe4ce266..5a8fe77af3 100644
--- a/packages/canon/docs/components/LayoutComponents/svgs/container.tsx
+++ b/canon-docs/src/components/LayoutComponents/svgs/container.tsx
@@ -26,7 +26,6 @@ export const ContainerSvg = () => {
>
{
@@ -182,7 +181,7 @@ export const ContainerSvg = () => {
height="60"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
{
@@ -349,10 +348,10 @@ export const ContainerSvg = () => {
y2="111"
gradientUnits="userSpaceOnUse"
>
-
-
-
-
+
+
+
+
{
y2="111"
gradientUnits="userSpaceOnUse"
>
-
-
-
-
+
+
+
+
diff --git a/packages/canon/docs/components/LayoutComponents/svgs/grid.tsx b/canon-docs/src/components/LayoutComponents/svgs/grid.tsx
similarity index 84%
rename from packages/canon/docs/components/LayoutComponents/svgs/grid.tsx
rename to canon-docs/src/components/LayoutComponents/svgs/grid.tsx
index 5527d1f3e2..ef071c9c91 100644
--- a/packages/canon/docs/components/LayoutComponents/svgs/grid.tsx
+++ b/canon-docs/src/components/LayoutComponents/svgs/grid.tsx
@@ -30,23 +30,23 @@ export const GridSvg = () => {
height="61"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
@@ -57,23 +57,23 @@ export const GridSvg = () => {
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
@@ -84,7 +84,7 @@ export const GridSvg = () => {
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
);
diff --git a/packages/canon/docs/components/LayoutComponents/svgs/inline.tsx b/canon-docs/src/components/LayoutComponents/svgs/inline.tsx
similarity index 86%
rename from packages/canon/docs/components/LayoutComponents/svgs/inline.tsx
rename to canon-docs/src/components/LayoutComponents/svgs/inline.tsx
index fadb9bfc1b..ecbff566db 100644
--- a/packages/canon/docs/components/LayoutComponents/svgs/inline.tsx
+++ b/canon-docs/src/components/LayoutComponents/svgs/inline.tsx
@@ -24,14 +24,14 @@ export const InlineSvg = () => {
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
-
+
{
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
{
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
{
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
{
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
{
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
{
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
{
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
-
+
@@ -49,23 +49,23 @@ export const StackSvg = () => {
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
@@ -75,7 +75,7 @@ export const StackSvg = () => {
height="24"
rx="4"
fill="black"
- fill-opacity="0.06"
+ fillOpacity="0.06"
/>
);
diff --git a/canon-docs/src/components/PropsTable/PropsTable.tsx b/canon-docs/src/components/PropsTable/PropsTable.tsx
new file mode 100644
index 0000000000..555df84903
--- /dev/null
+++ b/canon-docs/src/components/PropsTable/PropsTable.tsx
@@ -0,0 +1,51 @@
+import React from 'react';
+import * as Table from '../Table';
+import { Chip } from '../Chip';
+
+// Define a more specific type for the data object
+type PropData = {
+ type: string | string[];
+ responsive: boolean;
+};
+
+// Modify the PropsTable component to use the new type
+export const PropsTable = >({
+ data,
+}: {
+ data: T;
+}) => {
+ return (
+
+
+
+ Prop
+ Type
+ Responsive
+
+
+
+ {Object.keys(data).map(n => (
+
+
+ {n}
+
+
+
+ {Array.isArray(data[n].type) ? (
+ data[n].type.map(t => {t})
+ ) : (
+ {data[n].type}
+ )}
+
+
+
+ {data[n].responsive ? 'Yes' : 'No'}
+
+
+ ))}
+
+
+ );
+};
diff --git a/packages/canon/docs/components/PropsTable/index.ts b/canon-docs/src/components/PropsTable/index.ts
similarity index 94%
rename from packages/canon/docs/components/PropsTable/index.ts
rename to canon-docs/src/components/PropsTable/index.ts
index 181933f0f8..06d884c13d 100644
--- a/packages/canon/docs/components/PropsTable/index.ts
+++ b/canon-docs/src/components/PropsTable/index.ts
@@ -14,4 +14,3 @@
* limitations under the License.
*/
export { PropsTable } from './PropsTable';
-export { getProps } from './getProps';
diff --git a/packages/canon/docs/components/Roadmap/Roadmap.tsx b/canon-docs/src/components/Roadmap/Roadmap.tsx
similarity index 100%
rename from packages/canon/docs/components/Roadmap/Roadmap.tsx
rename to canon-docs/src/components/Roadmap/Roadmap.tsx
diff --git a/packages/canon/docs/components/Roadmap/index.ts b/canon-docs/src/components/Roadmap/index.ts
similarity index 100%
rename from packages/canon/docs/components/Roadmap/index.ts
rename to canon-docs/src/components/Roadmap/index.ts
diff --git a/packages/canon/docs/components/Roadmap/list.ts b/canon-docs/src/components/Roadmap/list.ts
similarity index 100%
rename from packages/canon/docs/components/Roadmap/list.ts
rename to canon-docs/src/components/Roadmap/list.ts
diff --git a/packages/canon/docs/components/Roadmap/styles.css b/canon-docs/src/components/Roadmap/styles.css
similarity index 100%
rename from packages/canon/docs/components/Roadmap/styles.css
rename to canon-docs/src/components/Roadmap/styles.css
diff --git a/canon-docs/src/components/Sidebar/Sidebar.module.css b/canon-docs/src/components/Sidebar/Sidebar.module.css
new file mode 100644
index 0000000000..43f1681812
--- /dev/null
+++ b/canon-docs/src/components/Sidebar/Sidebar.module.css
@@ -0,0 +1,85 @@
+.sidebar {
+ display: none;
+}
+
+@media (min-width: 768px) {
+ .sidebar {
+ display: block;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 300px;
+ height: 100vh;
+ color: var(--canon-text-primary);
+ background-color: var(--canon-bg-elevated);
+ border-right: 1px solid var(--canon-border);
+ padding-left: 20px;
+ padding-right: 20px;
+ transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
+ overflow: hidden;
+ }
+}
+
+.logoContainer {
+ padding-left: 6px;
+ padding-top: 32px;
+}
+
+.logo path {
+ fill: var(--canon-text-primary);
+}
+
+.menu {
+ display: flex;
+ flex-direction: row;
+ position: relative;
+}
+
+.section {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ gap: 2px;
+}
+
+.sectionTitle {
+ font-family: var(--docs-font);
+ font-size: var(--canon-font-size-3);
+ font-weight: var(--canon-font-weight-bold);
+ padding: 12px 0;
+}
+
+.line {
+ text-decoration: none;
+ align-items: center;
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ height: 26px;
+ padding: 0 12px;
+ border-radius: 4px;
+ transition: background-color 0.2s ease-in-out;
+
+ &:hover {
+ background-color: var(--canon-bg);
+ }
+}
+
+.line.active {
+ background-color: var(--canon-bg);
+}
+
+.lineTitle {
+ font-family: var(--docs-font);
+ font-size: var(--canon-font-size-3);
+ font-weight: var(--canon-font-weight-regular);
+ color: var(--canon-text-primary);
+}
+
+.lineStatus {
+ font-family: var(--docs-font);
+ font-size: var(--canon-font-size-3);
+ color: var(--canon-text-secondary);
+}
diff --git a/canon-docs/src/components/Sidebar/docs.tsx b/canon-docs/src/components/Sidebar/docs.tsx
new file mode 100644
index 0000000000..f207036cfa
--- /dev/null
+++ b/canon-docs/src/components/Sidebar/docs.tsx
@@ -0,0 +1,84 @@
+'use client';
+
+import Link from 'next/link';
+import { components, overview, layoutComponents, theme } from '@/utils/data';
+import { Box } from '../../../../packages/canon';
+import { motion } from 'framer-motion';
+import styles from './Sidebar.module.css';
+import { usePathname } from 'next/navigation';
+import { Fragment } from 'react';
+
+const data = [
+ {
+ title: 'Overview',
+ content: overview,
+ url: '',
+ },
+ {
+ title: 'Theme',
+ content: theme,
+ url: '/theme',
+ },
+ {
+ title: 'Layout Components',
+ content: layoutComponents,
+ url: '/components',
+ },
+ {
+ title: 'Components',
+ content: components,
+ url: '/components',
+ },
+];
+
+export const Docs = () => {
+ const pathname = usePathname();
+ const isPlayground = pathname.includes('/playground');
+
+ return (
+
+ {data.map(section => {
+ return (
+
+
+ {section.title}
+
+ {section.content.map(item => {
+ const isActive = pathname === `${section.url}/${item.slug}`;
+
+ return (
+
+ {item.title}
+
+ {item.status === 'alpha' && 'Alpha'}
+ {item.status === 'beta' && 'Beta'}
+ {item.status === 'inProgress' && 'In Progress'}
+ {item.status === 'stable' && 'Stable'}
+ {item.status === 'deprecated' && 'Deprecated'}
+
+
+ );
+ })}
+
+ );
+ })}
+
+ );
+};
diff --git a/canon-docs/src/components/Sidebar/index.tsx b/canon-docs/src/components/Sidebar/index.tsx
new file mode 100644
index 0000000000..455ab4be9b
--- /dev/null
+++ b/canon-docs/src/components/Sidebar/index.tsx
@@ -0,0 +1,29 @@
+import styles from './Sidebar.module.css';
+import { Docs } from './docs';
+import { Playground } from './playground';
+import Link from 'next/link';
+
+export const Sidebar = () => {
+ return (
+
+ );
+};
diff --git a/canon-docs/src/components/Sidebar/playground.tsx b/canon-docs/src/components/Sidebar/playground.tsx
new file mode 100644
index 0000000000..59502f6314
--- /dev/null
+++ b/canon-docs/src/components/Sidebar/playground.tsx
@@ -0,0 +1,87 @@
+'use client';
+
+import { components } from '@/utils/data';
+import { Box } from '../../../../packages/canon/src/components/Box';
+import { Checkbox } from '../../../../packages/canon/src/components/Checkbox';
+import { Text } from '../../../../packages/canon/src/components/Text';
+import { motion } from 'framer-motion';
+import styles from './Sidebar.module.css';
+import { usePathname } from 'next/navigation';
+import { screenSizes } from '@/utils/data';
+import { usePlayground } from '@/utils/playground-context';
+
+export const Playground = () => {
+ const pathname = usePathname();
+ const isPlayground = pathname.includes('/playground');
+ const {
+ selectedScreenSizes,
+ setSelectedScreenSizes,
+ selectedComponents,
+ setSelectedComponents,
+ } = usePlayground();
+
+ const handleComponentCheckboxChange = (slug: string) => {
+ if (selectedComponents.find(item => item === slug)) {
+ const res = selectedComponents.filter(item => item !== slug);
+ setSelectedComponents(res);
+ } else {
+ setSelectedComponents([...selectedComponents, slug]);
+ }
+ };
+
+ const handleCheckboxChange = (slug: string) => {
+ if (selectedScreenSizes.find(item => item === slug)) {
+ const res = selectedScreenSizes.filter(item => item !== slug);
+ setSelectedScreenSizes(res);
+ } else {
+ setSelectedScreenSizes([...selectedScreenSizes, slug]);
+ }
+ };
+
+ return (
+
+
+
+ Components
+
+
+ {components.map(({ slug, title }) => (
+
+ {title}
+ handleComponentCheckboxChange(slug)}
+ />
+
+ ))}
+
+
+ Screen sizes
+
+
+ {screenSizes.map(({ slug, title }) => (
+
+ {title}
+ handleCheckboxChange(slug)}
+ />
+
+ ))}
+
+ );
+};
diff --git a/canon-docs/src/components/Snippet/index.tsx b/canon-docs/src/components/Snippet/index.tsx
new file mode 100644
index 0000000000..2c7c4c5a02
--- /dev/null
+++ b/canon-docs/src/components/Snippet/index.tsx
@@ -0,0 +1,42 @@
+import { ReactNode } from 'react';
+import { CodeBlock } from '../CodeBlock';
+import { Text } from '../../../../packages/canon/src/components/Text';
+import { Collapsible } from '@base-ui-components/react/collapsible';
+import styles from './styles.module.css';
+
+interface SnippetProps {
+ preview: ReactNode;
+ code: string;
+ align?: 'left' | 'center';
+ px?: number;
+ py?: number;
+ open?: boolean;
+}
+
+export const Snippet = ({
+ preview,
+ code = '',
+ align = 'left',
+ px = 2,
+ py = 2,
+ open = false,
+}: SnippetProps) => {
+ return (
+
+
+
+ {preview}
+
+
+ View code
+
+
+
+
+
+
+ );
+};
diff --git a/canon-docs/src/components/Snippet/styles.module.css b/canon-docs/src/components/Snippet/styles.module.css
new file mode 100644
index 0000000000..65bdc62d05
--- /dev/null
+++ b/canon-docs/src/components/Snippet/styles.module.css
@@ -0,0 +1,62 @@
+.container {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+.preview {
+ border-radius: 4px;
+ box-shadow: inset 0 0 0 1px var(--canon-border);
+ background-color: var(--canon-bg);
+ transition: all 0.2s ease-in-out;
+ padding: 1px;
+ position: relative;
+}
+
+.previewContent {
+ width: 100%;
+ height: 100%;
+ background-image: radial-gradient(rgba(0, 0, 0, 0.08) 1px, transparent 0);
+ background-position: calc((8px / 2) * -1) calc((8px / 2) * -1);
+ background-size: 8px 8px;
+}
+
+.center {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.trigger {
+ all: unset;
+ position: absolute;
+ right: 16px;
+ bottom: 12px;
+ cursor: pointer;
+}
+
+[data-theme='dark'] .previewContent {
+ background-image: radial-gradient(
+ rgba(255, 255, 255, 0.1) 1px,
+ transparent 0
+ );
+}
+
+.panel {
+ height: var(--collapsible-panel-height);
+ transition: all 0.2s ease-out;
+ overflow: hidden;
+
+ &[data-starting-style],
+ &[data-ending-style] {
+ height: 0;
+ }
+
+ &[data-closed] {
+ opacity: 0;
+ }
+
+ &[data-open] {
+ opacity: 1;
+ }
+}
diff --git a/packages/canon/docs/components/Table/Table.tsx b/canon-docs/src/components/Table/Table.tsx
similarity index 78%
rename from packages/canon/docs/components/Table/Table.tsx
rename to canon-docs/src/components/Table/Table.tsx
index 74a26a89af..19ae69822e 100644
--- a/packages/canon/docs/components/Table/Table.tsx
+++ b/canon-docs/src/components/Table/Table.tsx
@@ -15,11 +15,12 @@
*/
import React from 'react';
+import styles from './styles.module.css';
export const Root = ({ children }: { children: React.ReactNode }) => {
return (
-
-
+
);
};
@@ -37,13 +38,17 @@ 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/canon-docs/src/components/Table/index.ts
similarity index 100%
rename from packages/canon/docs/components/Table/index.ts
rename to canon-docs/src/components/Table/index.ts
diff --git a/canon-docs/src/components/Table/styles.module.css b/canon-docs/src/components/Table/styles.module.css
new file mode 100644
index 0000000000..7ac48709eb
--- /dev/null
+++ b/canon-docs/src/components/Table/styles.module.css
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ */
+
+.wrapper {
+ border: 1px solid var(--canon-border);
+ border-radius: 4px;
+ overflow: hidden;
+ margin-bottom: 1rem;
+}
+
+.table {
+ width: 100%;
+ margin: 0 !important;
+ padding: 0 !important;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+.tableCell {
+ padding: 12px 16px !important;
+ border: none !important;
+ text-align: left;
+ background-color: var(--canon-bg-elevated) !important;
+ font-size: 16px;
+ transition: background-color 0.2s ease-in-out;
+
+ & p {
+ margin: 0;
+ }
+}
+
+.tableHeaderCell {
+ border-bottom: 1px solid var(--canon-border) !important;
+ font-weight: 500;
+ font-size: 14px;
+}
+
+.tableRow {
+ border: none;
+ border-bottom: 1px solid var(--canon-border);
+ &:last-child {
+ border-bottom: none;
+ }
+}
+
+.tableChip {
+ display: inline-block;
+ font-size: 14px !important;
+ border: 1px solid var(--canon-border);
+ border-radius: 6px;
+ padding: 0px 6px;
+ height: 24px;
+}
+
+.tableType {
+ display: flex;
+ flex-wrap: wrap;
+ flex-direction: row;
+ gap: 8px;
+}
diff --git a/canon-docs/src/components/Tabs/index.tsx b/canon-docs/src/components/Tabs/index.tsx
new file mode 100644
index 0000000000..06aef76e7f
--- /dev/null
+++ b/canon-docs/src/components/Tabs/index.tsx
@@ -0,0 +1 @@
+export * as Tabs from './parts';
diff --git a/canon-docs/src/components/Tabs/parts.tsx b/canon-docs/src/components/Tabs/parts.tsx
new file mode 100644
index 0000000000..e0ae296136
--- /dev/null
+++ b/canon-docs/src/components/Tabs/parts.tsx
@@ -0,0 +1,54 @@
+'use client';
+
+import { Tabs as TabsPrimitive } from '@base-ui-components/react/tabs';
+import styles from './styles.module.css';
+import { Text } from '../../../../packages/canon/src/components/Text';
+
+export const Root = ({
+ className,
+ ...rest
+}: React.ComponentProps
) => (
+
+);
+
+export const List = ({
+ className,
+ children,
+ ...rest
+}: React.ComponentProps) => (
+
+ {children}
+
+
+);
+
+export const Tab = (props: React.ComponentProps) => (
+ {
+ return (
+
+ );
+ }}
+ />
+);
+
+export const Panel = ({
+ className,
+ ...rest
+}: React.ComponentProps) => (
+
+);
diff --git a/canon-docs/src/components/Tabs/styles.module.css b/canon-docs/src/components/Tabs/styles.module.css
new file mode 100644
index 0000000000..8d898fd727
--- /dev/null
+++ b/canon-docs/src/components/Tabs/styles.module.css
@@ -0,0 +1,27 @@
+.root {
+ margin-top: 40px;
+}
+
+.list {
+ display: flex;
+ gap: var(--canon-space-6);
+ border-bottom: 1px solid var(--canon-border);
+ position: relative;
+ margin-bottom: var(--canon-space-6);
+}
+
+.tab {
+ all: unset;
+ cursor: pointer;
+ padding-bottom: 8px;
+}
+
+.indicator {
+ position: absolute;
+ bottom: -1px;
+ left: var(--active-tab-left);
+ width: var(--active-tab-width);
+ height: 1px;
+ background-color: var(--canon-text-primary);
+ transition: all 0.2s ease-in-out;
+}
diff --git a/canon-docs/src/components/Toolbar/index.tsx b/canon-docs/src/components/Toolbar/index.tsx
new file mode 100644
index 0000000000..eac51f1857
--- /dev/null
+++ b/canon-docs/src/components/Toolbar/index.tsx
@@ -0,0 +1,18 @@
+import { ThemeSelector } from './theme';
+import { ThemeNameSelector } from './theme-name';
+import styles from './styles.module.css';
+import { Nav } from './nav';
+
+export const Toolbar = () => {
+ return (
+
+ );
+};
diff --git a/canon-docs/src/components/Toolbar/nav.module.css b/canon-docs/src/components/Toolbar/nav.module.css
new file mode 100644
index 0000000000..90730b1403
--- /dev/null
+++ b/canon-docs/src/components/Toolbar/nav.module.css
@@ -0,0 +1,79 @@
+.tabs {
+ display: none;
+}
+
+@media (min-width: 768px) {
+ .tabs {
+ display: block;
+ height: 60px;
+ }
+}
+
+.tabsTheme {
+ width: 142px;
+ border-radius: 0.375rem;
+ background-color: var(--canon-bg);
+ transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
+}
+
+.list {
+ display: flex;
+ position: relative;
+ z-index: 0;
+ gap: var(--canon-space-8);
+}
+
+.tab {
+ all: unset;
+ height: 60px;
+ font-family: var(--docs-font);
+ color: var(--canon-text-secondary);
+ font-size: var(--canon-font-size-3);
+ font-weight: var(--canon-font-weight-bold);
+ cursor: pointer;
+ transition: color 0.2s ease-in-out;
+
+ &:hover {
+ color: var(--canon-text-primary);
+ }
+
+ &[data-selected] {
+ color: var(--canon-text-primary);
+
+ & p {
+ color: var(--canon-text-primary);
+ }
+ }
+
+ &:focus-visible {
+ position: relative;
+
+ &::before {
+ content: '';
+ position: absolute;
+ inset: 0.25rem 0;
+ border-radius: 0.25rem;
+ outline: 2px solid var(--canon-bg-elevated);
+ outline-offset: -1px;
+ }
+ }
+}
+
+.tab p {
+ color: var(--canon-text-secondary) !important;
+}
+
+.indicator {
+ position: absolute;
+ z-index: -1;
+ left: 0;
+ bottom: -1px;
+ translate: var(--active-tab-left) -50%;
+ width: var(--active-tab-width);
+ height: 1px;
+ border-radius: 0.25rem;
+ background-color: var(--canon-text-primary);
+ transition-property: translate, width, background-color;
+ transition-duration: 200ms;
+ transition-timing-function: ease-in-out;
+}
diff --git a/canon-docs/src/components/Toolbar/nav.tsx b/canon-docs/src/components/Toolbar/nav.tsx
new file mode 100644
index 0000000000..017599581e
--- /dev/null
+++ b/canon-docs/src/components/Toolbar/nav.tsx
@@ -0,0 +1,49 @@
+'use client';
+
+import { Tabs } from '@base-ui-components/react/tabs';
+import { usePathname } from 'next/navigation';
+import { useRouter } from 'next/navigation';
+import styles from './nav.module.css';
+
+export const Nav = () => {
+ const pathname = usePathname();
+ const router = useRouter();
+
+ const onValueChange = (value: string) => {
+ if (value === 'docs') {
+ router.push('/');
+ } else {
+ router.push('/playground');
+ }
+ };
+
+ return (
+
+
+ {
+ router.push('/');
+ }}
+ >
+ Documentation
+
+ {
+ router.push('/playground');
+ }}
+ >
+ Playground
+
+
+
+
+ );
+};
diff --git a/canon-docs/src/components/Toolbar/styles.module.css b/canon-docs/src/components/Toolbar/styles.module.css
new file mode 100644
index 0000000000..3b0378a03e
--- /dev/null
+++ b/canon-docs/src/components/Toolbar/styles.module.css
@@ -0,0 +1,21 @@
+.toolbar {
+ position: sticky;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 10;
+ background-color: var(--canon-bg-elevated);
+ border-bottom: 1px solid var(--canon-border);
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 var(--canon-space-6);
+ transition: background-color 0.2s ease-in-out;
+}
+
+.actions {
+ display: flex;
+ align-items: center;
+ gap: var(--canon-space-4);
+}
diff --git a/canon-docs/src/components/Toolbar/theme-name.module.css b/canon-docs/src/components/Toolbar/theme-name.module.css
new file mode 100644
index 0000000000..0ae2675e31
--- /dev/null
+++ b/canon-docs/src/components/Toolbar/theme-name.module.css
@@ -0,0 +1,137 @@
+.Select {
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.75rem;
+ height: 2rem;
+ padding-left: 0.875rem;
+ padding-right: 0.75rem;
+ margin: 0;
+ outline: 0;
+ border: 1px solid var(--color-gray-200);
+ border-radius: 0.375rem;
+ font-family: inherit;
+ font-size: 1rem;
+ line-height: 1.5rem;
+ color: var(--color-gray-900);
+ cursor: pointer;
+ user-select: none;
+ background-color: var(--canon-bg);
+ transition: background-color 0.2s ease-in-out;
+
+ &:focus-visible {
+ outline: 2px solid var(--color-blue);
+ outline-offset: -1px;
+ }
+}
+
+.SelectIcon {
+ display: flex;
+}
+
+.SelectValue {
+ font-size: var(--canon-font-size-3);
+ font-weight: var(--canon-font-weight-regular);
+}
+
+.Positioner {
+ z-index: 20;
+}
+
+.Popup {
+ box-sizing: border-box;
+ padding-block: 0.25rem;
+ border-radius: 0.375rem;
+ background-color: var(--canon-bg-elevated);
+ color: var(--color-gray-900);
+ border: 1px solid var(--canon-border);
+ padding-inline: 0.25rem;
+ transform-origin: var(--transform-origin);
+ transition: transform 150ms, opacity 150ms;
+
+ &[data-starting-style],
+ &[data-ending-style] {
+ opacity: 0;
+ transform: scale(0.9);
+ }
+
+ &[data-side='none'] {
+ transition: none;
+ transform: none;
+ opacity: 1;
+ }
+
+ @media (prefers-color-scheme: light) {
+ outline: 1px solid var(--color-gray-200);
+ box-shadow: 0px 10px 15px -3px var(--color-gray-200),
+ 0px 4px 6px -4px var(--color-gray-200);
+ }
+
+ @media (prefers-color-scheme: dark) {
+ outline: 1px solid var(--color-gray-300);
+ outline-offset: -1px;
+ }
+}
+
+.Item {
+ box-sizing: border-box;
+ outline: 0;
+ font-size: 0.875rem;
+ line-height: 1rem;
+ padding-block: 0.5rem;
+ padding-left: 0.625rem;
+ padding-right: 1rem;
+ font-size: var(--canon-font-size-3);
+ font-weight: var(--canon-font-weight-bold);
+ display: grid;
+ gap: 0.5rem;
+ align-items: center;
+ grid-template-columns: 0.75rem 1fr;
+ cursor: default;
+ user-select: none;
+ border-radius: 0.25rem;
+ cursor: pointer;
+ transition: background-color 0.2s ease-in-out;
+
+ [data-side='none'] & {
+ font-size: 1rem;
+ padding-right: 3rem;
+ min-width: calc(var(--anchor-width) + 1rem);
+ }
+
+ &[data-highlighted] {
+ z-index: 0;
+ position: relative;
+ color: var(--color-gray-50);
+ background-color: var(--canon-bg);
+ }
+
+ &[data-highlighted]::before {
+ content: '';
+ z-index: -1;
+ position: absolute;
+ inset-block: 0;
+ inset-inline: 0.25rem;
+ border-radius: 0.25rem;
+ background-color: var(--color-gray-900);
+ }
+}
+
+.ItemIndicator {
+ grid-column-start: 1;
+ width: 1rem;
+ height: 1rem;
+ display: flex;
+ align-items: center;
+}
+
+.ItemIndicatorIcon {
+ display: block;
+ width: 0.75rem;
+ height: 0.75rem;
+}
+
+.ItemText {
+ grid-column-start: 2;
+}
diff --git a/canon-docs/src/components/Toolbar/theme-name.tsx b/canon-docs/src/components/Toolbar/theme-name.tsx
new file mode 100644
index 0000000000..07b734de34
--- /dev/null
+++ b/canon-docs/src/components/Toolbar/theme-name.tsx
@@ -0,0 +1,49 @@
+'use client';
+
+import { Select } from '@base-ui-components/react/select';
+import styles from './theme-name.module.css';
+import { Icon } from '@backstage/canon';
+import { usePlayground } from '@/utils/playground-context';
+
+const themes = [
+ { name: 'Backstage Default', value: 'default' },
+ { name: 'Backstage Legacy', value: 'legacy' },
+ { name: 'Custom theme', value: 'custom' },
+];
+
+export const ThemeNameSelector = () => {
+ const { selectedThemeName, setSelectedThemeName } = usePlayground();
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ {themes.map(({ name, value }) => (
+
+
+
+
+
+ {name}
+
+
+ ))}
+
+
+
+
+ );
+};
diff --git a/canon-docs/src/components/Toolbar/theme.module.css b/canon-docs/src/components/Toolbar/theme.module.css
new file mode 100644
index 0000000000..564f5be4ca
--- /dev/null
+++ b/canon-docs/src/components/Toolbar/theme.module.css
@@ -0,0 +1,83 @@
+.tabs {
+ border-radius: 0.375rem;
+ width: 100%;
+ background-color: var(--canon-bg);
+ transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
+}
+
+.tabsTheme {
+ width: 100px;
+ border-radius: 0.375rem;
+ background-color: var(--canon-bg);
+ transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
+}
+
+.list {
+ display: flex;
+ position: relative;
+ z-index: 0;
+ padding-inline: 0.25rem;
+ gap: 0.25rem;
+}
+
+.tab {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 0;
+ margin: 0;
+ outline: 0;
+ background: none;
+ appearance: none;
+ color: var(--canon-text-secondary);
+ user-select: none;
+ height: 2rem;
+ flex: 1;
+ cursor: pointer;
+
+ &[data-selected] {
+ color: var(--canon-text-primary);
+
+ & p {
+ color: var(--canon-text-primary);
+ }
+ }
+
+ @media (hover: hover) {
+ &:hover {
+ color: var(--canon-text-primary);
+ }
+ }
+
+ &:focus-visible {
+ position: relative;
+
+ &::before {
+ content: '';
+ position: absolute;
+ inset: 0.25rem 0;
+ border-radius: 0.25rem;
+ outline: 2px solid var(--canon-bg-elevated);
+ outline-offset: -1px;
+ }
+ }
+}
+
+.tab p {
+ color: var(--canon-text-secondary) !important;
+}
+
+.indicator {
+ position: absolute;
+ z-index: -1;
+ left: 0;
+ top: 50%;
+ translate: var(--active-tab-left) -50%;
+ width: var(--active-tab-width);
+ height: 1.5rem;
+ border-radius: 0.25rem;
+ background-color: var(--canon-bg-elevated);
+ transition-property: translate, width, background-color;
+ transition-duration: 200ms;
+ transition-timing-function: ease-in-out;
+}
diff --git a/canon-docs/src/components/Toolbar/theme.tsx b/canon-docs/src/components/Toolbar/theme.tsx
new file mode 100644
index 0000000000..94224048ea
--- /dev/null
+++ b/canon-docs/src/components/Toolbar/theme.tsx
@@ -0,0 +1,28 @@
+'use client';
+
+import { Tabs } from '@base-ui-components/react/tabs';
+import { Icon } from '@backstage/canon';
+import { usePlayground } from '@/utils/playground-context';
+import styles from './theme.module.css';
+
+export const ThemeSelector = () => {
+ const { selectedTheme, setSelectedTheme } = usePlayground();
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/canon-docs/src/mdx-components.tsx b/canon-docs/src/mdx-components.tsx
new file mode 100644
index 0000000000..85df3315c4
--- /dev/null
+++ b/canon-docs/src/mdx-components.tsx
@@ -0,0 +1,100 @@
+import React, { ReactNode } from 'react';
+import type { MDXComponents } from 'mdx/types';
+import Image, { ImageProps } from 'next/image';
+import { CodeBlock } from '@/components/CodeBlock';
+import { Box } from '../../packages/canon/src/components/Box';
+
+export function useMDXComponents(components: MDXComponents): MDXComponents {
+ return {
+ // Allows customizing built-in components, e.g. to add styling.
+ h1: ({ children }) => (
+
+
+ {children as ReactNode}
+
+
+ ),
+ h2: ({ children }) => (
+
+
+ {children as ReactNode}
+
+
+ ),
+ h3: ({ children }) => (
+
+ {children as ReactNode}
+
+ ),
+ p: ({ children }) => (
+
+ {children as ReactNode}
+
+ ),
+ a: ({ children, href }) => (
+
+ {children as ReactNode}
+
+ ),
+ pre: ({ children }) => {
+ const codeContent = React.isValidElement(children)
+ ? (children.props as { children: string }).children
+ : '';
+
+ return ;
+ },
+ code: ({ children }) => (
+
+ {children}
+
+ ),
+ img: props => (
+
+ ),
+ ...components,
+ };
+}
diff --git a/canon-docs/src/snippets/_snippets.ts b/canon-docs/src/snippets/_snippets.ts
new file mode 100644
index 0000000000..417ff853b5
--- /dev/null
+++ b/canon-docs/src/snippets/_snippets.ts
@@ -0,0 +1,45 @@
+// Sometimes codes are not formatted correctly in the docs, so we need to use snippets
+
+export const grid = `import { Grid } from '@backstage/canon';
+
+
+
+
+`;
+
+export const buttonVariants = `
+
+
+
+
+`;
+
+export const stackFAQ1 = `
+ Hello World
+ Hello World
+ Hello World
+`;
+
+export const stackSimple = `
+ Hello World
+ Hello World
+ Hello World
+`;
+
+export const stackResponsive = `
+ Hello World
+ Hello World
+ Hello World
+`;
+
+export const stackAlign = `
+ Hello World
+ Hello World
+ Hello World
+`;
diff --git a/canon-docs/src/snippets/box.tsx b/canon-docs/src/snippets/box.tsx
new file mode 100644
index 0000000000..2a99ebee7d
--- /dev/null
+++ b/canon-docs/src/snippets/box.tsx
@@ -0,0 +1,20 @@
+'use client';
+
+import { Box } from '../../../packages/canon';
+
+export const BoxPreview = () => {
+ return (
+
+ );
+};
diff --git a/canon-docs/src/snippets/button.tsx b/canon-docs/src/snippets/button.tsx
new file mode 100644
index 0000000000..59e6bbd486
--- /dev/null
+++ b/canon-docs/src/snippets/button.tsx
@@ -0,0 +1,108 @@
+'use client';
+
+import {
+ Inline,
+ Button,
+ Stack,
+ ButtonProps,
+ Text,
+} from '../../../packages/canon';
+
+export const ButtonPreview = () => {
+ return (
+
+
+
+
+
+ );
+};
+
+export const ButtonSizes = () => {
+ return (
+
+
+
+
+ );
+};
+
+export const ButtonWithIcons = () => {
+ return (
+
+
+
+
+
+ );
+};
+
+export const ButtonFullWidth = () => {
+ return (
+
+
+
+
+
+ );
+};
+
+export const ButtonDisabled = () => {
+ return ;
+};
+
+export const ButtonResponsive = () => {
+ // TODO: Add responsive button
+ return null;
+};
+
+export const ButtonPlayground = () => {
+ const variants: string[] = ['primary', 'secondary', 'tertiary'];
+
+ return (
+
+ {variants.map(variant => (
+
+ {variant}
+ {['small', 'medium'].map(size => (
+
+
+
+
+
+ ))}
+
+ ))}
+
+ );
+};
diff --git a/canon-docs/src/snippets/checkbox.tsx b/canon-docs/src/snippets/checkbox.tsx
new file mode 100644
index 0000000000..88c6de4a99
--- /dev/null
+++ b/canon-docs/src/snippets/checkbox.tsx
@@ -0,0 +1,32 @@
+'use client';
+
+import { Inline, Checkbox, Stack, Text } from '../../../packages/canon';
+
+export const CheckboxPreview = () => {
+ return ;
+};
+
+export const CheckboxAllVariants = () => {
+ return (
+
+
+
+
+
+
+ );
+};
+
+export const CheckboxPlayground = () => {
+ return (
+
+ All variants
+
+
+
+
+
+
+
+ );
+};
diff --git a/canon-docs/src/snippets/container.tsx b/canon-docs/src/snippets/container.tsx
new file mode 100644
index 0000000000..40ffc69c8c
--- /dev/null
+++ b/canon-docs/src/snippets/container.tsx
@@ -0,0 +1,25 @@
+'use client';
+
+import { Box, Container } from '../../../packages/canon';
+
+const DecorativeBox = () => (
+
+);
+
+export const ContainerPreview = () => {
+ return (
+
+
+
+ );
+};
diff --git a/canon-docs/src/snippets/field.tsx b/canon-docs/src/snippets/field.tsx
new file mode 100644
index 0000000000..4c14880e48
--- /dev/null
+++ b/canon-docs/src/snippets/field.tsx
@@ -0,0 +1,21 @@
+import { Input, Field } from '../../../packages/canon';
+
+export const FieldPreview = () => {
+ return (
+
+
+ Name
+
+ Visible on your profile
+
+
+ );
+};
+
+export const InputPlayground = () => {
+ return (
+
+
+
+ );
+};
diff --git a/canon-docs/src/snippets/grid.tsx b/canon-docs/src/snippets/grid.tsx
new file mode 100644
index 0000000000..161747cbf6
--- /dev/null
+++ b/canon-docs/src/snippets/grid.tsx
@@ -0,0 +1,27 @@
+'use client';
+
+import { Box, Grid } from '../../../packages/canon';
+
+const FakeBox = () => (
+
+);
+
+export const GridPreview = () => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/canon-docs/src/snippets/heading.tsx b/canon-docs/src/snippets/heading.tsx
new file mode 100644
index 0000000000..087ce7ebbd
--- /dev/null
+++ b/canon-docs/src/snippets/heading.tsx
@@ -0,0 +1,43 @@
+'use client';
+
+import { Heading, Stack, Text } from '../../../packages/canon';
+
+export const HeadingPreview = () => {
+ return Look mum, no hands!;
+};
+
+export const HeadingAllVariants = () => {
+ return (
+
+ Display
+ Title 1
+ Title 2
+ Title 3
+ Title 4
+
+ );
+};
+
+export const HeadingResponsive = () => {
+ return null;
+ return (
+
+
+ Responsive heading
+
+
+ );
+};
+
+export const HeadingPlayground = () => {
+ return (
+
+ All variants
+ Display
+ Title 1
+ Title 2
+ Title 3
+ Title 4
+
+ );
+};
diff --git a/canon-docs/src/snippets/icon.tsx b/canon-docs/src/snippets/icon.tsx
new file mode 100644
index 0000000000..126dbaf686
--- /dev/null
+++ b/canon-docs/src/snippets/icon.tsx
@@ -0,0 +1,7 @@
+'use client';
+
+import { Icon } from '../../../packages/canon';
+
+export const IconPreview = () => {
+ return ;
+};
diff --git a/canon-docs/src/snippets/inline.tsx b/canon-docs/src/snippets/inline.tsx
new file mode 100644
index 0000000000..73b619e3af
--- /dev/null
+++ b/canon-docs/src/snippets/inline.tsx
@@ -0,0 +1,48 @@
+'use client';
+
+import { Box, Inline } from '../../../packages/canon';
+
+const fakeBlockList = [
+ { width: 45, height: 60 },
+ { width: 150, height: 75 },
+ { width: 80, height: 50 },
+ { width: 120, height: 70 },
+ { width: 95, height: 65 },
+ { width: 80, height: 32 },
+ { width: 130, height: 60 },
+ { width: 100, height: 80 },
+ { width: 140, height: 45 },
+ { width: 85, height: 70 },
+ { width: 125, height: 50 },
+];
+
+const FakeBox = ({
+ width = 120,
+ height = 80,
+}: {
+ width?: number;
+ height?: number;
+}) => (
+
+);
+
+export const InlinePreview = () => {
+ return (
+
+ {fakeBlockList.map((block, index) => (
+
+ ))}
+
+ );
+};
diff --git a/canon-docs/src/snippets/input.tsx b/canon-docs/src/snippets/input.tsx
new file mode 100644
index 0000000000..d320f3a24a
--- /dev/null
+++ b/canon-docs/src/snippets/input.tsx
@@ -0,0 +1,34 @@
+import { Input, Grid } from '../../../packages/canon';
+
+export const InputPreview = () => {
+ return (
+
+
+
+ );
+};
+
+export const InputSizes = () => {
+ return (
+
+
+
+
+ );
+};
+
+export const InputError = () => {
+ return (
+
+
+
+ );
+};
+
+export const InputPlayground = () => {
+ return (
+
+
+
+ );
+};
diff --git a/canon-docs/src/snippets/stack.tsx b/canon-docs/src/snippets/stack.tsx
new file mode 100644
index 0000000000..4bada6f7ba
--- /dev/null
+++ b/canon-docs/src/snippets/stack.tsx
@@ -0,0 +1,31 @@
+'use client';
+
+import { Stack } from '../../../packages/canon';
+
+const DecorativeBox = () => {
+ return (
+
+ );
+};
+
+export const StackPreview = () => {
+ return (
+
+
+
+
+
+
+
+ );
+};
diff --git a/canon-docs/src/snippets/text.tsx b/canon-docs/src/snippets/text.tsx
new file mode 100644
index 0000000000..633b3b45d7
--- /dev/null
+++ b/canon-docs/src/snippets/text.tsx
@@ -0,0 +1,93 @@
+'use client';
+
+import { Stack, Text } from '../../../packages/canon';
+
+export const TextPreview = () => {
+ return (
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is in
+ the painting?
+
+ );
+};
+
+export const TextAllVariants = () => {
+ return (
+
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+
+ );
+};
+
+export const TextAllWeights = () => {
+ return (
+
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+
+ );
+};
+
+export const TextResponsive = () => {
+ // TODO: Add responsive text
+ return null;
+};
+
+export const TextPlayground = () => {
+ return (
+
+ Subtitle
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+ Body
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+ Caption
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+ Label
+
+ A man looks at a painting in a museum and says, “Brothers and sisters I
+ have none, but that man's father is my father's son.” Who is
+ in the painting?
+
+
+ );
+};
diff --git a/canon-docs/src/utils/data.ts b/canon-docs/src/utils/data.ts
new file mode 100644
index 0000000000..1109d6fa0a
--- /dev/null
+++ b/canon-docs/src/utils/data.ts
@@ -0,0 +1,123 @@
+interface Page {
+ title: string;
+ slug: string;
+ status?: 'alpha' | 'beta' | 'stable' | 'deprecated' | 'inProgress';
+}
+
+export const overview: Page[] = [
+ {
+ title: 'Getting Started',
+ slug: '',
+ },
+ {
+ title: 'About',
+ slug: 'about',
+ },
+];
+
+export const theme: Page[] = [
+ {
+ title: 'Iconography',
+ slug: 'iconography',
+ },
+ {
+ title: 'Layout',
+ slug: 'layout',
+ },
+ {
+ title: 'Responsive',
+ slug: 'responsive',
+ },
+ {
+ title: 'Theming',
+ slug: 'theming',
+ },
+ {
+ title: 'Typography',
+ slug: 'typography',
+ },
+];
+
+export const layoutComponents: Page[] = [
+ {
+ title: 'Box',
+ slug: 'box',
+ status: 'alpha',
+ },
+ {
+ title: 'Container',
+ slug: 'container',
+ status: 'alpha',
+ },
+ {
+ title: 'Grid',
+ slug: 'grid',
+ status: 'alpha',
+ },
+ {
+ title: 'Inline',
+ slug: 'inline',
+ status: 'alpha',
+ },
+ {
+ title: 'Stack',
+ slug: 'stack',
+ status: 'alpha',
+ },
+];
+
+export const components: Page[] = [
+ {
+ title: 'Button',
+ slug: 'button',
+ status: 'alpha',
+ },
+ {
+ title: 'Checkbox',
+ slug: 'checkbox',
+ status: 'alpha',
+ },
+ {
+ title: 'Field',
+ slug: 'field',
+ status: 'alpha',
+ },
+ {
+ title: 'Heading',
+ slug: 'heading',
+ status: 'alpha',
+ },
+ {
+ title: 'Icon',
+ slug: 'icon',
+ status: 'alpha',
+ },
+ {
+ title: 'Input',
+ slug: 'input',
+ status: 'alpha',
+ },
+ {
+ title: 'Table',
+ slug: 'table',
+ status: 'inProgress',
+ },
+ {
+ title: 'Text',
+ slug: 'text',
+ status: 'alpha',
+ },
+];
+
+export type ScreenSize = {
+ title: string;
+ slug: string;
+ width: number;
+};
+
+export const screenSizes: ScreenSize[] = [
+ { title: 'Mobile', slug: 'mobile', width: 390 },
+ { title: 'Tablet', slug: 'tablet', width: 768 },
+ { title: 'Desktop', slug: 'desktop', width: 1280 },
+ { title: 'Wide', slug: 'wide', width: 1600 },
+];
diff --git a/canon-docs/src/utils/playground-context.tsx b/canon-docs/src/utils/playground-context.tsx
new file mode 100644
index 0000000000..721851c3e4
--- /dev/null
+++ b/canon-docs/src/utils/playground-context.tsx
@@ -0,0 +1,95 @@
+import React, {
+ createContext,
+ useContext,
+ ReactNode,
+ useState,
+ useEffect,
+} from 'react';
+import { components } from './data';
+
+type Theme = 'light' | 'dark';
+type ThemeName = 'legacy' | 'default' | 'custom';
+
+// Create a context with an empty array as the default value
+const PlaygroundContext = createContext<{
+ selectedScreenSizes: string[];
+ setSelectedScreenSizes: (screenSizes: string[]) => void;
+ selectedComponents: string[];
+ setSelectedComponents: (components: string[]) => void;
+ selectedTheme: Theme;
+ setSelectedTheme: (theme: Theme) => void;
+ selectedThemeName: ThemeName;
+ setSelectedThemeName: (themeName: ThemeName) => void;
+}>({
+ selectedScreenSizes: [],
+ setSelectedScreenSizes: () => {},
+ selectedComponents: [],
+ setSelectedComponents: () => {},
+ selectedTheme: 'light',
+ setSelectedTheme: () => {},
+ selectedThemeName: 'default',
+ setSelectedThemeName: () => {},
+});
+
+// Create a provider component
+export const PlaygroundProvider = ({ children }: { children: ReactNode }) => {
+ // Check if running in a browser environment
+ const isBrowser = typeof window !== 'undefined';
+
+ const [selectedScreenSizes, setSelectedScreenSizes] = useState([]);
+ const [selectedComponents, setSelectedComponents] = useState(
+ components.map(component => component.slug),
+ );
+ const [selectedTheme, setSelectedTheme] = useState(() => {
+ return isBrowser
+ ? (localStorage.getItem('theme') as Theme) || 'light'
+ : 'light';
+ });
+ const [selectedThemeName, setSelectedThemeName] = useState(() => {
+ return isBrowser
+ ? (localStorage.getItem('theme-name') as ThemeName) || 'default'
+ : 'default';
+ });
+
+ useEffect(() => {
+ if (isBrowser) {
+ document.documentElement.setAttribute(
+ 'data-theme',
+ selectedTheme || 'light',
+ );
+ localStorage.setItem('theme', selectedTheme || 'light');
+ }
+ }, [selectedTheme, isBrowser]);
+
+ useEffect(() => {
+ if (isBrowser) {
+ document.documentElement.setAttribute(
+ 'data-theme-name',
+ selectedThemeName || 'default',
+ );
+ localStorage.setItem('theme-name', selectedThemeName || 'default');
+ }
+ }, [selectedThemeName, isBrowser]);
+
+ return (
+
+ {children}
+
+ );
+};
+
+// Create a custom hook to use the screen sizes
+export const usePlayground = () => {
+ return useContext(PlaygroundContext);
+};
diff --git a/packages/canon/docs/spaceProps.ts b/canon-docs/src/utils/spaceProps.ts
similarity index 100%
rename from packages/canon/docs/spaceProps.ts
rename to canon-docs/src/utils/spaceProps.ts
diff --git a/canon-docs/tsconfig.json b/canon-docs/tsconfig.json
new file mode 100644
index 0000000000..2baa7cde8f
--- /dev/null
+++ b/canon-docs/tsconfig.json
@@ -0,0 +1,32 @@
+{
+ "compilerOptions": {
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ "dist/types/**/*.ts"
+ ],
+ "exclude": ["node_modules"]
+}
diff --git a/canon-docs/yarn.lock b/canon-docs/yarn.lock
new file mode 100644
index 0000000000..28810f8911
--- /dev/null
+++ b/canon-docs/yarn.lock
@@ -0,0 +1,5664 @@
+# This file is generated by running "yarn install" inside your project.
+# Manual changes might be lost - proceed with caution!
+
+__metadata:
+ version: 6
+ cacheKey: 8
+
+"@babel/runtime@npm:^7.18.6":
+ version: 7.26.0
+ resolution: "@babel/runtime@npm:7.26.0"
+ dependencies:
+ regenerator-runtime: ^0.14.0
+ checksum: c8e2c0504ab271b3467a261a8f119bf2603eb857a0d71e37791f4e3fae00f681365073cc79f141ddaa90c6077c60ba56448004ad5429d07ac73532be9f7cf28a
+ languageName: node
+ linkType: hard
+
+"@codemirror/autocomplete@npm:^6.0.0":
+ version: 6.18.4
+ resolution: "@codemirror/autocomplete@npm:6.18.4"
+ dependencies:
+ "@codemirror/language": ^6.0.0
+ "@codemirror/state": ^6.0.0
+ "@codemirror/view": ^6.17.0
+ "@lezer/common": ^1.0.0
+ checksum: 4216f45a17f6cfd8d33df53f940396f7d3707662570bf3a79d8d333f926e273a265fac13c362e29e3fa57ccdf444f1a047862f5f56c672cfc669c87ee975858f
+ languageName: node
+ linkType: hard
+
+"@codemirror/commands@npm:^6.0.0, @codemirror/commands@npm:^6.1.0":
+ version: 6.8.0
+ resolution: "@codemirror/commands@npm:6.8.0"
+ dependencies:
+ "@codemirror/language": ^6.0.0
+ "@codemirror/state": ^6.4.0
+ "@codemirror/view": ^6.27.0
+ "@lezer/common": ^1.1.0
+ checksum: 7d819bab4830ec7b8c5dffdec4b035dfa664bfd1d2675e639e08a459df65f45be111e1b8b569b1a8a3253d5980cf2ecf4394d8a13509996cca1b65cc16d47a4e
+ languageName: node
+ linkType: hard
+
+"@codemirror/lang-css@npm:^6.2.0":
+ version: 6.3.1
+ resolution: "@codemirror/lang-css@npm:6.3.1"
+ dependencies:
+ "@codemirror/autocomplete": ^6.0.0
+ "@codemirror/language": ^6.0.0
+ "@codemirror/state": ^6.0.0
+ "@lezer/common": ^1.0.2
+ "@lezer/css": ^1.1.7
+ checksum: ed175d75d75bc0a059d1e60b3dcd8464d570da14fc97388439943c9c43e1e9146e37b83fe2ccaad9cd387420b7b411ea1d24ede78ecd1f2045a38acbb4dd36bc
+ languageName: node
+ linkType: hard
+
+"@codemirror/lang-sass@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "@codemirror/lang-sass@npm:6.0.2"
+ dependencies:
+ "@codemirror/lang-css": ^6.2.0
+ "@codemirror/language": ^6.0.0
+ "@codemirror/state": ^6.0.0
+ "@lezer/common": ^1.0.2
+ "@lezer/sass": ^1.0.0
+ checksum: e7665aaab70476a952522b143fd7bd59f6c025746cbf7b542f6965f94eecac483b4afd03f6da98aaa1572e379194309b241c5264eff05c681c637aa26651b9ab
+ languageName: node
+ linkType: hard
+
+"@codemirror/language@npm:^6.0.0":
+ version: 6.10.8
+ resolution: "@codemirror/language@npm:6.10.8"
+ dependencies:
+ "@codemirror/state": ^6.0.0
+ "@codemirror/view": ^6.23.0
+ "@lezer/common": ^1.1.0
+ "@lezer/highlight": ^1.0.0
+ "@lezer/lr": ^1.0.0
+ style-mod: ^4.0.0
+ checksum: 679b69d69faa94f028f996a7005d0c6c2a2e4cd7a7a2614f615c23d7b642c31fc1837915248e864cb1ad59a2f032d1a7a8ef486b5f9904e5f6fbe6f7d2882c38
+ languageName: node
+ linkType: hard
+
+"@codemirror/lint@npm:^6.0.0":
+ version: 6.8.4
+ resolution: "@codemirror/lint@npm:6.8.4"
+ dependencies:
+ "@codemirror/state": ^6.0.0
+ "@codemirror/view": ^6.35.0
+ crelt: ^1.0.5
+ checksum: 640e3dd44eb167d952eb5c5b8518919ba46e164aa3471776342f7f9361e676b4627a76a9f01d51b22127b97413f2bc9b8c60299d8dfdd5fc8ad0225d42de7669
+ languageName: node
+ linkType: hard
+
+"@codemirror/search@npm:^6.0.0":
+ version: 6.5.8
+ resolution: "@codemirror/search@npm:6.5.8"
+ dependencies:
+ "@codemirror/state": ^6.0.0
+ "@codemirror/view": ^6.0.0
+ crelt: ^1.0.5
+ checksum: 0f9633037492a7b647b606c30255ea42c4327319e643be7ea3aa2913ed8e4aa662589f457e376636521c7d4d1215fae0e8939f127db9c0790b19ae3b654c3bc4
+ languageName: node
+ linkType: hard
+
+"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1, @codemirror/state@npm:^6.4.0, @codemirror/state@npm:^6.5.0":
+ version: 6.5.1
+ resolution: "@codemirror/state@npm:6.5.1"
+ dependencies:
+ "@marijn/find-cluster-break": ^1.0.0
+ checksum: b7d6de9a87d5b55dadfadaeb6e1c991e0a91845d3cdd0bd953391f05363fcbaf21de79a4eec2816ab8c3e31293faeca82cc2bb729d080779df94b14e28ae0d8a
+ languageName: node
+ linkType: hard
+
+"@codemirror/theme-one-dark@npm:^6.0.0":
+ version: 6.1.2
+ resolution: "@codemirror/theme-one-dark@npm:6.1.2"
+ dependencies:
+ "@codemirror/language": ^6.0.0
+ "@codemirror/state": ^6.0.0
+ "@codemirror/view": ^6.0.0
+ "@lezer/highlight": ^1.0.0
+ checksum: 29bc09f79534115f62658caf3d0db527fe347d058b69a8c7f580ae636827377aadd0606fd0d83dbab8d6f3b0a5df53d3253c619341b5fb93d2c8291a8efb9556
+ languageName: node
+ linkType: hard
+
+"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0, @codemirror/view@npm:^6.35.0":
+ version: 6.36.2
+ resolution: "@codemirror/view@npm:6.36.2"
+ dependencies:
+ "@codemirror/state": ^6.5.0
+ style-mod: ^4.1.0
+ w3c-keyname: ^2.2.4
+ checksum: a58c64b623ddc65bb864917297f3b37f8e95280deec442024c43a9513b26352c829665c5d98e4dfcae104e8ecdfdb774d94a395a29da98a919c83482d2c14152
+ languageName: node
+ linkType: hard
+
+"@esbuild/aix-ppc64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/aix-ppc64@npm:0.24.2"
+ conditions: os=aix & cpu=ppc64
+ languageName: node
+ linkType: hard
+
+"@esbuild/android-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/android-arm64@npm:0.24.2"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/android-arm@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/android-arm@npm:0.24.2"
+ conditions: os=android & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@esbuild/android-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/android-x64@npm:0.24.2"
+ conditions: os=android & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/darwin-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/darwin-arm64@npm:0.24.2"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/darwin-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/darwin-x64@npm:0.24.2"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/freebsd-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/freebsd-arm64@npm:0.24.2"
+ conditions: os=freebsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/freebsd-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/freebsd-x64@npm:0.24.2"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-arm64@npm:0.24.2"
+ conditions: os=linux & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-arm@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-arm@npm:0.24.2"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-ia32@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-ia32@npm:0.24.2"
+ conditions: os=linux & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-loong64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-loong64@npm:0.24.2"
+ conditions: os=linux & cpu=loong64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-mips64el@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-mips64el@npm:0.24.2"
+ conditions: os=linux & cpu=mips64el
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-ppc64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-ppc64@npm:0.24.2"
+ conditions: os=linux & cpu=ppc64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-riscv64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-riscv64@npm:0.24.2"
+ conditions: os=linux & cpu=riscv64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-s390x@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-s390x@npm:0.24.2"
+ conditions: os=linux & cpu=s390x
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-x64@npm:0.24.2"
+ conditions: os=linux & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/netbsd-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/netbsd-arm64@npm:0.24.2"
+ conditions: os=netbsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/netbsd-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/netbsd-x64@npm:0.24.2"
+ conditions: os=netbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/openbsd-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/openbsd-arm64@npm:0.24.2"
+ conditions: os=openbsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/openbsd-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/openbsd-x64@npm:0.24.2"
+ conditions: os=openbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/sunos-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/sunos-x64@npm:0.24.2"
+ conditions: os=sunos & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/win32-arm64@npm:0.24.2"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-ia32@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/win32-ia32@npm:0.24.2"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/win32-x64@npm:0.24.2"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
+ version: 4.4.1
+ resolution: "@eslint-community/eslint-utils@npm:4.4.1"
+ dependencies:
+ eslint-visitor-keys: ^3.4.3
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ checksum: a7ffc838eb6a9ef594cda348458ccf38f34439ac77dc090fa1c120024bcd4eb911dfd74d5ef44d42063e7949fa7c5123ce714a015c4abb917d4124be1bd32bfe
+ languageName: node
+ linkType: hard
+
+"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1":
+ version: 4.12.1
+ resolution: "@eslint-community/regexpp@npm:4.12.1"
+ checksum: 0d628680e204bc316d545b4993d3658427ca404ae646ce541fcc65306b8c712c340e5e573e30fb9f85f4855c0c5f6dca9868931f2fcced06417fbe1a0c6cd2d6
+ languageName: node
+ linkType: hard
+
+"@eslint/eslintrc@npm:^2.1.4":
+ version: 2.1.4
+ resolution: "@eslint/eslintrc@npm:2.1.4"
+ dependencies:
+ ajv: ^6.12.4
+ debug: ^4.3.2
+ espree: ^9.6.0
+ globals: ^13.19.0
+ ignore: ^5.2.0
+ import-fresh: ^3.2.1
+ js-yaml: ^4.1.0
+ minimatch: ^3.1.2
+ strip-json-comments: ^3.1.1
+ checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127
+ languageName: node
+ linkType: hard
+
+"@eslint/js@npm:8.57.1":
+ version: 8.57.1
+ resolution: "@eslint/js@npm:8.57.1"
+ checksum: 2afb77454c06e8316793d2e8e79a0154854d35e6782a1217da274ca60b5044d2c69d6091155234ed0551a1e408f86f09dd4ece02752c59568fa403e60611e880
+ languageName: node
+ linkType: hard
+
+"@humanwhocodes/config-array@npm:^0.13.0":
+ version: 0.13.0
+ resolution: "@humanwhocodes/config-array@npm:0.13.0"
+ dependencies:
+ "@humanwhocodes/object-schema": ^2.0.3
+ debug: ^4.3.1
+ minimatch: ^3.0.5
+ checksum: eae69ff9134025dd2924f0b430eb324981494be26f0fddd267a33c28711c4db643242cf9fddf7dadb9d16c96b54b2d2c073e60a56477df86e0173149313bd5d6
+ languageName: node
+ linkType: hard
+
+"@humanwhocodes/module-importer@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "@humanwhocodes/module-importer@npm:1.0.1"
+ checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61
+ languageName: node
+ linkType: hard
+
+"@humanwhocodes/object-schema@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "@humanwhocodes/object-schema@npm:2.0.3"
+ checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631
+ languageName: node
+ linkType: hard
+
+"@isaacs/cliui@npm:^8.0.2":
+ version: 8.0.2
+ resolution: "@isaacs/cliui@npm:8.0.2"
+ dependencies:
+ string-width: ^5.1.2
+ string-width-cjs: "npm:string-width@^4.2.0"
+ strip-ansi: ^7.0.1
+ strip-ansi-cjs: "npm:strip-ansi@^6.0.1"
+ wrap-ansi: ^8.1.0
+ wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0"
+ checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb
+ languageName: node
+ linkType: hard
+
+"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2, @lezer/common@npm:^1.1.0, @lezer/common@npm:^1.2.0":
+ version: 1.2.3
+ resolution: "@lezer/common@npm:1.2.3"
+ checksum: 9b5f52d949adae69d077f56c0b1c2295923108c3dfb241dd9f17654ff708f3eab81ff9fa7f0d0e4a668eabdcb9d961c73e75caca87c966ca1436e30e49130fcb
+ languageName: node
+ linkType: hard
+
+"@lezer/css@npm:^1.1.7":
+ version: 1.1.9
+ resolution: "@lezer/css@npm:1.1.9"
+ dependencies:
+ "@lezer/common": ^1.2.0
+ "@lezer/highlight": ^1.0.0
+ "@lezer/lr": ^1.0.0
+ checksum: 25c63475061a3c9f87961a7f85c5f547f14fb7e81b0864675d2206999a874a0559d676145c74c6ccde39519dbc8aa33e216265f5366d08060507b6c9e875fe0f
+ languageName: node
+ linkType: hard
+
+"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@lezer/highlight@npm:1.2.1"
+ dependencies:
+ "@lezer/common": ^1.0.0
+ checksum: a8822d7e37f79ff64669eb2df4a9f9d16580e88f2b276a646092e19a9bdccac304e92510e200e35869a8b1f6c27eba5972c508d347a277e9b722d582ab7a23d5
+ languageName: node
+ linkType: hard
+
+"@lezer/lr@npm:^1.0.0":
+ version: 1.4.2
+ resolution: "@lezer/lr@npm:1.4.2"
+ dependencies:
+ "@lezer/common": ^1.0.0
+ checksum: 94318ad046c7dfcc8d37e26cb85b99623c39aef60aa51ec2abb30928e7a649f38fa5520f34bd5b356f1db11b6991999589f039e87c8949b0f163be3764f029d8
+ languageName: node
+ linkType: hard
+
+"@lezer/sass@npm:^1.0.0":
+ version: 1.0.7
+ resolution: "@lezer/sass@npm:1.0.7"
+ dependencies:
+ "@lezer/common": ^1.2.0
+ "@lezer/highlight": ^1.0.0
+ "@lezer/lr": ^1.0.0
+ checksum: 32d37aa5d3143033f0b886c33a293b1d28b7eecdf2cb979cf7b4cbba0587be227dfed246c27116060ac9b2b2c0fe4b09df4b672690dd0593e876529583e7ef2a
+ 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
+
+"@mdx-js/loader@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "@mdx-js/loader@npm:3.1.0"
+ dependencies:
+ "@mdx-js/mdx": ^3.0.0
+ source-map: ^0.7.0
+ peerDependencies:
+ webpack: ">=5"
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ checksum: 983b8d4949f4d214a17f4ad8597a50de36ace75e93292d2493b5fb6077d69d6abc8230b62f88b818c04f12a01d281d63edb6a0738937f7e259406a73ce998134
+ languageName: node
+ linkType: hard
+
+"@mdx-js/mdx@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "@mdx-js/mdx@npm:3.1.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ "@types/estree-jsx": ^1.0.0
+ "@types/hast": ^3.0.0
+ "@types/mdx": ^2.0.0
+ collapse-white-space: ^2.0.0
+ devlop: ^1.0.0
+ estree-util-is-identifier-name: ^3.0.0
+ estree-util-scope: ^1.0.0
+ estree-walker: ^3.0.0
+ hast-util-to-jsx-runtime: ^2.0.0
+ markdown-extensions: ^2.0.0
+ recma-build-jsx: ^1.0.0
+ recma-jsx: ^1.0.0
+ recma-stringify: ^1.0.0
+ rehype-recma: ^1.0.0
+ remark-mdx: ^3.0.0
+ remark-parse: ^11.0.0
+ remark-rehype: ^11.0.0
+ source-map: ^0.7.0
+ unified: ^11.0.0
+ unist-util-position-from-estree: ^2.0.0
+ unist-util-stringify-position: ^4.0.0
+ unist-util-visit: ^5.0.0
+ vfile: ^6.0.0
+ checksum: 8a1aa72ddb23294ef28903fc7ad32439a8588106949d789477c2e858e6f068c7b979ae4b2296e820987f7c4d75d6781dafb6fe6a514828bb2ab2b81d89548064
+ languageName: node
+ linkType: hard
+
+"@mdx-js/react@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "@mdx-js/react@npm:3.1.0"
+ dependencies:
+ "@types/mdx": ^2.0.0
+ peerDependencies:
+ "@types/react": ">=16"
+ react: ">=16"
+ checksum: c5a9c495f43f498ece24a768762a1743abe2be33d050d7eab731beb754e631700547f039198c6262c998d9a443906bd78811c3fa38bc2fb37659848161dac331
+ languageName: node
+ linkType: hard
+
+"@next/env@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/env@npm:14.2.23"
+ checksum: dad74ff7de68992a0753f728a5b926ed6eb0af8a62deece6bbb32ba254b1f7d870e256b61db8d4c40fa811695cfc5e69ba964339f3cb8b40237cf9c28dfe747f
+ languageName: node
+ linkType: hard
+
+"@next/eslint-plugin-next@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/eslint-plugin-next@npm:14.2.23"
+ dependencies:
+ glob: 10.3.10
+ checksum: 17cdf221f59cd24d82011dcc98d7c389ae710197e7bdb26c04e2ee3a1beb5db728e9a928db3adfd490d0765e54be849942602379ffdfb062ed5cbd863c060a3d
+ languageName: node
+ linkType: hard
+
+"@next/mdx@npm:^15.1.4":
+ version: 15.1.5
+ resolution: "@next/mdx@npm:15.1.5"
+ dependencies:
+ source-map: ^0.7.0
+ peerDependencies:
+ "@mdx-js/loader": ">=0.15.0"
+ "@mdx-js/react": ">=0.15.0"
+ peerDependenciesMeta:
+ "@mdx-js/loader":
+ optional: true
+ "@mdx-js/react":
+ optional: true
+ checksum: f73103abce4ca2e15a6d06b0c6e16988e5651ca09890d6a0017c913b30018dc87d275dc7a8fed30dab338af5e1c3822f1a74af83d6fa6bee02edb936bbd51566
+ languageName: node
+ linkType: hard
+
+"@next/swc-darwin-arm64@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/swc-darwin-arm64@npm:14.2.23"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@next/swc-darwin-x64@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/swc-darwin-x64@npm:14.2.23"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@next/swc-linux-arm64-gnu@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/swc-linux-arm64-gnu@npm:14.2.23"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@next/swc-linux-arm64-musl@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/swc-linux-arm64-musl@npm:14.2.23"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@next/swc-linux-x64-gnu@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/swc-linux-x64-gnu@npm:14.2.23"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@next/swc-linux-x64-musl@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/swc-linux-x64-musl@npm:14.2.23"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@next/swc-win32-arm64-msvc@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/swc-win32-arm64-msvc@npm:14.2.23"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@next/swc-win32-ia32-msvc@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/swc-win32-ia32-msvc@npm:14.2.23"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@next/swc-win32-x64-msvc@npm:14.2.23":
+ version: 14.2.23
+ resolution: "@next/swc-win32-x64-msvc@npm:14.2.23"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.scandir@npm:2.1.5":
+ version: 2.1.5
+ resolution: "@nodelib/fs.scandir@npm:2.1.5"
+ dependencies:
+ "@nodelib/fs.stat": 2.0.5
+ run-parallel: ^1.1.9
+ checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
+ version: 2.0.5
+ resolution: "@nodelib/fs.stat@npm:2.0.5"
+ checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8":
+ version: 1.2.8
+ resolution: "@nodelib/fs.walk@npm:1.2.8"
+ dependencies:
+ "@nodelib/fs.scandir": 2.1.5
+ fastq: ^1.6.0
+ checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53
+ languageName: node
+ linkType: hard
+
+"@nolyfill/is-core-module@npm:1.0.39":
+ version: 1.0.39
+ resolution: "@nolyfill/is-core-module@npm:1.0.39"
+ checksum: 0d6e098b871eca71d875651288e1f0fa770a63478b0b50479c99dc760c64175a56b5b04f58d5581bbcc6b552b8191ab415eada093d8df9597ab3423c8cac1815
+ languageName: node
+ linkType: hard
+
+"@pkgjs/parseargs@npm:^0.11.0":
+ version: 0.11.0
+ resolution: "@pkgjs/parseargs@npm:0.11.0"
+ checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f
+ languageName: node
+ linkType: hard
+
+"@rtsao/scc@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "@rtsao/scc@npm:1.1.0"
+ checksum: 17d04adf404e04c1e61391ed97bca5117d4c2767a76ae3e879390d6dec7b317fcae68afbf9e98badee075d0b64fa60f287729c4942021b4d19cd01db77385c01
+ languageName: node
+ linkType: hard
+
+"@rushstack/eslint-patch@npm:^1.3.3":
+ version: 1.10.5
+ resolution: "@rushstack/eslint-patch@npm:1.10.5"
+ checksum: c7df90efeb77e4311f70549c1b0c41455e3a4f0c0cf2696e560d9a535f129d63ab84c98d0a3de95ed2d369d5281b541af819f99002bfd38e185e59c355b58d69
+ languageName: node
+ linkType: hard
+
+"@shikijs/core@npm:1.26.1":
+ version: 1.26.1
+ resolution: "@shikijs/core@npm:1.26.1"
+ dependencies:
+ "@shikijs/engine-javascript": 1.26.1
+ "@shikijs/engine-oniguruma": 1.26.1
+ "@shikijs/types": 1.26.1
+ "@shikijs/vscode-textmate": ^10.0.1
+ "@types/hast": ^3.0.4
+ hast-util-to-html: ^9.0.4
+ checksum: 1528f7308deee2b2cac32a06180d97cc31e9ac633a499d096b41a0d298603868e5183bb5c3fbe868eb7e72ccb61c16ed4bfe356d227e09791983f080d53a32dd
+ languageName: node
+ linkType: hard
+
+"@shikijs/engine-javascript@npm:1.26.1":
+ version: 1.26.1
+ resolution: "@shikijs/engine-javascript@npm:1.26.1"
+ dependencies:
+ "@shikijs/types": 1.26.1
+ "@shikijs/vscode-textmate": ^10.0.1
+ oniguruma-to-es: 0.10.0
+ checksum: 45783dfed301f3dbd7969e6009f80ac29ab029ef3b67b65b4de93c9a14fe0c8573debc99e23d05a5830e96395cff4c5e553df6d9311bb843684854d669c1b413
+ languageName: node
+ linkType: hard
+
+"@shikijs/engine-oniguruma@npm:1.26.1":
+ version: 1.26.1
+ resolution: "@shikijs/engine-oniguruma@npm:1.26.1"
+ dependencies:
+ "@shikijs/types": 1.26.1
+ "@shikijs/vscode-textmate": ^10.0.1
+ checksum: 163926e8d15bddfdccb17804bc3acf67b382f0274c2e532af23db7aadf215052fbb320e4d335c9c6fb3887f0c644b883f7ab2f01c5ec1d6b2c23509115993f52
+ languageName: node
+ linkType: hard
+
+"@shikijs/langs@npm:1.26.1":
+ version: 1.26.1
+ resolution: "@shikijs/langs@npm:1.26.1"
+ dependencies:
+ "@shikijs/types": 1.26.1
+ checksum: d1cd9e8f62fea988a63fedfedbfc560e84dc08e0102861e30975c64beecf87a564420a4bb547e1f98695e869d859168cab927e0ad5cfe2bc42caf2f909fc7864
+ languageName: node
+ linkType: hard
+
+"@shikijs/themes@npm:1.26.1":
+ version: 1.26.1
+ resolution: "@shikijs/themes@npm:1.26.1"
+ dependencies:
+ "@shikijs/types": 1.26.1
+ checksum: 578310b6a2884b2d2e58911ad11016001eb4632bda791bad4981a39d5d3f0f8aaac8b53a5cb5ab2630df67ed9695d339338aa19606b7afb27e806bfe2f2be739
+ languageName: node
+ linkType: hard
+
+"@shikijs/types@npm:1.26.1":
+ version: 1.26.1
+ resolution: "@shikijs/types@npm:1.26.1"
+ dependencies:
+ "@shikijs/vscode-textmate": ^10.0.1
+ "@types/hast": ^3.0.4
+ checksum: e4b08016dc1dbdf022830508e3ea34c7aa3dc5b260cad44263f90ea4a5c3f226115748b76c3022887e41837fe82234587ce31f2bae3cfbdf5a913cd51d70c007
+ languageName: node
+ linkType: hard
+
+"@shikijs/vscode-textmate@npm:^10.0.1":
+ version: 10.0.1
+ resolution: "@shikijs/vscode-textmate@npm:10.0.1"
+ checksum: c5a8490417b9439b055844c6c09c3435fc435b1fc3923eb28f05ee346fd68e69df2d93cdaab319a51193970558ff1bf49c5ab047c9ed4fd86c3f9d062457a565
+ languageName: node
+ linkType: hard
+
+"@storybook/components@npm:8.4.7":
+ version: 8.4.7
+ resolution: "@storybook/components@npm:8.4.7"
+ peerDependencies:
+ storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+ checksum: e39fb81e8386db4f3f76cbf4f82e50512fed2f65a581951c0b61e00c9834c20cfff7f717e936353275dadfe6a25ffaac5d47151adbe1e3be85e709f8a64f6a15
+ languageName: node
+ linkType: hard
+
+"@storybook/core@npm:8.4.7":
+ version: 8.4.7
+ resolution: "@storybook/core@npm:8.4.7"
+ dependencies:
+ "@storybook/csf": ^0.1.11
+ better-opn: ^3.0.2
+ browser-assert: ^1.2.1
+ esbuild: ^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0
+ esbuild-register: ^3.5.0
+ jsdoc-type-pratt-parser: ^4.0.0
+ process: ^0.11.10
+ recast: ^0.23.5
+ semver: ^7.6.2
+ util: ^0.12.5
+ ws: ^8.2.3
+ peerDependencies:
+ prettier: ^2 || ^3
+ peerDependenciesMeta:
+ prettier:
+ optional: true
+ checksum: 969cde2203c9c2c744f2a1d2858b2adeb7d57fc75e703f64187fcf0056eb7da48d0507d919718c0866952dda084eb51d79e65a90abec8bb0dcb404b542a6872f
+ languageName: node
+ linkType: hard
+
+"@storybook/csf@npm:^0.1.11":
+ version: 0.1.13
+ resolution: "@storybook/csf@npm:0.1.13"
+ dependencies:
+ type-fest: ^2.19.0
+ checksum: 78cfd8348e74fdd22bc7d14b443b8ad28b7e797ce147beeab4a1bed6c4e6885287fdaebbcad6efc104819a924121175d461c16e425a4b4f5903cec8f6be6f440
+ languageName: node
+ linkType: hard
+
+"@storybook/global@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "@storybook/global@npm:5.0.0"
+ checksum: ede0ad35ec411fe31c61150dbd118fef344d1d0e72bf5d3502368e35cf68126f6b7ae4a0ab5e2ffe2f0baa3b4286f03ad069ba3e098e1725449ef08b7e154ba8
+ languageName: node
+ linkType: hard
+
+"@storybook/manager-api@npm:8.4.7":
+ version: 8.4.7
+ resolution: "@storybook/manager-api@npm:8.4.7"
+ peerDependencies:
+ storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+ checksum: 2b826ec55de7ea0b5b5151dfa896f3e7eddfd36ede61f8a7ad14a37733d5d5645565f863dbde7e2272f1e9b5717f26de7802ae60e297a2647ee2c4c072ed3069
+ languageName: node
+ linkType: hard
+
+"@storybook/preview-api@npm:8.4.7":
+ version: 8.4.7
+ resolution: "@storybook/preview-api@npm:8.4.7"
+ peerDependencies:
+ storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+ checksum: 1c467bb2c16c5998b9bc4c2c013e6786936d5f6a373ad8d8ab1beb626616c3187329fdfc3a709663b4af963c7e5789a1401166c6e2a3a66a12f66e858aa94e91
+ languageName: node
+ linkType: hard
+
+"@storybook/react-dom-shim@npm:8.4.7":
+ version: 8.4.7
+ resolution: "@storybook/react-dom-shim@npm:8.4.7"
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.4.7
+ checksum: 4de29cbb990bfb2f310440aa995b024faa93fd1d5c7c942d6d661d590693eb56e0567a141c14faca63e8b24fc2f6b6b44c02af37cd2d5b469c1129b0e78fc79d
+ languageName: node
+ linkType: hard
+
+"@storybook/react@npm:^8.4.7":
+ version: 8.4.7
+ resolution: "@storybook/react@npm:8.4.7"
+ dependencies:
+ "@storybook/components": 8.4.7
+ "@storybook/global": ^5.0.0
+ "@storybook/manager-api": 8.4.7
+ "@storybook/preview-api": 8.4.7
+ "@storybook/react-dom-shim": 8.4.7
+ "@storybook/theming": 8.4.7
+ peerDependencies:
+ "@storybook/test": 8.4.7
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.4.7
+ typescript: ">= 4.2.x"
+ peerDependenciesMeta:
+ "@storybook/test":
+ optional: true
+ typescript:
+ optional: true
+ checksum: 5ad2137f8f5f0a34cb90e2582fd574aff888c544f0f9907472d930d4fb1f444124aa84188a0b5d661cc6c4c0bf7210b1e616a53b4be3f2df2479165571fa9085
+ languageName: node
+ linkType: hard
+
+"@storybook/theming@npm:8.4.7":
+ version: 8.4.7
+ resolution: "@storybook/theming@npm:8.4.7"
+ peerDependencies:
+ storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
+ checksum: 47d29993c33bb29994d227af30e099579b7cf760652ed743020f5d7e5a5974f59a6ebeb1cc8995e6158da9cf768a8d2f559d1d819cc082d0bcdb056d85fdcb29
+ languageName: node
+ linkType: hard
+
+"@swc/counter@npm:^0.1.3":
+ version: 0.1.3
+ resolution: "@swc/counter@npm:0.1.3"
+ checksum: df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598
+ languageName: node
+ linkType: hard
+
+"@swc/helpers@npm:0.5.5":
+ version: 0.5.5
+ resolution: "@swc/helpers@npm:0.5.5"
+ dependencies:
+ "@swc/counter": ^0.1.3
+ tslib: ^2.4.0
+ checksum: d4f207b191e54b29460804ddf2984ba6ece1d679a0b2f6a9c765dcf27bba92c5769e7965668a4546fb9f1021eaf0ff9be4bf5c235ce12adcd65acdfe77187d11
+ languageName: node
+ linkType: hard
+
+"@types/acorn@npm:^4.0.0":
+ version: 4.0.6
+ resolution: "@types/acorn@npm:4.0.6"
+ dependencies:
+ "@types/estree": "*"
+ checksum: 60e1fd28af18d6cb54a93a7231c7c18774a9a8739c9b179e9e8750dca631e10cbef2d82b02830ea3f557b1d121e6406441e9e1250bd492dc81d4b3456e76e4d4
+ languageName: node
+ linkType: hard
+
+"@types/debug@npm:^4.0.0":
+ version: 4.1.12
+ resolution: "@types/debug@npm:4.1.12"
+ dependencies:
+ "@types/ms": "*"
+ checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053
+ languageName: node
+ linkType: hard
+
+"@types/estree-jsx@npm:^1.0.0":
+ version: 1.0.5
+ resolution: "@types/estree-jsx@npm:1.0.5"
+ dependencies:
+ "@types/estree": "*"
+ checksum: a028ab0cd7b2950168a05c6a86026eb3a36a54a4adfae57f13911d7b49dffe573d9c2b28421b2d029b49b3d02fcd686611be2622dc3dad6d9791166c083f6008
+ languageName: node
+ linkType: hard
+
+"@types/estree@npm:*, @types/estree@npm:^1.0.0":
+ version: 1.0.6
+ resolution: "@types/estree@npm:1.0.6"
+ checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9
+ languageName: node
+ linkType: hard
+
+"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "@types/hast@npm:3.0.4"
+ dependencies:
+ "@types/unist": "*"
+ checksum: 7a973e8d16fcdf3936090fa2280f408fb2b6a4f13b42edeb5fbd614efe042b82eac68e298e556d50f6b4ad585a3a93c353e9c826feccdc77af59de8dd400d044
+ languageName: node
+ linkType: hard
+
+"@types/json5@npm:^0.0.29":
+ version: 0.0.29
+ resolution: "@types/json5@npm:0.0.29"
+ checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac
+ languageName: node
+ linkType: hard
+
+"@types/mdast@npm:^4.0.0":
+ version: 4.0.4
+ resolution: "@types/mdast@npm:4.0.4"
+ dependencies:
+ "@types/unist": "*"
+ checksum: 20c4e9574cc409db662a35cba52b068b91eb696b3049e94321219d47d34c8ccc99a142be5c76c80a538b612457b03586bc2f6b727a3e9e7530f4c8568f6282ee
+ languageName: node
+ linkType: hard
+
+"@types/mdx@npm:^2.0.0, @types/mdx@npm:^2.0.13":
+ version: 2.0.13
+ resolution: "@types/mdx@npm:2.0.13"
+ checksum: 195137b548e75a85f0558bb1ca5088aff1c01ae0fc64454da06085b7513a043356d0bb51ed559d3cbc7ad724ccd8cef2a7d07d014b89a47a74dff8875ceb3b15
+ languageName: node
+ linkType: hard
+
+"@types/ms@npm:*":
+ version: 0.7.34
+ resolution: "@types/ms@npm:0.7.34"
+ checksum: f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a
+ languageName: node
+ linkType: hard
+
+"@types/node@npm:^20":
+ version: 20.17.12
+ resolution: "@types/node@npm:20.17.12"
+ dependencies:
+ undici-types: ~6.19.2
+ checksum: 0c0dbeb4e1480a23071ec38e97bb3d776e0ae9828174bf45f9edcf277caa955945cb10d31d84f7a73c66aaf92ae2e022be6331bd00a4bed1f2ad9639a411d17e
+ languageName: node
+ linkType: hard
+
+"@types/prop-types@npm:*":
+ version: 15.7.14
+ resolution: "@types/prop-types@npm:15.7.14"
+ checksum: d0c5407b9ccc3dd5fae0ccf9b1007e7622ba5e6f1c18399b4f24dff33619d469da4b9fa918a374f19dc0d9fe6a013362aab0b844b606cfc10676efba3f5f736d
+ languageName: node
+ linkType: hard
+
+"@types/react-dom@npm:^18":
+ version: 18.3.5
+ resolution: "@types/react-dom@npm:18.3.5"
+ peerDependencies:
+ "@types/react": ^18.0.0
+ checksum: 95c757684f71e761515c5a11299e5feec550c72bb52975487f360e6f0d359b26454c26eaf2ce45dd22748205aa9b2c2fe0abe7005ebcbd233a7615283ac39a7d
+ languageName: node
+ linkType: hard
+
+"@types/react@npm:^18":
+ version: 18.3.18
+ resolution: "@types/react@npm:18.3.18"
+ dependencies:
+ "@types/prop-types": "*"
+ csstype: ^3.0.2
+ checksum: 5933597bc9f53e282f0438f0bb76d0f0fab60faabe760ea806e05ffe6f5c61b9b4d363e1a03a8fea47c510d493c6cf926cdeeba9f7074fa97b61940c350245e7
+ languageName: node
+ linkType: hard
+
+"@types/unist@npm:*, @types/unist@npm:^3.0.0":
+ version: 3.0.3
+ resolution: "@types/unist@npm:3.0.3"
+ checksum: 96e6453da9e075aaef1dc22482463898198acdc1eeb99b465e65e34303e2ec1e3b1ed4469a9118275ec284dc98019f63c3f5d49422f0e4ac707e5ab90fb3b71a
+ languageName: node
+ linkType: hard
+
+"@types/unist@npm:^2.0.0":
+ version: 2.0.11
+ resolution: "@types/unist@npm:2.0.11"
+ checksum: 6d436e832bc35c6dde9f056ac515ebf2b3384a1d7f63679d12358766f9b313368077402e9c1126a14d827f10370a5485e628bf61aa91117cf4fc882423191a4e
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0":
+ version: 8.19.1
+ resolution: "@typescript-eslint/eslint-plugin@npm:8.19.1"
+ dependencies:
+ "@eslint-community/regexpp": ^4.10.0
+ "@typescript-eslint/scope-manager": 8.19.1
+ "@typescript-eslint/type-utils": 8.19.1
+ "@typescript-eslint/utils": 8.19.1
+ "@typescript-eslint/visitor-keys": 8.19.1
+ graphemer: ^1.4.0
+ ignore: ^5.3.1
+ natural-compare: ^1.4.0
+ ts-api-utils: ^2.0.0
+ peerDependencies:
+ "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 07774aeb373882c9177b0da061dde12f08202107696d9947f11819f3e4b6223f922d944f1c8967438685041a9b0a5a61cfed1d246bb168b8a31c8ec1792c2405
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0":
+ version: 8.19.1
+ resolution: "@typescript-eslint/parser@npm:8.19.1"
+ dependencies:
+ "@typescript-eslint/scope-manager": 8.19.1
+ "@typescript-eslint/types": 8.19.1
+ "@typescript-eslint/typescript-estree": 8.19.1
+ "@typescript-eslint/visitor-keys": 8.19.1
+ debug: ^4.3.4
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: a321f03ecdf1b80da6b574cf15225d77b7d15835b8ebfdbfc98b3d8aa881c0ce23b7050c35f03aa0528db8a00ccca69391eeba4f7a10ed579b29e77c7bf3c368
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/scope-manager@npm:8.19.1":
+ version: 8.19.1
+ resolution: "@typescript-eslint/scope-manager@npm:8.19.1"
+ dependencies:
+ "@typescript-eslint/types": 8.19.1
+ "@typescript-eslint/visitor-keys": 8.19.1
+ checksum: 972ee3bc3339f549e206f01b3db30b71d99090b4d581ff1b73ce833d95e4e2f6520f7f227174c53393a2646980068463daaaeb945e417458cf6f37d60e31c173
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/type-utils@npm:8.19.1":
+ version: 8.19.1
+ resolution: "@typescript-eslint/type-utils@npm:8.19.1"
+ dependencies:
+ "@typescript-eslint/typescript-estree": 8.19.1
+ "@typescript-eslint/utils": 8.19.1
+ debug: ^4.3.4
+ ts-api-utils: ^2.0.0
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 9345ba9f2399adc9b45a8b41e68749be4485cfd4e24558c42eb2a12199610370473307bc823e6715e4d1f136cd3f9a0a61a05a27bc4ce664468eab7f76efb549
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/types@npm:8.19.1":
+ version: 8.19.1
+ resolution: "@typescript-eslint/types@npm:8.19.1"
+ checksum: 76756b9c5496e1463255aa3c881eaec51a6fe718894b91f49929e9e7e258111d86a9c38a9c76b5ada29293a4cb60b96cffac82a203ec47053aa138f298ffab67
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/typescript-estree@npm:8.19.1":
+ version: 8.19.1
+ resolution: "@typescript-eslint/typescript-estree@npm:8.19.1"
+ dependencies:
+ "@typescript-eslint/types": 8.19.1
+ "@typescript-eslint/visitor-keys": 8.19.1
+ debug: ^4.3.4
+ fast-glob: ^3.3.2
+ is-glob: ^4.0.3
+ minimatch: ^9.0.4
+ semver: ^7.6.0
+ ts-api-utils: ^2.0.0
+ peerDependencies:
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 982ac1735d076c595c3b6bfb4c2d02a41bb3cc27d8d05bdac9a08e9f007be3f151ded0f7e691de00b2aa86458e1cd5ef49cf1c19dd38d24269b1f107db2a700b
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/utils@npm:8.19.1":
+ version: 8.19.1
+ resolution: "@typescript-eslint/utils@npm:8.19.1"
+ dependencies:
+ "@eslint-community/eslint-utils": ^4.4.0
+ "@typescript-eslint/scope-manager": 8.19.1
+ "@typescript-eslint/types": 8.19.1
+ "@typescript-eslint/typescript-estree": 8.19.1
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 745c24b9538c2c4e41cda0cfe73b78d1a8aaec3958ece128cf086f1e8d09f3f53b3299610570ae5a921300c05e43d181eda099acfb3218fadf3b310bf49b290e
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/visitor-keys@npm:8.19.1":
+ version: 8.19.1
+ resolution: "@typescript-eslint/visitor-keys@npm:8.19.1"
+ dependencies:
+ "@typescript-eslint/types": 8.19.1
+ eslint-visitor-keys: ^4.2.0
+ checksum: dc68a7e46cd73579c81ec5594315a8564fcc74984b3d399331e66abd48db956acfa24d445660f133609d7a969a88819ca73ded493f109f42ba659958df52be7e
+ languageName: node
+ linkType: hard
+
+"@uiw/codemirror-extensions-basic-setup@npm:4.23.7":
+ version: 4.23.7
+ resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.23.7"
+ dependencies:
+ "@codemirror/autocomplete": ^6.0.0
+ "@codemirror/commands": ^6.0.0
+ "@codemirror/language": ^6.0.0
+ "@codemirror/lint": ^6.0.0
+ "@codemirror/search": ^6.0.0
+ "@codemirror/state": ^6.0.0
+ "@codemirror/view": ^6.0.0
+ peerDependencies:
+ "@codemirror/autocomplete": ">=6.0.0"
+ "@codemirror/commands": ">=6.0.0"
+ "@codemirror/language": ">=6.0.0"
+ "@codemirror/lint": ">=6.0.0"
+ "@codemirror/search": ">=6.0.0"
+ "@codemirror/state": ">=6.0.0"
+ "@codemirror/view": ">=6.0.0"
+ checksum: 656c5f78db4c6216a9a7eeb65455f52b002b7a5426bb1b05f11b896d5dba9887c7b9ee5aee9fe369d6c7b3c69128ee842cb5c8fe029cd07c2e48ec9358039a30
+ languageName: node
+ linkType: hard
+
+"@uiw/codemirror-themes@npm:^4.23.7":
+ version: 4.23.7
+ resolution: "@uiw/codemirror-themes@npm:4.23.7"
+ dependencies:
+ "@codemirror/language": ^6.0.0
+ "@codemirror/state": ^6.0.0
+ "@codemirror/view": ^6.0.0
+ peerDependencies:
+ "@codemirror/language": ">=6.0.0"
+ "@codemirror/state": ">=6.0.0"
+ "@codemirror/view": ">=6.0.0"
+ checksum: 8c2a9a7ee8df2de3f09ad1f18979c4b407f7dd03e1f6ddfe47837b9e4769b566a70259ec8c398473b6b6db79cdb8809d4acc2f2ed7851743e13ff95308f52e33
+ languageName: node
+ linkType: hard
+
+"@uiw/react-codemirror@npm:^4.23.7":
+ version: 4.23.7
+ resolution: "@uiw/react-codemirror@npm:4.23.7"
+ dependencies:
+ "@babel/runtime": ^7.18.6
+ "@codemirror/commands": ^6.1.0
+ "@codemirror/state": ^6.1.1
+ "@codemirror/theme-one-dark": ^6.0.0
+ "@uiw/codemirror-extensions-basic-setup": 4.23.7
+ codemirror: ^6.0.0
+ peerDependencies:
+ "@babel/runtime": ">=7.11.0"
+ "@codemirror/state": ">=6.0.0"
+ "@codemirror/theme-one-dark": ">=6.0.0"
+ "@codemirror/view": ">=6.0.0"
+ codemirror: ">=6.0.0"
+ react: ">=16.8.0"
+ react-dom: ">=16.8.0"
+ checksum: 5f6318b290f479c4718129578bdccbbdf64e3b588fdd79e3d80224779219eae7e249d40e4f88c864ed6ae40ea93036042313e983a022349563698593a2bf2e6c
+ languageName: node
+ linkType: hard
+
+"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0":
+ version: 1.2.1
+ resolution: "@ungap/structured-clone@npm:1.2.1"
+ checksum: 1e3b9fef293118861f0b2159b3695fc7f3793c0707095888ebb3ac7183f78c390e68f04cd4b4cf9ac979ae0da454505e08b3aae887cdd639609a3fe529e19e59
+ languageName: node
+ linkType: hard
+
+"acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.2":
+ version: 5.3.2
+ resolution: "acorn-jsx@npm:5.3.2"
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950
+ languageName: node
+ linkType: hard
+
+"acorn@npm:^8.0.0, acorn@npm:^8.9.0":
+ version: 8.14.0
+ resolution: "acorn@npm:8.14.0"
+ bin:
+ acorn: bin/acorn
+ checksum: 8755074ba55fff94e84e81c72f1013c2d9c78e973c31231c8ae505a5f966859baf654bddd75046bffd73ce816b149298977fff5077a3033dedba0ae2aad152d4
+ languageName: node
+ linkType: hard
+
+"ajv@npm:^6.12.4":
+ version: 6.12.6
+ resolution: "ajv@npm:6.12.6"
+ dependencies:
+ fast-deep-equal: ^3.1.1
+ fast-json-stable-stringify: ^2.0.0
+ json-schema-traverse: ^0.4.1
+ uri-js: ^4.2.2
+ checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4
+ languageName: node
+ linkType: hard
+
+"ansi-regex@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "ansi-regex@npm:5.0.1"
+ checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b
+ languageName: node
+ linkType: hard
+
+"ansi-regex@npm:^6.0.1":
+ version: 6.1.0
+ resolution: "ansi-regex@npm:6.1.0"
+ checksum: 495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac
+ languageName: node
+ linkType: hard
+
+"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0":
+ version: 4.3.0
+ resolution: "ansi-styles@npm:4.3.0"
+ dependencies:
+ color-convert: ^2.0.1
+ checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4
+ languageName: node
+ linkType: hard
+
+"ansi-styles@npm:^6.1.0":
+ version: 6.2.1
+ resolution: "ansi-styles@npm:6.2.1"
+ checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9
+ languageName: node
+ linkType: hard
+
+"argparse@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "argparse@npm:2.0.1"
+ checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced
+ languageName: node
+ linkType: hard
+
+"aria-query@npm:^5.3.2":
+ version: 5.3.2
+ resolution: "aria-query@npm:5.3.2"
+ checksum: d971175c85c10df0f6d14adfe6f1292409196114ab3c62f238e208b53103686f46cc70695a4f775b73bc65f6a09b6a092fd963c4f3a5a7d690c8fc5094925717
+ languageName: node
+ linkType: hard
+
+"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "array-buffer-byte-length@npm:1.0.2"
+ dependencies:
+ call-bound: ^1.0.3
+ is-array-buffer: ^3.0.5
+ checksum: 0ae3786195c3211b423e5be8dd93357870e6fb66357d81da968c2c39ef43583ef6eece1f9cb1caccdae4806739c65dea832b44b8593414313cd76a89795fca63
+ languageName: node
+ linkType: hard
+
+"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8":
+ version: 3.1.8
+ resolution: "array-includes@npm:3.1.8"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-object-atoms: ^1.0.0
+ get-intrinsic: ^1.2.4
+ is-string: ^1.0.7
+ checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91
+ languageName: node
+ linkType: hard
+
+"array.prototype.findlast@npm:^1.2.5":
+ version: 1.2.5
+ resolution: "array.prototype.findlast@npm:1.2.5"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ es-shim-unscopables: ^1.0.2
+ checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446
+ languageName: node
+ linkType: hard
+
+"array.prototype.findlastindex@npm:^1.2.5":
+ version: 1.2.5
+ resolution: "array.prototype.findlastindex@npm:1.2.5"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ es-shim-unscopables: ^1.0.2
+ checksum: 2c81cff2a75deb95bf1ed89b6f5f2bfbfb882211e3b7cc59c3d6b87df774cd9d6b36949a8ae39ac476e092c1d4a4905f5ee11a86a456abb10f35f8211ae4e710
+ languageName: node
+ linkType: hard
+
+"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2":
+ version: 1.3.3
+ resolution: "array.prototype.flat@npm:1.3.3"
+ dependencies:
+ call-bind: ^1.0.8
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.5
+ es-shim-unscopables: ^1.0.2
+ checksum: 5d5a7829ab2bb271a8d30a1c91e6271cef0ec534593c0fe6d2fb9ebf8bb62c1e5326e2fddcbbcbbe5872ca04f5e6b54a1ecf092e0af704fb538da9b2bfd95b40
+ languageName: node
+ linkType: hard
+
+"array.prototype.flatmap@npm:^1.3.2, array.prototype.flatmap@npm:^1.3.3":
+ version: 1.3.3
+ resolution: "array.prototype.flatmap@npm:1.3.3"
+ dependencies:
+ call-bind: ^1.0.8
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.5
+ es-shim-unscopables: ^1.0.2
+ checksum: 11b4de09b1cf008be6031bb507d997ad6f1892e57dc9153583de6ebca0f74ea403fffe0f203461d359de05048d609f3f480d9b46fed4099652d8b62cc972f284
+ languageName: node
+ linkType: hard
+
+"array.prototype.tosorted@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "array.prototype.tosorted@npm:1.1.4"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.3
+ es-errors: ^1.3.0
+ es-shim-unscopables: ^1.0.2
+ checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a
+ languageName: node
+ linkType: hard
+
+"arraybuffer.prototype.slice@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "arraybuffer.prototype.slice@npm:1.0.4"
+ dependencies:
+ array-buffer-byte-length: ^1.0.1
+ call-bind: ^1.0.8
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.5
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.6
+ is-array-buffer: ^3.0.4
+ checksum: b1d1fd20be4e972a3779b1569226f6740170dca10f07aa4421d42cefeec61391e79c557cda8e771f5baefe47d878178cd4438f60916ce831813c08132bced765
+ languageName: node
+ linkType: hard
+
+"ast-types-flow@npm:^0.0.8":
+ version: 0.0.8
+ resolution: "ast-types-flow@npm:0.0.8"
+ checksum: 0a64706609a179233aac23817837abab614f3548c252a2d3d79ea1e10c74aa28a0846e11f466cf72771b6ed8713abc094dcf8c40c3ec4207da163efa525a94a8
+ languageName: node
+ linkType: hard
+
+"ast-types@npm:^0.16.1":
+ version: 0.16.1
+ resolution: "ast-types@npm:0.16.1"
+ dependencies:
+ tslib: ^2.0.1
+ checksum: 21c186da9fdb1d8087b1b7dabbc4059f91aa5a1e593a9776b4393cc1eaa857e741b2dda678d20e34b16727b78fef3ab59cf8f0c75ed1ba649c78fe194e5c114b
+ languageName: node
+ linkType: hard
+
+"astring@npm:^1.8.0":
+ version: 1.9.0
+ resolution: "astring@npm:1.9.0"
+ bin:
+ astring: bin/astring
+ checksum: 69ffde3643f5280c6846231a995af878a94d3eab41d1a19a86b8c15f456453f63a7982cf5dd72d270b9f50dd26763a3e1e48377c961b7df16f550132b6dba805
+ languageName: node
+ linkType: hard
+
+"available-typed-arrays@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "available-typed-arrays@npm:1.0.7"
+ dependencies:
+ possible-typed-array-names: ^1.0.0
+ checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3
+ languageName: node
+ linkType: hard
+
+"axe-core@npm:^4.10.0":
+ version: 4.10.2
+ resolution: "axe-core@npm:4.10.2"
+ checksum: 2b9b1c93ea73ea9f206604e4e17bd771d2d835f077bde54517d73028b8865c69b209460e73d5b109968cbdb39ab3d28943efa5695189bd79e16421ce1706719e
+ languageName: node
+ linkType: hard
+
+"axobject-query@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "axobject-query@npm:4.1.0"
+ checksum: 7d1e87bf0aa7ae7a76cd39ab627b7c48fda3dc40181303d9adce4ba1d5b5ce73b5e5403ee6626ec8e91090448c887294d6144e24b6741a976f5be9347e3ae1df
+ languageName: node
+ linkType: hard
+
+"bail@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "bail@npm:2.0.2"
+ checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824
+ languageName: node
+ linkType: hard
+
+"balanced-match@npm:^1.0.0":
+ version: 1.0.2
+ resolution: "balanced-match@npm:1.0.2"
+ checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65
+ languageName: node
+ linkType: hard
+
+"better-opn@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "better-opn@npm:3.0.2"
+ dependencies:
+ open: ^8.0.4
+ checksum: 1471552fa7f733561e7f49e812be074b421153006ca744de985fb6d38939807959fc5fe9cb819cf09f864782e294704fd3b31711ea14c115baf3330a2f1135de
+ languageName: node
+ linkType: hard
+
+"brace-expansion@npm:^1.1.7":
+ version: 1.1.11
+ resolution: "brace-expansion@npm:1.1.11"
+ dependencies:
+ balanced-match: ^1.0.0
+ concat-map: 0.0.1
+ checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07
+ languageName: node
+ linkType: hard
+
+"brace-expansion@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "brace-expansion@npm:2.0.1"
+ dependencies:
+ balanced-match: ^1.0.0
+ checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1
+ languageName: node
+ linkType: hard
+
+"braces@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "braces@npm:3.0.3"
+ dependencies:
+ fill-range: ^7.1.1
+ checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69
+ languageName: node
+ linkType: hard
+
+"browser-assert@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "browser-assert@npm:1.2.1"
+ checksum: 8b2407cd04c1ed592cf892dec35942b7d72635829221e0788c9a16c4d2afa8b7156bc9705b1c4b32c30d88136c576fda3cbcb8f494d6f865264c706ea8798d92
+ languageName: node
+ linkType: hard
+
+"busboy@npm:1.6.0":
+ version: 1.6.0
+ resolution: "busboy@npm:1.6.0"
+ dependencies:
+ streamsearch: ^1.1.0
+ checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e
+ languageName: node
+ linkType: hard
+
+"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "call-bind-apply-helpers@npm:1.0.1"
+ dependencies:
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ checksum: 3c55343261bb387c58a4762d15ad9d42053659a62681ec5eb50690c6b52a4a666302a01d557133ce6533e8bd04530ee3b209f23dd06c9577a1925556f8fcccdf
+ languageName: node
+ linkType: hard
+
+"call-bind@npm:^1.0.7, call-bind@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "call-bind@npm:1.0.8"
+ dependencies:
+ call-bind-apply-helpers: ^1.0.0
+ es-define-property: ^1.0.0
+ get-intrinsic: ^1.2.4
+ set-function-length: ^1.2.2
+ checksum: aa2899bce917a5392fd73bd32e71799c37c0b7ab454e0ed13af7f6727549091182aade8bbb7b55f304a5bc436d543241c14090fb8a3137e9875e23f444f4f5a9
+ languageName: node
+ linkType: hard
+
+"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "call-bound@npm:1.0.3"
+ dependencies:
+ call-bind-apply-helpers: ^1.0.1
+ get-intrinsic: ^1.2.6
+ checksum: a93bbe0f2d0a2d6c144a4349ccd0593d5d0d5d9309b69101710644af8964286420062f2cc3114dca120b9bc8cc07507952d4b1b3ea7672e0d7f6f1675efedb32
+ languageName: node
+ linkType: hard
+
+"callsites@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "callsites@npm:3.1.0"
+ checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3
+ languageName: node
+ linkType: hard
+
+"caniuse-lite@npm:^1.0.30001579":
+ version: 1.0.30001690
+ resolution: "caniuse-lite@npm:1.0.30001690"
+ checksum: f2c1b595f15d8de4d9ccd155d61ac9f00ac62f1515870505a0186266fd52aef169fcddc90d8a4814e52b77107244806466fadc2c216662f23f1022a430e735ee
+ languageName: node
+ linkType: hard
+
+"canon-docs@workspace:.":
+ version: 0.0.0-use.local
+ resolution: "canon-docs@workspace:."
+ dependencies:
+ "@codemirror/lang-sass": ^6.0.2
+ "@lezer/highlight": ^1.2.1
+ "@mdx-js/loader": ^3.1.0
+ "@mdx-js/react": ^3.1.0
+ "@next/mdx": ^15.1.4
+ "@storybook/react": ^8.4.7
+ "@types/mdx": ^2.0.13
+ "@types/node": ^20
+ "@types/react": ^18
+ "@types/react-dom": ^18
+ "@uiw/codemirror-themes": ^4.23.7
+ "@uiw/react-codemirror": ^4.23.7
+ eslint: ^8
+ eslint-config-next: 14.2.23
+ lightningcss: ^1.28.2
+ next: 14.2.23
+ react: ^18
+ react-dom: ^18
+ react-frame-component: ^5.2.7
+ shiki: ^1.26.1
+ storybook: ^8.4.7
+ typescript: ^5
+ languageName: unknown
+ linkType: soft
+
+"ccount@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "ccount@npm:2.0.1"
+ checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4
+ languageName: node
+ linkType: hard
+
+"chalk@npm:^4.0.0":
+ version: 4.1.2
+ resolution: "chalk@npm:4.1.2"
+ dependencies:
+ ansi-styles: ^4.1.0
+ supports-color: ^7.1.0
+ checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc
+ languageName: node
+ linkType: hard
+
+"character-entities-html4@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "character-entities-html4@npm:2.1.0"
+ checksum: 7034aa7c7fa90309667f6dd50499c8a760c3d3a6fb159adb4e0bada0107d194551cdbad0714302f62d06ce4ed68565c8c2e15fdef2e8f8764eb63fa92b34b11d
+ languageName: node
+ linkType: hard
+
+"character-entities-legacy@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "character-entities-legacy@npm:3.0.0"
+ checksum: 7582af055cb488b626d364b7d7a4e46b06abd526fb63c0e4eb35bcb9c9799cc4f76b39f34fdccef2d1174ac95e53e9ab355aae83227c1a2505877893fce77731
+ languageName: node
+ linkType: hard
+
+"character-entities@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "character-entities@npm:2.0.2"
+ checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def
+ languageName: node
+ linkType: hard
+
+"character-reference-invalid@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "character-reference-invalid@npm:2.0.1"
+ checksum: 98d3b1a52ae510b7329e6ee7f6210df14f1e318c5415975d4c9e7ee0ef4c07875d47c6e74230c64551f12f556b4a8ccc24d9f3691a2aa197019e72a95e9297ee
+ languageName: node
+ linkType: hard
+
+"client-only@npm:0.0.1":
+ version: 0.0.1
+ resolution: "client-only@npm:0.0.1"
+ checksum: 0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8
+ languageName: node
+ linkType: hard
+
+"codemirror@npm:^6.0.0":
+ version: 6.0.1
+ resolution: "codemirror@npm:6.0.1"
+ dependencies:
+ "@codemirror/autocomplete": ^6.0.0
+ "@codemirror/commands": ^6.0.0
+ "@codemirror/language": ^6.0.0
+ "@codemirror/lint": ^6.0.0
+ "@codemirror/search": ^6.0.0
+ "@codemirror/state": ^6.0.0
+ "@codemirror/view": ^6.0.0
+ checksum: 1a78f7077ac5801bdbff162aa0c61bf2b974603c7e9a477198c3ce50c789af674a061d7c293c58b73807eda345c2b5228c38ad2aabb9319d552d5486f785cbef
+ languageName: node
+ linkType: hard
+
+"collapse-white-space@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "collapse-white-space@npm:2.1.0"
+ checksum: c8978b1f4e7d68bf846cfdba6c6689ce8910511df7d331eb6e6757e51ceffb52768d59a28db26186c91dcf9594955b59be9f8ccd473c485790f5d8b90dc6726f
+ languageName: node
+ linkType: hard
+
+"color-convert@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "color-convert@npm:2.0.1"
+ dependencies:
+ color-name: ~1.1.4
+ checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336
+ languageName: node
+ linkType: hard
+
+"color-name@npm:~1.1.4":
+ version: 1.1.4
+ resolution: "color-name@npm:1.1.4"
+ checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
+ languageName: node
+ linkType: hard
+
+"comma-separated-tokens@npm:^2.0.0":
+ version: 2.0.3
+ resolution: "comma-separated-tokens@npm:2.0.3"
+ checksum: e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d
+ languageName: node
+ linkType: hard
+
+"concat-map@npm:0.0.1":
+ version: 0.0.1
+ resolution: "concat-map@npm:0.0.1"
+ checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af
+ languageName: node
+ linkType: hard
+
+"crelt@npm:^1.0.5":
+ version: 1.0.6
+ resolution: "crelt@npm:1.0.6"
+ checksum: dad842093371ad702afbc0531bfca2b0a8dd920b23a42f26e66dabbed9aad9acd5b9030496359545ef3937c3aced0fd4ac39f7a2d280a23ddf9eb7fdcb94a69f
+ languageName: node
+ linkType: hard
+
+"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2":
+ version: 7.0.6
+ resolution: "cross-spawn@npm:7.0.6"
+ dependencies:
+ path-key: ^3.1.0
+ shebang-command: ^2.0.0
+ which: ^2.0.1
+ checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b
+ languageName: node
+ linkType: hard
+
+"csstype@npm:^3.0.2":
+ version: 3.1.3
+ resolution: "csstype@npm:3.1.3"
+ checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7
+ languageName: node
+ linkType: hard
+
+"damerau-levenshtein@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "damerau-levenshtein@npm:1.0.8"
+ checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de
+ languageName: node
+ linkType: hard
+
+"data-view-buffer@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "data-view-buffer@npm:1.0.2"
+ dependencies:
+ call-bound: ^1.0.3
+ es-errors: ^1.3.0
+ is-data-view: ^1.0.2
+ checksum: 1e1cd509c3037ac0f8ba320da3d1f8bf1a9f09b0be09394b5e40781b8cc15ff9834967ba7c9f843a425b34f9fe14ce44cf055af6662c44263424c1eb8d65659b
+ languageName: node
+ linkType: hard
+
+"data-view-byte-length@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "data-view-byte-length@npm:1.0.2"
+ dependencies:
+ call-bound: ^1.0.3
+ es-errors: ^1.3.0
+ is-data-view: ^1.0.2
+ checksum: 3600c91ced1cfa935f19ef2abae11029e01738de8d229354d3b2a172bf0d7e4ed08ff8f53294b715569fdf72dfeaa96aa7652f479c0f60570878d88e7e8bddf6
+ languageName: node
+ linkType: hard
+
+"data-view-byte-offset@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "data-view-byte-offset@npm:1.0.1"
+ dependencies:
+ call-bound: ^1.0.2
+ es-errors: ^1.3.0
+ is-data-view: ^1.0.1
+ checksum: 8dd492cd51d19970876626b5b5169fbb67ca31ec1d1d3238ee6a71820ca8b80cafb141c485999db1ee1ef02f2cc3b99424c5eda8d59e852d9ebb79ab290eb5ee
+ languageName: node
+ linkType: hard
+
+"debug@npm:^3.2.7":
+ version: 3.2.7
+ resolution: "debug@npm:3.2.7"
+ dependencies:
+ ms: ^2.1.1
+ checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c
+ languageName: node
+ linkType: hard
+
+"debug@npm:^4.0.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.7":
+ version: 4.4.0
+ resolution: "debug@npm:4.4.0"
+ dependencies:
+ ms: ^2.1.3
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479
+ languageName: node
+ linkType: hard
+
+"decode-named-character-reference@npm:^1.0.0":
+ version: 1.0.2
+ resolution: "decode-named-character-reference@npm:1.0.2"
+ dependencies:
+ character-entities: ^2.0.0
+ checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78
+ languageName: node
+ linkType: hard
+
+"deep-is@npm:^0.1.3":
+ version: 0.1.4
+ resolution: "deep-is@npm:0.1.4"
+ checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804
+ languageName: node
+ linkType: hard
+
+"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "define-data-property@npm:1.1.4"
+ dependencies:
+ es-define-property: ^1.0.0
+ es-errors: ^1.3.0
+ gopd: ^1.0.1
+ checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b
+ languageName: node
+ linkType: hard
+
+"define-lazy-prop@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "define-lazy-prop@npm:2.0.0"
+ checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2
+ languageName: node
+ linkType: hard
+
+"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "define-properties@npm:1.2.1"
+ dependencies:
+ define-data-property: ^1.0.1
+ has-property-descriptors: ^1.0.0
+ object-keys: ^1.1.1
+ checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12
+ languageName: node
+ linkType: hard
+
+"dequal@npm:^2.0.0":
+ version: 2.0.3
+ resolution: "dequal@npm:2.0.3"
+ checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90
+ languageName: node
+ linkType: hard
+
+"detect-libc@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "detect-libc@npm:1.0.3"
+ bin:
+ detect-libc: ./bin/detect-libc.js
+ checksum: daaaed925ffa7889bd91d56e9624e6c8033911bb60f3a50a74a87500680652969dbaab9526d1e200a4c94acf80fc862a22131841145a0a8482d60a99c24f4a3e
+ languageName: node
+ linkType: hard
+
+"devlop@npm:^1.0.0, devlop@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "devlop@npm:1.1.0"
+ dependencies:
+ dequal: ^2.0.0
+ checksum: d2ff650bac0bb6ef08c48f3ba98640bb5fec5cce81e9957eb620408d1bab1204d382a45b785c6b3314dc867bb0684936b84c6867820da6db97cbb5d3c15dd185
+ languageName: node
+ linkType: hard
+
+"doctrine@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "doctrine@npm:2.1.0"
+ dependencies:
+ esutils: ^2.0.2
+ checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8
+ languageName: node
+ linkType: hard
+
+"doctrine@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "doctrine@npm:3.0.0"
+ dependencies:
+ esutils: ^2.0.2
+ checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce
+ languageName: node
+ linkType: hard
+
+"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "dunder-proto@npm:1.0.1"
+ dependencies:
+ call-bind-apply-helpers: ^1.0.1
+ es-errors: ^1.3.0
+ gopd: ^1.2.0
+ checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90
+ languageName: node
+ linkType: hard
+
+"eastasianwidth@npm:^0.2.0":
+ version: 0.2.0
+ resolution: "eastasianwidth@npm:0.2.0"
+ checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed
+ languageName: node
+ linkType: hard
+
+"emoji-regex-xs@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "emoji-regex-xs@npm:1.0.0"
+ checksum: c33be159da769836f83281f2802d90169093ebf3c2c1643d6801d891c53beac5ef785fd8279f9b02fa6dc6c47c367818e076949f1e13bd1b3f921b416de4cbea
+ languageName: node
+ linkType: hard
+
+"emoji-regex@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "emoji-regex@npm:8.0.0"
+ checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192
+ languageName: node
+ linkType: hard
+
+"emoji-regex@npm:^9.2.2":
+ version: 9.2.2
+ resolution: "emoji-regex@npm:9.2.2"
+ checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601
+ languageName: node
+ linkType: hard
+
+"enhanced-resolve@npm:^5.15.0":
+ version: 5.18.0
+ resolution: "enhanced-resolve@npm:5.18.0"
+ dependencies:
+ graceful-fs: ^4.2.4
+ tapable: ^2.2.0
+ checksum: 77c6b11f0d19f21f52214e5a2c0dfb7070decb4045572f44be4cacf92b4be5e2c1d9a4c044a226d1003ca9daf9b71d498d256e7520ff5060f23d0284f814d392
+ languageName: node
+ linkType: hard
+
+"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9":
+ version: 1.23.9
+ resolution: "es-abstract@npm:1.23.9"
+ dependencies:
+ array-buffer-byte-length: ^1.0.2
+ arraybuffer.prototype.slice: ^1.0.4
+ available-typed-arrays: ^1.0.7
+ call-bind: ^1.0.8
+ call-bound: ^1.0.3
+ data-view-buffer: ^1.0.2
+ data-view-byte-length: ^1.0.2
+ data-view-byte-offset: ^1.0.1
+ es-define-property: ^1.0.1
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ es-set-tostringtag: ^2.1.0
+ es-to-primitive: ^1.3.0
+ function.prototype.name: ^1.1.8
+ get-intrinsic: ^1.2.7
+ get-proto: ^1.0.0
+ get-symbol-description: ^1.1.0
+ globalthis: ^1.0.4
+ gopd: ^1.2.0
+ has-property-descriptors: ^1.0.2
+ has-proto: ^1.2.0
+ has-symbols: ^1.1.0
+ hasown: ^2.0.2
+ internal-slot: ^1.1.0
+ is-array-buffer: ^3.0.5
+ is-callable: ^1.2.7
+ is-data-view: ^1.0.2
+ is-regex: ^1.2.1
+ is-shared-array-buffer: ^1.0.4
+ is-string: ^1.1.1
+ is-typed-array: ^1.1.15
+ is-weakref: ^1.1.0
+ math-intrinsics: ^1.1.0
+ object-inspect: ^1.13.3
+ object-keys: ^1.1.1
+ object.assign: ^4.1.7
+ own-keys: ^1.0.1
+ regexp.prototype.flags: ^1.5.3
+ safe-array-concat: ^1.1.3
+ safe-push-apply: ^1.0.0
+ safe-regex-test: ^1.1.0
+ set-proto: ^1.0.0
+ string.prototype.trim: ^1.2.10
+ string.prototype.trimend: ^1.0.9
+ string.prototype.trimstart: ^1.0.8
+ typed-array-buffer: ^1.0.3
+ typed-array-byte-length: ^1.0.3
+ typed-array-byte-offset: ^1.0.4
+ typed-array-length: ^1.0.7
+ unbox-primitive: ^1.1.0
+ which-typed-array: ^1.1.18
+ checksum: f3ee2614159ca197f97414ab36e3f406ee748ce2f97ffbf09e420726db5a442ce13f1e574601468bff6e6eb81588e6c9ce1ac6c03868a37c7cd48ac679f8485a
+ languageName: node
+ linkType: hard
+
+"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "es-define-property@npm:1.0.1"
+ checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a
+ languageName: node
+ linkType: hard
+
+"es-errors@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "es-errors@npm:1.3.0"
+ checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5
+ languageName: node
+ linkType: hard
+
+"es-iterator-helpers@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "es-iterator-helpers@npm:1.2.1"
+ dependencies:
+ call-bind: ^1.0.8
+ call-bound: ^1.0.3
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.6
+ es-errors: ^1.3.0
+ es-set-tostringtag: ^2.0.3
+ function-bind: ^1.1.2
+ get-intrinsic: ^1.2.6
+ globalthis: ^1.0.4
+ gopd: ^1.2.0
+ has-property-descriptors: ^1.0.2
+ has-proto: ^1.2.0
+ has-symbols: ^1.1.0
+ internal-slot: ^1.1.0
+ iterator.prototype: ^1.1.4
+ safe-array-concat: ^1.1.3
+ checksum: 952808dd1df3643d67ec7adf20c30b36e5eecadfbf36354e6f39ed3266c8e0acf3446ce9bc465e38723d613cb1d915c1c07c140df65bdce85da012a6e7bda62b
+ languageName: node
+ linkType: hard
+
+"es-object-atoms@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "es-object-atoms@npm:1.0.0"
+ dependencies:
+ es-errors: ^1.3.0
+ checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c
+ languageName: node
+ linkType: hard
+
+"es-set-tostringtag@npm:^2.0.3, es-set-tostringtag@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "es-set-tostringtag@npm:2.1.0"
+ dependencies:
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.6
+ has-tostringtag: ^1.0.2
+ hasown: ^2.0.2
+ checksum: 789f35de4be3dc8d11fdcb91bc26af4ae3e6d602caa93299a8c45cf05d36cc5081454ae2a6d3afa09cceca214b76c046e4f8151e092e6fc7feeb5efb9e794fc6
+ languageName: node
+ linkType: hard
+
+"es-shim-unscopables@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "es-shim-unscopables@npm:1.0.2"
+ dependencies:
+ hasown: ^2.0.0
+ checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626
+ languageName: node
+ linkType: hard
+
+"es-to-primitive@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "es-to-primitive@npm:1.3.0"
+ dependencies:
+ is-callable: ^1.2.7
+ is-date-object: ^1.0.5
+ is-symbol: ^1.0.4
+ checksum: 966965880356486cd4d1fe9a523deda2084c81b3702d951212c098f5f2ee93605d1b7c1840062efb48a07d892641c7ed1bc194db563645c0dd2b919cb6d65b93
+ languageName: node
+ linkType: hard
+
+"esast-util-from-estree@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "esast-util-from-estree@npm:2.0.0"
+ dependencies:
+ "@types/estree-jsx": ^1.0.0
+ devlop: ^1.0.0
+ estree-util-visit: ^2.0.0
+ unist-util-position-from-estree: ^2.0.0
+ checksum: b9ea5b6db25decbe7c3be23a00251542641c9538499905d740d76fd5c9fea9f727ad1d0cce4f2071b6d9bb2f405f4f11acbdec9b8ea6485649cf60d886b99f28
+ languageName: node
+ linkType: hard
+
+"esast-util-from-js@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "esast-util-from-js@npm:2.0.1"
+ dependencies:
+ "@types/estree-jsx": ^1.0.0
+ acorn: ^8.0.0
+ esast-util-from-estree: ^2.0.0
+ vfile-message: ^4.0.0
+ checksum: a262b94d973d8cc80227e083a7f1367028c4acf524e8f8507177626302bac567f260f75ea52321c8a9650e34c47e70bcc4f7696f710002f64b21aaa630e73e43
+ languageName: node
+ linkType: hard
+
+"esbuild-register@npm:^3.5.0":
+ version: 3.6.0
+ resolution: "esbuild-register@npm:3.6.0"
+ dependencies:
+ debug: ^4.3.4
+ peerDependencies:
+ esbuild: ">=0.12 <1"
+ checksum: 9221e26dde3366398a43183b600d8e9252b8003516cd766983a06c321eb07cf1b6b236948a21e4d1728c17a341c0fa52b49409c951d89fc7bf65d07d43c31a05
+ languageName: node
+ linkType: hard
+
+"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0":
+ version: 0.24.2
+ resolution: "esbuild@npm:0.24.2"
+ dependencies:
+ "@esbuild/aix-ppc64": 0.24.2
+ "@esbuild/android-arm": 0.24.2
+ "@esbuild/android-arm64": 0.24.2
+ "@esbuild/android-x64": 0.24.2
+ "@esbuild/darwin-arm64": 0.24.2
+ "@esbuild/darwin-x64": 0.24.2
+ "@esbuild/freebsd-arm64": 0.24.2
+ "@esbuild/freebsd-x64": 0.24.2
+ "@esbuild/linux-arm": 0.24.2
+ "@esbuild/linux-arm64": 0.24.2
+ "@esbuild/linux-ia32": 0.24.2
+ "@esbuild/linux-loong64": 0.24.2
+ "@esbuild/linux-mips64el": 0.24.2
+ "@esbuild/linux-ppc64": 0.24.2
+ "@esbuild/linux-riscv64": 0.24.2
+ "@esbuild/linux-s390x": 0.24.2
+ "@esbuild/linux-x64": 0.24.2
+ "@esbuild/netbsd-arm64": 0.24.2
+ "@esbuild/netbsd-x64": 0.24.2
+ "@esbuild/openbsd-arm64": 0.24.2
+ "@esbuild/openbsd-x64": 0.24.2
+ "@esbuild/sunos-x64": 0.24.2
+ "@esbuild/win32-arm64": 0.24.2
+ "@esbuild/win32-ia32": 0.24.2
+ "@esbuild/win32-x64": 0.24.2
+ dependenciesMeta:
+ "@esbuild/aix-ppc64":
+ optional: true
+ "@esbuild/android-arm":
+ optional: true
+ "@esbuild/android-arm64":
+ optional: true
+ "@esbuild/android-x64":
+ optional: true
+ "@esbuild/darwin-arm64":
+ optional: true
+ "@esbuild/darwin-x64":
+ optional: true
+ "@esbuild/freebsd-arm64":
+ optional: true
+ "@esbuild/freebsd-x64":
+ optional: true
+ "@esbuild/linux-arm":
+ optional: true
+ "@esbuild/linux-arm64":
+ optional: true
+ "@esbuild/linux-ia32":
+ optional: true
+ "@esbuild/linux-loong64":
+ optional: true
+ "@esbuild/linux-mips64el":
+ optional: true
+ "@esbuild/linux-ppc64":
+ optional: true
+ "@esbuild/linux-riscv64":
+ optional: true
+ "@esbuild/linux-s390x":
+ optional: true
+ "@esbuild/linux-x64":
+ optional: true
+ "@esbuild/netbsd-arm64":
+ optional: true
+ "@esbuild/netbsd-x64":
+ optional: true
+ "@esbuild/openbsd-arm64":
+ optional: true
+ "@esbuild/openbsd-x64":
+ optional: true
+ "@esbuild/sunos-x64":
+ optional: true
+ "@esbuild/win32-arm64":
+ optional: true
+ "@esbuild/win32-ia32":
+ optional: true
+ "@esbuild/win32-x64":
+ optional: true
+ bin:
+ esbuild: bin/esbuild
+ checksum: e2303f8331887e31330b5a972fb9640ad93dfc5af76cb2156faa9eaa32bac5c403244096cbdafc45622829913e63664dfd88410987e3468df4354492f908a094
+ languageName: node
+ linkType: hard
+
+"escape-string-regexp@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "escape-string-regexp@npm:4.0.0"
+ checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5
+ languageName: node
+ linkType: hard
+
+"eslint-config-next@npm:14.2.23":
+ version: 14.2.23
+ resolution: "eslint-config-next@npm:14.2.23"
+ dependencies:
+ "@next/eslint-plugin-next": 14.2.23
+ "@rushstack/eslint-patch": ^1.3.3
+ "@typescript-eslint/eslint-plugin": ^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ "@typescript-eslint/parser": ^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ eslint-import-resolver-node: ^0.3.6
+ eslint-import-resolver-typescript: ^3.5.2
+ eslint-plugin-import: ^2.28.1
+ eslint-plugin-jsx-a11y: ^6.7.1
+ eslint-plugin-react: ^7.33.2
+ eslint-plugin-react-hooks: ^4.5.0 || 5.0.0-canary-7118f5dd7-20230705
+ peerDependencies:
+ eslint: ^7.23.0 || ^8.0.0
+ typescript: ">=3.3.1"
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: ee23822e91c155cb0531c786cf11573b8914bc7dfa3b506c45c1d13d4b0c1b515764bd2744daa9c36bddf3bb7cfff434fa6bd169540a2fb933a336df78e7d850
+ languageName: node
+ linkType: hard
+
+"eslint-import-resolver-node@npm:^0.3.6, eslint-import-resolver-node@npm:^0.3.9":
+ version: 0.3.9
+ resolution: "eslint-import-resolver-node@npm:0.3.9"
+ dependencies:
+ debug: ^3.2.7
+ is-core-module: ^2.13.0
+ resolve: ^1.22.4
+ checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22
+ languageName: node
+ linkType: hard
+
+"eslint-import-resolver-typescript@npm:^3.5.2":
+ version: 3.7.0
+ resolution: "eslint-import-resolver-typescript@npm:3.7.0"
+ dependencies:
+ "@nolyfill/is-core-module": 1.0.39
+ debug: ^4.3.7
+ enhanced-resolve: ^5.15.0
+ fast-glob: ^3.3.2
+ get-tsconfig: ^4.7.5
+ is-bun-module: ^1.0.2
+ is-glob: ^4.0.3
+ stable-hash: ^0.0.4
+ peerDependencies:
+ eslint: "*"
+ eslint-plugin-import: "*"
+ eslint-plugin-import-x: "*"
+ peerDependenciesMeta:
+ eslint-plugin-import:
+ optional: true
+ eslint-plugin-import-x:
+ optional: true
+ checksum: e24659fbd91957c9db8de72243a6ffcf891ffd1175bca54d6993a9ddecc352e76d512c7ee22a48ae7d3ec1ae4c492fd2ab649cde636a993f4a42bf4d1ae4d34a
+ languageName: node
+ linkType: hard
+
+"eslint-module-utils@npm:^2.12.0":
+ version: 2.12.0
+ resolution: "eslint-module-utils@npm:2.12.0"
+ dependencies:
+ debug: ^3.2.7
+ peerDependenciesMeta:
+ eslint:
+ optional: true
+ checksum: be3ac52e0971c6f46daeb1a7e760e45c7c45f820c8cc211799f85f10f04ccbf7afc17039165d56cb2da7f7ca9cec2b3a777013cddf0b976784b37eb9efa24180
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-import@npm:^2.28.1":
+ version: 2.31.0
+ resolution: "eslint-plugin-import@npm:2.31.0"
+ dependencies:
+ "@rtsao/scc": ^1.1.0
+ array-includes: ^3.1.8
+ array.prototype.findlastindex: ^1.2.5
+ array.prototype.flat: ^1.3.2
+ array.prototype.flatmap: ^1.3.2
+ debug: ^3.2.7
+ doctrine: ^2.1.0
+ eslint-import-resolver-node: ^0.3.9
+ eslint-module-utils: ^2.12.0
+ hasown: ^2.0.2
+ is-core-module: ^2.15.1
+ is-glob: ^4.0.3
+ minimatch: ^3.1.2
+ object.fromentries: ^2.0.8
+ object.groupby: ^1.0.3
+ object.values: ^1.2.0
+ semver: ^6.3.1
+ string.prototype.trimend: ^1.0.8
+ tsconfig-paths: ^3.15.0
+ peerDependencies:
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
+ checksum: b1d2ac268b3582ff1af2a72a2c476eae4d250c100f2e335b6e102036e4a35efa530b80ec578dfc36761fabb34a635b9bf5ab071abe9d4404a4bb054fdf22d415
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-jsx-a11y@npm:^6.7.1":
+ version: 6.10.2
+ resolution: "eslint-plugin-jsx-a11y@npm:6.10.2"
+ dependencies:
+ aria-query: ^5.3.2
+ array-includes: ^3.1.8
+ array.prototype.flatmap: ^1.3.2
+ ast-types-flow: ^0.0.8
+ axe-core: ^4.10.0
+ axobject-query: ^4.1.0
+ damerau-levenshtein: ^1.0.8
+ emoji-regex: ^9.2.2
+ hasown: ^2.0.2
+ jsx-ast-utils: ^3.3.5
+ language-tags: ^1.0.9
+ minimatch: ^3.1.2
+ object.fromentries: ^2.0.8
+ safe-regex-test: ^1.0.3
+ string.prototype.includes: ^2.0.1
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
+ checksum: 0cc861398fa26ada61ed5703eef5b335495fcb96253263dcd5e399488ff019a2636372021baacc040e3560d1a34bfcd5d5ad9f1754f44cd0509c956f7df94050
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-react-hooks@npm:^4.5.0 || 5.0.0-canary-7118f5dd7-20230705":
+ version: 5.0.0-canary-7118f5dd7-20230705
+ resolution: "eslint-plugin-react-hooks@npm:5.0.0-canary-7118f5dd7-20230705"
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ checksum: 20e334e60bf5e56cf9f760598411847525c3ff826e6ae7757c8efdc60b33d47a97ddbe1b94ce95956ea9f7bbef37995b19c716be50bd44e6a1e789cba08b6224
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-react@npm:^7.33.2":
+ version: 7.37.3
+ resolution: "eslint-plugin-react@npm:7.37.3"
+ dependencies:
+ array-includes: ^3.1.8
+ array.prototype.findlast: ^1.2.5
+ array.prototype.flatmap: ^1.3.3
+ array.prototype.tosorted: ^1.1.4
+ doctrine: ^2.1.0
+ es-iterator-helpers: ^1.2.1
+ estraverse: ^5.3.0
+ hasown: ^2.0.2
+ jsx-ast-utils: ^2.4.1 || ^3.0.0
+ minimatch: ^3.1.2
+ object.entries: ^1.1.8
+ object.fromentries: ^2.0.8
+ object.values: ^1.2.1
+ prop-types: ^15.8.1
+ resolve: ^2.0.0-next.5
+ semver: ^6.3.1
+ string.prototype.matchall: ^4.0.12
+ string.prototype.repeat: ^1.0.0
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
+ checksum: 670dcee215f560a394b8b9966aecfc3c5ee5c15603a690f5333b0e16863275958f9c1853b12355eb0e36ef74dfac8bf645e4f440cb9b985a3bae2ac09d5ed55a
+ languageName: node
+ linkType: hard
+
+"eslint-scope@npm:^7.2.2":
+ version: 7.2.2
+ resolution: "eslint-scope@npm:7.2.2"
+ dependencies:
+ esrecurse: ^4.3.0
+ estraverse: ^5.2.0
+ checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e
+ languageName: node
+ linkType: hard
+
+"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3":
+ version: 3.4.3
+ resolution: "eslint-visitor-keys@npm:3.4.3"
+ checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60
+ languageName: node
+ linkType: hard
+
+"eslint-visitor-keys@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "eslint-visitor-keys@npm:4.2.0"
+ checksum: 779c604672b570bb4da84cef32f6abb085ac78379779c1122d7879eade8bb38ae715645324597cf23232d03cef06032c9844d25c73625bc282a5bfd30247e5b5
+ languageName: node
+ linkType: hard
+
+"eslint@npm:^8":
+ version: 8.57.1
+ resolution: "eslint@npm:8.57.1"
+ dependencies:
+ "@eslint-community/eslint-utils": ^4.2.0
+ "@eslint-community/regexpp": ^4.6.1
+ "@eslint/eslintrc": ^2.1.4
+ "@eslint/js": 8.57.1
+ "@humanwhocodes/config-array": ^0.13.0
+ "@humanwhocodes/module-importer": ^1.0.1
+ "@nodelib/fs.walk": ^1.2.8
+ "@ungap/structured-clone": ^1.2.0
+ ajv: ^6.12.4
+ chalk: ^4.0.0
+ cross-spawn: ^7.0.2
+ debug: ^4.3.2
+ doctrine: ^3.0.0
+ escape-string-regexp: ^4.0.0
+ eslint-scope: ^7.2.2
+ eslint-visitor-keys: ^3.4.3
+ espree: ^9.6.1
+ esquery: ^1.4.2
+ esutils: ^2.0.2
+ fast-deep-equal: ^3.1.3
+ file-entry-cache: ^6.0.1
+ find-up: ^5.0.0
+ glob-parent: ^6.0.2
+ globals: ^13.19.0
+ graphemer: ^1.4.0
+ ignore: ^5.2.0
+ imurmurhash: ^0.1.4
+ is-glob: ^4.0.0
+ is-path-inside: ^3.0.3
+ js-yaml: ^4.1.0
+ json-stable-stringify-without-jsonify: ^1.0.1
+ levn: ^0.4.1
+ lodash.merge: ^4.6.2
+ minimatch: ^3.1.2
+ natural-compare: ^1.4.0
+ optionator: ^0.9.3
+ strip-ansi: ^6.0.1
+ text-table: ^0.2.0
+ bin:
+ eslint: bin/eslint.js
+ checksum: e2489bb7f86dd2011967759a09164e65744ef7688c310bc990612fc26953f34cc391872807486b15c06833bdff737726a23e9b4cdba5de144c311377dc41d91b
+ languageName: node
+ linkType: hard
+
+"espree@npm:^9.6.0, espree@npm:^9.6.1":
+ version: 9.6.1
+ resolution: "espree@npm:9.6.1"
+ dependencies:
+ acorn: ^8.9.0
+ acorn-jsx: ^5.3.2
+ eslint-visitor-keys: ^3.4.1
+ checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9
+ languageName: node
+ linkType: hard
+
+"esprima@npm:~4.0.0":
+ version: 4.0.1
+ resolution: "esprima@npm:4.0.1"
+ bin:
+ esparse: ./bin/esparse.js
+ esvalidate: ./bin/esvalidate.js
+ checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628
+ languageName: node
+ linkType: hard
+
+"esquery@npm:^1.4.2":
+ version: 1.6.0
+ resolution: "esquery@npm:1.6.0"
+ dependencies:
+ estraverse: ^5.1.0
+ checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2
+ languageName: node
+ linkType: hard
+
+"esrecurse@npm:^4.3.0":
+ version: 4.3.0
+ resolution: "esrecurse@npm:4.3.0"
+ dependencies:
+ estraverse: ^5.2.0
+ checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837
+ languageName: node
+ linkType: hard
+
+"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0":
+ version: 5.3.0
+ resolution: "estraverse@npm:5.3.0"
+ checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b
+ languageName: node
+ linkType: hard
+
+"estree-util-attach-comments@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "estree-util-attach-comments@npm:3.0.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ checksum: 56254eaef39659e6351919ebc2ae53a37a09290a14571c19e373e9d5fad343a3403d9ad0c23ae465d6e7d08c3e572fd56fb8c793efe6434a261bf1489932dbd5
+ languageName: node
+ linkType: hard
+
+"estree-util-build-jsx@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "estree-util-build-jsx@npm:3.0.1"
+ dependencies:
+ "@types/estree-jsx": ^1.0.0
+ devlop: ^1.0.0
+ estree-util-is-identifier-name: ^3.0.0
+ estree-walker: ^3.0.0
+ checksum: 185eff060eda2ba32cecd15904db4f5ba0681159fbdf54f0f6586cd9411e77e733861a833d0aee3415e1d1fd4b17edf08bc9e9872cee98e6ec7b0800e1a85064
+ languageName: node
+ linkType: hard
+
+"estree-util-is-identifier-name@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "estree-util-is-identifier-name@npm:3.0.0"
+ checksum: ea3909f0188ea164af0aadeca87c087e3e5da78d76da5ae9c7954ff1340ea3e4679c4653bbf4299ffb70caa9b322218cc1128db2541f3d2976eb9704f9857787
+ languageName: node
+ linkType: hard
+
+"estree-util-scope@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "estree-util-scope@npm:1.0.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ devlop: ^1.0.0
+ checksum: df2ed1b4c078002d50f7e330980e7b6f2630a1f551102203ee5000b61ed8ce5720fe7b9bc1a238a5fded5cf0f157dbe516ad6807323f037b3bb594bd1a0d61bb
+ languageName: node
+ linkType: hard
+
+"estree-util-to-js@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "estree-util-to-js@npm:2.0.0"
+ dependencies:
+ "@types/estree-jsx": ^1.0.0
+ astring: ^1.8.0
+ source-map: ^0.7.0
+ checksum: 833edc94ab9978e0918f90261e0a3361bf4564fec4901f326d2237a9235d3f5fc6482da3be5acc545e702c8c7cb8bc5de5c7c71ba3b080eb1975bcfdf3923d79
+ languageName: node
+ linkType: hard
+
+"estree-util-visit@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "estree-util-visit@npm:2.0.0"
+ dependencies:
+ "@types/estree-jsx": ^1.0.0
+ "@types/unist": ^3.0.0
+ checksum: 6444b38f224322945a6d19ea81a8828a0eec64aefb2bf1ea791fe20df496f7b7c543408d637df899e6a8e318b638f66226f16378a33c4c2b192ba5c3f891121f
+ languageName: node
+ linkType: hard
+
+"estree-walker@npm:^3.0.0":
+ version: 3.0.3
+ resolution: "estree-walker@npm:3.0.3"
+ dependencies:
+ "@types/estree": ^1.0.0
+ checksum: a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af
+ languageName: node
+ linkType: hard
+
+"esutils@npm:^2.0.2":
+ version: 2.0.3
+ resolution: "esutils@npm:2.0.3"
+ checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87
+ languageName: node
+ linkType: hard
+
+"extend@npm:^3.0.0":
+ version: 3.0.2
+ resolution: "extend@npm:3.0.2"
+ checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515
+ languageName: node
+ linkType: hard
+
+"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
+ version: 3.1.3
+ resolution: "fast-deep-equal@npm:3.1.3"
+ checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d
+ languageName: node
+ linkType: hard
+
+"fast-glob@npm:^3.3.2":
+ version: 3.3.3
+ resolution: "fast-glob@npm:3.3.3"
+ dependencies:
+ "@nodelib/fs.stat": ^2.0.2
+ "@nodelib/fs.walk": ^1.2.3
+ glob-parent: ^5.1.2
+ merge2: ^1.3.0
+ micromatch: ^4.0.8
+ checksum: 0704d7b85c0305fd2cef37777337dfa26230fdd072dce9fb5c82a4b03156f3ffb8ed3e636033e65d45d2a5805a4e475825369a27404c0307f2db0c8eb3366fbd
+ languageName: node
+ linkType: hard
+
+"fast-json-stable-stringify@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "fast-json-stable-stringify@npm:2.1.0"
+ checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb
+ languageName: node
+ linkType: hard
+
+"fast-levenshtein@npm:^2.0.6":
+ version: 2.0.6
+ resolution: "fast-levenshtein@npm:2.0.6"
+ checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c
+ languageName: node
+ linkType: hard
+
+"fastq@npm:^1.6.0":
+ version: 1.18.0
+ resolution: "fastq@npm:1.18.0"
+ dependencies:
+ reusify: ^1.0.4
+ checksum: fb8d94318c2e5545a1913c1647b35e8b7825caaba888a98ef9887085e57f5a82104aefbb05f26c81d4e220f02b2ea6f2c999132186d8c77e6c681d91870191ba
+ languageName: node
+ linkType: hard
+
+"file-entry-cache@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "file-entry-cache@npm:6.0.1"
+ dependencies:
+ flat-cache: ^3.0.4
+ checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74
+ languageName: node
+ linkType: hard
+
+"fill-range@npm:^7.1.1":
+ version: 7.1.1
+ resolution: "fill-range@npm:7.1.1"
+ dependencies:
+ to-regex-range: ^5.0.1
+ checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798
+ languageName: node
+ linkType: hard
+
+"find-up@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "find-up@npm:5.0.0"
+ dependencies:
+ locate-path: ^6.0.0
+ path-exists: ^4.0.0
+ checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095
+ languageName: node
+ linkType: hard
+
+"flat-cache@npm:^3.0.4":
+ version: 3.2.0
+ resolution: "flat-cache@npm:3.2.0"
+ dependencies:
+ flatted: ^3.2.9
+ keyv: ^4.5.3
+ rimraf: ^3.0.2
+ checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec
+ languageName: node
+ linkType: hard
+
+"flatted@npm:^3.2.9":
+ version: 3.3.2
+ resolution: "flatted@npm:3.3.2"
+ checksum: ac3c159742e01d0e860a861164bcfd35bb567ccbebb8a0dd041e61cf3c64a435b917dd1e7ed1c380c2ebca85735fb16644485ec33665bc6aafc3b316aa1eed44
+ languageName: node
+ linkType: hard
+
+"for-each@npm:^0.3.3":
+ version: 0.3.3
+ resolution: "for-each@npm:0.3.3"
+ dependencies:
+ is-callable: ^1.1.3
+ checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28
+ languageName: node
+ linkType: hard
+
+"foreground-child@npm:^3.1.0":
+ version: 3.3.0
+ resolution: "foreground-child@npm:3.3.0"
+ dependencies:
+ cross-spawn: ^7.0.0
+ signal-exit: ^4.0.1
+ checksum: 1989698488f725b05b26bc9afc8a08f08ec41807cd7b92ad85d96004ddf8243fd3e79486b8348c64a3011ae5cc2c9f0936af989e1f28339805d8bc178a75b451
+ languageName: node
+ linkType: hard
+
+"fs.realpath@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "fs.realpath@npm:1.0.0"
+ checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0
+ languageName: node
+ linkType: hard
+
+"function-bind@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "function-bind@npm:1.1.2"
+ checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1
+ languageName: node
+ linkType: hard
+
+"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8":
+ version: 1.1.8
+ resolution: "function.prototype.name@npm:1.1.8"
+ dependencies:
+ call-bind: ^1.0.8
+ call-bound: ^1.0.3
+ define-properties: ^1.2.1
+ functions-have-names: ^1.2.3
+ hasown: ^2.0.2
+ is-callable: ^1.2.7
+ checksum: 3a366535dc08b25f40a322efefa83b2da3cd0f6da41db7775f2339679120ef63b6c7e967266182609e655b8f0a8f65596ed21c7fd72ad8bd5621c2340edd4010
+ languageName: node
+ linkType: hard
+
+"functions-have-names@npm:^1.2.3":
+ version: 1.2.3
+ resolution: "functions-have-names@npm:1.2.3"
+ checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5
+ languageName: node
+ linkType: hard
+
+"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7":
+ version: 1.2.7
+ resolution: "get-intrinsic@npm:1.2.7"
+ dependencies:
+ call-bind-apply-helpers: ^1.0.1
+ es-define-property: ^1.0.1
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ function-bind: ^1.1.2
+ get-proto: ^1.0.0
+ gopd: ^1.2.0
+ has-symbols: ^1.1.0
+ hasown: ^2.0.2
+ math-intrinsics: ^1.1.0
+ checksum: a1597b3b432074f805b6a0ba1182130dd6517c0ea0c4eecc4b8834c803913e1ea62dfc412865be795b3dacb1555a21775b70cf9af7a18b1454ff3414e5442d4a
+ languageName: node
+ linkType: hard
+
+"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "get-proto@npm:1.0.1"
+ dependencies:
+ dunder-proto: ^1.0.1
+ es-object-atoms: ^1.0.0
+ checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b
+ languageName: node
+ linkType: hard
+
+"get-symbol-description@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "get-symbol-description@npm:1.1.0"
+ dependencies:
+ call-bound: ^1.0.3
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.6
+ checksum: 655ed04db48ee65ef2ddbe096540d4405e79ba0a7f54225775fef43a7e2afcb93a77d141c5f05fdef0afce2eb93bcbfb3597142189d562ac167ff183582683cd
+ languageName: node
+ linkType: hard
+
+"get-tsconfig@npm:^4.7.5":
+ version: 4.8.1
+ resolution: "get-tsconfig@npm:4.8.1"
+ dependencies:
+ resolve-pkg-maps: ^1.0.0
+ checksum: 12df01672e691d2ff6db8cf7fed1ddfef90ed94a5f3d822c63c147a26742026d582acd86afcd6f65db67d809625d17dd7f9d34f4d3f38f69bc2f48e19b2bdd5b
+ languageName: node
+ linkType: hard
+
+"glob-parent@npm:^5.1.2":
+ version: 5.1.2
+ resolution: "glob-parent@npm:5.1.2"
+ dependencies:
+ is-glob: ^4.0.1
+ checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e
+ languageName: node
+ linkType: hard
+
+"glob-parent@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "glob-parent@npm:6.0.2"
+ dependencies:
+ is-glob: ^4.0.3
+ checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8
+ languageName: node
+ linkType: hard
+
+"glob@npm:10.3.10":
+ version: 10.3.10
+ resolution: "glob@npm:10.3.10"
+ dependencies:
+ foreground-child: ^3.1.0
+ jackspeak: ^2.3.5
+ minimatch: ^9.0.1
+ minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
+ path-scurry: ^1.10.1
+ bin:
+ glob: dist/esm/bin.mjs
+ checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3
+ languageName: node
+ linkType: hard
+
+"glob@npm:^7.1.3":
+ version: 7.2.3
+ resolution: "glob@npm:7.2.3"
+ dependencies:
+ fs.realpath: ^1.0.0
+ inflight: ^1.0.4
+ inherits: 2
+ minimatch: ^3.1.1
+ once: ^1.3.0
+ path-is-absolute: ^1.0.0
+ checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133
+ languageName: node
+ linkType: hard
+
+"globals@npm:^13.19.0":
+ version: 13.24.0
+ resolution: "globals@npm:13.24.0"
+ dependencies:
+ type-fest: ^0.20.2
+ checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c
+ languageName: node
+ linkType: hard
+
+"globalthis@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "globalthis@npm:1.0.4"
+ dependencies:
+ define-properties: ^1.2.1
+ gopd: ^1.0.1
+ checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a
+ languageName: node
+ linkType: hard
+
+"gopd@npm:^1.0.1, gopd@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "gopd@npm:1.2.0"
+ checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3
+ languageName: node
+ linkType: hard
+
+"graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4":
+ version: 4.2.11
+ resolution: "graceful-fs@npm:4.2.11"
+ checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7
+ languageName: node
+ linkType: hard
+
+"graphemer@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "graphemer@npm:1.4.0"
+ checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673
+ languageName: node
+ linkType: hard
+
+"has-bigints@npm:^1.0.2":
+ version: 1.1.0
+ resolution: "has-bigints@npm:1.1.0"
+ checksum: 79730518ae02c77e4af6a1d1a0b6a2c3e1509785532771f9baf0241e83e36329542c3d7a0e723df8cbc85f74eff4f177828a2265a01ba576adbdc2d40d86538b
+ languageName: node
+ linkType: hard
+
+"has-flag@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "has-flag@npm:4.0.0"
+ checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad
+ languageName: node
+ linkType: hard
+
+"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "has-property-descriptors@npm:1.0.2"
+ dependencies:
+ es-define-property: ^1.0.0
+ checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3
+ languageName: node
+ linkType: hard
+
+"has-proto@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "has-proto@npm:1.2.0"
+ dependencies:
+ dunder-proto: ^1.0.0
+ checksum: f55010cb94caa56308041d77967c72a02ffd71386b23f9afa8447e58bc92d49d15c19bf75173713468e92fe3fb1680b03b115da39c21c32c74886d1d50d3e7ff
+ languageName: node
+ linkType: hard
+
+"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "has-symbols@npm:1.1.0"
+ checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b
+ languageName: node
+ linkType: hard
+
+"has-tostringtag@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "has-tostringtag@npm:1.0.2"
+ dependencies:
+ has-symbols: ^1.0.3
+ checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d
+ languageName: node
+ linkType: hard
+
+"hasown@npm:^2.0.0, hasown@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "hasown@npm:2.0.2"
+ dependencies:
+ function-bind: ^1.1.2
+ checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db
+ languageName: node
+ linkType: hard
+
+"hast-util-to-estree@npm:^3.0.0":
+ version: 3.1.1
+ resolution: "hast-util-to-estree@npm:3.1.1"
+ dependencies:
+ "@types/estree": ^1.0.0
+ "@types/estree-jsx": ^1.0.0
+ "@types/hast": ^3.0.0
+ comma-separated-tokens: ^2.0.0
+ devlop: ^1.0.0
+ estree-util-attach-comments: ^3.0.0
+ estree-util-is-identifier-name: ^3.0.0
+ hast-util-whitespace: ^3.0.0
+ mdast-util-mdx-expression: ^2.0.0
+ mdast-util-mdx-jsx: ^3.0.0
+ mdast-util-mdxjs-esm: ^2.0.0
+ property-information: ^6.0.0
+ space-separated-tokens: ^2.0.0
+ style-to-object: ^1.0.0
+ unist-util-position: ^5.0.0
+ zwitch: ^2.0.0
+ checksum: e23eec63b6a0a15b9053a1dd7e8fef767202335ed009c66d82b4ea1226ed9e7f45c6dd4f255810aec470aba8b5cd5ba77f8f914e808f2d3cde4341dd297f911f
+ languageName: node
+ linkType: hard
+
+"hast-util-to-html@npm:^9.0.4":
+ version: 9.0.4
+ resolution: "hast-util-to-html@npm:9.0.4"
+ dependencies:
+ "@types/hast": ^3.0.0
+ "@types/unist": ^3.0.0
+ ccount: ^2.0.0
+ comma-separated-tokens: ^2.0.0
+ hast-util-whitespace: ^3.0.0
+ html-void-elements: ^3.0.0
+ mdast-util-to-hast: ^13.0.0
+ property-information: ^6.0.0
+ space-separated-tokens: ^2.0.0
+ stringify-entities: ^4.0.0
+ zwitch: ^2.0.4
+ checksum: 6b97f641bca4c1de66bd74dd5a965bc5fd5c4b8e09328448c4952226ebd691c107cc990ce4e29ccb1e6bfff0278d8956fc8159533456c167f94ae067b4b42b11
+ languageName: node
+ linkType: hard
+
+"hast-util-to-jsx-runtime@npm:^2.0.0":
+ version: 2.3.2
+ resolution: "hast-util-to-jsx-runtime@npm:2.3.2"
+ dependencies:
+ "@types/estree": ^1.0.0
+ "@types/hast": ^3.0.0
+ "@types/unist": ^3.0.0
+ comma-separated-tokens: ^2.0.0
+ devlop: ^1.0.0
+ estree-util-is-identifier-name: ^3.0.0
+ hast-util-whitespace: ^3.0.0
+ mdast-util-mdx-expression: ^2.0.0
+ mdast-util-mdx-jsx: ^3.0.0
+ mdast-util-mdxjs-esm: ^2.0.0
+ property-information: ^6.0.0
+ space-separated-tokens: ^2.0.0
+ style-to-object: ^1.0.0
+ unist-util-position: ^5.0.0
+ vfile-message: ^4.0.0
+ checksum: 223cc3e2ea622d14529e2aa070bd88f6ca7255084bd5e6e28015dad435cda22b1ddd98064bba6a4753d546d882dcd3f8067af1ea27c253986f6f303869544075
+ languageName: node
+ linkType: hard
+
+"hast-util-whitespace@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "hast-util-whitespace@npm:3.0.0"
+ dependencies:
+ "@types/hast": ^3.0.0
+ checksum: 41d93ccce218ba935dc3c12acdf586193c35069489c8c8f50c2aa824c00dec94a3c78b03d1db40fa75381942a189161922e4b7bca700b3a2cc779634c351a1e4
+ languageName: node
+ linkType: hard
+
+"html-void-elements@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "html-void-elements@npm:3.0.0"
+ checksum: 59be397525465a7489028afa064c55763d9cccd1d7d9f630cca47137317f0e897a9ca26cef7e745e7cff1abc44260cfa407742b243a54261dfacd42230e94fce
+ languageName: node
+ linkType: hard
+
+"ignore@npm:^5.2.0, ignore@npm:^5.3.1":
+ version: 5.3.2
+ resolution: "ignore@npm:5.3.2"
+ checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be
+ languageName: node
+ linkType: hard
+
+"import-fresh@npm:^3.2.1":
+ version: 3.3.0
+ resolution: "import-fresh@npm:3.3.0"
+ dependencies:
+ parent-module: ^1.0.0
+ resolve-from: ^4.0.0
+ checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa
+ languageName: node
+ linkType: hard
+
+"imurmurhash@npm:^0.1.4":
+ version: 0.1.4
+ resolution: "imurmurhash@npm:0.1.4"
+ checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7
+ languageName: node
+ linkType: hard
+
+"inflight@npm:^1.0.4":
+ version: 1.0.6
+ resolution: "inflight@npm:1.0.6"
+ dependencies:
+ once: ^1.3.0
+ wrappy: 1
+ checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd
+ languageName: node
+ linkType: hard
+
+"inherits@npm:2, inherits@npm:^2.0.3":
+ version: 2.0.4
+ resolution: "inherits@npm:2.0.4"
+ checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1
+ languageName: node
+ linkType: hard
+
+"inline-style-parser@npm:0.2.4":
+ version: 0.2.4
+ resolution: "inline-style-parser@npm:0.2.4"
+ checksum: 5df20a21dd8d67104faaae29774bb50dc9690c75bc5c45dac107559670a5530104ead72c4cf54f390026e617e7014c65b3d68fb0bb573a37c4d1f94e9c36e1ca
+ languageName: node
+ linkType: hard
+
+"internal-slot@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "internal-slot@npm:1.1.0"
+ dependencies:
+ es-errors: ^1.3.0
+ hasown: ^2.0.2
+ side-channel: ^1.1.0
+ checksum: 8e0991c2d048cc08dab0a91f573c99f6a4215075887517ea4fa32203ce8aea60fa03f95b177977fa27eb502e5168366d0f3e02c762b799691411d49900611861
+ languageName: node
+ linkType: hard
+
+"is-alphabetical@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "is-alphabetical@npm:2.0.1"
+ checksum: 56207db8d9de0850f0cd30f4966bf731eb82cedfe496cbc2e97e7c3bacaf66fc54a972d2d08c0d93bb679cb84976a05d24c5ad63de56fabbfc60aadae312edaa
+ languageName: node
+ linkType: hard
+
+"is-alphanumerical@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "is-alphanumerical@npm:2.0.1"
+ dependencies:
+ is-alphabetical: ^2.0.0
+ is-decimal: ^2.0.0
+ checksum: 87acc068008d4c9c4e9f5bd5e251041d42e7a50995c77b1499cf6ed248f971aadeddb11f239cabf09f7975ee58cac7a48ffc170b7890076d8d227b24a68663c9
+ languageName: node
+ linkType: hard
+
+"is-arguments@npm:^1.0.4":
+ version: 1.2.0
+ resolution: "is-arguments@npm:1.2.0"
+ dependencies:
+ call-bound: ^1.0.2
+ has-tostringtag: ^1.0.2
+ checksum: aae9307fedfe2e5be14aebd0f48a9eeedf6b8c8f5a0b66257b965146d1e94abdc3f08e3dce3b1d908e1fa23c70039a88810ee1d753905758b9b6eebbab0bafeb
+ languageName: node
+ linkType: hard
+
+"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5":
+ version: 3.0.5
+ resolution: "is-array-buffer@npm:3.0.5"
+ dependencies:
+ call-bind: ^1.0.8
+ call-bound: ^1.0.3
+ get-intrinsic: ^1.2.6
+ checksum: f137a2a6e77af682cdbffef1e633c140cf596f72321baf8bba0f4ef22685eb4339dde23dfe9e9ca430b5f961dee4d46577dcf12b792b68518c8449b134fb9156
+ languageName: node
+ linkType: hard
+
+"is-async-function@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "is-async-function@npm:2.1.0"
+ dependencies:
+ call-bound: ^1.0.3
+ get-proto: ^1.0.1
+ has-tostringtag: ^1.0.2
+ safe-regex-test: ^1.1.0
+ checksum: e8dfa81561eb7cd845d626bf49675c735a177013943eb6919185e1f358fe8b16fd11fa477397df8ddddd31ade47092de8243997530931a4ec17cb2b9d15479c9
+ languageName: node
+ linkType: hard
+
+"is-bigint@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "is-bigint@npm:1.1.0"
+ dependencies:
+ has-bigints: ^1.0.2
+ checksum: ee1544f0e664f253306786ed1dce494b8cf242ef415d6375d8545b4d8816b0f054bd9f948a8988ae2c6325d1c28260dd02978236b2f7b8fb70dfc4838a6c9fa7
+ languageName: node
+ linkType: hard
+
+"is-boolean-object@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "is-boolean-object@npm:1.2.1"
+ dependencies:
+ call-bound: ^1.0.2
+ has-tostringtag: ^1.0.2
+ checksum: 2672609f0f2536172873810a38ec006a415e43ddc6a240f7638a1659cb20dfa91cc75c8a1bed36247bb046aa8f0eab945f20d1203bc69606418bd129c745f861
+ languageName: node
+ linkType: hard
+
+"is-bun-module@npm:^1.0.2":
+ version: 1.3.0
+ resolution: "is-bun-module@npm:1.3.0"
+ dependencies:
+ semver: ^7.6.3
+ checksum: b23d9ec7b4d4bfd89e4e72b5cd52e1bc153facad59fdd7394c656f8859a78740ef35996a2066240a32f39cc9a9da4b4eb69e68df3c71755a61ebbaf56d3daef0
+ languageName: node
+ linkType: hard
+
+"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7":
+ version: 1.2.7
+ resolution: "is-callable@npm:1.2.7"
+ checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac
+ languageName: node
+ linkType: hard
+
+"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0":
+ version: 2.16.1
+ resolution: "is-core-module@npm:2.16.1"
+ dependencies:
+ hasown: ^2.0.2
+ checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7
+ languageName: node
+ linkType: hard
+
+"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "is-data-view@npm:1.0.2"
+ dependencies:
+ call-bound: ^1.0.2
+ get-intrinsic: ^1.2.6
+ is-typed-array: ^1.1.13
+ checksum: 31600dd19932eae7fd304567e465709ffbfa17fa236427c9c864148e1b54eb2146357fcf3aed9b686dee13c217e1bb5a649cb3b9c479e1004c0648e9febde1b2
+ languageName: node
+ linkType: hard
+
+"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "is-date-object@npm:1.1.0"
+ dependencies:
+ call-bound: ^1.0.2
+ has-tostringtag: ^1.0.2
+ checksum: d6c36ab9d20971d65f3fc64cef940d57a4900a2ac85fb488a46d164c2072a33da1cb51eefcc039e3e5c208acbce343d3480b84ab5ff0983f617512da2742562a
+ languageName: node
+ linkType: hard
+
+"is-decimal@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "is-decimal@npm:2.0.1"
+ checksum: 97132de7acdce77caa7b797632970a2ecd649a88e715db0e4dbc00ab0708b5e7574ba5903962c860cd4894a14fd12b100c0c4ac8aed445cf6f55c6cf747a4158
+ languageName: node
+ linkType: hard
+
+"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1":
+ version: 2.2.1
+ resolution: "is-docker@npm:2.2.1"
+ bin:
+ is-docker: cli.js
+ checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56
+ languageName: node
+ linkType: hard
+
+"is-extglob@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "is-extglob@npm:2.1.1"
+ checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85
+ languageName: node
+ linkType: hard
+
+"is-finalizationregistry@npm:^1.1.0":
+ version: 1.1.1
+ resolution: "is-finalizationregistry@npm:1.1.1"
+ dependencies:
+ call-bound: ^1.0.3
+ checksum: 38c646c506e64ead41a36c182d91639833311970b6b6c6268634f109eef0a1a9d2f1f2e499ef4cb43c744a13443c4cdd2f0812d5afdcee5e9b65b72b28c48557
+ languageName: node
+ linkType: hard
+
+"is-fullwidth-code-point@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "is-fullwidth-code-point@npm:3.0.0"
+ checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348
+ languageName: node
+ linkType: hard
+
+"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7":
+ version: 1.1.0
+ resolution: "is-generator-function@npm:1.1.0"
+ dependencies:
+ call-bound: ^1.0.3
+ get-proto: ^1.0.0
+ has-tostringtag: ^1.0.2
+ safe-regex-test: ^1.1.0
+ checksum: f7f7276131bdf7e28169b86ac55a5b080012a597f9d85a0cbef6fe202a7133fa450a3b453e394870e3cb3685c5a764c64a9f12f614684b46969b1e6f297bed6b
+ languageName: node
+ linkType: hard
+
+"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3":
+ version: 4.0.3
+ resolution: "is-glob@npm:4.0.3"
+ dependencies:
+ is-extglob: ^2.1.1
+ checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4
+ languageName: node
+ linkType: hard
+
+"is-hexadecimal@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "is-hexadecimal@npm:2.0.1"
+ checksum: 66a2ea85994c622858f063f23eda506db29d92b52580709eb6f4c19550552d4dcf3fb81952e52f7cf972097237959e00adc7bb8c9400cd12886e15bf06145321
+ languageName: node
+ linkType: hard
+
+"is-map@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "is-map@npm:2.0.3"
+ checksum: e6ce5f6380f32b141b3153e6ba9074892bbbbd655e92e7ba5ff195239777e767a976dcd4e22f864accaf30e53ebf961ab1995424aef91af68788f0591b7396cc
+ languageName: node
+ linkType: hard
+
+"is-number-object@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "is-number-object@npm:1.1.1"
+ dependencies:
+ call-bound: ^1.0.3
+ has-tostringtag: ^1.0.2
+ checksum: 6517f0a0e8c4b197a21afb45cd3053dc711e79d45d8878aa3565de38d0102b130ca8732485122c7b336e98c27dacd5236854e3e6526e0eb30cae64956535662f
+ languageName: node
+ linkType: hard
+
+"is-number@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "is-number@npm:7.0.0"
+ checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a
+ languageName: node
+ linkType: hard
+
+"is-path-inside@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "is-path-inside@npm:3.0.3"
+ checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9
+ languageName: node
+ linkType: hard
+
+"is-plain-obj@npm:^4.0.0":
+ version: 4.1.0
+ resolution: "is-plain-obj@npm:4.1.0"
+ checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce
+ languageName: node
+ linkType: hard
+
+"is-regex@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "is-regex@npm:1.2.1"
+ dependencies:
+ call-bound: ^1.0.2
+ gopd: ^1.2.0
+ has-tostringtag: ^1.0.2
+ hasown: ^2.0.2
+ checksum: 99ee0b6d30ef1bb61fa4b22fae7056c6c9b3c693803c0c284ff7a8570f83075a7d38cda53b06b7996d441215c27895ea5d1af62124562e13d91b3dbec41a5e13
+ languageName: node
+ linkType: hard
+
+"is-set@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "is-set@npm:2.0.3"
+ checksum: 36e3f8c44bdbe9496c9689762cc4110f6a6a12b767c5d74c0398176aa2678d4467e3bf07595556f2dba897751bde1422480212b97d973c7b08a343100b0c0dfe
+ languageName: node
+ linkType: hard
+
+"is-shared-array-buffer@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "is-shared-array-buffer@npm:1.0.4"
+ dependencies:
+ call-bound: ^1.0.3
+ checksum: 1611fedc175796eebb88f4dfc393dd969a4a8e6c69cadaff424ee9d4464f9f026399a5f84a90f7c62d6d7ee04e3626a912149726de102b0bd6c1ee6a9868fa5a
+ languageName: node
+ linkType: hard
+
+"is-string@npm:^1.0.7, is-string@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "is-string@npm:1.1.1"
+ dependencies:
+ call-bound: ^1.0.3
+ has-tostringtag: ^1.0.2
+ checksum: 2eeaaff605250f5e836ea3500d33d1a5d3aa98d008641d9d42fb941e929ffd25972326c2ef912987e54c95b6f10416281aaf1b35cdf81992cfb7524c5de8e193
+ languageName: node
+ linkType: hard
+
+"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "is-symbol@npm:1.1.1"
+ dependencies:
+ call-bound: ^1.0.2
+ has-symbols: ^1.1.0
+ safe-regex-test: ^1.1.0
+ checksum: bfafacf037af6f3c9d68820b74be4ae8a736a658a3344072df9642a090016e281797ba8edbeb1c83425879aae55d1cb1f30b38bf132d703692b2570367358032
+ languageName: node
+ linkType: hard
+
+"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3":
+ version: 1.1.15
+ resolution: "is-typed-array@npm:1.1.15"
+ dependencies:
+ which-typed-array: ^1.1.16
+ checksum: ea7cfc46c282f805d19a9ab2084fd4542fed99219ee9dbfbc26284728bd713a51eac66daa74eca00ae0a43b61322920ba334793607dc39907465913e921e0892
+ languageName: node
+ linkType: hard
+
+"is-weakmap@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "is-weakmap@npm:2.0.2"
+ checksum: f36aef758b46990e0d3c37269619c0a08c5b29428c0bb11ecba7f75203442d6c7801239c2f31314bc79199217ef08263787f3837d9e22610ad1da62970d6616d
+ languageName: node
+ linkType: hard
+
+"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "is-weakref@npm:1.1.0"
+ dependencies:
+ call-bound: ^1.0.2
+ checksum: 2a2f3a1746ee1baecf9ac6483d903cd3f8ef3cca88e2baa42f2e85ea064bd246d218eed5f6d479fc1c76dae2231e71133b6b86160e821d176932be9fae3da4da
+ languageName: node
+ linkType: hard
+
+"is-weakset@npm:^2.0.3":
+ version: 2.0.4
+ resolution: "is-weakset@npm:2.0.4"
+ dependencies:
+ call-bound: ^1.0.3
+ get-intrinsic: ^1.2.6
+ checksum: 5c6c8415a06065d78bdd5e3a771483aa1cd928df19138aa73c4c51333226f203f22117b4325df55cc8b3085a6716870a320c2d757efee92d7a7091a039082041
+ languageName: node
+ linkType: hard
+
+"is-wsl@npm:^2.2.0":
+ version: 2.2.0
+ resolution: "is-wsl@npm:2.2.0"
+ dependencies:
+ is-docker: ^2.0.0
+ checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8
+ languageName: node
+ linkType: hard
+
+"isarray@npm:^2.0.5":
+ version: 2.0.5
+ resolution: "isarray@npm:2.0.5"
+ checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a
+ languageName: node
+ linkType: hard
+
+"isexe@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "isexe@npm:2.0.0"
+ checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62
+ languageName: node
+ linkType: hard
+
+"iterator.prototype@npm:^1.1.4":
+ version: 1.1.5
+ resolution: "iterator.prototype@npm:1.1.5"
+ dependencies:
+ define-data-property: ^1.1.4
+ es-object-atoms: ^1.0.0
+ get-intrinsic: ^1.2.6
+ get-proto: ^1.0.0
+ has-symbols: ^1.1.0
+ set-function-name: ^2.0.2
+ checksum: 7db23c42629ba4790e6e15f78b555f41dbd08818c85af306988364bd19d86716a1187cb333444f3a0036bfc078a0e9cb7ec67fef3a61662736d16410d7f77869
+ languageName: node
+ linkType: hard
+
+"jackspeak@npm:^2.3.5":
+ version: 2.3.6
+ resolution: "jackspeak@npm:2.3.6"
+ dependencies:
+ "@isaacs/cliui": ^8.0.2
+ "@pkgjs/parseargs": ^0.11.0
+ dependenciesMeta:
+ "@pkgjs/parseargs":
+ optional: true
+ checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54
+ languageName: node
+ linkType: hard
+
+"js-tokens@npm:^3.0.0 || ^4.0.0":
+ version: 4.0.0
+ resolution: "js-tokens@npm:4.0.0"
+ checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78
+ languageName: node
+ linkType: hard
+
+"js-yaml@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "js-yaml@npm:4.1.0"
+ dependencies:
+ argparse: ^2.0.1
+ bin:
+ js-yaml: bin/js-yaml.js
+ checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a
+ languageName: node
+ linkType: hard
+
+"jsdoc-type-pratt-parser@npm:^4.0.0":
+ version: 4.1.0
+ resolution: "jsdoc-type-pratt-parser@npm:4.1.0"
+ checksum: e7642a508b090b1bdf17775383000ed71013c38e1231c1e576e5374636e8baf7c3fae8bf0252f5e1d3397d95efd56e8c8a5dd1a0de76d05d1499cbcb3c325bc3
+ languageName: node
+ linkType: hard
+
+"json-buffer@npm:3.0.1":
+ version: 3.0.1
+ resolution: "json-buffer@npm:3.0.1"
+ checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581
+ languageName: node
+ linkType: hard
+
+"json-schema-traverse@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "json-schema-traverse@npm:0.4.1"
+ checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b
+ languageName: node
+ linkType: hard
+
+"json-stable-stringify-without-jsonify@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "json-stable-stringify-without-jsonify@npm:1.0.1"
+ checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215
+ languageName: node
+ linkType: hard
+
+"json5@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "json5@npm:1.0.2"
+ dependencies:
+ minimist: ^1.2.0
+ bin:
+ json5: lib/cli.js
+ checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7
+ languageName: node
+ linkType: hard
+
+"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5":
+ version: 3.3.5
+ resolution: "jsx-ast-utils@npm:3.3.5"
+ dependencies:
+ array-includes: ^3.1.6
+ array.prototype.flat: ^1.3.1
+ object.assign: ^4.1.4
+ object.values: ^1.1.6
+ checksum: f4b05fa4d7b5234230c905cfa88d36dc8a58a6666975a3891429b1a8cdc8a140bca76c297225cb7a499fad25a2c052ac93934449a2c31a44fc9edd06c773780a
+ languageName: node
+ linkType: hard
+
+"keyv@npm:^4.5.3":
+ version: 4.5.4
+ resolution: "keyv@npm:4.5.4"
+ dependencies:
+ json-buffer: 3.0.1
+ checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72
+ languageName: node
+ linkType: hard
+
+"language-subtag-registry@npm:^0.3.20":
+ version: 0.3.23
+ resolution: "language-subtag-registry@npm:0.3.23"
+ checksum: 0b64c1a6c5431c8df648a6d25594ff280613c886f4a1a542d9b864e5472fb93e5c7856b9c41595c38fac31370328fc79fcc521712e89ea6d6866cbb8e0995d81
+ languageName: node
+ linkType: hard
+
+"language-tags@npm:^1.0.9":
+ version: 1.0.9
+ resolution: "language-tags@npm:1.0.9"
+ dependencies:
+ language-subtag-registry: ^0.3.20
+ checksum: 57c530796dc7179914dee71bc94f3747fd694612480241d0453a063777265dfe3a951037f7acb48f456bf167d6eb419d4c00263745326b3ba1cdcf4657070e78
+ languageName: node
+ linkType: hard
+
+"levn@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "levn@npm:0.4.1"
+ dependencies:
+ prelude-ls: ^1.2.1
+ type-check: ~0.4.0
+ checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4
+ languageName: node
+ linkType: hard
+
+"lightningcss-darwin-arm64@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-darwin-arm64@npm:1.29.1"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"lightningcss-darwin-x64@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-darwin-x64@npm:1.29.1"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss-freebsd-x64@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-freebsd-x64@npm:1.29.1"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-arm-gnueabihf@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-arm-gnueabihf@npm:1.29.1"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-arm64-gnu@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-arm64-gnu@npm:1.29.1"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-arm64-musl@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-arm64-musl@npm:1.29.1"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-x64-gnu@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-x64-gnu@npm:1.29.1"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-x64-musl@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-x64-musl@npm:1.29.1"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"lightningcss-win32-arm64-msvc@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-win32-arm64-msvc@npm:1.29.1"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"lightningcss-win32-x64-msvc@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-win32-x64-msvc@npm:1.29.1"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss@npm:^1.28.2":
+ version: 1.29.1
+ resolution: "lightningcss@npm:1.29.1"
+ dependencies:
+ detect-libc: ^1.0.3
+ lightningcss-darwin-arm64: 1.29.1
+ lightningcss-darwin-x64: 1.29.1
+ lightningcss-freebsd-x64: 1.29.1
+ lightningcss-linux-arm-gnueabihf: 1.29.1
+ lightningcss-linux-arm64-gnu: 1.29.1
+ lightningcss-linux-arm64-musl: 1.29.1
+ lightningcss-linux-x64-gnu: 1.29.1
+ lightningcss-linux-x64-musl: 1.29.1
+ lightningcss-win32-arm64-msvc: 1.29.1
+ lightningcss-win32-x64-msvc: 1.29.1
+ dependenciesMeta:
+ lightningcss-darwin-arm64:
+ optional: true
+ lightningcss-darwin-x64:
+ optional: true
+ lightningcss-freebsd-x64:
+ optional: true
+ lightningcss-linux-arm-gnueabihf:
+ optional: true
+ lightningcss-linux-arm64-gnu:
+ optional: true
+ lightningcss-linux-arm64-musl:
+ optional: true
+ lightningcss-linux-x64-gnu:
+ optional: true
+ lightningcss-linux-x64-musl:
+ optional: true
+ lightningcss-win32-arm64-msvc:
+ optional: true
+ lightningcss-win32-x64-msvc:
+ optional: true
+ checksum: d1c4dba66dfe7f6a76532bdb84c35742bee61149550e5eb5b0e84e282f21aecd335f917ca9619bb7ca95fc1eb3092dc7e22f2c16b01e9a0ee472b76452343cce
+ languageName: node
+ linkType: hard
+
+"locate-path@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "locate-path@npm:6.0.0"
+ dependencies:
+ p-locate: ^5.0.0
+ checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a
+ languageName: node
+ linkType: hard
+
+"lodash.merge@npm:^4.6.2":
+ version: 4.6.2
+ resolution: "lodash.merge@npm:4.6.2"
+ checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005
+ languageName: node
+ linkType: hard
+
+"longest-streak@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "longest-streak@npm:3.1.0"
+ checksum: d7f952ed004cbdb5c8bcfc4f7f5c3d65449e6c5a9e9be4505a656e3df5a57ee125f284286b4bf8ecea0c21a7b3bf2b8f9001ad506c319b9815ad6a63a47d0fd0
+ languageName: node
+ linkType: hard
+
+"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "loose-envify@npm:1.4.0"
+ dependencies:
+ js-tokens: ^3.0.0 || ^4.0.0
+ bin:
+ loose-envify: cli.js
+ checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4
+ languageName: node
+ linkType: hard
+
+"lru-cache@npm:^10.2.0":
+ version: 10.4.3
+ resolution: "lru-cache@npm:10.4.3"
+ checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a
+ languageName: node
+ linkType: hard
+
+"markdown-extensions@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "markdown-extensions@npm:2.0.0"
+ checksum: ec4ffcb0768f112e778e7ac74cb8ef22a966c168c3e6c29829f007f015b0a0b5c79c73ee8599a0c72e440e7f5cfdbf19e80e2d77b9a313b8f66e180a330cf1b2
+ languageName: node
+ linkType: hard
+
+"math-intrinsics@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "math-intrinsics@npm:1.1.0"
+ checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2
+ languageName: node
+ linkType: hard
+
+"mdast-util-from-markdown@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "mdast-util-from-markdown@npm:2.0.2"
+ dependencies:
+ "@types/mdast": ^4.0.0
+ "@types/unist": ^3.0.0
+ decode-named-character-reference: ^1.0.0
+ devlop: ^1.0.0
+ mdast-util-to-string: ^4.0.0
+ micromark: ^4.0.0
+ micromark-util-decode-numeric-character-reference: ^2.0.0
+ micromark-util-decode-string: ^2.0.0
+ micromark-util-normalize-identifier: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ unist-util-stringify-position: ^4.0.0
+ checksum: 1ad19f48b30ac6e0cb756070c210c78ad93c26876edfb3f75127783bc6df8b9402016d8f3e9964f3d1d5430503138ec65c145e869438727e1aa7f3cebf228fba
+ languageName: node
+ linkType: hard
+
+"mdast-util-mdx-expression@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "mdast-util-mdx-expression@npm:2.0.1"
+ dependencies:
+ "@types/estree-jsx": ^1.0.0
+ "@types/hast": ^3.0.0
+ "@types/mdast": ^4.0.0
+ devlop: ^1.0.0
+ mdast-util-from-markdown: ^2.0.0
+ mdast-util-to-markdown: ^2.0.0
+ checksum: 6af56b06bde3ab971129db9855dcf0d31806c70b3b052d7a90a5499a366b57ffd0c2efca67d281c448c557298ba7e3e61bd07133733b735440840dd339b28e19
+ languageName: node
+ linkType: hard
+
+"mdast-util-mdx-jsx@npm:^3.0.0":
+ version: 3.1.3
+ resolution: "mdast-util-mdx-jsx@npm:3.1.3"
+ dependencies:
+ "@types/estree-jsx": ^1.0.0
+ "@types/hast": ^3.0.0
+ "@types/mdast": ^4.0.0
+ "@types/unist": ^3.0.0
+ ccount: ^2.0.0
+ devlop: ^1.1.0
+ mdast-util-from-markdown: ^2.0.0
+ mdast-util-to-markdown: ^2.0.0
+ parse-entities: ^4.0.0
+ stringify-entities: ^4.0.0
+ unist-util-stringify-position: ^4.0.0
+ vfile-message: ^4.0.0
+ checksum: 638644420090163fc08d01150e10550a21e914b85dd3a37178d3b949173c5aee2d7fee536f864ac25800e0cebde8357a5808427ffb7e9975a669e4382ae479ab
+ languageName: node
+ linkType: hard
+
+"mdast-util-mdx@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "mdast-util-mdx@npm:3.0.0"
+ dependencies:
+ mdast-util-from-markdown: ^2.0.0
+ mdast-util-mdx-expression: ^2.0.0
+ mdast-util-mdx-jsx: ^3.0.0
+ mdast-util-mdxjs-esm: ^2.0.0
+ mdast-util-to-markdown: ^2.0.0
+ checksum: e2b007d826fcd49fd57ed03e190753c8b0f7d9eff6c7cb26ba609cde15cd3a472c0cd5e4a1ee3e39a40f14be22fdb57de243e093cea0c064d6f3366cff3e3af2
+ languageName: node
+ linkType: hard
+
+"mdast-util-mdxjs-esm@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "mdast-util-mdxjs-esm@npm:2.0.1"
+ dependencies:
+ "@types/estree-jsx": ^1.0.0
+ "@types/hast": ^3.0.0
+ "@types/mdast": ^4.0.0
+ devlop: ^1.0.0
+ mdast-util-from-markdown: ^2.0.0
+ mdast-util-to-markdown: ^2.0.0
+ checksum: 1f9dad04d31d59005332e9157ea9510dc1d03092aadbc607a10475c7eec1c158b475aa0601a3a4f74e13097ca735deb8c2d9d37928ddef25d3029fd7c9e14dc3
+ languageName: node
+ linkType: hard
+
+"mdast-util-phrasing@npm:^4.0.0":
+ version: 4.1.0
+ resolution: "mdast-util-phrasing@npm:4.1.0"
+ dependencies:
+ "@types/mdast": ^4.0.0
+ unist-util-is: ^6.0.0
+ checksum: 3a97533e8ad104a422f8bebb34b3dde4f17167b8ed3a721cf9263c7416bd3447d2364e6d012a594aada40cac9e949db28a060bb71a982231693609034ed5324e
+ languageName: node
+ linkType: hard
+
+"mdast-util-to-hast@npm:^13.0.0":
+ version: 13.2.0
+ resolution: "mdast-util-to-hast@npm:13.2.0"
+ dependencies:
+ "@types/hast": ^3.0.0
+ "@types/mdast": ^4.0.0
+ "@ungap/structured-clone": ^1.0.0
+ devlop: ^1.0.0
+ micromark-util-sanitize-uri: ^2.0.0
+ trim-lines: ^3.0.0
+ unist-util-position: ^5.0.0
+ unist-util-visit: ^5.0.0
+ vfile: ^6.0.0
+ checksum: 7e5231ff3d4e35e1421908437577fd5098141f64918ff5cc8a0f7a8a76c5407f7a3ee88d75f7a1f7afb763989c9f357475fa0ba8296c00aaff1e940098fe86a6
+ languageName: node
+ linkType: hard
+
+"mdast-util-to-markdown@npm:^2.0.0":
+ version: 2.1.2
+ resolution: "mdast-util-to-markdown@npm:2.1.2"
+ dependencies:
+ "@types/mdast": ^4.0.0
+ "@types/unist": ^3.0.0
+ longest-streak: ^3.0.0
+ mdast-util-phrasing: ^4.0.0
+ mdast-util-to-string: ^4.0.0
+ micromark-util-classify-character: ^2.0.0
+ micromark-util-decode-string: ^2.0.0
+ unist-util-visit: ^5.0.0
+ zwitch: ^2.0.0
+ checksum: 288d152bd50c00632e6e01c610bb904a220d1e226c8086c40627877959746f83ab0b872f4150cb7d910198953b1bf756e384ac3fee3e7b0ddb4517f9084c5803
+ languageName: node
+ linkType: hard
+
+"mdast-util-to-string@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "mdast-util-to-string@npm:4.0.0"
+ dependencies:
+ "@types/mdast": ^4.0.0
+ checksum: 35489fb5710d58cbc2d6c8b6547df161a3f81e0f28f320dfb3548a9393555daf07c310c0c497708e67ed4dfea4a06e5655799e7d631ca91420c288b4525d6c29
+ languageName: node
+ linkType: hard
+
+"merge2@npm:^1.3.0":
+ version: 1.4.1
+ resolution: "merge2@npm:1.4.1"
+ checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2
+ languageName: node
+ linkType: hard
+
+"micromark-core-commonmark@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "micromark-core-commonmark@npm:2.0.2"
+ dependencies:
+ decode-named-character-reference: ^1.0.0
+ devlop: ^1.0.0
+ micromark-factory-destination: ^2.0.0
+ micromark-factory-label: ^2.0.0
+ micromark-factory-space: ^2.0.0
+ micromark-factory-title: ^2.0.0
+ micromark-factory-whitespace: ^2.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-chunked: ^2.0.0
+ micromark-util-classify-character: ^2.0.0
+ micromark-util-html-tag-name: ^2.0.0
+ micromark-util-normalize-identifier: ^2.0.0
+ micromark-util-resolve-all: ^2.0.0
+ micromark-util-subtokenize: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: e49d78429baf72533a02d06ae83e5a24d4d547bc832173547ffbae93c0960a7dbf0d8896058301498fa4297f280070a5a66891e0e6160040d6c5ef9bc5d9cd51
+ languageName: node
+ linkType: hard
+
+"micromark-extension-mdx-expression@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "micromark-extension-mdx-expression@npm:3.0.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ devlop: ^1.0.0
+ micromark-factory-mdx-expression: ^2.0.0
+ micromark-factory-space: ^2.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-events-to-acorn: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: abd6ba0acdebc03bc0836c51a1ec4ca28e0be86f10420dd8cfbcd6c10dd37cd3f31e7c8b9792e9276e7526748883f4a30d0803d72b6285dae47d4e5348c23a10
+ languageName: node
+ linkType: hard
+
+"micromark-extension-mdx-jsx@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "micromark-extension-mdx-jsx@npm:3.0.1"
+ dependencies:
+ "@types/acorn": ^4.0.0
+ "@types/estree": ^1.0.0
+ devlop: ^1.0.0
+ estree-util-is-identifier-name: ^3.0.0
+ micromark-factory-mdx-expression: ^2.0.0
+ micromark-factory-space: ^2.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-events-to-acorn: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ vfile-message: ^4.0.0
+ checksum: d1c7e3cb144284b8ab958a7bc67f3e9f8f0de8cb3e4931aa2d46841b318a7e9998f3aa1d5f35e0afc5a57955697a9a2c74a12491e309b139973e91e30089025b
+ languageName: node
+ linkType: hard
+
+"micromark-extension-mdx-md@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "micromark-extension-mdx-md@npm:2.0.0"
+ dependencies:
+ micromark-util-types: ^2.0.0
+ checksum: 7daf03372fd7faddf3f0ac87bdb0debb0bb770f33b586f72251e1072b222ceee75400ab6194c0e130dbf1e077369a5b627be6e9130d7a2e9e6b849f0d18ff246
+ languageName: node
+ linkType: hard
+
+"micromark-extension-mdxjs-esm@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "micromark-extension-mdxjs-esm@npm:3.0.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ devlop: ^1.0.0
+ micromark-core-commonmark: ^2.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-events-to-acorn: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ unist-util-position-from-estree: ^2.0.0
+ vfile-message: ^4.0.0
+ checksum: fb33d850200afce567b95c90f2f7d42259bd33eea16154349e4fa77c3ec934f46c8e5c111acea16321dce3d9f85aaa4c49afe8b810e31b34effc11617aeee8f6
+ languageName: node
+ linkType: hard
+
+"micromark-extension-mdxjs@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "micromark-extension-mdxjs@npm:3.0.0"
+ dependencies:
+ acorn: ^8.0.0
+ acorn-jsx: ^5.0.0
+ micromark-extension-mdx-expression: ^3.0.0
+ micromark-extension-mdx-jsx: ^3.0.0
+ micromark-extension-mdx-md: ^2.0.0
+ micromark-extension-mdxjs-esm: ^3.0.0
+ micromark-util-combine-extensions: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: 7da6f0fb0e1e0270a2f5ad257e7422cc16e68efa7b8214c63c9d55bc264cb872e9ca4ac9a71b9dfd13daf52e010f730bac316086f4340e4fcc6569ec699915bf
+ languageName: node
+ linkType: hard
+
+"micromark-factory-destination@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-factory-destination@npm:2.0.1"
+ dependencies:
+ micromark-util-character: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: 9c4baa9ca2ed43c061bbf40ddd3d85154c2a0f1f485de9dea41d7dd2ad994ebb02034a003b2c1dbe228ba83a0576d591f0e90e0bf978713f84ee7d7f3aa98320
+ languageName: node
+ linkType: hard
+
+"micromark-factory-label@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-factory-label@npm:2.0.1"
+ dependencies:
+ devlop: ^1.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: bd03f5a75f27cdbf03b894ddc5c4480fc0763061fecf9eb927d6429233c930394f223969a99472df142d570c831236134de3dc23245d23d9f046f9d0b623b5c2
+ languageName: node
+ linkType: hard
+
+"micromark-factory-mdx-expression@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "micromark-factory-mdx-expression@npm:2.0.2"
+ dependencies:
+ "@types/estree": ^1.0.0
+ devlop: ^1.0.0
+ micromark-factory-space: ^2.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-events-to-acorn: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ unist-util-position-from-estree: ^2.0.0
+ vfile-message: ^4.0.0
+ checksum: fc4bd9cba0f657093537bff02365f528e8a847f2f20d8d62bb6e21cb343f8179974a9289a198164f88a383d45f403bc29c06749ae5af531c4ce1ab2164090439
+ languageName: node
+ linkType: hard
+
+"micromark-factory-space@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-factory-space@npm:2.0.1"
+ dependencies:
+ micromark-util-character: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: 1bd68a017c1a66f4787506660c1e1c5019169aac3b1cb075d49ac5e360e0b2065e984d4e1d6e9e52a9d44000f2fa1c98e66a743d7aae78b4b05616bf3242ed71
+ languageName: node
+ linkType: hard
+
+"micromark-factory-title@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-factory-title@npm:2.0.1"
+ dependencies:
+ micromark-factory-space: ^2.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: b4d2e4850a8ba0dff25ce54e55a3eb0d43dda88a16293f53953153288f9d84bcdfa8ca4606b2cfbb4f132ea79587bbb478a73092a349f893f5264fbcdbce2ee1
+ languageName: node
+ linkType: hard
+
+"micromark-factory-whitespace@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-factory-whitespace@npm:2.0.1"
+ dependencies:
+ micromark-factory-space: ^2.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: 67b3944d012a42fee9e10e99178254a04d48af762b54c10a50fcab988688799993efb038daf9f5dbc04001a97b9c1b673fc6f00e6a56997877ab25449f0c8650
+ languageName: node
+ linkType: hard
+
+"micromark-util-character@npm:^2.0.0":
+ version: 2.1.1
+ resolution: "micromark-util-character@npm:2.1.1"
+ dependencies:
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: e9e409efe4f2596acd44587e8591b722bfc041c1577e8fe0d9c007a4776fb800f9b3637a22862ad2ba9489f4bdf72bb547fce5767dbbfe0a5e6760e2a21c6495
+ languageName: node
+ linkType: hard
+
+"micromark-util-chunked@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-chunked@npm:2.0.1"
+ dependencies:
+ micromark-util-symbol: ^2.0.0
+ checksum: f8cb2a67bcefe4bd2846d838c97b777101f0043b9f1de4f69baf3e26bb1f9885948444e3c3aec66db7595cad8173bd4567a000eb933576c233d54631f6323fe4
+ languageName: node
+ linkType: hard
+
+"micromark-util-classify-character@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-classify-character@npm:2.0.1"
+ dependencies:
+ micromark-util-character: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: 4d8bbe3a6dbf69ac0fc43516866b5bab019fe3f4568edc525d4feaaaf78423fa54e6b6732b5bccbeed924455279a3758ffc9556954aafb903982598a95a02704
+ languageName: node
+ linkType: hard
+
+"micromark-util-combine-extensions@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-combine-extensions@npm:2.0.1"
+ dependencies:
+ micromark-util-chunked: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: 5d22fb9ee37e8143adfe128a72b50fa09568c2cc553b3c76160486c96dbbb298c5802a177a10a215144a604b381796071b5d35be1f2c2b2ee17995eda92f0c8e
+ languageName: node
+ linkType: hard
+
+"micromark-util-decode-numeric-character-reference@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.2"
+ dependencies:
+ micromark-util-symbol: ^2.0.0
+ checksum: ee11c8bde51e250e302050474c4a2adca094bca05c69f6cdd241af12df285c48c88d19ee6e022b9728281c280be16328904adca994605680c43af56019f4b0b6
+ languageName: node
+ linkType: hard
+
+"micromark-util-decode-string@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-decode-string@npm:2.0.1"
+ dependencies:
+ decode-named-character-reference: ^1.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-decode-numeric-character-reference: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ checksum: e9546ae53f9b5a4f9aa6aaf3e750087100d3429485ca80dbacec99ff2bb15a406fa7d93784a0fc2fe05ad7296b9295e75160ef71faec9e90110b7be2ae66241a
+ languageName: node
+ linkType: hard
+
+"micromark-util-encode@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-encode@npm:2.0.1"
+ checksum: be890b98e78dd0cdd953a313f4148c4692cc2fb05533e56fef5f421287d3c08feee38ca679f318e740530791fc251bfe8c80efa926fcceb4419b269c9343d226
+ languageName: node
+ linkType: hard
+
+"micromark-util-events-to-acorn@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "micromark-util-events-to-acorn@npm:2.0.2"
+ dependencies:
+ "@types/acorn": ^4.0.0
+ "@types/estree": ^1.0.0
+ "@types/unist": ^3.0.0
+ devlop: ^1.0.0
+ estree-util-visit: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ vfile-message: ^4.0.0
+ checksum: bcb3eeac52a4ae5c3ca3d8cff514de3a7d1f272d9a94cce26a08c578bef64df4d61820874c01207e92fcace9eae5c9a7ecdddef0c6e10014b255a07b7880bf94
+ languageName: node
+ linkType: hard
+
+"micromark-util-html-tag-name@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-html-tag-name@npm:2.0.1"
+ checksum: dea365f5ad28ad74ff29fcb581f7b74fc1f80271c5141b3b2bc91c454cbb6dfca753f28ae03730d657874fcbd89d0494d0e3965dfdca06d9855f467c576afa9d
+ languageName: node
+ linkType: hard
+
+"micromark-util-normalize-identifier@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-normalize-identifier@npm:2.0.1"
+ dependencies:
+ micromark-util-symbol: ^2.0.0
+ checksum: 1eb9a289d7da067323df9fdc78bfa90ca3207ad8fd893ca02f3133e973adcb3743b233393d23d95c84ccaf5d220ae7f5a28402a644f135dcd4b8cfa60a7b5f84
+ languageName: node
+ linkType: hard
+
+"micromark-util-resolve-all@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-resolve-all@npm:2.0.1"
+ dependencies:
+ micromark-util-types: ^2.0.0
+ checksum: 9275f3ddb6c26f254dd2158e66215d050454b279707a7d9ce5a3cd0eba23201021cedcb78ae1a746c1b23227dcc418ee40dd074ade195359506797a5493550cc
+ languageName: node
+ linkType: hard
+
+"micromark-util-sanitize-uri@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-sanitize-uri@npm:2.0.1"
+ dependencies:
+ micromark-util-character: ^2.0.0
+ micromark-util-encode: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ checksum: d01517840c17de67aaa0b0f03bfe05fac8a41d99723cd8ce16c62f6810e99cd3695364a34c335485018e5e2c00e69031744630a1b85c6868aa2f2ca1b36daa2f
+ languageName: node
+ linkType: hard
+
+"micromark-util-subtokenize@npm:^2.0.0":
+ version: 2.0.3
+ resolution: "micromark-util-subtokenize@npm:2.0.3"
+ dependencies:
+ devlop: ^1.0.0
+ micromark-util-chunked: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: 3e95112b3ae640348e611dd69dc73e03f96a62e6d510d7c801685bd701041a61b5835e119ec84044972f2873b60ba21dbc58082a345d7745f4c19465b6d1b644
+ languageName: node
+ linkType: hard
+
+"micromark-util-symbol@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-symbol@npm:2.0.1"
+ checksum: fb7346950550bc85a55793dda94a8b3cb3abc068dbd7570d1162db7aee803411d06c0a5de4ae59cd945f46143bdeadd4bba02a02248fa0d18cc577babaa00044
+ languageName: node
+ linkType: hard
+
+"micromark-util-types@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "micromark-util-types@npm:2.0.1"
+ checksum: 630aac466628a360962f478f69421599c53ff8b3080765201b7be3b3a4be7f4c5b73632b9a6dd426b9e06035353c18acccee637d6c43d9b0bf1c31111bbb88a7
+ languageName: node
+ linkType: hard
+
+"micromark@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "micromark@npm:4.0.1"
+ dependencies:
+ "@types/debug": ^4.0.0
+ debug: ^4.0.0
+ decode-named-character-reference: ^1.0.0
+ devlop: ^1.0.0
+ micromark-core-commonmark: ^2.0.0
+ micromark-factory-space: ^2.0.0
+ micromark-util-character: ^2.0.0
+ micromark-util-chunked: ^2.0.0
+ micromark-util-combine-extensions: ^2.0.0
+ micromark-util-decode-numeric-character-reference: ^2.0.0
+ micromark-util-encode: ^2.0.0
+ micromark-util-normalize-identifier: ^2.0.0
+ micromark-util-resolve-all: ^2.0.0
+ micromark-util-sanitize-uri: ^2.0.0
+ micromark-util-subtokenize: ^2.0.0
+ micromark-util-symbol: ^2.0.0
+ micromark-util-types: ^2.0.0
+ checksum: 83ea084e8bf84442cc70c1207e916df11f0fde0ebd9daf978c895a1466c47a1dd4ed42b21b6e65bcc0d268fcbec24b4b1b28bc59c548940fe690929b8e0e7732
+ languageName: node
+ linkType: hard
+
+"micromatch@npm:^4.0.8":
+ version: 4.0.8
+ resolution: "micromatch@npm:4.0.8"
+ dependencies:
+ braces: ^3.0.3
+ picomatch: ^2.3.1
+ checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966
+ languageName: node
+ linkType: hard
+
+"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2":
+ version: 3.1.2
+ resolution: "minimatch@npm:3.1.2"
+ dependencies:
+ brace-expansion: ^1.1.7
+ checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a
+ languageName: node
+ linkType: hard
+
+"minimatch@npm:^9.0.1, minimatch@npm:^9.0.4":
+ version: 9.0.5
+ resolution: "minimatch@npm:9.0.5"
+ dependencies:
+ brace-expansion: ^2.0.1
+ checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28
+ languageName: node
+ linkType: hard
+
+"minimist@npm:^1.2.0, minimist@npm:^1.2.6":
+ version: 1.2.8
+ resolution: "minimist@npm:1.2.8"
+ checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0
+ languageName: node
+ linkType: hard
+
+"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0":
+ version: 7.1.2
+ resolution: "minipass@npm:7.1.2"
+ checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3
+ languageName: node
+ linkType: hard
+
+"ms@npm:^2.1.1, ms@npm:^2.1.3":
+ version: 2.1.3
+ resolution: "ms@npm:2.1.3"
+ checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
+ languageName: node
+ linkType: hard
+
+"nanoid@npm:^3.3.6":
+ version: 3.3.8
+ resolution: "nanoid@npm:3.3.8"
+ bin:
+ nanoid: bin/nanoid.cjs
+ checksum: dfe0adbc0c77e9655b550c333075f51bb28cfc7568afbf3237249904f9c86c9aaaed1f113f0fddddba75673ee31c758c30c43d4414f014a52a7a626efc5958c9
+ languageName: node
+ linkType: hard
+
+"natural-compare@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "natural-compare@npm:1.4.0"
+ checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d
+ languageName: node
+ linkType: hard
+
+"next@npm:14.2.23":
+ version: 14.2.23
+ resolution: "next@npm:14.2.23"
+ dependencies:
+ "@next/env": 14.2.23
+ "@next/swc-darwin-arm64": 14.2.23
+ "@next/swc-darwin-x64": 14.2.23
+ "@next/swc-linux-arm64-gnu": 14.2.23
+ "@next/swc-linux-arm64-musl": 14.2.23
+ "@next/swc-linux-x64-gnu": 14.2.23
+ "@next/swc-linux-x64-musl": 14.2.23
+ "@next/swc-win32-arm64-msvc": 14.2.23
+ "@next/swc-win32-ia32-msvc": 14.2.23
+ "@next/swc-win32-x64-msvc": 14.2.23
+ "@swc/helpers": 0.5.5
+ busboy: 1.6.0
+ caniuse-lite: ^1.0.30001579
+ graceful-fs: ^4.2.11
+ postcss: 8.4.31
+ styled-jsx: 5.1.1
+ peerDependencies:
+ "@opentelemetry/api": ^1.1.0
+ "@playwright/test": ^1.41.2
+ react: ^18.2.0
+ react-dom: ^18.2.0
+ sass: ^1.3.0
+ dependenciesMeta:
+ "@next/swc-darwin-arm64":
+ optional: true
+ "@next/swc-darwin-x64":
+ optional: true
+ "@next/swc-linux-arm64-gnu":
+ optional: true
+ "@next/swc-linux-arm64-musl":
+ optional: true
+ "@next/swc-linux-x64-gnu":
+ optional: true
+ "@next/swc-linux-x64-musl":
+ optional: true
+ "@next/swc-win32-arm64-msvc":
+ optional: true
+ "@next/swc-win32-ia32-msvc":
+ optional: true
+ "@next/swc-win32-x64-msvc":
+ optional: true
+ peerDependenciesMeta:
+ "@opentelemetry/api":
+ optional: true
+ "@playwright/test":
+ optional: true
+ sass:
+ optional: true
+ bin:
+ next: dist/bin/next
+ checksum: 4f9f744439fb860ba7c64ae1c61bc361bdd36e41d56760c52eabb404f4143c854b78ba9a79b7aefc322d93edbbd66d966cbdaf86772a88a8bf2e6b289987f14f
+ languageName: node
+ linkType: hard
+
+"object-assign@npm:^4.1.1":
+ version: 4.1.1
+ resolution: "object-assign@npm:4.1.1"
+ checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f
+ languageName: node
+ linkType: hard
+
+"object-inspect@npm:^1.13.3":
+ version: 1.13.3
+ resolution: "object-inspect@npm:1.13.3"
+ checksum: 8c962102117241e18ea403b84d2521f78291b774b03a29ee80a9863621d88265ffd11d0d7e435c4c2cea0dc2a2fbf8bbc92255737a05536590f2df2e8756f297
+ languageName: node
+ linkType: hard
+
+"object-keys@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "object-keys@npm:1.1.1"
+ checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a
+ languageName: node
+ linkType: hard
+
+"object.assign@npm:^4.1.4, object.assign@npm:^4.1.7":
+ version: 4.1.7
+ resolution: "object.assign@npm:4.1.7"
+ dependencies:
+ call-bind: ^1.0.8
+ call-bound: ^1.0.3
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ has-symbols: ^1.1.0
+ object-keys: ^1.1.1
+ checksum: 60e07d2651cf4f5528c485f1aa4dbded9b384c47d80e8187cefd11320abb1aebebf78df5483451dfa549059f8281c21f7b4bf7d19e9e5e97d8d617df0df298de
+ languageName: node
+ linkType: hard
+
+"object.entries@npm:^1.1.8":
+ version: 1.1.8
+ resolution: "object.entries@npm:1.1.8"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907
+ languageName: node
+ linkType: hard
+
+"object.fromentries@npm:^2.0.8":
+ version: 2.0.8
+ resolution: "object.fromentries@npm:2.0.8"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-object-atoms: ^1.0.0
+ checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1
+ languageName: node
+ linkType: hard
+
+"object.groupby@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "object.groupby@npm:1.0.3"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ checksum: 0d30693ca3ace29720bffd20b3130451dca7a56c612e1926c0a1a15e4306061d84410bdb1456be2656c5aca53c81b7a3661eceaa362db1bba6669c2c9b6d1982
+ languageName: node
+ linkType: hard
+
+"object.values@npm:^1.1.6, object.values@npm:^1.2.0, object.values@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "object.values@npm:1.2.1"
+ dependencies:
+ call-bind: ^1.0.8
+ call-bound: ^1.0.3
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ checksum: f9b9a2a125ccf8ded29414d7c056ae0d187b833ee74919821fc60d7e216626db220d9cb3cf33f965c84aaaa96133626ca13b80f3c158b673976dc8cfcfcd26bb
+ languageName: node
+ linkType: hard
+
+"once@npm:^1.3.0":
+ version: 1.4.0
+ resolution: "once@npm:1.4.0"
+ dependencies:
+ wrappy: 1
+ checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68
+ languageName: node
+ linkType: hard
+
+"oniguruma-to-es@npm:0.10.0":
+ version: 0.10.0
+ resolution: "oniguruma-to-es@npm:0.10.0"
+ dependencies:
+ emoji-regex-xs: ^1.0.0
+ regex: ^5.1.1
+ regex-recursion: ^5.1.1
+ checksum: 20c4e7b435e7b561c19ae645f1141490bbe616e593fa4844931b92b23b7c5aabdf45f77f4e40c9a4a08aa12e4ed26561f7ead0383c3b23cbb1a0ec414dec7459
+ languageName: node
+ linkType: hard
+
+"open@npm:^8.0.4":
+ version: 8.4.2
+ resolution: "open@npm:8.4.2"
+ dependencies:
+ define-lazy-prop: ^2.0.0
+ is-docker: ^2.1.1
+ is-wsl: ^2.2.0
+ checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26
+ languageName: node
+ linkType: hard
+
+"optionator@npm:^0.9.3":
+ version: 0.9.4
+ resolution: "optionator@npm:0.9.4"
+ dependencies:
+ deep-is: ^0.1.3
+ fast-levenshtein: ^2.0.6
+ levn: ^0.4.1
+ prelude-ls: ^1.2.1
+ type-check: ^0.4.0
+ word-wrap: ^1.2.5
+ checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb
+ languageName: node
+ linkType: hard
+
+"own-keys@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "own-keys@npm:1.0.1"
+ dependencies:
+ get-intrinsic: ^1.2.6
+ object-keys: ^1.1.1
+ safe-push-apply: ^1.0.0
+ checksum: cc9dd7d85c4ccfbe8109fce307d581ac7ede7b26de892b537873fbce2dc6a206d89aea0630dbb98e47ce0873517cefeaa7be15fcf94aaf4764a3b34b474a5b61
+ languageName: node
+ linkType: hard
+
+"p-limit@npm:^3.0.2":
+ version: 3.1.0
+ resolution: "p-limit@npm:3.1.0"
+ dependencies:
+ yocto-queue: ^0.1.0
+ checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360
+ languageName: node
+ linkType: hard
+
+"p-locate@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "p-locate@npm:5.0.0"
+ dependencies:
+ p-limit: ^3.0.2
+ checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3
+ languageName: node
+ linkType: hard
+
+"parent-module@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "parent-module@npm:1.0.1"
+ dependencies:
+ callsites: ^3.0.0
+ checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff
+ languageName: node
+ linkType: hard
+
+"parse-entities@npm:^4.0.0":
+ version: 4.0.2
+ resolution: "parse-entities@npm:4.0.2"
+ dependencies:
+ "@types/unist": ^2.0.0
+ character-entities-legacy: ^3.0.0
+ character-reference-invalid: ^2.0.0
+ decode-named-character-reference: ^1.0.0
+ is-alphanumerical: ^2.0.0
+ is-decimal: ^2.0.0
+ is-hexadecimal: ^2.0.0
+ checksum: db22b46da1a62af00409c929ac49fbd306b5ebf0dbacf4646d2ae2b58616ef90a40eedc282568a3cf740fac2a7928bc97146973a628f6977ca274dedc2ad6edc
+ languageName: node
+ linkType: hard
+
+"path-exists@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "path-exists@npm:4.0.0"
+ checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1
+ languageName: node
+ linkType: hard
+
+"path-is-absolute@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "path-is-absolute@npm:1.0.1"
+ checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8
+ languageName: node
+ linkType: hard
+
+"path-key@npm:^3.1.0":
+ version: 3.1.1
+ resolution: "path-key@npm:3.1.1"
+ checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020
+ languageName: node
+ linkType: hard
+
+"path-parse@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "path-parse@npm:1.0.7"
+ checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a
+ languageName: node
+ linkType: hard
+
+"path-scurry@npm:^1.10.1":
+ version: 1.11.1
+ resolution: "path-scurry@npm:1.11.1"
+ dependencies:
+ lru-cache: ^10.2.0
+ minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
+ checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023
+ languageName: node
+ linkType: hard
+
+"picocolors@npm:^1.0.0":
+ version: 1.1.1
+ resolution: "picocolors@npm:1.1.1"
+ checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045
+ languageName: node
+ linkType: hard
+
+"picomatch@npm:^2.3.1":
+ version: 2.3.1
+ resolution: "picomatch@npm:2.3.1"
+ checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf
+ languageName: node
+ linkType: hard
+
+"possible-typed-array-names@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "possible-typed-array-names@npm:1.0.0"
+ checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae
+ languageName: node
+ linkType: hard
+
+"postcss@npm:8.4.31":
+ version: 8.4.31
+ resolution: "postcss@npm:8.4.31"
+ dependencies:
+ nanoid: ^3.3.6
+ picocolors: ^1.0.0
+ source-map-js: ^1.0.2
+ checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea
+ languageName: node
+ linkType: hard
+
+"prelude-ls@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "prelude-ls@npm:1.2.1"
+ checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a
+ languageName: node
+ linkType: hard
+
+"process@npm:^0.11.10":
+ version: 0.11.10
+ resolution: "process@npm:0.11.10"
+ checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3
+ languageName: node
+ linkType: hard
+
+"prop-types@npm:^15.8.1":
+ version: 15.8.1
+ resolution: "prop-types@npm:15.8.1"
+ dependencies:
+ loose-envify: ^1.4.0
+ object-assign: ^4.1.1
+ react-is: ^16.13.1
+ checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459
+ languageName: node
+ linkType: hard
+
+"property-information@npm:^6.0.0":
+ version: 6.5.0
+ resolution: "property-information@npm:6.5.0"
+ checksum: 6e55664e2f64083b715011e5bafaa1e694faf36986c235b0907e95d09259cc37c38382e3cc94a4c3f56366e05336443db12c8a0f0968a8c0a1b1416eebfc8f53
+ languageName: node
+ linkType: hard
+
+"punycode@npm:^2.1.0":
+ version: 2.3.1
+ resolution: "punycode@npm:2.3.1"
+ checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2
+ languageName: node
+ linkType: hard
+
+"queue-microtask@npm:^1.2.2":
+ version: 1.2.3
+ resolution: "queue-microtask@npm:1.2.3"
+ checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4
+ languageName: node
+ linkType: hard
+
+"react-dom@npm:^18":
+ version: 18.3.1
+ resolution: "react-dom@npm:18.3.1"
+ dependencies:
+ loose-envify: ^1.1.0
+ scheduler: ^0.23.2
+ peerDependencies:
+ react: ^18.3.1
+ checksum: 298954ecd8f78288dcaece05e88b570014d8f6dce5db6f66e6ee91448debeb59dcd31561dddb354eee47e6c1bb234669459060deb238ed0213497146e555a0b9
+ languageName: node
+ linkType: hard
+
+"react-frame-component@npm:^5.2.7":
+ version: 5.2.7
+ resolution: "react-frame-component@npm:5.2.7"
+ peerDependencies:
+ prop-types: ^15.5.9
+ react: ">= 16.3"
+ react-dom: ">= 16.3"
+ checksum: e28975cf8ca1e730f66f1fc9e4d4248f33970088b95737d6a271ba8650bc35c1bbf97537685c8ab9a32af0fd89c52777e03de848b8cc3c9e8842506ddc3f65d9
+ languageName: node
+ linkType: hard
+
+"react-is@npm:^16.13.1":
+ version: 16.13.1
+ resolution: "react-is@npm:16.13.1"
+ checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f
+ languageName: node
+ linkType: hard
+
+"react@npm:^18":
+ version: 18.3.1
+ resolution: "react@npm:18.3.1"
+ dependencies:
+ loose-envify: ^1.1.0
+ checksum: a27bcfa8ff7c15a1e50244ad0d0c1cb2ad4375eeffefd266a64889beea6f6b64c4966c9b37d14ee32d6c9fcd5aa6ba183b6988167ab4d127d13e7cb5b386a376
+ languageName: node
+ linkType: hard
+
+"recast@npm:^0.23.5":
+ version: 0.23.9
+ resolution: "recast@npm:0.23.9"
+ dependencies:
+ ast-types: ^0.16.1
+ esprima: ~4.0.0
+ source-map: ~0.6.1
+ tiny-invariant: ^1.3.3
+ tslib: ^2.0.1
+ checksum: be8e896a46b24e30fbeafcd111ff3beaf2b5532d241c199f833fe1c18e89f695b2704cf83f3006fa96a785851019031de0de50bd3e0fd7bb114be18bf2cad900
+ languageName: node
+ linkType: hard
+
+"recma-build-jsx@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "recma-build-jsx@npm:1.0.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ estree-util-build-jsx: ^3.0.0
+ vfile: ^6.0.0
+ checksum: ba82fe08efdf5ecd178ab76a08a4acac792a41d9f38aea99f93cb3d9e577ba8952620c547e730ba6717c13efa08fdb3dfe893bccfa9717f5a81d3fb2ab20c572
+ languageName: node
+ linkType: hard
+
+"recma-jsx@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "recma-jsx@npm:1.0.0"
+ dependencies:
+ acorn-jsx: ^5.0.0
+ estree-util-to-js: ^2.0.0
+ recma-parse: ^1.0.0
+ recma-stringify: ^1.0.0
+ unified: ^11.0.0
+ checksum: bc7e3f744e82c9826ddf6fdf8933351b59f0663409a51abe0f3179380584b732f981c16e15c653e60c1e1cc366d4eb9b38e37832a241ec2247062997846e7eef
+ languageName: node
+ linkType: hard
+
+"recma-parse@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "recma-parse@npm:1.0.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ esast-util-from-js: ^2.0.0
+ unified: ^11.0.0
+ vfile: ^6.0.0
+ checksum: 676b2097a63ba444985a61af51c2628a546a2537a9ca036ed2249a627fb096f3373139765388b60164e6f5a50c819146a3660351e3f993a360ef107f2ab1c6f8
+ languageName: node
+ linkType: hard
+
+"recma-stringify@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "recma-stringify@npm:1.0.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ estree-util-to-js: ^2.0.0
+ unified: ^11.0.0
+ vfile: ^6.0.0
+ checksum: 3a4f80fe0f6bc11fefa71782dfedb43c28b42518dea450cd1b1591057d9d570f83c85d645bf5ed6da2e47de15a021172c076a8ff4675799855d9f9436cec3c82
+ languageName: node
+ linkType: hard
+
+"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9":
+ version: 1.0.10
+ resolution: "reflect.getprototypeof@npm:1.0.10"
+ dependencies:
+ call-bind: ^1.0.8
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.9
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ get-intrinsic: ^1.2.7
+ get-proto: ^1.0.1
+ which-builtin-type: ^1.2.1
+ checksum: ccc5debeb66125e276ae73909cecb27e47c35d9bb79d9cc8d8d055f008c58010ab8cb401299786e505e4aab733a64cba9daf5f312a58e96a43df66adad221870
+ languageName: node
+ linkType: hard
+
+"regenerator-runtime@npm:^0.14.0":
+ version: 0.14.1
+ resolution: "regenerator-runtime@npm:0.14.1"
+ checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38
+ languageName: node
+ linkType: hard
+
+"regex-recursion@npm:^5.1.1":
+ version: 5.1.1
+ resolution: "regex-recursion@npm:5.1.1"
+ dependencies:
+ regex: ^5.1.1
+ regex-utilities: ^2.3.0
+ checksum: 4f203ae8f4a2ebf9004f4e4119df5106ba07b39bd3778d7040a83b17f3a82fe22c202661adc3f5586e4eb782fece77e8a01eba8b7033f92147ad7a1e7e1531d7
+ languageName: node
+ linkType: hard
+
+"regex-utilities@npm:^2.3.0":
+ version: 2.3.0
+ resolution: "regex-utilities@npm:2.3.0"
+ checksum: 41408777df45cefe1b276281030213235aa1143809c4c10eb5573d2cc27ff2c4aa746c6f4d4c235e3d2f4830eff76b28906ce82fbe72895beca8e15204c2da51
+ languageName: node
+ linkType: hard
+
+"regex@npm:^5.1.1":
+ version: 5.1.1
+ resolution: "regex@npm:5.1.1"
+ dependencies:
+ regex-utilities: ^2.3.0
+ checksum: bff664d0c001bf2929c2a5c92399419f719ef5ac9e7198bce653695d37628a3bd21595cea571f93ee13b55c5bbeff7fbab307a9ef569e36b149caf09601d4a31
+ languageName: node
+ linkType: hard
+
+"regexp.prototype.flags@npm:^1.5.3":
+ version: 1.5.4
+ resolution: "regexp.prototype.flags@npm:1.5.4"
+ dependencies:
+ call-bind: ^1.0.8
+ define-properties: ^1.2.1
+ es-errors: ^1.3.0
+ get-proto: ^1.0.1
+ gopd: ^1.2.0
+ set-function-name: ^2.0.2
+ checksum: 18cb667e56cb328d2dda569d7f04e3ea78f2683135b866d606538cf7b1d4271f7f749f09608c877527799e6cf350e531368f3c7a20ccd1bb41048a48926bdeeb
+ languageName: node
+ linkType: hard
+
+"rehype-recma@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "rehype-recma@npm:1.0.0"
+ dependencies:
+ "@types/estree": ^1.0.0
+ "@types/hast": ^3.0.0
+ hast-util-to-estree: ^3.0.0
+ checksum: d3d544ad4a18485ec6b03a194b40473f96e2169c63d6a8ee3ce9af5e87b946c308fb9549b53e010c7dd39740337e387bb1a8856ce1b47f3e957b696f1d5b2d0c
+ languageName: node
+ linkType: hard
+
+"remark-mdx@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "remark-mdx@npm:3.1.0"
+ dependencies:
+ mdast-util-mdx: ^3.0.0
+ micromark-extension-mdxjs: ^3.0.0
+ checksum: ac631296b3f87f46c03b51e8b1e7c90b854361da57ec5d0fddc410c63400fcffae216f2cee3af946407fc88e60bfc5765ba8acabe8e91afc0b7c824db77df152
+ languageName: node
+ linkType: hard
+
+"remark-parse@npm:^11.0.0":
+ version: 11.0.0
+ resolution: "remark-parse@npm:11.0.0"
+ dependencies:
+ "@types/mdast": ^4.0.0
+ mdast-util-from-markdown: ^2.0.0
+ micromark-util-types: ^2.0.0
+ unified: ^11.0.0
+ checksum: d83d245290fa84bb04fb3e78111f09c74f7417e7c012a64dd8dc04fccc3699036d828fbd8eeec8944f774b6c30cc1d925c98f8c46495ebcee7c595496342ab7f
+ languageName: node
+ linkType: hard
+
+"remark-rehype@npm:^11.0.0":
+ version: 11.1.1
+ resolution: "remark-rehype@npm:11.1.1"
+ dependencies:
+ "@types/hast": ^3.0.0
+ "@types/mdast": ^4.0.0
+ mdast-util-to-hast: ^13.0.0
+ unified: ^11.0.0
+ vfile: ^6.0.0
+ checksum: e199dff098ae6a560e13dd1778dec9c61440f979cc931c4ca4dcde0d58e51c0723243a901c1842379b189083cf4d74f224f57833738095ffa9535179d7cf3f01
+ languageName: node
+ linkType: hard
+
+"resolve-from@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "resolve-from@npm:4.0.0"
+ checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f
+ languageName: node
+ linkType: hard
+
+"resolve-pkg-maps@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "resolve-pkg-maps@npm:1.0.0"
+ checksum: 1012afc566b3fdb190a6309cc37ef3b2dcc35dff5fa6683a9d00cd25c3247edfbc4691b91078c97adc82a29b77a2660c30d791d65dab4fc78bfc473f60289977
+ languageName: node
+ linkType: hard
+
+"resolve@npm:^1.22.4":
+ version: 1.22.10
+ resolution: "resolve@npm:1.22.10"
+ dependencies:
+ is-core-module: ^2.16.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: ab7a32ff4046fcd7c6fdd525b24a7527847d03c3650c733b909b01b757f92eb23510afa9cc3e9bf3f26a3e073b48c88c706dfd4c1d2fb4a16a96b73b6328ddcf
+ languageName: node
+ linkType: hard
+
+"resolve@npm:^2.0.0-next.5":
+ version: 2.0.0-next.5
+ resolution: "resolve@npm:2.0.0-next.5"
+ dependencies:
+ is-core-module: ^2.13.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f
+ languageName: node
+ linkType: hard
+
+"resolve@patch:resolve@^1.22.4#~builtin":
+ version: 1.22.10
+ resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin::version=1.22.10&hash=c3c19d"
+ dependencies:
+ is-core-module: ^2.16.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: 8aac1e4e4628bd00bf4b94b23de137dd3fe44097a8d528fd66db74484be929936e20c696e1a3edf4488f37e14180b73df6f600992baea3e089e8674291f16c9d
+ languageName: node
+ linkType: hard
+
+"resolve@patch:resolve@^2.0.0-next.5#~builtin":
+ version: 2.0.0-next.5
+ resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=c3c19d"
+ dependencies:
+ is-core-module: ^2.13.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c
+ languageName: node
+ linkType: hard
+
+"reusify@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "reusify@npm:1.0.4"
+ checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc
+ languageName: node
+ linkType: hard
+
+"rimraf@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "rimraf@npm:3.0.2"
+ dependencies:
+ glob: ^7.1.3
+ bin:
+ rimraf: bin.js
+ checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0
+ languageName: node
+ linkType: hard
+
+"run-parallel@npm:^1.1.9":
+ version: 1.2.0
+ resolution: "run-parallel@npm:1.2.0"
+ dependencies:
+ queue-microtask: ^1.2.2
+ checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d
+ languageName: node
+ linkType: hard
+
+"safe-array-concat@npm:^1.1.3":
+ version: 1.1.3
+ resolution: "safe-array-concat@npm:1.1.3"
+ dependencies:
+ call-bind: ^1.0.8
+ call-bound: ^1.0.2
+ get-intrinsic: ^1.2.6
+ has-symbols: ^1.1.0
+ isarray: ^2.0.5
+ checksum: 00f6a68140e67e813f3ad5e73e6dedcf3e42a9fa01f04d44b0d3f7b1f4b257af876832a9bfc82ac76f307e8a6cc652e3cf95876048a26cbec451847cf6ae3707
+ languageName: node
+ linkType: hard
+
+"safe-push-apply@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "safe-push-apply@npm:1.0.0"
+ dependencies:
+ es-errors: ^1.3.0
+ isarray: ^2.0.5
+ checksum: 8c11cbee6dc8ff5cc0f3d95eef7052e43494591384015902e4292aef4ae9e539908288520ed97179cee17d6ffb450fe5f05a46ce7a1749685f7524fd568ab5db
+ languageName: node
+ linkType: hard
+
+"safe-regex-test@npm:^1.0.3, safe-regex-test@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "safe-regex-test@npm:1.1.0"
+ dependencies:
+ call-bound: ^1.0.2
+ es-errors: ^1.3.0
+ is-regex: ^1.2.1
+ checksum: 3c809abeb81977c9ed6c869c83aca6873ea0f3ab0f806b8edbba5582d51713f8a6e9757d24d2b4b088f563801475ea946c8e77e7713e8c65cdd02305b6caedab
+ languageName: node
+ linkType: hard
+
+"scheduler@npm:^0.23.2":
+ version: 0.23.2
+ resolution: "scheduler@npm:0.23.2"
+ dependencies:
+ loose-envify: ^1.1.0
+ checksum: 3e82d1f419e240ef6219d794ff29c7ee415fbdc19e038f680a10c067108e06284f1847450a210b29bbaf97b9d8a97ced5f624c31c681248ac84c80d56ad5a2c4
+ languageName: node
+ linkType: hard
+
+"semver@npm:^6.3.1":
+ version: 6.3.1
+ resolution: "semver@npm:6.3.1"
+ bin:
+ semver: bin/semver.js
+ checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2
+ languageName: node
+ linkType: hard
+
+"semver@npm:^7.6.0, semver@npm:^7.6.2, semver@npm:^7.6.3":
+ version: 7.6.3
+ resolution: "semver@npm:7.6.3"
+ bin:
+ semver: bin/semver.js
+ checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8
+ languageName: node
+ linkType: hard
+
+"set-function-length@npm:^1.2.2":
+ version: 1.2.2
+ resolution: "set-function-length@npm:1.2.2"
+ dependencies:
+ define-data-property: ^1.1.4
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ get-intrinsic: ^1.2.4
+ gopd: ^1.0.1
+ has-property-descriptors: ^1.0.2
+ checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72
+ languageName: node
+ linkType: hard
+
+"set-function-name@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "set-function-name@npm:2.0.2"
+ dependencies:
+ define-data-property: ^1.1.4
+ es-errors: ^1.3.0
+ functions-have-names: ^1.2.3
+ has-property-descriptors: ^1.0.2
+ checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f
+ languageName: node
+ linkType: hard
+
+"set-proto@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "set-proto@npm:1.0.0"
+ dependencies:
+ dunder-proto: ^1.0.1
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ checksum: ec27cbbe334598547e99024403e96da32aca3e530583e4dba7f5db1c43cbc4affa9adfbd77c7b2c210b9b8b2e7b2e600bad2a6c44fd62e804d8233f96bbb62f4
+ languageName: node
+ linkType: hard
+
+"shebang-command@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "shebang-command@npm:2.0.0"
+ dependencies:
+ shebang-regex: ^3.0.0
+ checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa
+ languageName: node
+ linkType: hard
+
+"shebang-regex@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "shebang-regex@npm:3.0.0"
+ checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222
+ languageName: node
+ linkType: hard
+
+"shiki@npm:^1.26.1":
+ version: 1.26.1
+ resolution: "shiki@npm:1.26.1"
+ dependencies:
+ "@shikijs/core": 1.26.1
+ "@shikijs/engine-javascript": 1.26.1
+ "@shikijs/engine-oniguruma": 1.26.1
+ "@shikijs/langs": 1.26.1
+ "@shikijs/themes": 1.26.1
+ "@shikijs/types": 1.26.1
+ "@shikijs/vscode-textmate": ^10.0.1
+ "@types/hast": ^3.0.4
+ checksum: 52ea1ce079766171dc75a1ae19d355487be158383a0e0067cf48b52f7e38f2e6e949d491e4c07e15cdaffc17edd57c1f4ad96984306ba4f7c99c79021ab358a9
+ languageName: node
+ linkType: hard
+
+"side-channel-list@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "side-channel-list@npm:1.0.0"
+ dependencies:
+ es-errors: ^1.3.0
+ object-inspect: ^1.13.3
+ checksum: 603b928997abd21c5a5f02ae6b9cc36b72e3176ad6827fab0417ead74580cc4fb4d5c7d0a8a2ff4ead34d0f9e35701ed7a41853dac8a6d1a664fcce1a044f86f
+ languageName: node
+ linkType: hard
+
+"side-channel-map@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "side-channel-map@npm:1.0.1"
+ dependencies:
+ call-bound: ^1.0.2
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.5
+ object-inspect: ^1.13.3
+ checksum: 42501371cdf71f4ccbbc9c9e2eb00aaaab80a4c1c429d5e8da713fd4d39ef3b8d4a4b37ed4f275798a65260a551a7131fd87fe67e922dba4ac18586d6aab8b06
+ languageName: node
+ linkType: hard
+
+"side-channel-weakmap@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "side-channel-weakmap@npm:1.0.2"
+ dependencies:
+ call-bound: ^1.0.2
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.5
+ object-inspect: ^1.13.3
+ side-channel-map: ^1.0.1
+ checksum: a815c89bc78c5723c714ea1a77c938377ea710af20d4fb886d362b0d1f8ac73a17816a5f6640f354017d7e292a43da9c5e876c22145bac00b76cfb3468001736
+ languageName: node
+ linkType: hard
+
+"side-channel@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "side-channel@npm:1.1.0"
+ dependencies:
+ es-errors: ^1.3.0
+ object-inspect: ^1.13.3
+ side-channel-list: ^1.0.0
+ side-channel-map: ^1.0.1
+ side-channel-weakmap: ^1.0.2
+ checksum: bf73d6d6682034603eb8e99c63b50155017ed78a522d27c2acec0388a792c3ede3238b878b953a08157093b85d05797217d270b7666ba1f111345fbe933380ff
+ languageName: node
+ linkType: hard
+
+"signal-exit@npm:^4.0.1":
+ version: 4.1.0
+ resolution: "signal-exit@npm:4.1.0"
+ checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549
+ languageName: node
+ linkType: hard
+
+"source-map-js@npm:^1.0.2":
+ version: 1.2.1
+ resolution: "source-map-js@npm:1.2.1"
+ checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b
+ languageName: node
+ linkType: hard
+
+"source-map@npm:^0.7.0":
+ version: 0.7.4
+ resolution: "source-map@npm:0.7.4"
+ checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5
+ languageName: node
+ linkType: hard
+
+"source-map@npm:~0.6.1":
+ version: 0.6.1
+ resolution: "source-map@npm:0.6.1"
+ checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2
+ languageName: node
+ linkType: hard
+
+"space-separated-tokens@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "space-separated-tokens@npm:2.0.2"
+ checksum: 202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990
+ languageName: node
+ linkType: hard
+
+"stable-hash@npm:^0.0.4":
+ version: 0.0.4
+ resolution: "stable-hash@npm:0.0.4"
+ checksum: 21c039d21c1cb739cf8342561753a5e007cb95ea682ccd452e76310bbb9c6987a89de8eda023e320b019f3e4691aabda75079cdbb7dadf7ab9013e931f2f23cd
+ languageName: node
+ linkType: hard
+
+"storybook@npm:^8.4.7":
+ version: 8.4.7
+ resolution: "storybook@npm:8.4.7"
+ dependencies:
+ "@storybook/core": 8.4.7
+ peerDependencies:
+ prettier: ^2 || ^3
+ peerDependenciesMeta:
+ prettier:
+ optional: true
+ bin:
+ getstorybook: ./bin/index.cjs
+ sb: ./bin/index.cjs
+ storybook: ./bin/index.cjs
+ checksum: 6cd44f8d51b68f2c2363d5e996bc8bf1e47a5acc2050da351d0fb49acd3d99ed093eef1b148145a1af9c08ead8592a87ee569c4456941a37dc374f9f21ea45c3
+ languageName: node
+ linkType: hard
+
+"streamsearch@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "streamsearch@npm:1.1.0"
+ checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942
+ languageName: node
+ linkType: hard
+
+"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0":
+ version: 4.2.3
+ resolution: "string-width@npm:4.2.3"
+ dependencies:
+ emoji-regex: ^8.0.0
+ is-fullwidth-code-point: ^3.0.0
+ strip-ansi: ^6.0.1
+ checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb
+ languageName: node
+ linkType: hard
+
+"string-width@npm:^5.0.1, string-width@npm:^5.1.2":
+ version: 5.1.2
+ resolution: "string-width@npm:5.1.2"
+ dependencies:
+ eastasianwidth: ^0.2.0
+ emoji-regex: ^9.2.2
+ strip-ansi: ^7.0.1
+ checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193
+ languageName: node
+ linkType: hard
+
+"string.prototype.includes@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "string.prototype.includes@npm:2.0.1"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.3
+ checksum: ed4b7058b092f30d41c4df1e3e805eeea92479d2c7a886aa30f42ae32fde8924a10cc99cccc99c29b8e18c48216608a0fe6bf887f8b4aadf9559096a758f313a
+ languageName: node
+ linkType: hard
+
+"string.prototype.matchall@npm:^4.0.12":
+ version: 4.0.12
+ resolution: "string.prototype.matchall@npm:4.0.12"
+ dependencies:
+ call-bind: ^1.0.8
+ call-bound: ^1.0.3
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.6
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ get-intrinsic: ^1.2.6
+ gopd: ^1.2.0
+ has-symbols: ^1.1.0
+ internal-slot: ^1.1.0
+ regexp.prototype.flags: ^1.5.3
+ set-function-name: ^2.0.2
+ side-channel: ^1.1.0
+ checksum: 98a09d6af91bfc6ee25556f3d7cd6646d02f5f08bda55d45528ed273d266d55a71af7291fe3fc76854deffb9168cc1a917d0b07a7d5a178c7e9537c99e6d2b57
+ languageName: node
+ linkType: hard
+
+"string.prototype.repeat@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "string.prototype.repeat@npm:1.0.0"
+ dependencies:
+ define-properties: ^1.1.3
+ es-abstract: ^1.17.5
+ checksum: 95dfc514ed7f328d80a066dabbfbbb1615c3e51490351085409db2eb7cbfed7ea29fdadaf277647fbf9f4a1e10e6dd9e95e78c0fd2c4e6bb6723ea6e59401004
+ languageName: node
+ linkType: hard
+
+"string.prototype.trim@npm:^1.2.10":
+ version: 1.2.10
+ resolution: "string.prototype.trim@npm:1.2.10"
+ dependencies:
+ call-bind: ^1.0.8
+ call-bound: ^1.0.2
+ define-data-property: ^1.1.4
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.5
+ es-object-atoms: ^1.0.0
+ has-property-descriptors: ^1.0.2
+ checksum: 87659cd8561237b6c69f5376328fda934693aedde17bb7a2c57008e9d9ff992d0c253a391c7d8d50114e0e49ff7daf86a362f7961cf92f7564cd01342ca2e385
+ languageName: node
+ linkType: hard
+
+"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9":
+ version: 1.0.9
+ resolution: "string.prototype.trimend@npm:1.0.9"
+ dependencies:
+ call-bind: ^1.0.8
+ call-bound: ^1.0.2
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ checksum: cb86f639f41d791a43627784be2175daa9ca3259c7cb83e7a207a729909b74f2ea0ec5d85de5761e6835e5f443e9420c6ff3f63a845378e4a61dd793177bc287
+ languageName: node
+ linkType: hard
+
+"string.prototype.trimstart@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "string.prototype.trimstart@npm:1.0.8"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96
+ languageName: node
+ linkType: hard
+
+"stringify-entities@npm:^4.0.0":
+ version: 4.0.4
+ resolution: "stringify-entities@npm:4.0.4"
+ dependencies:
+ character-entities-html4: ^2.0.0
+ character-entities-legacy: ^3.0.0
+ checksum: ac1344ef211eacf6cf0a0a8feaf96f9c36083835b406560d2c6ff5a87406a41b13f2f0b4c570a3b391f465121c4fd6822b863ffb197e8c0601a64097862cc5b5
+ languageName: node
+ linkType: hard
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "strip-ansi@npm:6.0.1"
+ dependencies:
+ ansi-regex: ^5.0.1
+ checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c
+ languageName: node
+ linkType: hard
+
+"strip-ansi@npm:^7.0.1":
+ version: 7.1.0
+ resolution: "strip-ansi@npm:7.1.0"
+ dependencies:
+ ansi-regex: ^6.0.1
+ checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d
+ languageName: node
+ linkType: hard
+
+"strip-bom@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "strip-bom@npm:3.0.0"
+ checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b
+ languageName: node
+ linkType: hard
+
+"strip-json-comments@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "strip-json-comments@npm:3.1.1"
+ checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443
+ languageName: node
+ linkType: hard
+
+"style-mod@npm:^4.0.0, style-mod@npm:^4.1.0":
+ version: 4.1.2
+ resolution: "style-mod@npm:4.1.2"
+ checksum: 7c5c3e82747f9bcf5f288d8d07f50848e4630fe5ff7bfe4d94cc87d6b6a2588227cbf21b4c792ac6406e5852293300a75e710714479a5c59a06af677f0825ef8
+ languageName: node
+ linkType: hard
+
+"style-to-object@npm:^1.0.0":
+ version: 1.0.8
+ resolution: "style-to-object@npm:1.0.8"
+ dependencies:
+ inline-style-parser: 0.2.4
+ checksum: 80ca4773fc728d7919edc552eb46bab11aa8cdd0b426528ee8b817ba6872ea7b9d38fbb97b6443fd2d4895a4c4b02ec32765387466a302d0b4d1b91deab1e1a0
+ languageName: node
+ linkType: hard
+
+"styled-jsx@npm:5.1.1":
+ version: 5.1.1
+ resolution: "styled-jsx@npm:5.1.1"
+ dependencies:
+ client-only: 0.0.1
+ peerDependencies:
+ react: ">= 16.8.0 || 17.x.x || ^18.0.0-0"
+ peerDependenciesMeta:
+ "@babel/core":
+ optional: true
+ babel-plugin-macros:
+ optional: true
+ checksum: 523a33b38603492547e861b98e29c873939b04e15fbe5ef16132c6f1e15958126647983c7d4675325038b428a5e91183d996e90141b18bdd1bbadf6e2c45b2fa
+ languageName: node
+ linkType: hard
+
+"supports-color@npm:^7.1.0":
+ version: 7.2.0
+ resolution: "supports-color@npm:7.2.0"
+ dependencies:
+ has-flag: ^4.0.0
+ checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a
+ languageName: node
+ linkType: hard
+
+"supports-preserve-symlinks-flag@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
+ checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae
+ languageName: node
+ linkType: hard
+
+"tapable@npm:^2.2.0":
+ version: 2.2.1
+ resolution: "tapable@npm:2.2.1"
+ checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51
+ languageName: node
+ linkType: hard
+
+"text-table@npm:^0.2.0":
+ version: 0.2.0
+ resolution: "text-table@npm:0.2.0"
+ checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a
+ languageName: node
+ linkType: hard
+
+"tiny-invariant@npm:^1.3.3":
+ version: 1.3.3
+ resolution: "tiny-invariant@npm:1.3.3"
+ checksum: 5e185c8cc2266967984ce3b352a4e57cb89dad5a8abb0dea21468a6ecaa67cd5bb47a3b7a85d08041008644af4f667fb8b6575ba38ba5fb00b3b5068306e59fe
+ languageName: node
+ linkType: hard
+
+"to-regex-range@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "to-regex-range@npm:5.0.1"
+ dependencies:
+ is-number: ^7.0.0
+ checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed
+ languageName: node
+ linkType: hard
+
+"trim-lines@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "trim-lines@npm:3.0.1"
+ checksum: e241da104682a0e0d807222cc1496b92e716af4db7a002f4aeff33ae6a0024fef93165d49eab11aa07c71e1347c42d46563f91dfaa4d3fb945aa535cdead53ed
+ languageName: node
+ linkType: hard
+
+"trough@npm:^2.0.0":
+ version: 2.2.0
+ resolution: "trough@npm:2.2.0"
+ checksum: 6097df63169aca1f9b08c263b1b501a9b878387f46e161dde93f6d0bba7febba93c95f876a293c5ea370f6cb03bcb687b2488c8955c3cfb66c2c0161ea8c00f6
+ languageName: node
+ linkType: hard
+
+"ts-api-utils@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "ts-api-utils@npm:2.0.0"
+ peerDependencies:
+ typescript: ">=4.8.4"
+ checksum: f16f3e4e3308e7ad7ccf0bec3e0cb2e06b46c2d6919c40b6439e37912409c72f14340d231343b2b1b8cc17c2b8b01c5f2418690ea788312db6ca4e72cf2df6d8
+ languageName: node
+ linkType: hard
+
+"tsconfig-paths@npm:^3.15.0":
+ version: 3.15.0
+ resolution: "tsconfig-paths@npm:3.15.0"
+ dependencies:
+ "@types/json5": ^0.0.29
+ json5: ^1.0.2
+ minimist: ^1.2.6
+ strip-bom: ^3.0.0
+ checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201
+ languageName: node
+ linkType: hard
+
+"tslib@npm:^2.0.1, tslib@npm:^2.4.0":
+ version: 2.8.1
+ resolution: "tslib@npm:2.8.1"
+ checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a
+ languageName: node
+ linkType: hard
+
+"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
+ version: 0.4.0
+ resolution: "type-check@npm:0.4.0"
+ dependencies:
+ prelude-ls: ^1.2.1
+ checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a
+ languageName: node
+ linkType: hard
+
+"type-fest@npm:^0.20.2":
+ version: 0.20.2
+ resolution: "type-fest@npm:0.20.2"
+ checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73
+ languageName: node
+ linkType: hard
+
+"type-fest@npm:^2.19.0":
+ version: 2.19.0
+ resolution: "type-fest@npm:2.19.0"
+ checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278
+ languageName: node
+ linkType: hard
+
+"typed-array-buffer@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "typed-array-buffer@npm:1.0.3"
+ dependencies:
+ call-bound: ^1.0.3
+ es-errors: ^1.3.0
+ is-typed-array: ^1.1.14
+ checksum: 3fb91f0735fb413b2bbaaca9fabe7b8fc14a3fa5a5a7546bab8a57e755be0e3788d893195ad9c2b842620592de0e68d4c077d4c2c41f04ec25b8b5bb82fa9a80
+ languageName: node
+ linkType: hard
+
+"typed-array-byte-length@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "typed-array-byte-length@npm:1.0.3"
+ dependencies:
+ call-bind: ^1.0.8
+ for-each: ^0.3.3
+ gopd: ^1.2.0
+ has-proto: ^1.2.0
+ is-typed-array: ^1.1.14
+ checksum: cda9352178ebeab073ad6499b03e938ebc30c4efaea63a26839d89c4b1da9d2640b0d937fc2bd1f049eb0a38def6fbe8a061b601292ae62fe079a410ce56e3a6
+ languageName: node
+ linkType: hard
+
+"typed-array-byte-offset@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "typed-array-byte-offset@npm:1.0.4"
+ dependencies:
+ available-typed-arrays: ^1.0.7
+ call-bind: ^1.0.8
+ for-each: ^0.3.3
+ gopd: ^1.2.0
+ has-proto: ^1.2.0
+ is-typed-array: ^1.1.15
+ reflect.getprototypeof: ^1.0.9
+ checksum: 670b7e6bb1d3c2cf6160f27f9f529e60c3f6f9611c67e47ca70ca5cfa24ad95415694c49d1dbfeda016d3372cab7dfc9e38c7b3e1bb8d692cae13a63d3c144d7
+ languageName: node
+ linkType: hard
+
+"typed-array-length@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "typed-array-length@npm:1.0.7"
+ dependencies:
+ call-bind: ^1.0.7
+ for-each: ^0.3.3
+ gopd: ^1.0.1
+ is-typed-array: ^1.1.13
+ possible-typed-array-names: ^1.0.0
+ reflect.getprototypeof: ^1.0.6
+ checksum: deb1a4ffdb27cd930b02c7030cb3e8e0993084c643208e52696e18ea6dd3953dfc37b939df06ff78170423d353dc8b10d5bae5796f3711c1b3abe52872b3774c
+ languageName: node
+ linkType: hard
+
+"typescript@npm:^5":
+ version: 5.7.2
+ resolution: "typescript@npm:5.7.2"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: b55300c4cefee8ee380d14fa9359ccb41ff8b54c719f6bc49b424899d662a5ce62ece390ce769568c7f4d14af844085255e63788740084444eb12ef423b13433
+ languageName: node
+ linkType: hard
+
+"typescript@patch:typescript@^5#~builtin":
+ version: 5.7.2
+ resolution: "typescript@patch:typescript@npm%3A5.7.2#~builtin::version=5.7.2&hash=5adc0c"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 803430c6da2ba73c25a21880d8d4f08a56d9d2444e6db2ea949ac4abceeece8e4a442b7b9b585db7d8a0b47ebda2060e45fe8ee8b8aca23e27ec1d4844987ee6
+ languageName: node
+ linkType: hard
+
+"unbox-primitive@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "unbox-primitive@npm:1.1.0"
+ dependencies:
+ call-bound: ^1.0.3
+ has-bigints: ^1.0.2
+ has-symbols: ^1.1.0
+ which-boxed-primitive: ^1.1.1
+ checksum: 729f13b84a5bfa3fead1d8139cee5c38514e63a8d6a437819a473e241ba87eeb593646568621c7fc7f133db300ef18d65d1a5a60dc9c7beb9000364d93c581df
+ languageName: node
+ linkType: hard
+
+"undici-types@npm:~6.19.2":
+ version: 6.19.8
+ resolution: "undici-types@npm:6.19.8"
+ checksum: de51f1b447d22571cf155dfe14ff6d12c5bdaec237c765085b439c38ca8518fc360e88c70f99469162bf2e14188a7b0bcb06e1ed2dc031042b984b0bb9544017
+ languageName: node
+ linkType: hard
+
+"unified@npm:^11.0.0":
+ version: 11.0.5
+ resolution: "unified@npm:11.0.5"
+ dependencies:
+ "@types/unist": ^3.0.0
+ bail: ^2.0.0
+ devlop: ^1.0.0
+ extend: ^3.0.0
+ is-plain-obj: ^4.0.0
+ trough: ^2.0.0
+ vfile: ^6.0.0
+ checksum: b3bf7fd6f568cc261e074dae21188483b0f2a8ab858d62e6e85b75b96cc655f59532906ae3c64d56a9b257408722d71f1d4135292b3d7ee02907c8b592fb3cf0
+ languageName: node
+ linkType: hard
+
+"unist-util-is@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "unist-util-is@npm:6.0.0"
+ dependencies:
+ "@types/unist": ^3.0.0
+ checksum: f630a925126594af9993b091cf807b86811371e465b5049a6283e08537d3e6ba0f7e248e1e7dab52cfe33f9002606acef093441137181b327f6fe504884b20e2
+ languageName: node
+ linkType: hard
+
+"unist-util-position-from-estree@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "unist-util-position-from-estree@npm:2.0.0"
+ dependencies:
+ "@types/unist": ^3.0.0
+ checksum: d3b3048a5727c2367f64ef6dcc5b20c4717215ef8b1372ff9a7c426297c5d1e5776409938acd01531213e2cd2543218d16e73f9f862f318e9496e2c73bb18354
+ languageName: node
+ linkType: hard
+
+"unist-util-position@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "unist-util-position@npm:5.0.0"
+ dependencies:
+ "@types/unist": ^3.0.0
+ checksum: f89b27989b19f07878de9579cd8db2aa0194c8360db69e2c99bd2124a480d79c08f04b73a64daf01a8fb3af7cba65ff4b45a0b978ca243226084ad5f5d441dde
+ languageName: node
+ linkType: hard
+
+"unist-util-stringify-position@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "unist-util-stringify-position@npm:4.0.0"
+ dependencies:
+ "@types/unist": ^3.0.0
+ checksum: e2e7aee4b92ddb64d314b4ac89eef7a46e4c829cbd3ee4aee516d100772b490eb6b4974f653ba0717a0071ca6ea0770bf22b0a2ea62c65fcba1d071285e96324
+ languageName: node
+ linkType: hard
+
+"unist-util-visit-parents@npm:^6.0.0":
+ version: 6.0.1
+ resolution: "unist-util-visit-parents@npm:6.0.1"
+ dependencies:
+ "@types/unist": ^3.0.0
+ unist-util-is: ^6.0.0
+ checksum: 08927647c579f63b91aafcbec9966dc4a7d0af1e5e26fc69f4e3e6a01215084835a2321b06f3cbe7bf7914a852830fc1439f0fc3d7153d8804ac3ef851ddfa20
+ languageName: node
+ linkType: hard
+
+"unist-util-visit@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "unist-util-visit@npm:5.0.0"
+ dependencies:
+ "@types/unist": ^3.0.0
+ unist-util-is: ^6.0.0
+ unist-util-visit-parents: ^6.0.0
+ checksum: 9ec42e618e7e5d0202f3c191cd30791b51641285732767ee2e6bcd035931032e3c1b29093f4d7fd0c79175bbc1f26f24f26ee49770d32be76f8730a652a857e6
+ languageName: node
+ linkType: hard
+
+"uri-js@npm:^4.2.2":
+ version: 4.4.1
+ resolution: "uri-js@npm:4.4.1"
+ dependencies:
+ punycode: ^2.1.0
+ checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633
+ languageName: node
+ linkType: hard
+
+"util@npm:^0.12.5":
+ version: 0.12.5
+ resolution: "util@npm:0.12.5"
+ dependencies:
+ inherits: ^2.0.3
+ is-arguments: ^1.0.4
+ is-generator-function: ^1.0.7
+ is-typed-array: ^1.1.3
+ which-typed-array: ^1.1.2
+ checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a
+ languageName: node
+ linkType: hard
+
+"vfile-message@npm:^4.0.0":
+ version: 4.0.2
+ resolution: "vfile-message@npm:4.0.2"
+ dependencies:
+ "@types/unist": ^3.0.0
+ unist-util-stringify-position: ^4.0.0
+ checksum: 964e7e119f4c0e0270fc269119c41c96da20afa01acb7c9809a88365c8e0c64aa692fafbd952669382b978002ecd7ad31ef4446d85e8a22cdb62f6df20186c2d
+ languageName: node
+ linkType: hard
+
+"vfile@npm:^6.0.0":
+ version: 6.0.3
+ resolution: "vfile@npm:6.0.3"
+ dependencies:
+ "@types/unist": ^3.0.0
+ vfile-message: ^4.0.0
+ checksum: 152b6729be1af70df723efb65c1a1170fd483d41086557da3651eea69a1dd1f0c22ea4344834d56d30734b9185bcab63e22edc81d3f0e9bed8aa4660d61080af
+ languageName: node
+ linkType: hard
+
+"w3c-keyname@npm:^2.2.4":
+ version: 2.2.8
+ resolution: "w3c-keyname@npm:2.2.8"
+ checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07
+ languageName: node
+ linkType: hard
+
+"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "which-boxed-primitive@npm:1.1.1"
+ dependencies:
+ is-bigint: ^1.1.0
+ is-boolean-object: ^1.2.1
+ is-number-object: ^1.1.1
+ is-string: ^1.1.1
+ is-symbol: ^1.1.1
+ checksum: ee41d0260e4fd39551ad77700c7047d3d281ec03d356f5e5c8393fe160ba0db53ef446ff547d05f76ffabfd8ad9df7c9a827e12d4cccdbc8fccf9239ff8ac21e
+ languageName: node
+ linkType: hard
+
+"which-builtin-type@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "which-builtin-type@npm:1.2.1"
+ dependencies:
+ call-bound: ^1.0.2
+ function.prototype.name: ^1.1.6
+ has-tostringtag: ^1.0.2
+ is-async-function: ^2.0.0
+ is-date-object: ^1.1.0
+ is-finalizationregistry: ^1.1.0
+ is-generator-function: ^1.0.10
+ is-regex: ^1.2.1
+ is-weakref: ^1.0.2
+ isarray: ^2.0.5
+ which-boxed-primitive: ^1.1.0
+ which-collection: ^1.0.2
+ which-typed-array: ^1.1.16
+ checksum: 7a3617ba0e7cafb795f74db418df889867d12bce39a477f3ee29c6092aa64d396955bf2a64eae3726d8578440e26777695544057b373c45a8bcf5fbe920bf633
+ languageName: node
+ linkType: hard
+
+"which-collection@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "which-collection@npm:1.0.2"
+ dependencies:
+ is-map: ^2.0.3
+ is-set: ^2.0.3
+ is-weakmap: ^2.0.2
+ is-weakset: ^2.0.3
+ checksum: c51821a331624c8197916598a738fc5aeb9a857f1e00d89f5e4c03dc7c60b4032822b8ec5696d28268bb83326456a8b8216344fb84270d18ff1d7628051879d9
+ languageName: node
+ linkType: hard
+
+"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18, which-typed-array@npm:^1.1.2":
+ version: 1.1.18
+ resolution: "which-typed-array@npm:1.1.18"
+ dependencies:
+ available-typed-arrays: ^1.0.7
+ call-bind: ^1.0.8
+ call-bound: ^1.0.3
+ for-each: ^0.3.3
+ gopd: ^1.2.0
+ has-tostringtag: ^1.0.2
+ checksum: d2feea7f51af66b3a240397aa41c796585033e1069f18e5b6d4cd3878538a1e7780596fd3ea9bf347c43d9e98e13be09b37d9ea3887cef29b11bc291fd47bb52
+ languageName: node
+ linkType: hard
+
+"which@npm:^2.0.1":
+ version: 2.0.2
+ resolution: "which@npm:2.0.2"
+ dependencies:
+ isexe: ^2.0.0
+ bin:
+ node-which: ./bin/node-which
+ checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1
+ languageName: node
+ linkType: hard
+
+"word-wrap@npm:^1.2.5":
+ version: 1.2.5
+ resolution: "word-wrap@npm:1.2.5"
+ checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb
+ languageName: node
+ linkType: hard
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+ version: 7.0.0
+ resolution: "wrap-ansi@npm:7.0.0"
+ dependencies:
+ ansi-styles: ^4.0.0
+ string-width: ^4.1.0
+ strip-ansi: ^6.0.0
+ checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b
+ languageName: node
+ linkType: hard
+
+"wrap-ansi@npm:^8.1.0":
+ version: 8.1.0
+ resolution: "wrap-ansi@npm:8.1.0"
+ dependencies:
+ ansi-styles: ^6.1.0
+ string-width: ^5.0.1
+ strip-ansi: ^7.0.1
+ checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238
+ languageName: node
+ linkType: hard
+
+"wrappy@npm:1":
+ version: 1.0.2
+ resolution: "wrappy@npm:1.0.2"
+ checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5
+ languageName: node
+ linkType: hard
+
+"ws@npm:^8.2.3":
+ version: 8.18.0
+ resolution: "ws@npm:8.18.0"
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ">=5.0.2"
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ checksum: 91d4d35bc99ff6df483bdf029b9ea4bfd7af1f16fc91231a96777a63d263e1eabf486e13a2353970efc534f9faa43bdbf9ee76525af22f4752cbc5ebda333975
+ languageName: node
+ linkType: hard
+
+"yocto-queue@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "yocto-queue@npm:0.1.0"
+ checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700
+ languageName: node
+ linkType: hard
+
+"zwitch@npm:^2.0.0, zwitch@npm:^2.0.4":
+ version: 2.0.4
+ resolution: "zwitch@npm:2.0.4"
+ checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6
+ languageName: node
+ linkType: hard
diff --git a/contrib/docs/tutorials/help-im-behind-a-corporate-proxy.md b/contrib/docs/tutorials/help-im-behind-a-corporate-proxy.md
index 3aab9261c9..4852443ecf 100644
--- a/contrib/docs/tutorials/help-im-behind-a-corporate-proxy.md
+++ b/contrib/docs/tutorials/help-im-behind-a-corporate-proxy.md
@@ -22,43 +22,27 @@ There are however some ways to get this to work without too much effort.
`undici` exposes the settings for native `fetch`, and `global-agent` can set things up for `node-fetch`.
-1. Go to the entry file for the backend (typically `packages/backend/src/index.ts`), and add the following at the top:
+1. Go to the entry file for the backend (typically `packages/backend/src/index.ts`), and add the following at the VERY top, before all other imports etc:
```ts
import 'global-agent/bootstrap';
- import { setGlobalDispatcher, ProxyAgent } from 'undici';
+ import { setGlobalDispatcher, EnvHttpProxyAgent } from 'undici';
- const proxyEnv =
- process.env.GLOBAL_AGENT_HTTP_PROXY ||
- process.env.GLOBAL_AGENT_HTTPS_PROXY;
-
- if (proxyEnv) {
- const proxyUrl = new URL(proxyEnv);
- setGlobalDispatcher(
- new ProxyAgent({
- uri: proxyUrl.protocol + proxyUrl.host,
- token:
- proxyUrl.username && proxyUrl.password
- ? `Basic ${Buffer.from(
- `${proxyUrl.username}:${proxyUrl.password}`,
- ).toString('base64')}`
- : undefined,
- }),
- );
- }
+ setGlobalDispatcher(new EnvHttpProxyAgent());
```
- The first import automatically bootstraps `global-agent`, which addresses `node-fetch` proxying. The lines of code below that peeks into the same environment variables as `global-agent` uses, and also leverages them to set up the `undici` package which affects native `fetch`. Does that seem weird? Yes, we think so too. But in the current state of the Node.js ecosystem, that's how it works.
-
- This code is kept brief for illustrative purposes. You may want to adjust it slightly if you need support for [no-proxy excludes](https://gist.github.com/zicklag/1bb50db6c5138de347c224fda14286da) or only do proxying in local development etc. Also see [the `global-agent` docs](https://github.com/gajus/global-agent) for information about its configuration options.
+ The first import automatically bootstraps `global-agent`, which addresses `node-fetch` proxying. The lines below that set up the `undici` package which affects native `fetch`.
1. Start the backend with the correct environment variables set. For example:
```sh
- export GLOBAL_AGENT_HTTP_PROXY=http://username:password@proxy.example.net:8888
+ export HTTP_PROXY=http://username:password@proxy.example.net:8888
+ export GLOBAL_AGENT_HTTP_PROXY=${HTTP_PROXY}
yarn start
```
+ The default for `global-agent` is to have a prefix on the variable names, hence the need for specifying it twice. For further information about `HTTP(S)_PROXY` and `NO_PROXY` excludes, see [the global-agent documentation](https://github.com/gajus/global-agent) and [undici documentation](https://github.com/nodejs/undici).
+
## Configuration
If your development environment is in the cloud (like with [AWS Cloud9](https://aws.amazon.com/cloud9/) or an instance of [Theia](https://theia-ide.org/)), you will need to update your configuration.
diff --git a/docs/auth/gitlab/provider.md b/docs/auth/gitlab/provider.md
index 5241481463..65d1909f41 100644
--- a/docs/auth/gitlab/provider.md
+++ b/docs/auth/gitlab/provider.md
@@ -20,6 +20,7 @@ should point to your Backstage backend auth handler.
2. Set this to `http://{APP_FQDN}:{APP_BACKEND_PORT}/api/auth/gitlab/handler/frame` for non-local deployments.
3. Select the following scopes from the list:
- [x] `api` Grants full read-write access to the api. This is only required if users need to be able to create merge requests with their own permissions.
+ - [x] `read_api` Grants read access to the API, including all groups and projects, the container registry, and the package registry.
- [x] `read_user` Grants read-only access to the authenticated user's profile through the /user API endpoint, which includes username, public email, and full name. Also grants access to read-only API endpoints under /users.
- [x] `read_repository` Grants read-only access to repositories on private projects using Git-over-HTTP (not using the API).
- [x] `write_repository` Grants read-write access to repositories on private projects using Git-over-HTTP (not using the API).
diff --git a/docs/backend-system/core-services/auditor.md b/docs/backend-system/core-services/auditor.md
new file mode 100644
index 0000000000..d4cbf70325
--- /dev/null
+++ b/docs/backend-system/core-services/auditor.md
@@ -0,0 +1,87 @@
+---
+id: auditor
+title: Auditor Service
+sidebar_label: Auditor
+description: Documentation for the Auditor service
+---
+
+## Overview
+
+This document describes the Auditor Service, a software service designed to record and report on security-relevant events within an application. This service utilizes the `winston` library for logging and provides a flexible way to capture and format audit events.
+
+## Key Features
+
+- Provides a standardized way to capture security events.
+- Allows categorization of events by severity level.
+- Supports detailed metadata for each event.
+- Offers success/failure reporting for events.
+- Integrates with authentication and plugin services for enhanced context.
+- Uses `winston` for flexible log formatting and transport.
+- Provides a service factory for easy integration with Backstage plugins.
+- Supports configurable log transports (console, file).
+
+## How it Works
+
+The Auditor Service defines a core class, `Auditor`, which implements the `AuditorService` interface. This class uses `winston` to log audit events with varying levels of severity and associated metadata. It also integrates with authentication and plugin services to capture actor details and plugin context.
+
+The `auditorServiceFactory` creates an `Auditor` instance for the root context and provides a factory function for creating child loggers for individual plugins. This allows each plugin to have its own logger with inherited and additional metadata.
+
+## Usage Guidance
+
+The Auditor Service is designed for recording security-relevant events that require special attention or are subject to compliance regulations. These events often involve actions like:
+
+- User session management
+- Data access and modification
+- System configuration changes
+
+For general application logging that is not security-critical, you should use the standard `LoggerService` provided by Backstage. This helps to keep your audit logs focused and relevant.
+
+## Using the Service
+
+The Auditor Service can be accessed via dependency injection in your Backstage plugin. Here's an example of how to access the service and create an audit event within an Express route handler:
+
+```typescript
+export async function createRouter(
+ options: RouterOptions,
+): Promise {
+ const { auditor } = options;
+
+ const router = Router();
+ router.use(express.json());
+
+ router.post('/my-endpoint', async (req, res) => {
+ const auditorEvent = await auditor.createEvent({
+ eventId: 'my-endpoint-call',
+ request: req,
+ meta: {
+ // ... metadata about the request
+ },
+ });
+
+ try {
+ // ... process the request
+
+ await auditorEvent.success();
+ res.status(200).json({ message: 'Succeeded!' });
+ } catch (error) {
+ await auditorEvent.fail({ error });
+ res.status(500).json({ message: 'Failed!' });
+ throw error;
+ }
+ });
+
+ return router;
+}
+```
+
+In this example, an audit event is created for each request to `/my-endpoint`. The `success` or `fail` methods are called based on the outcome of processing the request.
+
+## Naming Conventions
+
+When defining `eventId` and `subEventId` for your audit events, follow these guidelines:
+
+- Use kebab-case (e.g., `user-login`, `file-download`, `fetch`, `entity-create`, `entity-update`).
+- The `eventId` represents a logical group of similar events or operations. For example, "fetch" could be used as an `eventId` encompassing various fetch methods like `by-id` or `by-location`.
+- Use `subEventId` to further categorize events within a logical group. For example, if the `eventId` is "fetch", the `subEventId` could be "by-id" or "by-location" to specify the method used for fetching.
+- Avoid redundant prefixes related to the plugin ID, as that context is already provided.
+- Choose names that clearly and concisely describe the event being audited.
diff --git a/docs/backend-system/core-services/permissionsRegistry.md b/docs/backend-system/core-services/permissionsRegistry.md
new file mode 100644
index 0000000000..4b0b87b894
--- /dev/null
+++ b/docs/backend-system/core-services/permissionsRegistry.md
@@ -0,0 +1,80 @@
+---
+id: permissions
+title: Permissions Registry Service
+sidebar_label: Permissions Registry
+description: Documentation for the Permissions Registry service
+---
+
+This service allows your plugins to register new permissions, rules, and resource types and integrate with [the permissions framework](../../permissions/overview.md).
+
+## Using the service
+
+For a deep dive into how to use the `permissionsRegistry` service, see the [permission guide for plugin authors](../../permissions/plugin-authors/01-setup.md).
+
+If all you want to do is add new custom permission rules to an existing plugin, you can instead refer to the [custom permission rules guide](../../permissions/custom-rules.md).
+
+## Migrating from `createPermissionIntegrationRouter`
+
+Before this service was introduced, plugins would use
+`createPermissionIntegrationRouter` to implement the same functionality. To
+migrate a plugin, locate the `createPermissionIntegrationRouter` call for your
+router and remove it, but copy all options that are passed to it, for example:
+
+```ts
+export async function createRouter() {
+ const router = Router();
+
+ /* highlight-remove-start */
+ const permissionIntegrationRouter = createPermissionIntegrationRouter({
+ resourceType: RESOURCE_TYPE_MY_RESOURCE,
+ permissions: [myResourcePermissions],
+ rules: [myResourceRule],
+ });
+
+ router.use(permissionIntegrationRouter);
+ /* highlight-remove-end */
+
+ // ...
+}
+```
+
+Next, add a dependency on the `PermissionsRegistryService` to your plugin,
+and pass it the same options:
+
+```ts
+export const examplePlugin = createBackendPlugin({
+ pluginId: 'example',
+ register(env) {
+ env.registerInit({
+ deps: {
+ logger: coreServices.logger,
+ /* highlight-add-next-line */
+ permissionsRegistry: coreServices.permissionsRegistry,
+ },
+ /* highlight-remove-next-line */
+ async init({ logger }) {
+ /* highlight-add-next-line */
+ async init({ logger, permissionsRegistry }) {
+ logger.log('This is a silly example plugin with no functionality');
+
+ /* highlight-add-start */
+ permissionsRegistry.addResourceType({
+ resourceType: RESOURCE_TYPE_MY_RESOURCE,
+ permissions: [myResourcePermissions],
+ rules: [myResourceRule],
+ });
+ /* highlight-add-end */
+ },
+ });
+ },
+});
+```
+
+If you only passed the `permissions` option to
+`createPermissionIntegrationRouter`, you will want to use
+`permissionsRegistry.addPermissions` instead.
+
+If you passed multiple resources types to `createPermissionIntegrationRouter`
+via the `resources` option, you will want to call
+`permissionsRegistry.addResourceType` multiple times for each of those
+resource types.
diff --git a/docs/conf/index.md b/docs/conf/index.md
index ef6faffd8b..659ffccfe3 100644
--- a/docs/conf/index.md
+++ b/docs/conf/index.md
@@ -61,7 +61,7 @@ More details are provided in dedicated sections of the documentation.
- [Reading Configuration](./reading.md): How to read configuration in your
plugin.
-- [Writing Configuration](./writing.md): How to provide configuration for your
+- [Writing Configuration](./writing.md): How to write configuration for your
Backstage deployment.
- [Defining Configuration](./defining.md): How to define a configuration schema
for users of your plugin or package.
diff --git a/docs/conf/writing.md b/docs/conf/writing.md
index 6e827c075e..85a719e1d0 100644
--- a/docs/conf/writing.md
+++ b/docs/conf/writing.md
@@ -239,4 +239,7 @@ privateKey: |
-----END RSA PRIVATE KEY-----
```
-**Warning: Sensitive information, such as private keys, should not be hard coded**. We recommend that this entire file should be a secret and stored as such in a secure storage solution like Vault, to ensure they are neither exposed nor misused. This example key part only shows the format on how to use the yaml | syntax to make sure that the key is valid.
+> [!WARNING]
+> Sensitive information, such as private keys, should not be hard coded.
+
+We recommend that this entire file should be a secret and stored as such in a secure storage solution like Vault, to ensure they are neither exposed nor misused. This example key part only shows the format on how to use the yaml | syntax to make sure that the key is valid.
diff --git a/docs/deployment/k8s.md b/docs/deployment/k8s.md
index 46ba273e14..aae49b6069 100644
--- a/docs/deployment/k8s.md
+++ b/docs/deployment/k8s.md
@@ -169,7 +169,7 @@ Kubernetes definitions in a single file and apply them at the same time.
Note the volume `type: local`; this creates a volume using local disk on
Kubernetes nodes. More likely in a production scenario, you'd want to use a more
highly available
-[type of PersistentVolume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#types-of-persistent-volumes).
+[types of PersistentVolume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#types-of-persistent-volumes).
Apply the storage volume and claim to the Kubernetes cluster:
@@ -210,6 +210,11 @@ spec:
envFrom:
- secretRef:
name: postgres-secrets
+ env:
+ - name: POSTGRES_HOST
+ value: postgres.backstage
+ - name: POSTGRES_PORT
+ value: '5432'
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgresdb
@@ -387,8 +392,8 @@ $ yarn build-image --tag backstage:1.0.0
```
There is no special wiring needed to access the PostgreSQL service. Since it's
-running on the same cluster, Kubernetes will inject `POSTGRES_SERVICE_HOST` and
-`POSTGRES_SERVICE_PORT` environment variables into our Backstage container.
+running on the same cluster, Kubernetes will inject `POSTGRES_HOST` and
+`POSTGRES_PORT` environment variables into our Backstage container.
These can be used in the Backstage `app-config.yaml` along with the secrets. Apply this to `app-config.production.yaml` as well if you have one:
```yaml
@@ -396,8 +401,8 @@ backend:
database:
client: pg
connection:
- host: ${POSTGRES_SERVICE_HOST}
- port: ${POSTGRES_SERVICE_PORT}
+ host: ${POSTGRES_HOST}
+ port: ${POSTGRES_PORT}
user: ${POSTGRES_USER}
password: ${POSTGRES_PASSWORD}
```
diff --git a/docs/features/kubernetes/configuration.md b/docs/features/kubernetes/configuration.md
index 71fdd0be0e..1a921103b1 100644
--- a/docs/features/kubernetes/configuration.md
+++ b/docs/features/kubernetes/configuration.md
@@ -578,23 +578,22 @@ view the Kubernetes API docs for your Kubernetes version (e.g.
Overrides for the Kubernetes object types fetched from the cluster. The default object types are:
-- pods
-- services
-- configmaps
-- limitranges
-- resourcequotas
-- deployments
-- replicasets
-- horizontalpodautoscalers
-- jobs
-- cronjobs
-- ingresses
-- statefulsets
-- daemonsets
+- `pods`
+- `services`
+- `configmaps`
+- `limitranges`
+- `resourcequotas`
+- `deployments`
+- `replicasets`
+- `horizontalpodautoscalers`
+- `jobs`
+- `cronjobs`
+- `ingresses`
+- `statefulsets`
+- `daemonsets`
-You may use this config to override the default object types if you only want a subset of
-the default ones. However, it's currently not supported to fetch object types other
-than the ones specified in the default types.
+You may use this config to override the default object types if you only want specific ones.
+However, the only additional object type to fetch at the moment is `secrets`.
Example:
@@ -608,6 +607,7 @@ kubernetes:
- pods
- services
- statefulsets
+ - secrets
```
### Role Based Access Control
diff --git a/docs/features/software-catalog/references.md b/docs/features/software-catalog/references.md
index 2240d376ce..9a5a037d6d 100644
--- a/docs/features/software-catalog/references.md
+++ b/docs/features/software-catalog/references.md
@@ -36,7 +36,13 @@ additional encoding:
The name is always required. Depending on the context, you may be able to leave
out the kind and/or namespace. If you do, it is contextual what values will be
used, and the relevant documentation should specify which rule applies where.
-All strings are case insensitive.
+
+Entity ref strings are frequently passed between systems as identifiers of
+entities. In those cases the refs should always be complete (have all three
+parts). The sender should ensure that the refs are always lowercased in an
+`en-US` locale, preferably by using [the `stringifyEntityRef` function](https://backstage.io/docs/reference/catalog-model.stringifyentityref/)
+which does this automatically. The receiver should treat incoming refs case
+insensitively to avoid problems with senders who do not obey this rule.
```yaml
# Example:
diff --git a/docs/features/software-templates/writing-custom-actions.md b/docs/features/software-templates/writing-custom-actions.md
index 11e67af07f..8cfc5464f2 100644
--- a/docs/features/software-templates/writing-custom-actions.md
+++ b/docs/features/software-templates/writing-custom-actions.md
@@ -220,7 +220,7 @@ const scaffolderModuleCustomExtensions = createBackendModule({
async init({ scaffolder /* ..., other dependencies */ }) {
// Here you have the opportunity to interact with the extension
// point before the plugin itself gets instantiated
- scaffolder.addActions(new createNewFileAction()); // just an example
+ scaffolder.addActions(createNewFileAction()); // just an example
},
});
},
diff --git a/docs/features/techdocs/cli.md b/docs/features/techdocs/cli.md
index c824eb7d7d..517b2a3547 100644
--- a/docs/features/techdocs/cli.md
+++ b/docs/features/techdocs/cli.md
@@ -197,6 +197,7 @@ Options:
--awsS3sse Optional AWS S3 Server Side Encryption.
--awsS3ForcePathStyle Optional AWS S3 option to force path style.
--awsBucketRootPath Optional sub-directory to store files in Amazon S3
+ --awsMaxAttempts Optional maximum number of retries for AWS S3 operations. If not specified, default value of 3 is used.
--osCredentialId (Required for OpenStack) specify when --publisher-type openStackSwift
--osSecret (Required for OpenStack) specify when --publisher-type openStackSwift
--osAuthUrl (Required for OpenStack) specify when --publisher-type openStackSwift
diff --git a/docs/features/techdocs/how-to-guides.md b/docs/features/techdocs/how-to-guides.md
index 31d573fdbb..5a9044842f 100644
--- a/docs/features/techdocs/how-to-guides.md
+++ b/docs/features/techdocs/how-to-guides.md
@@ -137,6 +137,10 @@ Modify your `App.tsx` as follows:
import { TechDocsCustomHome } from '@backstage/plugin-techdocs';
//...
+const options = { emptyRowsWhenPaging: false };
+const linkDestination = (entity: Entity): string | undefined => {
+ return entity.metadata.annotations?.['external-docs'];
+};
const techDocsTabsConfig = [
{
label: 'Recommended Documentation',
@@ -145,18 +149,53 @@ const techDocsTabsConfig = [
title: 'Golden Path',
description: 'Documentation about standards to follow',
panelType: 'DocsCardGrid',
+ panelProps: { CustomHeader: () => },
+ filterPredicate: entity =>
+ entity?.metadata?.tags?.includes('golden-path') ?? false,
+ },
+ {
+ title: 'Recommended',
+ description: 'Useful documentation',
+ panelType: 'InfoCardGrid',
+ panelProps: {
+ CustomHeader: () =>
+ linkDestination: linkDestination,
+ },
filterPredicate: entity =>
entity?.metadata?.tags?.includes('recommended') ?? false,
},
],
},
+ {
+ label: 'Browse All',
+ panels: [
+ {
+ description: 'Browse all docs',
+ filterPredicate: filterEntity,
+ panelType: 'TechDocsIndexPage',
+ title: 'All',
+ panelProps: { PageWrapper: React.Fragment, CustomHeader: React.Fragment, options: options },
+ },
+ ],
+ },
];
-
+const docsFilter = {
+ kind: ['Location', 'Resource', 'Component'],
+ 'metadata.annotations.featured-docs': CATALOG_FILTER_EXISTS,
+}
+const customPageWrapper = ({ children }: React.PropsWithChildren<{}>) =>
+ ({children})
const AppRoutes = () => {
}
+ element={
+
+ }
/>
;
};
diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md
index 687cf0be16..7aee835910 100644
--- a/docs/getting-started/index.md
+++ b/docs/getting-started/index.md
@@ -91,7 +91,7 @@ app
the intended workspace rather than in the root._
- **packages/**: Lerna leaf packages or "workspaces". Everything here is going
to be a separate package, managed by lerna.
-- **packages/app/**: An fully functioning Backstage frontend app, that acts as a
+- **packages/app/**: A fully functioning Backstage frontend app that acts as a
good starting point for you to get to know Backstage.
- **packages/backend/**: We include a backend that helps power features such as
[Authentication](https://backstage.io/docs/auth/),
diff --git a/docs/getting-started/keeping-backstage-updated.md b/docs/getting-started/keeping-backstage-updated.md
index a811a33383..b31409cfc2 100644
--- a/docs/getting-started/keeping-backstage-updated.md
+++ b/docs/getting-started/keeping-backstage-updated.md
@@ -30,6 +30,7 @@ yarn backstage-cli versions:bump
The reason for bumping all `@backstage` packages at once is to maintain the
dependencies that they have between each other.
+
:::tip
To make the version bump process even easier and more streamlined we highly recommend using the [Backstage yarn plugin](#managing-package-versions-with-the-backstage-yarn-plugin)
@@ -140,12 +141,22 @@ down the number of duplicate packages.
## Proxy
-The Backstage CLI uses [global-agent](https://www.npmjs.com/package/global-agent) to configure HTTP/HTTPS proxy settings using environment variables. This allows you to route the CLI’s network traffic through a proxy server, which can be useful in environments with restricted internet access.
+The Backstage CLI uses [global-agent](https://www.npmjs.com/package/global-agent) and `undici` to configure HTTP/HTTPS proxy settings using environment variables. This allows you to route the CLI’s network traffic through a proxy server, which can be useful in environments with restricted internet access.
+
+Additionally, yarn needs a proxy too (sometimes), when in environments with restricted internet access. It uses different settings than the other modules. If you decide to use the backstage yarn plugin [mentioned above](#plugin), you will need to set additional proxy values.
+If you will always need proxy settings in all environments and situations, you can add `httpProxy` and `httpsProxy` values to [the yarnrc.yml file](https://yarnpkg.com/configuration/yarnrc). If some environments need it (say a developer workstation) but other environments do not (perhaps a CI build server running on AWS), then you may not want to update the yarnrc.yml file but just set environment variables `YARN_HTTP_PROXY` and `YARN_HTTPS_PROXY` in the environments/situations where you need to proxy.
+
+**If you plan to use the backstage yarn plugin, you will need these extra yarn proxy settings to both install the plugin and run the `versions:bump` command**. If you do not plan to use the backstage yarn plugin, it seems like the global agent proxy settings alone are sufficient.
### Example Configuration
```bash
-export GLOBAL_AGENT_HTTP_PROXY=http://proxy.company.com:8080
-export GLOBAL_AGENT_HTTPS_PROXY=https://secure-proxy.company.com:8080
-export GLOBAL_AGENT_NO_PROXY=localhost,internal.company.com
+export HTTP_PROXY=http://proxy.company.com:8080
+export HTTPS_PROXY=https://secure-proxy.company.com:8080
+export NO_PROXY=localhost,internal.company.com
+export GLOBAL_AGENT_HTTP_PROXY=${HTTP_PROXY}
+export GLOBAL_AGENT_HTTPS_PROXY=${HTTPS_PROXY}
+export GLOBAL_AGENT_NO_PROXY=${NO_PROXY}
+export YARN_HTTP_PROXY=${HTTP_PROXY} # optional
+export YARN_HTTPS_PROXY=${HTTPS_PROXY} # optional
```
diff --git a/docs/integrations/azure/org.md b/docs/integrations/azure/org.md
index e6fb69a520..068aa70101 100644
--- a/docs/integrations/azure/org.md
+++ b/docs/integrations/azure/org.md
@@ -258,67 +258,203 @@ The `myUserTransformer`, `myGroupTransformer`, `myOrganizationTransformer`, and
The following provides an example of each kind of transformer. We recommend creating a `transformers.ts` file in your `packages/backend/src` folder for these.
-```ts title="packages/backend/src/transformers.ts"
+First, lets set up the basic structure of the file, with functions for each kind of transformer that simply passes through the default transformer unchanged.
+
+```ts title="packages/backend/src/extensions/transformers.ts"
import * as MicrosoftGraph from '@microsoft/microsoft-graph-types';
import {
defaultGroupTransformer,
defaultUserTransformer,
defaultOrganizationTransformer,
+ microsoftGraphOrgEntityProviderTransformExtensionPoint,
MicrosoftGraphProviderConfig,
} from '@backstage/plugin-catalog-backend-module-msgraph';
import { GroupEntity, UserEntity } from '@backstage/catalog-model';
+import { createBackendModule } from '@backstage/backend-plugin-api';
-// This group transformer completely replaces the built in logic with custom logic.
+// The Group transformer transforms Groups that are ingested from MS Graph
export async function myGroupTransformer(
group: MicrosoftGraph.Group,
groupPhoto?: string,
): Promise {
- return {
- apiVersion: 'backstage.io/v1alpha1',
- kind: 'Group',
- metadata: {
- name: group.id!,
- annotations: {},
- },
- spec: {
- type: 'Microsoft Entra ID',
- children: [],
- },
- };
+ const backstageGroup = await defaultGroupTransformer(group, groupPhoto);
+ return backstageGroup;
}
-// This user transformer makes use of the built in logic, but also sets the description field
+// The User transformer transforms Users that are ingested from MS Graph
export async function myUserTransformer(
graphUser: MicrosoftGraph.User,
userPhoto?: string,
): Promise {
const backstageUser = await defaultUserTransformer(graphUser, userPhoto);
-
- if (backstageUser) {
- backstageUser.metadata.description = 'Loaded from Microsoft Entra ID';
- }
-
return backstageUser;
}
-// Example organization transformer that removes the organization group completely
+// The Organization transformer transforms the root MS Graph Organization into a Group
export async function myOrganizationTransformer(
graphOrganization: MicrosoftGraph.Organization,
): Promise {
- return undefined;
+ const backstageOrg = await defaultOrganizationTransformer(graphOrganization);
+ return backstageOrg;
}
-// Example config transformer that expands the group filter to also include 'azure-group-a'
+// The Provider Config transformer enables modification of the plugin config
export async function myProviderConfigTransformer(
provider: MicrosoftGraphProviderConfig,
): Promise {
+ return provider;
+}
+
+// Wrapping these functions in a Module allows us to inject them into the Catalog plugin easily
+export default createBackendModule({
+ pluginId: 'catalog',
+ moduleId: 'msgraph-org',
+ register(reg) {
+ reg.registerInit({
+ deps: {
+ microsoftGraphTransformers:
+ microsoftGraphOrgEntityProviderTransformExtensionPoint,
+ },
+ async init({ microsoftGraphTransformers }) {
+ // Set the transformers to our custom functions
+ microsoftGraphTransformers.setUserTransformer(myUserTransformer);
+ microsoftGraphTransformers.setGroupTransformer(myGroupTransformer);
+ microsoftGraphTransformers.setOrganizationTransformer(
+ myOrganizationTransformer,
+ );
+ microsoftGraphTransformers.setProviderConfigTransformer(
+ myProviderConfigTransformer,
+ );
+ },
+ });
+ },
+});
+```
+
+Now lets customize each of the providers to suit our needs.
+
+This Group Transformer example will have the default logic completely removed and replaced with our custom logic:
+
+```ts
+export async function myGroupTransformer(
+ group: MicrosoftGraph.Group,
+ groupPhoto?: string,
+): Promise {
+ // highlight-remove-start
+ const backstageGroup = await defaultGroupTransformer(group, groupPhoto);
+ return backstageGroup;
+ // highlight-remove-end
+ // highlight-add-start
+ // All of our groups are prefixed with the organisational unit: 'Engineering - Team A'
+ // We want to drop the org unit from the group name and use it for the namespace instead
+ const groupNameArr = group.displayName.split(' - ');
+ const displayName = groupNameArr[1];
+ // Standardise name and namespace by replacing spaces with hyphens and converting to lowercase
+ const namespace = groupNameArr[0].replace(' ', '-').toLowerCase();
+ const groupName = groupNameArr[1].replace(' ', '-').toLowerCase();
+
+ return {
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Group',
+ metadata: {
+ name: groupName,
+ description: group.description,
+ annotations: {},
+ },
+ spec: {
+ type: 'team',
+ displayName: displayName,
+ email: group.mail,
+ children: [],
+ },
+ };
+ // highlight-add-end
+}
+```
+
+This User Transformer example makes use of the built-in logic, but also modifies the username and sets a description
+
+```ts
+export async function myUserTransformer(
+ graphUser: MicrosoftGraph.User,
+ userPhoto?: string,
+): Promise {
+ const backstageUser = await defaultUserTransformer(graphUser, userPhoto);
+ // highlight-add-start
+ // Make sure the default transformer returned an entity
+ if (backstageUser) {
+ // Update the description to make it obvious where this entity came from
+ backstageUser.metadata.description =
+ 'Loaded from Microsoft Entra ID via MyCustomUserTransformer';
+
+ // The default transformer sets the username to the email address with invalid characters subbed out: 'user_domain.com'
+ // Set the username to the local part of the email address in lowercase without the domain
+ const newName = backstageUser.metadata.name.split('_')[0].toLowerCase();
+ backstageUser.metadata.name = newName;
+
+ return backstageUser;
+ }
+ return undefined;
+ // highlight-add-end
+ // highlight-remove-start
+ return backstageUser;
+ // highlight-remove-end
+}
+```
+
+This Organization Transformer example removes the organization group completely by returning undefined
+
+```ts
+export async function myOrganizationTransformer(
+ graphOrganization: MicrosoftGraph.Organization,
+): Promise {
+ // highlight-remove-start
+ const backstageOrg = await defaultOrganizationTransformer(graphOrganization);
+ return backstageOrg;
+ // highlight-remove-end
+ // highlight-add-start
+ // The org transformer creates a group to be used as the base of the relationship tree for groups
+ // We don't need this to be created, so return undefined instead of an entity
+ return undefined;
+ // highlight-add-end
+}
+```
+
+This Config Transformer example expands the group filter to also include 'azure-group-a'
+
+```ts
+export async function myProviderConfigTransformer(
+ provider: MicrosoftGraphProviderConfig,
+): Promise {
+ // highlight-add-start
+ // The filter in our config file relies on a property that has been intermittantly causing this important group to fail ingestion
+ // Ensure the group is always discovered by the filter
if (!provider.groupFilter?.includes('azure-group-a')) {
provider.groupFilter = `${provider.groupFilter} or displayName eq 'azure-group-a'`;
}
+ // highlight-add-end
return provider;
}
```
+Now we just need to add our new module to the Backend.
+
+```ts title="packages/backend/src/index.ts"
+// Your file will have more than this in it
+
+const backend = createBackend();
+
+...
+
+// highlight-add-start
+backend.add(import('./extensions/transformers'));
+// highlight-add-end
+
+...
+
+backend.start();
+```
+
## Troubleshooting
### No data
diff --git a/docs/overview/versioning-policy.md b/docs/overview/versioning-policy.md
index f5e2e222f8..e108161281 100644
--- a/docs/overview/versioning-policy.md
+++ b/docs/overview/versioning-policy.md
@@ -108,7 +108,7 @@ The following versioning policy applies to all packages:
- Breaking changes are noted in the changelog, and documentation is updated.
- Breaking changes are prefixed with `**BREAKING**: ` in the changelog.
- All public exports are considered stable and will have an entry in the
- changelog
+ changelog.
- Breaking changes are recommended to document a clear upgrade path in the
changelog. This may be omitted for newly introduced or unstable packages.
diff --git a/docs/permissions/custom-rules.md b/docs/permissions/custom-rules.md
index 00f4d81939..ca93652f73 100644
--- a/docs/permissions/custom-rules.md
+++ b/docs/permissions/custom-rules.md
@@ -139,7 +139,13 @@ class CustomPermissionPolicy implements PermissionPolicy {
Now that we have a custom rule defined and added to our policy, we need provide it to the catalog plugin. This step is important because the catalog plugin will use the rule's `toQuery` and `apply` methods while evaluating conditional authorize results. There's no guarantee that the catalog and permission backends are running on the same server, so we must explicitly link the rule to ensure that it's available at runtime.
-The api for providing custom rules may differ between plugins, but there should typically be an [extension point](../backend-system/architecture/05-extension-points.md) that you can use in your created module to add your rule. For the catalog, this extension point is exposed via `catalogPermissionExtensionPoint`. Here's the steps you'll need to take to add the `isInSystemRule` we created above to the catalog:
+:::warning Warning
+
+The `PermissionsRegistryService` is a fairly new addition and not yet supported by all plugins as they might still be using the old `createPermissionIntegrationRouter` that cannot be extended. If you encounter errors when installing custom rules for a plugin, the plugin may need to be switched to using the `PermissionsRegistryService` first.
+
+:::
+
+To install custom rules in a plugin, we need to use the [`PermissionsRegistryService`](../backend-system/core-services/permissionsRegistry.md). Here's the steps you'll need to take to add the `isInSystemRule` we created above to the catalog:
1. We will be using the `@backstage/plugin-catalog-node` package as it contains the extension point we need. Run this to add it:
@@ -147,10 +153,10 @@ The api for providing custom rules may differ between plugins, but there should
yarn --cwd packages/backend add @backstage/plugin-catalog-node
```
-2. Next create a `catalogPermissionRules.ts` file in the `packages/backend/src/extensions` folder.
+2. Next create a `catalogPermissionRules.ts` file in the `packages/backend/src/modules` folder.
3. Then add this as the contents of the new `catalogPermissionRules.ts` file:
- ```typescript title="packages/backend/src/extensions/catalogPermissionRules.ts"
+ ```typescript title="packages/backend/src/modules/catalogPermissionRules.ts"
import { createBackendModule } from '@backstage/backend-plugin-api';
import { catalogPermissionExtensionPoint } from '@backstage/plugin-catalog-node/alpha';
import { isInSystemRule } from './permissionPolicyExtension';
@@ -160,9 +166,9 @@ The api for providing custom rules may differ between plugins, but there should
moduleId: 'permission-rules',
register(reg) {
reg.registerInit({
- deps: { catalog: catalogPermissionExtensionPoint },
- async init({ catalog }) {
- catalog.addPermissionRules(isInSystemRule);
+ deps: { permissionsRegistry: coreServices.permissionsRegistry },
+ async init({ permissionsRegistry }) {
+ permissionsRegistry.addPermissionRules([isInSystemRule]);
},
});
},
diff --git a/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md b/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md
index 2d39d5cef3..4053a81f99 100644
--- a/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md
+++ b/docs/permissions/plugin-authors/02-adding-a-basic-permission-check.md
@@ -67,8 +67,6 @@ import { LoggerService, HttpAuthService } from '@backstage/backend-plugin-api';
import { InputError, NotAllowedError } from '@backstage/errors';
import { LoggerService, HttpAuthService, PermissionsService } from '@backstage/backend-plugin-api';
import { AuthorizeResult } from '@backstage/plugin-permission-common';
-import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';
-import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
/* highlight-add-end */
export interface RouterOptions {
@@ -86,12 +84,6 @@ export async function createRouter(
/* highlight-add-next-line */
const { logger, httpAuth, permissions } = options;
- /* highlight-add-start */
- const permissionIntegrationRouter = createPermissionIntegrationRouter({
- permissions: [todoListCreatePermission],
- });
- /* highlight-add-end */
-
const router = Router();
router.use(express.json());
@@ -100,9 +92,6 @@ export async function createRouter(
response.json({ status: 'ok' });
});
- /* highlight-add-next-line */
- router.use(permissionIntegrationRouter);
-
router.get('/todos', async (_req, res) => {
res.json(getAll());
});
@@ -137,11 +126,13 @@ export async function createRouter(
// ...
```
-Pass the `permissions` object to the plugin in `plugins/todo-list-backend/src/plugin.ts`:
+Pass the `permissions` service and register the new permission to the plugin in `plugins/todo-list-backend/src/plugin.ts`:
```ts title="plugins/todo-list-backend/src/plugin.ts"
import { coreServices, createBackendPlugin } from '@backstage/backend-plugin-api';
import { createRouter } from './service/router';
+/* highlight-add-next-line */
+import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
export const exampleTodoListPlugin = createBackendPlugin({
pluginId: 'todolist',
@@ -153,11 +144,16 @@ export const exampleTodoListPlugin = createBackendPlugin({
httpRouter: coreServices.httpRouter,
/* highlight-add-next-line */
permissions: coreServices.permissions,
+ /* highlight-add-next-line */
+ permissionsRegistry: coreServices.permissionsRegistry,
},
/* highlight-remove-next-line */
async init({ logger, httpAuth, httpRouter }) {
/* highlight-add-next-line */
- async init({ logger, httpAuth, httpRouter, permissions }) {
+ async init({ httpAuth, logger, httpRouter, permissions, permissionsRegistry }) {
+ /* highlight-add-next-line */
+ permissionsRegistry.addPermissions([todoListCreatePermission]);
+
httpRouter.use(
await createRouter({
logger,
diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md
index 3f5a9777b3..8d0e5c75e9 100644
--- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md
+++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md
@@ -47,9 +47,9 @@ Notice that unlike `todoListCreatePermission`, the `todoListUpdatePermission` pe
## Setting up authorization for the update permission
-To start, let's edit `plugins/todo-list-backend/src/service/router.ts` in the same manner as we did in the previous section:
+To start, let's edit `plugins/todo-list-backend/src/plugin.ts` to add the new permission to our plugin:
-```ts title="plugins/todo-list-backend/src/service/router.ts"
+```ts title="plugins/todo-list-backend/src/plugin.ts"
/* highlight-remove-next-line */
import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
/* highlight-add-start */
@@ -61,14 +61,29 @@ import {
// ...
-const permissionIntegrationRouter = createPermissionIntegrationRouter({
- /* highlight-remove-next-line */
- permissions: [todoListCreatePermission],
- /* highlight-add-next-line */
- permissions: [todoListCreatePermission, todoListUpdatePermission],
-});
+/* highlight-remove-next-line */
+permissionsRegistry.addPermissions([todoListCreatePermission]);
+/* highlight-add-start */
+permissionsRegistry.addPermissions([
+ todoListCreatePermission,
+ todoListUpdatePermission,
+]);
+/* highlight-add-end */
// ...
+```
+
+Then let's edit `plugins/todo-list-backend/src/service/router.ts` in the same manner as we did in the previous section:
+
+```ts title="plugins/todo-list-backend/src/service/router.ts"
+/* highlight-remove-next-line */
+import { todoListCreatePermission } from '@internal/plugin-todo-list-common';
+/* highlight-add-start */
+import {
+ todoListCreatePermission,
+ todoListUpdatePermission,
+} from '@internal/plugin-todo-list-common';
+/* highlight-add-end */
router.put('/todos', async (req, res) => {
/* highlight-add-start */
@@ -155,49 +170,50 @@ Specifically, the `apply` function is used to understand whether the passed reso
Let's skip the `toQuery` function for now, we'll come back to that in the next section.
-Now, let's create the new endpoint by editing `plugins/todo-list-backend/src/service/router.ts`. This uses the `createPermissionIntegrationRouter` helper to add the APIs needed by the permission framework to your plugin. You'll need to supply:
+Now, let's add the new resource type to the permissions system via the
+`PermissionsRegistryService`. You'll need to supply:
- `getResources`: a function that accepts an array of `resourceRefs` in the same format you expect to be passed to `authorize`, and returns an array of the corresponding resources.
- `resourceType`: the same value used in the permission rule above.
- `permissions`: the list of permissions that your plugin accepts.
- `rules`: an array of all the permission rules you want to support in conditional decisions.
-```ts title="plugins/todo-list-backend/src/service/router.ts"
+```ts title="plugins/todo-list-backend/src/plugin.ts"
// ...
+import {
+ coreServices,
+ createBackendPlugin,
+} from '@backstage/backend-plugin-api';
+import { createRouter } from './service/router';
import {
/* highlight-add-next-line */
TODO_LIST_RESOURCE_TYPE,
todoListCreatePermission,
todoListUpdatePermission,
} from '@internal/plugin-todo-list-common';
-/* highlight-remove-next-line */
-import { add, getAll, update } from './todos';
/* highlight-add-start */
-import { add, getAll, getTodo, update } from './todos';
+import { getTodo } from './todos';
import { rules } from './rules';
/* highlight-add-end */
-export async function createRouter(
- options: RouterOptions,
-): Promise {
- const { logger, identity, permissions } = options;
+// ...
- const permissionIntegrationRouter = createPermissionIntegrationRouter({
- permissions: [todoListCreatePermission, todoListUpdatePermission],
- /* highlight-add-start */
- getResources: async resourceRefs => {
- return resourceRefs.map(getTodo);
- },
- resourceType: TODO_LIST_RESOURCE_TYPE,
- rules: Object.values(rules),
- /* highlight-add-end */
- });
-
- const router = Router();
- router.use(express.json());
-
- // ...
-}
+/* highlight-remove-start */
+permissionsRegistry.addPermissions([
+ todoListCreatePermission,
+ todoListUpdatePermission,
+]);
+/* highlight-remove-end */
+/* highlight-add-start */
+permissionsRegistry.addResourceType({
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+ permissions: [todoListCreatePermission, todoListUpdatePermission],
+ rules: Object.values(rules),
+ getResources: async resourceRefs => {
+ return Promise.all(resourceRefs.map(getTodo));
+ },
+});
+/* highlight-add-end */
```
## Provide utilities for policy authors
diff --git a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md
index 883884b6e5..10941e6305 100644
--- a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md
+++ b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md
@@ -4,7 +4,9 @@ title: 4. Authorizing access to paginated data
description: Explains how to authorize access to paginated data in a Backstage plugin
---
+:::info
This documentation is written for [the new backend system](../../backend-system/index.md) which is the default since Backstage [version 1.24](../../releases/v1.24.0.md). If you are still on the old backend system, you may want to read [its own article](./04-authorizing-access-to-paginated-data--old.md) instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
+:::
Authorizing `GET /todos` is similar to the update endpoint, in that it should be possible to authorize access based on the characteristics of each resource. However, we'll need to authorize a list of resources for this endpoint.
@@ -84,14 +86,41 @@ export const todoListPermissions = [
## Using conditional policy decisions
+As usual, we'll start by updating the permission integration to include the new permission:
+
+```ts title="plugins/todo-list-backend/src/plugin.ts"
+import {
+ TODO_LIST_RESOURCE_TYPE,
+ todoListCreatePermission,
+ todoListUpdatePermission,
+ /* highlight-add-next-line */
+ todoListReadPermission,
+} from '@internal/plugin-todo-list-common';
+
+// ...
+
+permissionsRegistry.addResourceType({
+ resourceType: TODO_LIST_RESOURCE_TYPE,
+ /* highlight-remove-next-line */
+ permissions: [todoListCreatePermission, todoListUpdatePermission],
+ /* highlight-add-next-line */
+ permissions: [
+ todoListCreatePermission,
+ todoListUpdatePermission,
+ todoListReadPermission,
+ ],
+ rules: Object.values(rules),
+ getResources: async resourceRefs => {
+ return Promise.all(resourceRefs.map(getTodo));
+ },
+});
+```
+
So far we've only used the `PermissionsService.authorize` method, which will evaluate conditional decisions before returning a result. In this step, we want to evaluate conditional decisions within our plugin, so we'll use `PermissionsService.authorizeConditional` instead.
```ts title="plugins/todo-list-backend/src/service/router.ts"
-/* highlight-remove-next-line */
-import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';
/* highlight-add-start */
import {
- createPermissionIntegrationRouter,
createConditionTransformer,
ConditionTransformer,
} from '@backstage/plugin-permission-node';
@@ -101,7 +130,6 @@ import { add, getAll, getTodo, update } from './todos';
/* highlight-add-next-line */
import { add, getAll, getTodo, TodoFilter, update } from './todos';
import {
- TODO_LIST_RESOURCE_TYPE,
todoListCreatePermission,
todoListUpdatePermission,
/* highlight-add-next-line */
@@ -110,20 +138,6 @@ import {
// ...
-const permissionIntegrationRouter = createPermissionIntegrationRouter({
- /* highlight-remove-next-line */
- permissions: [todoListCreatePermission, todoListUpdatePermission],
- /* highlight-add-next-line */
- permissions: [todoListCreatePermission, todoListUpdatePermission, todoListReadPermission],
- getResources: async resourceRefs => {
- return resourceRefs.map(getTodo);
- },
- resourceType: TODO_LIST_RESOURCE_TYPE,
- rules: Object.values(rules),
-});
-
-// ...
-
/* highlight-add-next-line */
const transformConditions: ConditionTransformer = createConditionTransformer(Object.values(rules));
diff --git a/docs/plugins/observability.md b/docs/plugins/observability.md
index 324e6751d4..3bc625e7c6 100644
--- a/docs/plugins/observability.md
+++ b/docs/plugins/observability.md
@@ -11,7 +11,7 @@ Backstage integrator.
## Datadog RUM Events
See how to install Datadog Events in your app
-[here](../integrations/datadog-rum/installation.md)
+[here](../integrations/datadog-rum/installation.md).
## Logging
diff --git a/docs/plugins/proxying.md b/docs/plugins/proxying.md
index 09afa3f519..0e57a9a72a 100644
--- a/docs/plugins/proxying.md
+++ b/docs/plugins/proxying.md
@@ -120,3 +120,42 @@ third-parties.
The same logic applies to headers that are sent from the target back to the
frontend.
+
+### Proxy Extension Endpoint
+
+The proxy plugin additionally supports a `proxyExtensionEndpoint` which a proxy
+plugin module can utilize in order to programmatically register additional
+endpoints, whose payloads are specified exactly as in app-config (described
+above). Note that endpoints configured in app-config will always override those
+registered in this manner.
+
+Example:
+
+```ts
+backend.add(
+ createBackendModule({
+ pluginId: 'proxy',
+ moduleId: 'demo-additional-endpoints',
+ register: reg => {
+ reg.registerInit({
+ deps: {
+ proxyEndpoints: proxyEndpointsExtensionPoint,
+ },
+ init: async ({ proxyEndpoints }) => {
+ let largerExampleAuth: string = /* exercise for the reader */;
+ proxyEndpoints.addProxyEndpoints({
+ "/simple-example": "http://simple.example.com:8080",
+ "/larger-example/v1": {
+ target: "http://larger.example.com:8080/svc.v1",
+ credentials: "require",
+ headers: {
+ Authorization: largerExampleAuth
+ },
+ },
+ });
+ },
+ });
+ },
+ }),
+);
+```
diff --git a/docs/releases/v1.35.0-changelog.md b/docs/releases/v1.35.0-changelog.md
new file mode 100644
index 0000000000..41e6451c01
--- /dev/null
+++ b/docs/releases/v1.35.0-changelog.md
@@ -0,0 +1,2319 @@
+# Release v1.35.0
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.35.0](https://backstage.github.io/upgrade-helper/?to=1.35.0)
+
+## @backstage/backend-defaults@0.7.0
+
+### Minor Changes
+
+- ec547b8: Ensure that an error handler middleware exists at the end of each plugin `httpRouter` handler chain. This makes it so that exceptions thrown by plugin routes are caught and encoded in the standard error format.
+
+ If you were using the standard `MiddlewareFactory` just to put an `error` middleware in you router, you can now remove that at your earliest convenience since it's redundant. If you have custom error handlers in your plugin router, those will continue to function as previously. If you were relying on thrown errors propagating all the way down to the root HTTP router, you will find that they no longer do that, and may want to hoist your error handling up to the plugin level instead.
+
+### Patch Changes
+
+- 575613f: Go back to using `node-fetch` for gitlab
+- d2b16db: The `GerritUrlReader` can now read content from a commit and not only from the top of a branch. The
+ Gitiles URL must contain the full commit `SHA` hash like: `https://gerrit.com/gitiles/repo/+/2846e8dc327ae2f60249983b1c3b96f42f205bae/catalog-info.yaml`.
+- 8ecf8cb: Exclude `@backstage/backend-common` from schema collection if `@backstage/backend-defaults` is present
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- Updated dependencies
+ - @backstage/backend-app-api@1.1.1
+ - @backstage/types@1.2.1
+ - @backstage/config-loader@1.9.5
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/integration@1.16.1
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/cli-node@0.2.12
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-proxy-node@0.1.0
+
+### Minor Changes
+
+- 11b001c: Added `proxyEndpointsExtensionPoint` to allow addition of proxy configuration through an extension point in the new backend system.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-scaffolder-backend@1.29.0
+
+### Minor Changes
+
+- 5d9e5c8: Added the ability to use `${{ context.task.id }}` in nunjucks templating, as well as `ctx.task.id` in actions to get the current task ID.
+
+### Patch Changes
+
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.5
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.5
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.6
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.5
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.5
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.5
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.5
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-search-backend-module-catalog@0.3.0
+
+### Minor Changes
+
+- dd515e3: **BREAKING**: Removed support for the old backend system. Please [migrate to the new backend system](https://backstage.io/docs/backend-system/) and enable [the catalog collator](https://backstage.io/docs/features/search/collators#catalog) there.
+
+ As part of this, the `/alpha` export path is gone too. Just import the module from the root of the package as usual instead.
+
+### Patch Changes
+
+- 1e09b06: Internal refactor to use cursor based pagination
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-signals-backend@0.3.0
+
+### Minor Changes
+
+- f59ea1d: Removed support for the old backend system. If you were using the old `createRouter` export, please migrate to [the new backend system](https://backstage.io/docs/backend-system/).
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-events-node@0.4.7
+ - @backstage/plugin-signals-node@0.1.16
+
+## @backstage/app-defaults@1.5.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-app-api@1.15.4
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/backend-app-api@1.1.1
+
+### Patch Changes
+
+- 02534c7: Corrected spelling mistake in error message
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/config-loader@1.9.5
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/backend-dynamic-feature-service@0.5.3
+
+### Patch Changes
+
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/backend-app-api@1.1.1
+ - @backstage/types@1.2.1
+ - @backstage/config-loader@1.9.5
+ - @backstage/plugin-catalog-backend@1.30.0
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-events-backend@0.4.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/cli-node@0.2.12
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-app-node@0.1.29
+ - @backstage/plugin-events-node@0.4.7
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/backend-openapi-utils@0.4.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/errors@1.2.7
+
+## @backstage/backend-plugin-api@1.1.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/backend-test-utils@1.2.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/backend-app-api@1.1.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/catalog-client@1.9.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+
+## @backstage/catalog-model@1.7.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/errors@1.2.7
+
+## @backstage/cli@0.29.5
+
+### Patch Changes
+
+- e937ce0: Fixed incompatible `@typescript-eslint` versions with current `eslint@8.x.x`
+- 8557e09: Removed the `EXPERIMENTAL_VITE` flag for using Vite as a dev server. If you were using this feature, we recommend switching to Rspack via the `EXPERIMENTAL_RSPACK` flag.
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/config-loader@1.9.5
+ - @backstage/integration@1.16.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/cli-common@0.1.15
+ - @backstage/cli-node@0.2.12
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/eslint-plugin@0.1.10
+ - @backstage/release-manifests@0.0.12
+
+## @backstage/cli-node@0.2.12
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/errors@1.2.7
+
+## @backstage/config@1.3.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/errors@1.2.7
+
+## @backstage/config-loader@1.9.5
+
+### Patch Changes
+
+- 8ecf8cb: Exclude `@backstage/backend-common` from schema collection if `@backstage/backend-defaults` is present
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/core-app-api@1.15.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/config@1.3.2
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/core-compat-api@0.3.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/core-components@0.16.3
+
+### Patch Changes
+
+- 4ec6f7b: Allow passing component for `ContentHeader` description
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/theme@0.6.3
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/core-plugin-api@1.10.3
+
+### Patch Changes
+
+- b40eb41: Move `Expand` and `ExpandRecursive` to `@backstage/types`
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/create-app@0.5.24
+
+### Patch Changes
+
+- 2e3fbc1: Bumped create-app version.
+- 0980e40: Bumped create-app version.
+- 828c993: Added `--jobs unlimited` to `dev` script to help cases where the backend does not start up during local development
+- Updated dependencies
+ - @backstage/cli-common@0.1.15
+
+## @backstage/dev-utils@1.1.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-app-api@1.15.4
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+
+## @backstage/errors@1.2.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+
+## @backstage/frontend-app-api@0.10.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/errors@1.2.7
+ - @backstage/frontend-defaults@0.1.5
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/frontend-defaults@0.1.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/frontend-app-api@0.10.4
+ - @backstage/plugin-app@0.1.5
+
+## @backstage/frontend-plugin-api@0.9.4
+
+### Patch Changes
+
+- b40eb41: Move `Expand` and `ExpandRecursive` to `@backstage/types`
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/frontend-test-utils@0.2.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/types@1.2.1
+ - @backstage/config@1.3.2
+ - @backstage/frontend-app-api@0.10.4
+ - @backstage/test-utils@1.7.4
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-app@0.1.5
+
+## @backstage/integration@1.16.1
+
+### Patch Changes
+
+- d2b16db: A new Gerrit helper function (`buildGerritGitilesArchiveUrlFromLocation`) has been added. This
+ constructs a Gitiles URL to download an archive. It is similar to the existing
+ `buildGerritGitilesArchiveUrl` but also support content referenced by a full commit `SHA`.
+
+ **DEPRECATIONS**: The function `buildGerritGitilesArchiveUrl` is deprecated, use the
+ `buildGerritGitilesArchiveUrlFromLocation` function instead.
+
+ **DEPRECATIONS**: The function `parseGerritGitilesUrl` is deprecated, use the
+ `parseGitilesUrlRef` function instead.
+
+- Updated dependencies
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/integration-aws-node@0.1.15
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/integration-react@1.2.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration@1.16.1
+ - @backstage/config@1.3.2
+
+## @backstage/repo-tools@0.12.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.5
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/cli-common@0.1.15
+ - @backstage/cli-node@0.2.12
+ - @backstage/errors@1.2.7
+
+## @techdocs/cli@1.8.25
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/plugin-techdocs-node@1.12.16
+
+## @backstage/test-utils@1.7.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/types@1.2.1
+
+### Patch Changes
+
+- b40eb41: Move `Expand` and `ExpandRecursive` to `@backstage/types`
+
+## @backstage/plugin-api-docs@0.12.3
+
+### Patch Changes
+
+- dcf6e72: Fix typo in default path of api docs definition route
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/plugin-catalog@1.26.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/plugin-app@0.1.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/plugin-app-backend@0.4.4
+
+### Patch Changes
+
+- d9d62ef: Remove some internal usages of the backend-common package
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/config-loader@1.9.5
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-app-node@0.1.29
+
+## @backstage/plugin-app-node@0.1.29
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.5
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-app-visualizer@0.1.15
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+
+## @backstage/plugin-auth-backend@0.24.2
+
+### Patch Changes
+
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- Updated dependencies
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.4
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.4
+ - @backstage/plugin-auth-backend-module-auth0-provider@0.1.4
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.2
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.4
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.4
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.4
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.4
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.4
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.4
+ - @backstage/plugin-catalog-node@1.15.1
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-auth0-provider@0.1.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/plugin-auth-backend@0.24.2
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.4
+
+### Patch Changes
+
+- d4a8246: Use the email from `cfIdentity` instead of `claims` when constructing user profile in order to support Cloudflare Service Tokens.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-auth-backend-module-github-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-google-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.3.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/plugin-auth-backend@0.24.2
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.1.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+
+## @backstage/plugin-auth-node@0.5.6
+
+### Patch Changes
+
+- d9d62ef: Remove some internal usages of the backend-common package
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-auth-react@0.1.11
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.27
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-catalog@1.26.1
+
+### Patch Changes
+
+- 208e53b: Fixing spelling mistake in translation
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/errors@1.2.7
+ - @backstage/integration-react@1.2.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-scaffolder-common@1.5.9
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-search-react@1.8.5
+
+## @backstage/plugin-catalog-backend@1.30.0
+
+### Patch Changes
+
+- d9d62ef: Remove some internal usages of the backend-common package
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- be0aae7: Improved concurrency of the `entities` endpoint when using the streamed query mode behind the `catalog.disableRelationsCompatibility` flag.
+- dd515e3: Internalize the deprecated collator types since they were removed from the collator itself during new-backend-system migration.
+- 3d475a0: Updated condition in `resolveCodeOwner` to fix a bug where `normalizeCodeOwner` could potentially be called with an invalid argument causing an error in `CodeOwnersProcessor`
+- Updated dependencies
+ - @backstage/plugin-search-backend-module-catalog@0.3.0
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/integration@1.16.1
+ - @backstage/backend-openapi-utils@0.4.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-kubernetes-common@0.9.2
+
+## @backstage/plugin-catalog-backend-module-azure@0.3.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.4
+
+### Patch Changes
+
+- 12ba80f: docs: Use a valid configuration as example
+- Updated dependencies
+ - @backstage/backend-openapi-utils@0.4.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-node@1.15.1
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.3.1
+
+### Patch Changes
+
+- 8c04d7a: Updated the `getFile` method in `BitbucketServerClient` to use `this.config.apiBaseUrl` directly for constructing the API request URL, removing the creation of an unnecessary `URL` object. The method now relies on REST API paths for accessing resources instead of direct access, ensuring better alignment with Bitbucket's API conventions.
+- Updated dependencies
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-node@1.15.1
+
+## @backstage/plugin-catalog-backend-module-gcp@0.3.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-kubernetes-common@0.9.2
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-node@1.15.1
+
+## @backstage/plugin-catalog-backend-module-github@0.7.9
+
+### Patch Changes
+
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- 64dd0b8: Added rate limiting and throttling to `GithubOrgEntityProvider`
+- 4ab00e4: Fixes an issue in `GithubMultiOrgEntityProvider` that caused an error when processing teams without a parent.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.30.0
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-catalog-backend-module-github-org@0.3.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend-module-github@0.7.9
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.6.2
+
+### Patch Changes
+
+- 575613f: Go back to using `node-fetch` for gitlab
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.5
+
+### Patch Changes
+
+- d9d62ef: Remove some internal usages of the backend-common package
+- Updated dependencies
+ - @backstage/plugin-catalog-backend-module-gitlab@0.6.2
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.2
+
+### Patch Changes
+
+- ec547b8: Remove the error handler middleware, since that is now provided by the framework
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-backend@1.30.0
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-catalog-backend-module-ldap@0.11.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+
+## @backstage/plugin-catalog-backend-module-logs@0.1.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.30.0
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.6
+
+### Patch Changes
+
+- 29a4aa8: fix(config): add missing parameters in config schema
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+
+## @backstage/plugin-catalog-backend-module-openapi@0.2.6
+
+### Patch Changes
+
+- 57e794a: Refactor to no longer use backend-common
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.2.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-node@1.15.1
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.5.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.7
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-catalog-common@1.1.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-catalog-graph@0.4.15
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.5
+
+## @backstage/plugin-catalog-import@0.12.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/integration@1.16.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/errors@1.2.7
+ - @backstage/integration-react@1.2.3
+ - @backstage/plugin-catalog-common@1.1.3
+
+## @backstage/plugin-catalog-node@1.15.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-catalog-react@1.15.1
+
+### Patch Changes
+
+- aaf6508: Creates new CatalogAutocomplete component in catalog-react that aligns with Select component UI for consistent a dropdown UI for all catalog filters.
+- cbfc0a4: Fixed an issue where the `` in `offset` mode would unnecessarily re-fetch data when the filter didn't change, causing a flicker effect.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/errors@1.2.7
+ - @backstage/frontend-test-utils@0.2.5
+ - @backstage/integration-react@1.2.3
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/plugin-catalog-unprocessed-entities@0.2.13
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-catalog-unprocessed-entities-common@0.0.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-config-schema@0.1.64
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-devtools@0.1.23
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-devtools-common@0.1.15
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/plugin-devtools-backend@0.5.1
+
+### Patch Changes
+
+- ec547b8: Remove the error handler middleware, since that is now provided by the framework
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/types@1.2.1
+ - @backstage/config-loader@1.9.5
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-devtools-common@0.1.15
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-devtools-common@0.1.15
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-events-backend@0.4.1
+
+### Patch Changes
+
+- d9d62ef: Remove some internal usages of the backend-common package
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-openapi-utils@0.4.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.4.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-events-backend-module-azure@0.2.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-events-backend-module-github@0.2.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-events-backend-test-utils@0.1.40
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-events-node@0.4.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-home@0.8.4
+
+### Patch Changes
+
+- 7932f1e: Exported `QuickStartCard` component.
+- d8f9079: Updated dependency `@rjsf/utils` to `5.23.2`.
+ Updated dependency `@rjsf/core` to `5.23.2`.
+ Updated dependency `@rjsf/material-ui` to `5.23.2`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.23.2`.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/plugin-home-react@0.1.22
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/theme@0.6.3
+
+## @backstage/plugin-home-react@0.1.22
+
+### Patch Changes
+
+- d8f9079: Updated dependency `@rjsf/utils` to `5.23.2`.
+ Updated dependency `@rjsf/core` to `5.23.2`.
+ Updated dependency `@rjsf/material-ui` to `5.23.2`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.23.2`.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+
+## @backstage/plugin-kubernetes@0.12.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/plugin-kubernetes-common@0.9.2
+ - @backstage/plugin-kubernetes-react@0.5.3
+
+## @backstage/plugin-kubernetes-backend@0.19.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-kubernetes-common@0.9.2
+ - @backstage/plugin-kubernetes-node@0.2.2
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-kubernetes-cluster@0.0.21
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-kubernetes-common@0.9.2
+ - @backstage/plugin-kubernetes-react@0.5.3
+
+## @backstage/plugin-kubernetes-common@0.9.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-kubernetes-node@0.2.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-kubernetes-common@0.9.2
+
+## @backstage/plugin-kubernetes-react@0.5.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-kubernetes-common@0.9.2
+
+## @backstage/plugin-notifications@0.5.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/errors@1.2.7
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-signals-react@0.0.9
+
+## @backstage/plugin-notifications-backend@0.5.1
+
+### Patch Changes
+
+- cbc0e63: Remove `@backstage/backend-common` dependency
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-notifications-node@0.2.11
+ - @backstage/plugin-signals-node@0.1.16
+
+## @backstage/plugin-notifications-backend-module-email@0.3.5
+
+### Patch Changes
+
+- bed5f35: Added more examples of the plugin configuration
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-notifications-node@0.2.11
+
+## @backstage/plugin-notifications-common@0.0.8
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.2
+
+## @backstage/plugin-notifications-node@0.2.11
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-signals-node@0.1.16
+
+## @backstage/plugin-org@0.6.35
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/plugin-catalog-common@1.1.3
+
+## @backstage/plugin-org-react@0.1.34
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+
+## @backstage/plugin-permission-backend@0.5.53
+
+### Patch Changes
+
+- d9d62ef: Remove some internal usages of the backend-common package
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-permission-common@0.8.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-permission-node@0.8.7
+
+### Patch Changes
+
+- d9d62ef: Remove some internal usages of the backend-common package
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-permission-react@0.4.30
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-proxy-backend@0.5.10
+
+### Patch Changes
+
+- 11b001c: Added `proxyEndpointsExtensionPoint` to allow addition of proxy configuration through an extension point in the new backend system.
+- Updated dependencies
+ - @backstage/plugin-proxy-node@0.1.0
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+
+## @backstage/plugin-scaffolder@1.27.4
+
+### Patch Changes
+
+- d8f9079: Updated dependency `@rjsf/utils` to `5.23.2`.
+ Updated dependency `@rjsf/core` to `5.23.2`.
+ Updated dependency `@rjsf/material-ui` to `5.23.2`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.23.2`.
+- 4756287: Added support for `FormDecoratorBlueprint` to create form decorators in the Scaffolder plugin
+- 3f09ef4: Fix issue with `secrets` not being forwarded properly to the backend when creating a task
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/plugin-scaffolder-react@1.14.3
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/integration@1.16.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/errors@1.2.7
+ - @backstage/integration-react@1.2.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.2.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.5
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.5
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.2.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.2.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.5
+
+### Patch Changes
+
+- edaf925: Updates to allow users to subscribe to the newly created repository within GitHub to mimic similar functionality found within the GitHub UI.
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1
+
+### Patch Changes
+
+- 8fb529a: Added `reviewerIds` to the Gitlab Merge Request action.
+- a913beb: Added action `gitlab:group:migrate` to migrate projects using `bulk_import`
+- 7b62987: Updated the path field in the `gitlab:group:ensureExists` action to accept an array of either strings or objects with name and slug fields.
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.1.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-notifications-node@0.2.11
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.5.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.2.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.18
+
+## @backstage/plugin-scaffolder-common@1.5.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-scaffolder-node@0.6.3
+
+### Patch Changes
+
+- 5d9e5c8: Added the ability to use `${{ context.task.id }}` in nunjucks templating, as well as `ctx.task.id` in actions to get the current task ID.
+- 7dd0013: Deprecate the `logStream` option in `executeShellCommand`, replacing it with a logger instance.
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.18
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/backend-test-utils@1.2.1
+
+## @backstage/plugin-scaffolder-react@1.14.3
+
+### Patch Changes
+
+- 91bb99a: Fix field extension validation not working when field is in dependencies in an array field
+- d8f9079: Updated dependency `@rjsf/utils` to `5.23.2`.
+ Updated dependency `@rjsf/core` to `5.23.2`.
+ Updated dependency `@rjsf/material-ui` to `5.23.2`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.23.2`.
+- 37421bc: Fixed scaffolder form fields not resolving correctly in the `useCustomFieldExtensions` hook.
+- 4756287: Added support for `FormDecoratorBlueprint` to create form decorators in the Scaffolder plugin
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/theme@0.6.3
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-search@1.4.22
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/errors@1.2.7
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-search-react@1.8.5
+
+## @backstage/plugin-search-backend@1.8.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/backend-openapi-utils@0.4.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.6.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-explore@0.2.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-pg@0.5.40
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-techdocs@0.3.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-techdocs-node@1.12.16
+
+## @backstage/plugin-search-backend-node@1.3.7
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-common@1.2.17
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-search-react@1.8.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/theme@0.6.3
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-signals@0.0.15
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-signals-react@0.0.9
+
+## @backstage/plugin-signals-node@0.1.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/plugin-events-node@0.4.7
+
+## @backstage/plugin-signals-react@0.0.9
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+
+## @backstage/plugin-techdocs@1.12.1
+
+### Patch Changes
+
+- 3710b35: Allow passing down `withSearch` prop to `EntityTechdocsContent` component since it was `true` by default, now user can use the `EntityTechdocsContent` component _without_ showing the search field on top of the content.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/integration@1.16.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/errors@1.2.7
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-search-react@1.8.5
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-react@1.2.13
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.44
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/plugin-techdocs@1.12.1
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog@1.26.1
+ - @backstage/core-app-api@1.15.4
+ - @backstage/integration-react@1.2.3
+ - @backstage/test-utils@1.7.4
+ - @backstage/plugin-search-react@1.8.5
+ - @backstage/plugin-techdocs-react@1.2.13
+
+## @backstage/plugin-techdocs-backend@1.11.5
+
+### Patch Changes
+
+- 29a4aa8: fix(config): add missing parameters in config schema
+- Updated dependencies
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-node@1.12.16
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.20
+
+### Patch Changes
+
+- b664b2a: Internal refactor for safer handling of possible null value.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/integration@1.16.1
+ - @backstage/integration-react@1.2.3
+ - @backstage/plugin-techdocs-react@1.2.13
+
+## @backstage/plugin-techdocs-node@1.12.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.16.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-react@1.2.13
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/plugin-user-settings@0.8.18
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/core-components@0.16.3
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/errors@1.2.7
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-signals-react@0.0.9
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.29
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-signals-node@0.1.16
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.105
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-home@0.8.4
+ - @backstage/cli@0.29.5
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/plugin-techdocs@1.12.1
+ - @backstage/plugin-scaffolder-react@1.14.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/plugin-catalog@1.26.1
+ - @backstage/plugin-scaffolder@1.27.4
+ - @backstage/plugin-api-docs@0.12.3
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/frontend-app-api@0.10.4
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-graph@0.4.15
+ - @backstage/plugin-catalog-import@0.12.9
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13
+ - @backstage/plugin-devtools@0.1.23
+ - @backstage/plugin-kubernetes@0.12.3
+ - @backstage/plugin-kubernetes-cluster@0.0.21
+ - @backstage/plugin-notifications@0.5.1
+ - @backstage/plugin-org@0.6.35
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-search@1.4.22
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-search-react@1.8.5
+ - @backstage/plugin-signals@0.0.15
+ - @backstage/plugin-techdocs-react@1.2.13
+ - @backstage/plugin-user-settings@0.8.18
+
+## example-app-next@0.0.19
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-home@0.8.4
+ - @backstage/cli@0.29.5
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/plugin-techdocs@1.12.1
+ - @backstage/plugin-scaffolder-react@1.14.3
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/plugin-catalog@1.26.1
+ - @backstage/plugin-scaffolder@1.27.4
+ - @backstage/plugin-api-docs@0.12.3
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/frontend-app-api@0.10.4
+ - @backstage/frontend-defaults@0.1.5
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-app@0.1.5
+ - @backstage/plugin-app-visualizer@0.1.15
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-graph@0.4.15
+ - @backstage/plugin-catalog-import@0.12.9
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13
+ - @backstage/plugin-kubernetes@0.12.3
+ - @backstage/plugin-kubernetes-cluster@0.0.21
+ - @backstage/plugin-notifications@0.5.1
+ - @backstage/plugin-org@0.6.35
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-search@1.4.22
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-search-react@1.8.5
+ - @backstage/plugin-signals@0.0.15
+ - @backstage/plugin-techdocs-react@1.2.13
+ - @backstage/plugin-user-settings@0.8.18
+
+## app-next-example-plugin@0.0.19
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-components@0.16.3
+
+## example-backend@0.0.34
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.5
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.6
+ - @backstage/plugin-devtools-backend@0.5.1
+ - @backstage/plugin-signals-backend@0.3.0
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/plugin-scaffolder-backend@1.29.0
+ - @backstage/plugin-proxy-backend@0.5.10
+ - @backstage/plugin-search-backend-module-catalog@0.3.0
+ - @backstage/plugin-techdocs-backend@1.11.5
+ - @backstage/plugin-permission-backend@0.5.53
+ - @backstage/plugin-catalog-backend@1.30.0
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-events-backend@0.4.1
+ - @backstage/plugin-app-backend@0.4.4
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/plugin-notifications-backend@0.5.1
+ - @backstage/plugin-auth-backend@0.24.2
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.4
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.4
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4
+ - @backstage/plugin-kubernetes-backend@0.19.2
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.4
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-scaffolder-backend-module-notifications@0.1.6
+ - @backstage/plugin-search-backend@1.8.1
+ - @backstage/plugin-search-backend-module-explore@0.2.7
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5
+ - @backstage/plugin-search-backend-node@1.3.7
+
+## example-backend-legacy@0.2.106
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-signals-backend@0.3.0
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/plugin-scaffolder-backend@1.29.0
+ - @backstage/plugin-proxy-backend@0.5.10
+ - @backstage/plugin-search-backend-module-catalog@0.3.0
+ - @backstage/plugin-techdocs-backend@1.11.5
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1
+ - @backstage/plugin-permission-backend@0.5.53
+ - @backstage/plugin-catalog-backend@1.30.0
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-events-backend@0.4.1
+ - @backstage/plugin-app-backend@0.4.4
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-auth-backend@0.24.2
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+ - @backstage/plugin-kubernetes-backend@0.19.2
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.5
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.5
+ - @backstage/plugin-search-backend@1.8.1
+ - @backstage/plugin-search-backend-module-elasticsearch@1.6.4
+ - @backstage/plugin-search-backend-module-explore@0.2.7
+ - @backstage/plugin-search-backend-module-pg@0.5.40
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-signals-node@0.1.16
+
+## e2e-test@0.2.24
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.24
+ - @backstage/cli-common@0.1.15
+ - @backstage/errors@1.2.7
+
+## @internal/frontend@0.0.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+
+## @internal/scaffolder@0.0.5
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.14.3
+ - @backstage/frontend-plugin-api@0.9.4
+
+## techdocs-cli-embedded-app@0.2.104
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.29.5
+ - @backstage/plugin-techdocs@1.12.1
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/plugin-catalog@1.26.1
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/integration-react@1.2.3
+ - @backstage/test-utils@1.7.4
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-techdocs-react@1.2.13
+
+## @internal/plugin-todo-list@1.0.35
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+
+## @internal/plugin-todo-list-backend@1.0.35
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/errors@1.2.7
+
+## @internal/plugin-todo-list-common@1.0.24
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.4
diff --git a/docs/releases/v1.35.0-next.1-changelog.md b/docs/releases/v1.35.0-next.1-changelog.md
new file mode 100644
index 0000000000..c3e89a862b
--- /dev/null
+++ b/docs/releases/v1.35.0-next.1-changelog.md
@@ -0,0 +1,2619 @@
+# Release v1.35.0-next.1
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.35.0-next.1](https://backstage.github.io/upgrade-helper/?to=1.35.0-next.1)
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.6.2-next.0
+
+# @backstage/plugin-catalog-backend-module-gitlab
+
+## 0.6.1-next.0
+
+### Patch Changes
+
+- 575613f: Go back to using `node-fetch` for gitlab
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.0
+ - @backstage/catalog-model@1.7.2
+ - @backstage/config@1.3.1
+ - @backstage/integration@1.16.0
+ - @backstage/plugin-catalog-common@1.1.2
+ - @backstage/plugin-catalog-node@1.15.1-next.0
+ - @backstage/plugin-events-node@0.4.7-next.0
+
+## 0.6.0
+
+### Minor Changes
+
+- 99dce5c: Implemented discovery for top-level groups defined in config.group or if undefined global top-level group in Gitlab
+
+### Patch Changes
+
+- 191e5bf: `restrictUsersToGroup` should use the entire group path when getting members
+- 5c9cc05: Use native fetch instead of node-fetch
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0
+ - @backstage/integration@1.16.0
+ - @backstage/backend-plugin-api@1.1.0
+ - @backstage/plugin-catalog-node@1.15.0
+ - @backstage/plugin-events-node@0.4.6
+ - @backstage/catalog-model@1.7.2
+ - @backstage/config@1.3.1
+ - @backstage/plugin-catalog-common@1.1.2
+
+## 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
+
+- 5c9cc05: Use native fetch instead of node-fetch
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.1
+ - @backstage/plugin-catalog-node@1.15.0-next.1
+ - @backstage/backend-plugin-api@1.1.0-next.1
+ - @backstage/catalog-model@1.7.1
+ - @backstage/config@1.3.0
+ - @backstage/integration@1.16.0-next.0
+ - @backstage/plugin-catalog-common@1.1.1
+ - @backstage/plugin-events-node@0.4.6-next.1
+
+## 0.5.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.6.0-next.0
+ - @backstage/integration@1.16.0-next.0
+ - @backstage/backend-plugin-api@1.0.3-next.0
+ - @backstage/plugin-events-node@0.4.6-next.0
+ - @backstage/catalog-model@1.7.1
+ - @backstage/config@1.3.0
+ - @backstage/plugin-catalog-common@1.1.1
+ - @backstage/plugin-catalog-node@1.14.1-next.0
+
+## 0.5.0
+
+### Minor Changes
+
+- 1b5fdd9: Extended the configuration with the `includeArchivedRepos` property, which allows including repositories when the project is archived.
+
+### Patch Changes
+
+- 4e58bc7: Upgrade to uuid v11 internally
+- Updated dependencies
+ - @backstage/config@1.3.0
+ - @backstage/plugin-events-node@0.4.5
+ - @backstage/backend-defaults@0.5.3
+ - @backstage/plugin-catalog-node@1.14.0
+ - @backstage/backend-plugin-api@1.0.2
+ - @backstage/catalog-model@1.7.1
+ - @backstage/integration@1.15.2
+ - @backstage/plugin-catalog-common@1.1.1
+
+## 0.5.0-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.5-next.3
+ - @backstage/backend-defaults@0.5.3-next.3
+ - @backstage/backend-plugin-api@1.0.2-next.2
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.1
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.14.0-next.2
+
+## 0.5.0-next.2
+
+### Minor Changes
+
+- 1b5fdd9: Extended the configuration with the `includeArchivedRepos` property, which allows including repositories when the project is archived.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.3-next.2
+ - @backstage/plugin-events-node@0.4.5-next.2
+ - @backstage/plugin-catalog-node@1.14.0-next.2
+ - @backstage/backend-plugin-api@1.0.2-next.2
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.1
+ - @backstage/plugin-catalog-common@1.1.0
+
+## 0.4.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.3-next.1
+ - @backstage/backend-plugin-api@1.0.2-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.1
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.14.0-next.1
+ - @backstage/plugin-events-node@0.4.4-next.1
+
+## 0.4.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.3-next.0
+ - @backstage/plugin-catalog-node@1.14.0-next.0
+ - @backstage/backend-defaults@0.5.3-next.0
+ - @backstage/backend-plugin-api@1.0.2-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.1
+ - @backstage/plugin-catalog-common@1.1.0
+
+## 0.4.3
+
+### Patch Changes
+
+- 3109c24: The export for the new backend system at the `/alpha` export is now also available via the main entry point, which means that you can remove the `/alpha` suffix from the import.
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1
+ - @backstage/plugin-events-node@0.4.1
+ - @backstage/plugin-catalog-node@1.13.1
+ - @backstage/integration@1.15.1
+ - @backstage/backend-plugin-api@1.0.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.1.0
+
+## 0.4.3-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.2
+ - @backstage/plugin-catalog-node@1.13.1-next.1
+ - @backstage/integration@1.15.1-next.1
+ - @backstage/backend-plugin-api@1.0.1-next.1
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-events-node@0.4.1-next.1
+
+## 0.4.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.1
+ - @backstage/integration@1.15.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+
+## 0.4.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.1-next.0
+ - @backstage/plugin-events-node@0.4.1-next.0
+ - @backstage/backend-plugin-api@1.0.1-next.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.1-next.0
+
+## 0.4.2
+
+### Patch Changes
+
+- 53b24d9: Internal update to use the new cache manager
+
+- 0476be3: Add the `relations` array to allow Backstage to mirror GitLab's membership behavior, including descendant, inherited, and shared-from-group memberships.
+
+ The previous `allowInherited` config option will be deprecated in future versions. Use the `relations` array with the `INHERITED` option instead.
+
+ ```yaml
+ catalog:
+ providers:
+ gitlab:
+ development:
+ relations:
+ - INHERITED
+ ```
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+
+- b446954: Remove dependency on backend-common
+
+- 06cc084: Added a `includeUsersWithoutSeat` config option that allow import of users without a paid seat, e.g. for Gitlab Free on SaaS. Defaults to false
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0
+ - @backstage/backend-plugin-api@1.0.0
+ - @backstage/catalog-model@1.7.0
+ - @backstage/plugin-catalog-common@1.1.0
+ - @backstage/plugin-catalog-node@1.13.0
+ - @backstage/integration@1.15.0
+ - @backstage/plugin-events-node@0.4.0
+ - @backstage/config@1.2.0
+
+## 0.4.2-next.2
+
+### Patch Changes
+
+- 0476be3: Add the `relations` array to allow Backstage to mirror GitLab's membership behavior, including descendant, inherited, and shared-from-group memberships.
+
+ The previous `allowInherited` config option will be deprecated in future versions. Use the `relations` array with the `INHERITED` option instead.
+
+ ```yaml
+ catalog:
+ providers:
+ gitlab:
+ development:
+ relations:
+ - INHERITED
+ ```
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.2
+ - @backstage/backend-plugin-api@1.0.0-next.2
+ - @backstage/integration@1.15.0-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.2
+ - @backstage/plugin-events-node@0.4.0-next.2
+
+## 0.4.2-next.1
+
+### Patch Changes
+
+- 53b24d9: Internal update to use the new cache manager
+- Updated dependencies
+ - @backstage/backend-defaults@0.5.0-next.1
+ - @backstage/backend-plugin-api@0.9.0-next.1
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-catalog-node@1.12.7-next.1
+ - @backstage/plugin-events-node@0.4.0-next.1
+
+## 0.4.2-next.0
+
+### Patch Changes
+
+- d425fc4: Modules, plugins, and services are now `BackendFeature`, not a function that returns a feature.
+- b446954: Remove dependency on backend-common
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.9.0-next.0
+ - @backstage/backend-defaults@0.5.0-next.0
+ - @backstage/plugin-events-node@0.4.0-next.0
+ - @backstage/plugin-catalog-node@1.12.7-next.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0
+ - @backstage/plugin-catalog-common@1.0.26
+
+## 0.4.0
+
+### Minor Changes
+
+- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- c7b14ed: Adds new optional `excludeRepos` configuration option to the Gitlab catalog provider.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0
+ - @backstage/backend-common@0.24.0
+ - @backstage/plugin-catalog-node@1.12.5
+ - @backstage/integration@1.14.0
+ - @backstage/catalog-model@1.6.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.26
+ - @backstage/plugin-events-node@0.3.9
+
+## 0.3.22-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.3
+ - @backstage/backend-common@0.23.4-next.3
+ - @backstage/catalog-model@1.6.0-next.0
+ - @backstage/backend-tasks@0.5.28-next.3
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.3
+ - @backstage/plugin-events-node@0.3.9-next.3
+
+## 0.3.22-next.2
+
+### Patch Changes
+
+- 93095ee: Make sure node-fetch is version 2.7.0 or greater
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.8.0-next.2
+ - @backstage/backend-common@0.23.4-next.2
+ - @backstage/backend-tasks@0.5.28-next.2
+ - @backstage/plugin-catalog-node@1.12.5-next.2
+ - @backstage/plugin-events-node@0.3.9-next.2
+ - @backstage/plugin-catalog-common@1.0.26-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## 0.3.22-next.1
+
+### Patch Changes
+
+- c7b14ed: Adds new optional `excludeRepos` configuration option to the Gitlab catalog provider.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.1-next.1
+ - @backstage/backend-common@0.23.4-next.1
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/plugin-catalog-common@1.0.26-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.1
+ - @backstage/backend-tasks@0.5.28-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-events-node@0.3.9-next.1
+
+## 0.3.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.23.4-next.0
+ - @backstage/plugin-catalog-node@1.12.5-next.0
+ - @backstage/integration@1.14.0-next.0
+ - @backstage/backend-plugin-api@0.7.1-next.0
+ - @backstage/backend-tasks@0.5.28-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.25
+ - @backstage/plugin-events-node@0.3.9-next.0
+
+## 0.3.21
+
+### Patch Changes
+
+- 8db30ad: The Gitlab configuration supports an additional optional boolean key `catalog.providers.gitlab..restrictUsersToGroup`. Setting this to `true` will make Backstage only import users from the group defined in the `group` key, instead of all users in the organisation (self-hosted) or of the root group (SaaS). It will default to false, keeping the original implementation intact, when not explicitly set.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.7.0
+ - @backstage/backend-common@0.23.3
+ - @backstage/backend-tasks@0.5.27
+ - @backstage/integration@1.13.0
+ - @backstage/plugin-events-node@0.3.8
+ - @backstage/plugin-catalog-node@1.12.4
+ - @backstage/plugin-catalog-common@1.0.25
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## 0.3.21-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.23.3-next.1
+ - @backstage/backend-plugin-api@0.6.22-next.1
+ - @backstage/backend-tasks@0.5.27-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.13.0-next.0
+ - @backstage/plugin-catalog-common@1.0.24
+ - @backstage/plugin-catalog-node@1.12.4-next.1
+ - @backstage/plugin-events-node@0.3.8-next.1
+
+## 0.3.20-next.0
+
+### Patch Changes
+
+- 8db30ad: The Gitlab configuration supports an additional optional boolean key `catalog.providers.gitlab..restrictUsersToGroup`. Setting this to `true` will make Backstage only import users from the group defined in the `group` key, instead of all users in the organisation (self-hosted) or of the root group (SaaS). It will default to false, keeping the original implementation intact, when not explicitly set.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.21-next.0
+ - @backstage/backend-common@0.23.2-next.0
+ - @backstage/backend-tasks@0.5.26-next.0
+ - @backstage/integration@1.13.0-next.0
+ - @backstage/plugin-catalog-node@1.12.3-next.0
+ - @backstage/plugin-events-node@0.3.7-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.24
+
+## 0.3.18
+
+### Patch Changes
+
+- 78a0b08: Internal refactor to handle `BackendFeature` contract change.
+- d44a20a: Added additional plugin metadata to `package.json`.
+- 150fc77: Fixed an issue in `GitlabOrgDiscoveryEntityProvider` where a missing `orgEnabled` config key was throwing an error.
+- f271164: Fixed an issue in `GitlabDiscoveryEntityProvider` where the fallback branch was taking precedence over the GitLab default branch.
+- Updated dependencies
+ - @backstage/backend-common@0.23.0
+ - @backstage/backend-plugin-api@0.6.19
+ - @backstage/backend-tasks@0.5.24
+ - @backstage/integration@1.12.0
+ - @backstage/plugin-catalog-node@1.12.1
+ - @backstage/plugin-events-node@0.3.5
+ - @backstage/plugin-catalog-common@1.0.24
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## 0.3.18-next.3
+
+### Patch Changes
+
+- d44a20a: Added additional plugin metadata to `package.json`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.19-next.3
+ - @backstage/integration@1.12.0-next.1
+ - @backstage/plugin-catalog-common@1.0.24-next.0
+ - @backstage/plugin-catalog-node@1.12.1-next.2
+ - @backstage/plugin-events-node@0.3.5-next.2
+ - @backstage/backend-tasks@0.5.24-next.3
+ - @backstage/backend-common@0.23.0-next.3
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+
+## 0.3.18-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.19-next.2
+ - @backstage/backend-common@0.23.0-next.2
+ - @backstage/integration@1.12.0-next.0
+ - @backstage/backend-tasks@0.5.24-next.2
+ - @backstage/plugin-catalog-node@1.12.1-next.1
+ - @backstage/plugin-events-node@0.3.5-next.1
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-common@1.0.23
+
+## 0.3.17-next.1
+
+### Patch Changes
+
+- 150fc77: Fixed an issue in `GitlabOrgDiscoveryEntityProvider` where a missing `orgEnabled` config key was throwing an error.
+- f271164: Fixed an issue in `GitlabDiscoveryEntityProvider` where the fallback branch was taking precedence over the GitLab default branch.
+- Updated dependencies
+ - @backstage/backend-tasks@0.5.24-next.1
+ - @backstage/backend-plugin-api@0.6.19-next.1
+ - @backstage/backend-common@0.23.0-next.1
+ - @backstage/plugin-catalog-node@1.12.1-next.0
+ - @backstage/plugin-events-node@0.3.5-next.0
+
+## 0.3.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-tasks@0.5.24-next.0
+ - @backstage/backend-common@0.22.1-next.0
+ - @backstage/plugin-events-node@0.3.5-next.0
+ - @backstage/backend-plugin-api@0.6.19-next.0
+ - @backstage/plugin-catalog-node@1.12.1-next.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.11.0
+ - @backstage/plugin-catalog-common@1.0.23
+
+## 0.3.16
+
+### Patch Changes
+
+- a70377d: Added events support for `GitlabDiscoveryEntityProvider` and `GitlabOrgDiscoveryEntityProvider`.
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.12.0
+ - @backstage/catalog-model@1.5.0
+ - @backstage/backend-common@0.22.0
+ - @backstage/backend-plugin-api@0.6.18
+ - @backstage/backend-tasks@0.5.23
+ - @backstage/plugin-events-node@0.3.4
+ - @backstage/integration@1.11.0
+ - @backstage/plugin-catalog-common@1.0.23
+
+## 0.3.15-next.4
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.12.0-next.2
+ - @backstage/backend-common@0.22.0-next.2
+ - @backstage/plugin-events-node@0.3.4-next.2
+ - @backstage/integration@1.11.0-next.0
+
+## 0.3.15-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.22.0-next.1
+ - @backstage/backend-tasks@0.5.23-next.1
+ - @backstage/plugin-events-node@0.3.4-next.1
+ - @backstage/plugin-catalog-node@1.11.2-next.1
+ - @backstage/backend-plugin-api@0.6.18-next.1
+
+## 0.3.15-next.2
+
+### Patch Changes
+
+- a70377d: Added events support for `GitlabDiscoveryEntityProvider` and `GitlabOrgDiscoveryEntityProvider`.
+- Updated dependencies
+ - @backstage/catalog-model@1.5.0-next.0
+ - @backstage/backend-common@0.21.8-next.0
+ - @backstage/backend-plugin-api@0.6.18-next.0
+ - @backstage/plugin-catalog-common@1.0.23-next.0
+ - @backstage/plugin-catalog-node@1.11.2-next.0
+ - @backstage/backend-tasks@0.5.23-next.0
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.10.0
+ - @backstage/plugin-events-node@0.3.4-next.0
+
+## 0.3.15
+
+### Patch Changes
+
+- d5a1fe1: Replaced winston logger with `LoggerService`
+- Updated dependencies
+ - @backstage/backend-common@0.21.7
+ - @backstage/backend-plugin-api@0.6.17
+ - @backstage/backend-tasks@0.5.22
+ - @backstage/integration@1.10.0
+ - @backstage/plugin-catalog-node@1.11.1
+ - @backstage/catalog-model@1.4.5
+ - @backstage/config@1.2.0
+
+## 0.3.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.21.7-next.1
+ - @backstage/backend-plugin-api@0.6.17-next.1
+ - @backstage/backend-tasks@0.5.22-next.1
+ - @backstage/catalog-model@1.4.5
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.10.0-next.0
+ - @backstage/plugin-catalog-node@1.11.1-next.1
+
+## 0.3.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.21.7-next.0
+ - @backstage/integration@1.10.0-next.0
+ - @backstage/backend-plugin-api@0.6.17-next.0
+ - @backstage/backend-tasks@0.5.22-next.0
+ - @backstage/catalog-model@1.4.5
+ - @backstage/config@1.2.0
+ - @backstage/plugin-catalog-node@1.11.1-next.0
+
+## 0.3.14
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.11.0
+ - @backstage/backend-common@0.21.6
+ - @backstage/backend-plugin-api@0.6.16
+ - @backstage/backend-tasks@0.5.21
+ - @backstage/catalog-model@1.4.5
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.9.1
+
+## 0.3.13
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.10.0
+ - @backstage/backend-common@0.21.5
+ - @backstage/backend-tasks@0.5.20
+ - @backstage/backend-plugin-api@0.6.15
+ - @backstage/catalog-model@1.4.5
+ - @backstage/config@1.2.0
+ - @backstage/integration@1.9.1
+
+## 0.3.12
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.9.0
+
+## 0.3.11
+
+### Patch Changes
+
+- 0fb419b: Updated dependency `uuid` to `^9.0.0`.
+ Updated dependency `@types/uuid` to `^9.0.0`.
+- 9f5b8bc: Add GitLab `visibility` to group entity annotations.
+- Updated dependencies
+ - @backstage/backend-common@0.21.4
+ - @backstage/integration@1.9.1
+ - @backstage/config@1.2.0
+ - @backstage/backend-plugin-api@0.6.14
+ - @backstage/plugin-catalog-node@1.8.0
+ - @backstage/backend-tasks@0.5.19
+ - @backstage/catalog-model@1.4.5
+
+## 0.3.11-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.9.1-next.2
+ - @backstage/backend-common@0.21.4-next.2
+ - @backstage/plugin-catalog-node@1.8.0-next.2
+ - @backstage/backend-plugin-api@0.6.14-next.2
+ - @backstage/backend-tasks@0.5.19-next.2
+ - @backstage/catalog-model@1.4.5-next.0
+ - @backstage/config@1.2.0-next.1
+
+## 0.3.11-next.1
+
+### Patch Changes
+
+- 9f5b8bc: Add GitLab `visibility` to group entity annotations.
+- Updated dependencies
+ - @backstage/config@1.2.0-next.1
+ - @backstage/backend-common@0.21.4-next.1
+ - @backstage/backend-plugin-api@0.6.14-next.1
+ - @backstage/backend-tasks@0.5.19-next.1
+ - @backstage/integration@1.9.1-next.1
+ - @backstage/catalog-model@1.4.5-next.0
+ - @backstage/plugin-catalog-node@1.8.0-next.1
+
+## 0.3.10-next.0
+
+### Patch Changes
+
+- 0fb419b: Updated dependency `uuid` to `^9.0.0`.
+ Updated dependency `@types/uuid` to `^9.0.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.21.3-next.0
+ - @backstage/backend-plugin-api@0.6.13-next.0
+ - @backstage/plugin-catalog-node@1.8.0-next.0
+ - @backstage/backend-tasks@0.5.18-next.0
+ - @backstage/catalog-model@1.4.5-next.0
+ - @backstage/config@1.1.2-next.0
+ - @backstage/integration@1.9.1-next.0
+
+## 0.3.7
+
+### Patch Changes
+
+- 60e4c2a: Added the option to provide custom `groupTransformer`, `userTransformer` and `groupNameTransformer` to allow custom transformations of groups and users
+- Updated dependencies
+ - @backstage/backend-common@0.21.0
+ - @backstage/backend-plugin-api@0.6.10
+ - @backstage/backend-tasks@0.5.15
+ - @backstage/catalog-model@1.4.4
+ - @backstage/integration@1.9.0
+ - @backstage/plugin-catalog-node@1.7.0
+ - @backstage/config@1.1.1
+
+## 0.3.7-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.21.0-next.3
+ - @backstage/integration@1.9.0-next.1
+ - @backstage/backend-tasks@0.5.15-next.3
+ - @backstage/plugin-catalog-node@1.6.2-next.3
+ - @backstage/backend-plugin-api@0.6.10-next.3
+ - @backstage/catalog-model@1.4.4-next.0
+ - @backstage/config@1.1.1
+
+## 0.3.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.21.0-next.2
+ - @backstage/backend-plugin-api@0.6.10-next.2
+ - @backstage/backend-tasks@0.5.15-next.2
+ - @backstage/plugin-catalog-node@1.6.2-next.2
+ - @backstage/config@1.1.1
+ - @backstage/catalog-model@1.4.4-next.0
+ - @backstage/integration@1.9.0-next.0
+
+## 0.3.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.4.4-next.0
+ - @backstage/backend-plugin-api@0.6.10-next.1
+ - @backstage/backend-common@0.21.0-next.1
+ - @backstage/integration@1.9.0-next.0
+ - @backstage/backend-tasks@0.5.15-next.1
+ - @backstage/config@1.1.1
+ - @backstage/plugin-catalog-node@1.6.2-next.1
+
+## 0.3.7-next.0
+
+### Patch Changes
+
+- 60e4c2a: Added the option to provide custom `groupTransformer`, `userTransformer` and `groupNameTransformer` to allow custom transformations of groups and users
+- Updated dependencies
+ - @backstage/backend-common@0.21.0-next.0
+ - @backstage/backend-tasks@0.5.15-next.0
+ - @backstage/plugin-catalog-node@1.6.2-next.0
+ - @backstage/backend-plugin-api@0.6.10-next.0
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+ - @backstage/integration@1.8.0
+
+## 0.3.6
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.20.1
+ - @backstage/backend-plugin-api@0.6.9
+ - @backstage/plugin-catalog-node@1.6.1
+ - @backstage/backend-tasks@0.5.14
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+ - @backstage/integration@1.8.0
+
+## 0.3.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.9-next.2
+ - @backstage/backend-common@0.20.1-next.2
+ - @backstage/plugin-catalog-node@1.6.1-next.2
+ - @backstage/backend-tasks@0.5.14-next.2
+
+## 0.3.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.20.1-next.1
+ - @backstage/integration@1.8.0
+ - @backstage/config@1.1.1
+ - @backstage/backend-tasks@0.5.14-next.1
+ - @backstage/backend-plugin-api@0.6.9-next.1
+ - @backstage/catalog-model@1.4.3
+ - @backstage/plugin-catalog-node@1.6.1-next.1
+
+## 0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.20.1-next.0
+ - @backstage/plugin-catalog-node@1.6.1-next.0
+ - @backstage/backend-plugin-api@0.6.9-next.0
+ - @backstage/backend-tasks@0.5.14-next.0
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+ - @backstage/integration@1.8.0
+
+## 0.3.5
+
+### Patch Changes
+
+- cc4228e: Switched module ID to use kebab-case.
+- Updated dependencies
+ - @backstage/backend-common@0.20.0
+ - @backstage/plugin-catalog-node@1.6.0
+ - @backstage/backend-tasks@0.5.13
+ - @backstage/integration@1.8.0
+ - @backstage/backend-plugin-api@0.6.8
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+
+## 0.3.5-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.20.0-next.3
+ - @backstage/backend-plugin-api@0.6.8-next.3
+ - @backstage/backend-tasks@0.5.13-next.3
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+ - @backstage/integration@1.8.0-next.1
+ - @backstage/plugin-catalog-node@1.6.0-next.3
+
+## 0.3.5-next.2
+
+### Patch Changes
+
+- cc4228e: Switched module ID to use kebab-case.
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.6.0-next.2
+ - @backstage/backend-common@0.20.0-next.2
+ - @backstage/backend-plugin-api@0.6.8-next.2
+ - @backstage/backend-tasks@0.5.13-next.2
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+ - @backstage/integration@1.8.0-next.1
+
+## 0.3.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.8.0-next.1
+ - @backstage/backend-common@0.20.0-next.1
+ - @backstage/backend-plugin-api@0.6.8-next.1
+ - @backstage/backend-tasks@0.5.13-next.1
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+ - @backstage/plugin-catalog-node@1.5.1-next.1
+
+## 0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.20.0-next.0
+ - @backstage/backend-tasks@0.5.13-next.0
+ - @backstage/integration@1.8.0-next.0
+ - @backstage/plugin-catalog-node@1.5.1-next.0
+ - @backstage/backend-plugin-api@0.6.8-next.0
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+
+## 0.3.4
+
+### Patch Changes
+
+- d732f17610: Added try catch around fetching gitlab group users to prevent refresh from failing completely while only a select number of groups might not be able to load correctly.
+- 0873a43ac1: Resolved a bug affecting the retrieval of users from group members. By appending '/all' to the API call, we now include members from all inherited groups, as per Gitlab's API specifications. This change is reflected in the listSaaSUsers function.
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.5.0
+ - @backstage/integration@1.7.2
+ - @backstage/backend-common@0.19.9
+ - @backstage/backend-plugin-api@0.6.7
+ - @backstage/backend-tasks@0.5.12
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+
+## 0.3.4-next.2
+
+### Patch Changes
+
+- [#20893](https://github.com/backstage/backstage/pull/20893) [`0873a43ac1`](https://github.com/backstage/backstage/commit/0873a43ac1557901b21dfa6f8534bbbfc73dc444) Thanks [@pushit-tech](https://github.com/pushit-tech)! - Resolved a bug affecting the retrieval of users from group members. By appending '/all' to the API call, we now include members from all inherited groups, as per Gitlab's API specifications. This change is reflected in the listSaaSUsers function.
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.7-next.2
+ - @backstage/backend-common@0.19.9-next.2
+ - @backstage/backend-tasks@0.5.12-next.2
+ - @backstage/plugin-catalog-node@1.5.0-next.2
+
+## 0.3.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.5.0-next.1
+ - @backstage/integration@1.7.2-next.0
+ - @backstage/backend-common@0.19.9-next.1
+ - @backstage/backend-tasks@0.5.12-next.1
+ - @backstage/backend-plugin-api@0.6.7-next.1
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+
+## 0.3.4-next.0
+
+### Patch Changes
+
+- d732f17610: Added try catch around fetching gitlab group users to prevent refresh from failing completely while only a select number of groups might not be able to load correctly.
+- Updated dependencies
+ - @backstage/backend-common@0.19.9-next.0
+ - @backstage/integration@1.7.1
+ - @backstage/backend-plugin-api@0.6.7-next.0
+ - @backstage/backend-tasks@0.5.12-next.0
+ - @backstage/catalog-model@1.4.3
+ - @backstage/config@1.1.1
+ - @backstage/plugin-catalog-node@1.4.8-next.0
+
+## 0.3.3
+
+### Patch Changes
+
+- 4f70fdfc93: fix: use REST API to get root group memberships for GitLab SaaS users listing
+
+ This API is the only one that shows `email` field for enterprise users and
+ allows to filter out bot users not using a license using the `is_using_seat`
+ field.
+
+ We also added the annotation `gitlab.com/saml-external-uid` taking the value
+ of `group_saml_identity.extern_uid` of the `groups/:group-id/members` endpoint
+ response. This is useful in case you want to create a `SignInResolver` that
+ references the user with the id of your identity provider (e.g. OneLogin).
+
+ ref:
+
+
+
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+
+- 0b55f773a7: Removed some unused dependencies
+
+- 6ae7f12abb: Make sure the archived projects are skipped with the Gitlab API
+
+- Updated dependencies
+ - @backstage/backend-tasks@0.5.11
+ - @backstage/backend-common@0.19.8
+ - @backstage/integration@1.7.1
+ - @backstage/plugin-catalog-node@1.4.7
+ - @backstage/catalog-model@1.4.3
+ - @backstage/backend-plugin-api@0.6.6
+ - @backstage/config@1.1.1
+
+## 0.3.3-next.2
+
+### Patch Changes
+
+- 4f70fdfc93: fix: use REST API to get root group memberships for GitLab SaaS users listing
+
+ This API is the only one that shows `email` field for enterprise users and
+ allows to filter out bot users not using a license using the `is_using_seat`
+ field.
+
+ We also added the annotation `gitlab.com/saml-external-uid` taking the value
+ of `group_saml_identity.extern_uid` of the `groups/:group-id/members` endpoint
+ response. This is useful in case you want to create a `SignInResolver` that
+ references the user with the id of your identity provider (e.g. OneLogin).
+
+ ref:
+
+
+
+
+- 0b55f773a7: Removed some unused dependencies
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.8-next.2
+ - @backstage/catalog-model@1.4.3-next.0
+ - @backstage/integration@1.7.1-next.1
+ - @backstage/backend-tasks@0.5.11-next.2
+ - @backstage/plugin-catalog-node@1.4.7-next.2
+ - @backstage/backend-plugin-api@0.6.6-next.2
+ - @backstage/config@1.1.1-next.0
+
+## 0.3.2-next.1
+
+### Patch Changes
+
+- 6ae7f12abb: Make sure the archived projects are skipped with the Gitlab API
+- Updated dependencies
+ - @backstage/backend-tasks@0.5.10-next.1
+ - @backstage/plugin-catalog-node@1.4.6-next.1
+ - @backstage/backend-common@0.19.7-next.1
+ - @backstage/backend-plugin-api@0.6.5-next.1
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/types@1.1.1
+
+## 0.3.2-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## 0.3.0
+
+### Minor Changes
+
+- 3d73bafd85c9: Fix Gitlab.com user ingestion by scoping GitlabOrgDiscoveryEntityProvider to a group.
+
+ **BREAKING** The `group` parameter is now required Gitlab.com Org Data integrations and the backend will fail to start without this option configured.
+
+ ```diff
+ catalog:
+ providers:
+ gitlab:
+ yourProviderId:
+ host: gitlab.com
+ orgEnabled: true
+ + group: org/teams
+ ```
+
+### Patch Changes
+
+- 71114ac50e02: The export for the new backend system has been moved to be the `default` export.
+
+ For example, if you are currently importing the plugin using the following pattern:
+
+ ```ts
+ import { examplePlugin } from '@backstage/plugin-example-backend';
+
+ backend.add(examplePlugin);
+ ```
+
+ It should be migrated to this:
+
+ ```ts
+ backend.add(import('@backstage/plugin-example-backend'));
+ ```
+
+- Updated dependencies
+ - @backstage/backend-tasks@0.5.8
+ - @backstage/backend-common@0.19.5
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/integration@1.7.0
+ - @backstage/types@1.1.1
+ - @backstage/backend-plugin-api@0.6.3
+ - @backstage/plugin-catalog-node@1.4.4
+
+## 0.3.0-next.3
+
+### Minor Changes
+
+- 3d73bafd85c9: Fix Gitlab.com user ingestion by scoping GitlabOrgDiscoveryEntityProvider to a group.
+
+ **BREAKING** The `group` parameter is now required Gitlab.com Org Data integrations and the backend will fail to start without this option configured.
+
+ ```diff
+ catalog:
+ providers:
+ gitlab:
+ yourProviderId:
+ host: gitlab.com
+ orgEnabled: true
+ + group: org/teams
+ ```
+
+### Patch Changes
+
+- 71114ac50e02: The export for the new backend system has been moved to be the `default` export.
+
+ For example, if you are currently importing the plugin using the following pattern:
+
+ ```ts
+ import { examplePlugin } from '@backstage/plugin-example-backend';
+
+ backend.add(examplePlugin);
+ ```
+
+ It should be migrated to this:
+
+ ```ts
+ backend.add(import('@backstage/plugin-example-backend'));
+ ```
+
+- Updated dependencies
+ - @backstage/catalog-model@1.4.2-next.2
+ - @backstage/config@1.1.0-next.2
+ - @backstage/errors@1.2.2-next.0
+ - @backstage/integration@1.7.0-next.3
+ - @backstage/types@1.1.1-next.0
+ - @backstage/backend-plugin-api@0.6.3-next.3
+ - @backstage/backend-common@0.19.5-next.3
+ - @backstage/backend-tasks@0.5.8-next.3
+ - @backstage/plugin-catalog-node@1.4.4-next.3
+
+## 0.2.7-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.1.0-next.1
+ - @backstage/backend-tasks@0.5.8-next.2
+ - @backstage/backend-common@0.19.5-next.2
+ - @backstage/plugin-catalog-node@1.4.4-next.2
+ - @backstage/integration@1.7.0-next.2
+ - @backstage/backend-plugin-api@0.6.3-next.2
+ - @backstage/catalog-model@1.4.2-next.1
+ - @backstage/errors@1.2.1
+ - @backstage/types@1.1.0
+
+## 0.2.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.1.0-next.0
+ - @backstage/integration@1.7.0-next.1
+ - @backstage/backend-tasks@0.5.8-next.1
+ - @backstage/backend-common@0.19.5-next.1
+ - @backstage/backend-plugin-api@0.6.3-next.1
+ - @backstage/catalog-model@1.4.2-next.0
+ - @backstage/plugin-catalog-node@1.4.4-next.1
+ - @backstage/errors@1.2.1
+ - @backstage/types@1.1.0
+
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.4-next.0
+ - @backstage/integration@1.7.0-next.0
+ - @backstage/backend-tasks@0.5.7-next.0
+ - @backstage/backend-plugin-api@0.6.2-next.0
+ - @backstage/catalog-model@1.4.1
+ - @backstage/config@1.0.8
+ - @backstage/errors@1.2.1
+ - @backstage/types@1.1.0
+ - @backstage/plugin-catalog-node@1.4.3-next.0
+
+## 0.2.4
+
+### Patch Changes
+
+- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config`
+- e6c721439f37: Added option to skip forked repos in GitlabDiscoveryEntityProvider
+- 4b82382ed8c2: Fixed invalid configuration schema. The configuration schema may be more strict as a result.
+- 2fe1f5973ff7: Filter Gitlab archived projects through APIs
+- Updated dependencies
+ - @backstage/backend-common@0.19.2
+ - @backstage/backend-plugin-api@0.6.0
+ - @backstage/plugin-catalog-node@1.4.1
+ - @backstage/integration@1.6.0
+ - @backstage/backend-tasks@0.5.5
+ - @backstage/catalog-model@1.4.1
+ - @backstage/config@1.0.8
+ - @backstage/errors@1.2.1
+ - @backstage/types@1.1.0
+
+## 0.2.4-next.2
+
+### Patch Changes
+
+- 2fe1f5973ff7: Filter Gitlab archived projects through APIs
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.0-next.2
+ - @backstage/backend-tasks@0.5.5-next.2
+ - @backstage/backend-common@0.19.2-next.2
+ - @backstage/plugin-catalog-node@1.4.1-next.2
+
+## 0.2.4-next.1
+
+### Patch Changes
+
+- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config`
+- e6c721439f37: Added option to skip forked repos in GitlabDiscoveryEntityProvider
+- 4b82382ed8c2: Fixed invalid configuration schema. The configuration schema may be more strict as a result.
+- Updated dependencies
+ - @backstage/backend-common@0.19.2-next.1
+ - @backstage/plugin-catalog-node@1.4.1-next.1
+ - @backstage/backend-plugin-api@0.6.0-next.1
+ - @backstage/backend-tasks@0.5.5-next.1
+ - @backstage/integration@1.5.1
+ - @backstage/catalog-model@1.4.1
+ - @backstage/config@1.0.8
+ - @backstage/errors@1.2.1
+ - @backstage/types@1.1.0
+
+## 0.2.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.2-next.0
+ - @backstage/backend-plugin-api@0.5.5-next.0
+ - @backstage/backend-tasks@0.5.5-next.0
+ - @backstage/catalog-model@1.4.1
+ - @backstage/config@1.0.8
+ - @backstage/errors@1.2.1
+ - @backstage/integration@1.5.1
+ - @backstage/types@1.1.0
+ - @backstage/plugin-catalog-node@1.4.1-next.0
+
+## 0.2.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.1
+ - @backstage/backend-common@0.19.1
+ - @backstage/plugin-catalog-node@1.4.0
+ - @backstage/backend-plugin-api@0.5.4
+ - @backstage/backend-tasks@0.5.4
+ - @backstage/catalog-model@1.4.1
+ - @backstage/config@1.0.8
+ - @backstage/integration@1.5.1
+ - @backstage/types@1.1.0
+
+## 0.2.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/errors@1.2.1-next.0
+ - @backstage/backend-common@0.19.1-next.0
+ - @backstage/plugin-catalog-node@1.4.0-next.0
+ - @backstage/backend-plugin-api@0.5.4-next.0
+ - @backstage/backend-tasks@0.5.4-next.0
+ - @backstage/catalog-model@1.4.1-next.0
+ - @backstage/config@1.0.8
+ - @backstage/integration@1.5.1-next.0
+ - @backstage/types@1.1.0
+
+## 0.2.2
+
+### Patch Changes
+
+- f31fd1f8fd98: Fixed bug that caused ingestion errors when a user's name or profile picture is undefined.
+- 66261b4ab441: Added option to skip forked repos
+- 571f78ed0ea7: Fix getGroupMembers with token that don't have sufficient permissions
+- Updated dependencies
+ - @backstage/backend-common@0.19.0
+ - @backstage/types@1.1.0
+ - @backstage/integration@1.5.0
+ - @backstage/catalog-model@1.4.0
+ - @backstage/errors@1.2.0
+ - @backstage/backend-plugin-api@0.5.3
+ - @backstage/backend-tasks@0.5.3
+ - @backstage/plugin-catalog-node@1.3.7
+ - @backstage/config@1.0.8
+
+## 0.2.2-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.0-next.2
+ - @backstage/catalog-model@1.4.0-next.1
+ - @backstage/backend-plugin-api@0.5.3-next.2
+ - @backstage/backend-tasks@0.5.3-next.2
+ - @backstage/config@1.0.7
+ - @backstage/errors@1.2.0-next.0
+ - @backstage/integration@1.5.0-next.0
+ - @backstage/types@1.0.2
+ - @backstage/plugin-catalog-node@1.3.7-next.2
+
+## 0.2.2-next.2
+
+### Patch Changes
+
+- f31fd1f8fd98: Fixed bug that caused ingestion errors when a user's name or profile picture is undefined.
+- 66261b4ab441: Added option to skip forked repos
+- Updated dependencies
+ - @backstage/config@1.0.7
+
+## 0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.0-next.1
+ - @backstage/integration@1.5.0-next.0
+ - @backstage/errors@1.2.0-next.0
+ - @backstage/backend-plugin-api@0.5.3-next.1
+ - @backstage/catalog-model@1.4.0-next.0
+ - @backstage/backend-tasks@0.5.3-next.1
+ - @backstage/plugin-catalog-node@1.3.7-next.1
+ - @backstage/config@1.0.7
+ - @backstage/types@1.0.2
+
+## 0.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.3.7-next.0
+ - @backstage/backend-common@0.18.6-next.0
+ - @backstage/integration@1.4.5
+ - @backstage/config@1.0.7
+ - @backstage/backend-plugin-api@0.5.3-next.0
+ - @backstage/backend-tasks@0.5.3-next.0
+ - @backstage/catalog-model@1.3.0
+ - @backstage/errors@1.1.5
+ - @backstage/types@1.0.2
+
+## 0.2.1
+
+### Patch Changes
+
+- b12c41fafc4: Fix a corner case where returned users are null for bots
+- Updated dependencies
+ - @backstage/backend-common@0.18.5
+ - @backstage/integration@1.4.5
+ - @backstage/backend-tasks@0.5.2
+ - @backstage/plugin-catalog-node@1.3.6
+ - @backstage/backend-plugin-api@0.5.2
+ - @backstage/catalog-model@1.3.0
+ - @backstage/config@1.0.7
+ - @backstage/errors@1.1.5
+ - @backstage/types@1.0.2
+
+## 0.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.18.5-next.1
+ - @backstage/backend-tasks@0.5.2-next.1
+ - @backstage/plugin-catalog-node@1.3.6-next.1
+ - @backstage/backend-plugin-api@0.5.2-next.1
+ - @backstage/config@1.0.7
+
+## 0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.18.5-next.0
+ - @backstage/integration@1.4.5-next.0
+ - @backstage/backend-tasks@0.5.2-next.0
+ - @backstage/plugin-catalog-node@1.3.6-next.0
+ - @backstage/backend-plugin-api@0.5.2-next.0
+ - @backstage/catalog-model@1.3.0
+ - @backstage/config@1.0.7
+ - @backstage/errors@1.1.5
+ - @backstage/types@1.0.2
+
+## 0.2.0
+
+### Minor Changes
+
+- f64345108a0: **BREAKING**: The configuration of the `GitlabDiscoveryEntityProvider` has changed as follows:
+
+ - The configuration key `branch` is now used to define the branch from which the catalog-info should be discovered.
+ - The old configuration key `branch` is now called `fallbackBranch`. This value specifies which branch should be used
+ if no default branch is defined on the project itself.
+
+ To migrate to the new configuration value, rename `branch` to `fallbackBranch`
+
+### Patch Changes
+
+- 7b1b7bfdb7b: The gitlab org data integration now makes use of the GraphQL API to determine
+ the relationships between imported User and Group entities, effectively making
+ this integration usable without an administrator account's Personal Access
+ Token.
+- Updated dependencies
+ - @backstage/backend-common@0.18.4
+ - @backstage/backend-tasks@0.5.1
+ - @backstage/catalog-model@1.3.0
+ - @backstage/integration@1.4.4
+ - @backstage/plugin-catalog-node@1.3.5
+ - @backstage/backend-plugin-api@0.5.1
+ - @backstage/config@1.0.7
+ - @backstage/errors@1.1.5
+ - @backstage/types@1.0.2
+
+## 0.2.0-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.3.0-next.0
+ - @backstage/backend-common@0.18.4-next.2
+ - @backstage/backend-plugin-api@0.5.1-next.2
+ - @backstage/backend-tasks@0.5.1-next.2
+ - @backstage/config@1.0.7
+ - @backstage/errors@1.1.5
+ - @backstage/integration@1.4.4-next.0
+ - @backstage/types@1.0.2
+ - @backstage/plugin-catalog-node@1.3.5-next.3
+
+## 0.2.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.18.4-next.2
+ - @backstage/backend-plugin-api@0.5.1-next.2
+ - @backstage/backend-tasks@0.5.1-next.2
+ - @backstage/catalog-model@1.2.1
+ - @backstage/config@1.0.7
+ - @backstage/errors@1.1.5
+ - @backstage/integration@1.4.4-next.0
+ - @backstage/types@1.0.2
+ - @backstage/plugin-catalog-node@1.3.5-next.2
+
+## 0.2.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-tasks@0.5.1-next.1
+ - @backstage/integration@1.4.4-next.0
+ - @backstage/backend-common@0.18.4-next.1
+ - @backstage/backend-plugin-api@0.5.1-next.1
+ - @backstage/catalog-model@1.2.1
+ - @backstage/config@1.0.7
+ - @backstage/errors@1.1.5
+ - @backstage/types@1.0.2
+ - @backstage/plugin-catalog-node@1.3.5-next.1
+
+## 0.2.0-next.0
+
+### Minor Changes
+
+- f64345108a0: **BREAKING**: The configuration of the `GitlabDiscoveryEntityProvider` has changed as follows:
+
+ - The configuration key `branch` is now used to define the branch from which the catalog-info should be discovered.
+ - The old configuration key `branch` is now called `fallbackBranch`. This value specifies which branch should be used
+ if no default branch is defined on the project itself.
+
+ To migrate to the new configuration value, rename `branch` to `fallbackBranch`
+
+### Patch Changes
+
+- 7b1b7bfdb7b: The gitlab org data integration now makes use of the GraphQL API to determine
+ the relationships between imported User and Group entities, effectively making
+ this integration usable without an administrator account's Personal Access
+ Token.
+- Updated dependencies
+ - @backstage/backend-common@0.18.4-next.0
+ - @backstage/config@1.0.7
+ - @backstage/integration@1.4.3
+ - @backstage/backend-plugin-api@0.5.1-next.0
+ - @backstage/backend-tasks@0.5.1-next.0
+ - @backstage/catalog-model@1.2.1
+ - @backstage/errors@1.1.5
+ - @backstage/types@1.0.2
+ - @backstage/plugin-catalog-node@1.3.5-next.0
+
+## 0.1.14
+
+### Patch Changes
+
+- 90469c02c8c: Renamed `gitlabDiscoveryEntityProviderCatalogModule` to `catalogModuleGitlabDiscoveryEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns).
+- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend`
+- 928a12a9b3e: Internal refactor of `/alpha` exports.
+- 52b0022dab7: Updated dependency `msw` to `^1.0.0`.
+- af1095f1e11: The configuration key `branch` of the `GitlabDiscoveryEntityProvider` has been deprecated in favor of the configuration key `fallbackBranch`.
+ It will be reused in future release to enforce a concrete branch to be used in catalog file discovery.
+ To migrate to the new configuration value, rename `branch` to `fallbackBranch`.
+- be129f8f3cd: filter gitlab groups by prefix
+- Updated dependencies
+ - @backstage/backend-tasks@0.5.0
+ - @backstage/backend-common@0.18.3
+ - @backstage/errors@1.1.5
+ - @backstage/plugin-catalog-node@1.3.4
+ - @backstage/backend-plugin-api@0.5.0
+ - @backstage/catalog-model@1.2.1
+ - @backstage/integration@1.4.3
+ - @backstage/config@1.0.7
+ - @backstage/types@1.0.2
+
+## 0.1.14-next.2
+
+### Patch Changes
+
+- be129f8f3cd: filter gitlab groups by prefix
+- Updated dependencies
+ - @backstage/backend-tasks@0.5.0-next.2
+ - @backstage/backend-common@0.18.3-next.2
+ - @backstage/backend-plugin-api@0.4.1-next.2
+ - @backstage/plugin-catalog-backend@1.8.0-next.2
+ - @backstage/plugin-catalog-node@1.3.4-next.2
+ - @backstage/config@1.0.7-next.0
+ - @backstage/integration@1.4.3-next.0
+
+## 0.1.14-next.1
+
+### Patch Changes
+
+- 52b0022dab7: Updated dependency `msw` to `^1.0.0`.
+- af1095f1e11: The configuration key `branch` of the `GitlabDiscoveryEntityProvider` has been deprecated in favor of the configuration key `fallbackBranch`.
+ It will be reused in future release to enforce a concrete branch to be used in catalog file discovery.
+ To migrate to the new configuration value, rename `branch` to `fallbackBranch`.
+- Updated dependencies
+ - @backstage/errors@1.1.5-next.0
+ - @backstage/backend-common@0.18.3-next.1
+ - @backstage/integration@1.4.3-next.0
+ - @backstage/plugin-catalog-backend@1.8.0-next.1
+ - @backstage/backend-plugin-api@0.4.1-next.1
+ - @backstage/backend-tasks@0.4.4-next.1
+ - @backstage/config@1.0.7-next.0
+ - @backstage/catalog-model@1.2.1-next.1
+ - @backstage/types@1.0.2
+ - @backstage/plugin-catalog-node@1.3.4-next.1
+
+## 0.1.14-next.0
+
+### Patch Changes
+
+- 928a12a9b3: Internal refactor of `/alpha` exports.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.8.0-next.0
+ - @backstage/backend-tasks@0.4.4-next.0
+ - @backstage/backend-plugin-api@0.4.1-next.0
+ - @backstage/backend-common@0.18.3-next.0
+ - @backstage/catalog-model@1.2.1-next.0
+ - @backstage/plugin-catalog-node@1.3.4-next.0
+ - @backstage/config@1.0.6
+ - @backstage/errors@1.1.4
+ - @backstage/integration@1.4.2
+ - @backstage/types@1.0.2
+
+## 0.1.13
+
+### Patch Changes
+
+- 49948f644f: The config now consistently uses the term 'instance' to refer to a single GitLab API host.
+- 85b04f659a: Internal refactor to not use deprecated `substr`
+- 52c5685ceb: Implement Group and User Catalog Provider
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.7.2
+ - @backstage/backend-plugin-api@0.4.0
+ - @backstage/backend-common@0.18.2
+ - @backstage/catalog-model@1.2.0
+ - @backstage/plugin-catalog-node@1.3.3
+ - @backstage/backend-tasks@0.4.3
+ - @backstage/config@1.0.6
+ - @backstage/errors@1.1.4
+ - @backstage/integration@1.4.2
+ - @backstage/types@1.0.2
+
+## 0.1.13-next.2
+
+### Patch Changes
+
+- 49948f644f: The config now consistently uses the term 'instance' to refer to a single GitLab API host.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.4.0-next.2
+ - @backstage/backend-common@0.18.2-next.2
+ - @backstage/plugin-catalog-backend@1.7.2-next.2
+ - @backstage/catalog-model@1.2.0-next.1
+ - @backstage/plugin-catalog-node@1.3.3-next.2
+ - @backstage/backend-tasks@0.4.3-next.2
+ - @backstage/config@1.0.6
+ - @backstage/errors@1.1.4
+ - @backstage/integration@1.4.2
+ - @backstage/types@1.0.2
+
+## 0.1.13-next.1
+
+### Patch Changes
+
+- 85b04f659a: Internal refactor to not use deprecated `substr`
+- 52c5685ceb: Implement Group and User Catalog Provider
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.7.2-next.1
+ - @backstage/backend-common@0.18.2-next.1
+ - @backstage/backend-plugin-api@0.3.2-next.1
+ - @backstage/backend-tasks@0.4.3-next.1
+ - @backstage/catalog-model@1.1.6-next.0
+ - @backstage/config@1.0.6
+ - @backstage/errors@1.1.4
+ - @backstage/integration@1.4.2
+ - @backstage/types@1.0.2
+ - @backstage/plugin-catalog-node@1.3.3-next.1
+
+## 0.1.13-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.6-next.0
+ - @backstage/backend-common@0.18.2-next.0
+ - @backstage/plugin-catalog-backend@1.7.2-next.0
+ - @backstage/plugin-catalog-node@1.3.3-next.0
+ - @backstage/backend-tasks@0.4.3-next.0
+ - @backstage/backend-plugin-api@0.3.2-next.0
+
+## 0.1.11
+
+### Patch Changes
+
+- 9f2b786fc9: Provide context for logged errors.
+- 8e06f3cf00: Switched imports of `loggerToWinstonLogger` to `@backstage/backend-common`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.3.0
+ - @backstage/backend-common@0.18.0
+ - @backstage/catalog-model@1.1.5
+ - @backstage/backend-tasks@0.4.1
+ - @backstage/plugin-catalog-node@1.3.1
+ - @backstage/plugin-catalog-backend@1.7.0
+ - @backstage/config@1.0.6
+ - @backstage/errors@1.1.4
+ - @backstage/integration@1.4.2
+ - @backstage/types@1.0.2
+
+## 0.1.11-next.2
+
+### Patch Changes
+
+- 9f2b786fc9: Provide context for logged errors.
+- 8e06f3cf00: Switched imports of `loggerToWinstonLogger` to `@backstage/backend-common`.
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.3.0-next.1
+ - @backstage/backend-common@0.18.0-next.1
+ - @backstage/backend-tasks@0.4.1-next.1
+ - @backstage/plugin-catalog-backend@1.7.0-next.2
+ - @backstage/plugin-catalog-node@1.3.1-next.2
+ - @backstage/catalog-model@1.1.5-next.1
+ - @backstage/config@1.0.6-next.0
+ - @backstage/errors@1.1.4
+ - @backstage/integration@1.4.2-next.0
+ - @backstage/types@1.0.2
+
+## 0.1.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.2.1-next.0
+ - @backstage/backend-common@0.18.0-next.0
+ - @backstage/config@1.0.6-next.0
+ - @backstage/plugin-catalog-backend@1.7.0-next.1
+ - @backstage/plugin-catalog-node@1.3.1-next.1
+ - @backstage/backend-tasks@0.4.1-next.0
+ - @backstage/catalog-model@1.1.5-next.1
+ - @backstage/errors@1.1.4
+ - @backstage/integration@1.4.2-next.0
+ - @backstage/types@1.0.2
+
+## 0.1.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.5-next.0
+ - @backstage/plugin-catalog-backend@1.7.0-next.0
+ - @backstage/backend-common@0.17.0
+ - @backstage/backend-plugin-api@0.2.0
+ - @backstage/backend-tasks@0.4.0
+ - @backstage/config@1.0.5
+ - @backstage/errors@1.1.4
+ - @backstage/integration@1.4.1
+ - @backstage/types@1.0.2
+ - @backstage/plugin-catalog-node@1.3.1-next.0
+
+## 0.1.10
+
+### Patch Changes
+
+- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0
+ - @backstage/backend-common@0.17.0
+ - @backstage/plugin-catalog-node@1.3.0
+ - @backstage/backend-tasks@0.4.0
+ - @backstage/errors@1.1.4
+ - @backstage/backend-plugin-api@0.2.0
+ - @backstage/integration@1.4.1
+ - @backstage/types@1.0.2
+ - @backstage/catalog-model@1.1.4
+ - @backstage/config@1.0.5
+
+## 0.1.10-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.3
+ - @backstage/backend-tasks@0.4.0-next.3
+ - @backstage/backend-common@0.17.0-next.3
+ - @backstage/backend-plugin-api@0.2.0-next.3
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/plugin-catalog-node@1.3.0-next.3
+
+## 0.1.10-next.2
+
+### Patch Changes
+
+- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.2
+ - @backstage/plugin-catalog-node@1.3.0-next.2
+ - @backstage/backend-common@0.17.0-next.2
+ - @backstage/backend-plugin-api@0.2.0-next.2
+ - @backstage/backend-tasks@0.4.0-next.2
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/errors@1.1.4-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/types@1.0.2-next.1
+
+## 0.1.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.17.0-next.1
+ - @backstage/plugin-catalog-backend@1.6.0-next.1
+ - @backstage/backend-tasks@0.4.0-next.1
+ - @backstage/types@1.0.2-next.1
+ - @backstage/backend-plugin-api@0.1.5-next.1
+ - @backstage/plugin-catalog-node@1.2.2-next.1
+ - @backstage/config@1.0.5-next.1
+ - @backstage/integration@1.4.1-next.1
+ - @backstage/catalog-model@1.1.4-next.1
+ - @backstage/errors@1.1.4-next.1
+
+## 0.1.10-next.0
+
+### Patch Changes
+
+- 3280711113: Updated dependency `msw` to `^0.49.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.6.0-next.0
+ - @backstage/backend-common@0.16.1-next.0
+ - @backstage/integration@1.4.1-next.0
+ - @backstage/types@1.0.2-next.0
+ - @backstage/backend-plugin-api@0.1.5-next.0
+ - @backstage/plugin-catalog-node@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.8-next.0
+ - @backstage/catalog-model@1.1.4-next.0
+ - @backstage/config@1.0.5-next.0
+ - @backstage/errors@1.1.4-next.0
+
+## 0.1.9
+
+### Patch Changes
+
+- 6bb046bcbe: Add `gitlabDiscoveryEntityProviderCatalogModule` (new backend-plugin-api, alpha).
+
+- 81cedb5033: `GitlabDiscoveryEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code.
+
+ Please find how to configure the schedule at the config at
+
+
+- 4c9f7847e4: Updated dependency `msw` to `^0.48.0` while moving it to be a dev dependency.
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.0
+ - @backstage/plugin-catalog-backend@1.5.1
+ - @backstage/integration@1.4.0
+ - @backstage/backend-tasks@0.3.7
+ - @backstage/catalog-model@1.1.3
+ - @backstage/types@1.0.1
+ - @backstage/backend-plugin-api@0.1.4
+ - @backstage/plugin-catalog-node@1.2.1
+ - @backstage/config@1.0.4
+ - @backstage/errors@1.1.3
+
+## 0.1.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.0-next.1
+ - @backstage/backend-plugin-api@0.1.4-next.1
+ - @backstage/backend-tasks@0.3.7-next.1
+ - @backstage/plugin-catalog-backend@1.5.1-next.1
+ - @backstage/plugin-catalog-node@1.2.1-next.1
+ - @backstage/catalog-model@1.1.3-next.0
+ - @backstage/config@1.0.4-next.0
+ - @backstage/errors@1.1.3-next.0
+ - @backstage/integration@1.4.0-next.0
+ - @backstage/types@1.0.1-next.0
+
+## 0.1.9-next.0
+
+### Patch Changes
+
+- 6bb046bcbe: Add `gitlabDiscoveryEntityProviderCatalogModule` (new backend-plugin-api, alpha).
+
+- 81cedb5033: `GitlabDiscoveryEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code.
+
+ Please find how to configure the schedule at the config at
+
+
+- Updated dependencies
+ - @backstage/backend-common@0.16.0-next.0
+ - @backstage/plugin-catalog-backend@1.5.1-next.0
+ - @backstage/integration@1.4.0-next.0
+ - @backstage/backend-tasks@0.3.7-next.0
+ - @backstage/catalog-model@1.1.3-next.0
+ - @backstage/types@1.0.1-next.0
+ - @backstage/backend-plugin-api@0.1.4-next.0
+ - @backstage/plugin-catalog-node@1.2.1-next.0
+ - @backstage/config@1.0.4-next.0
+ - @backstage/errors@1.1.3-next.0
+
+## 0.1.8
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.2
+ - @backstage/backend-common@0.15.2
+ - @backstage/plugin-catalog-backend@1.5.0
+ - @backstage/backend-tasks@0.3.6
+ - @backstage/config@1.0.3
+ - @backstage/errors@1.1.2
+ - @backstage/integration@1.3.2
+ - @backstage/types@1.0.0
+
+## 0.1.8-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.5.0-next.2
+ - @backstage/backend-tasks@0.3.6-next.2
+ - @backstage/backend-common@0.15.2-next.2
+ - @backstage/catalog-model@1.1.2-next.2
+ - @backstage/config@1.0.3-next.2
+ - @backstage/errors@1.1.2-next.2
+ - @backstage/integration@1.3.2-next.2
+ - @backstage/types@1.0.0
+
+## 0.1.8-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.15.2-next.1
+ - @backstage/backend-tasks@0.3.6-next.1
+ - @backstage/catalog-model@1.1.2-next.1
+ - @backstage/config@1.0.3-next.1
+ - @backstage/errors@1.1.2-next.1
+ - @backstage/integration@1.3.2-next.1
+ - @backstage/types@1.0.0
+ - @backstage/plugin-catalog-backend@1.4.1-next.1
+
+## 0.1.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.2-next.0
+ - @backstage/plugin-catalog-backend@1.4.1-next.0
+ - @backstage/backend-common@0.15.2-next.0
+ - @backstage/backend-tasks@0.3.6-next.0
+ - @backstage/config@1.0.3-next.0
+ - @backstage/errors@1.1.2-next.0
+ - @backstage/integration@1.3.2-next.0
+ - @backstage/types@1.0.0
+
+## 0.1.7
+
+### Patch Changes
+
+- 667d917488: Updated dependency `msw` to `^0.47.0`.
+- 87ec2ba4d6: Updated dependency `msw` to `^0.46.0`.
+- bf5e9030eb: Updated dependency `msw` to `^0.45.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.15.1
+ - @backstage/integration@1.3.1
+ - @backstage/plugin-catalog-backend@1.4.0
+ - @backstage/backend-tasks@0.3.5
+ - @backstage/catalog-model@1.1.1
+ - @backstage/config@1.0.2
+ - @backstage/errors@1.1.1
+
+## 0.1.7-next.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.1-next.0
+ - @backstage/config@1.0.2-next.0
+ - @backstage/errors@1.1.1-next.0
+ - @backstage/integration@1.3.1-next.2
+ - @backstage/plugin-catalog-backend@1.4.0-next.3
+ - @backstage/backend-common@0.15.1-next.3
+ - @backstage/backend-tasks@0.3.5-next.1
+
+## 0.1.7-next.2
+
+### Patch Changes
+
+- 667d917488: Updated dependency `msw` to `^0.47.0`.
+- 87ec2ba4d6: Updated dependency `msw` to `^0.46.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.15.1-next.2
+ - @backstage/integration@1.3.1-next.1
+ - @backstage/plugin-catalog-backend@1.4.0-next.2
+
+## 0.1.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.15.1-next.1
+ - @backstage/plugin-catalog-backend@1.4.0-next.1
+
+## 0.1.7-next.0
+
+### Patch Changes
+
+- bf5e9030eb: Updated dependency `msw` to `^0.45.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.15.1-next.0
+ - @backstage/backend-tasks@0.3.5-next.0
+ - @backstage/plugin-catalog-backend@1.3.2-next.0
+ - @backstage/integration@1.3.1-next.0
+
+## 0.1.6
+
+### Patch Changes
+
+- 24979413a4: Enhancing GitLab provider with filtering projects by pattern RegExp
+
+ ```yaml
+ providers:
+ gitlab:
+ stg:
+ host: gitlab.stg.company.io
+ branch: main
+ projectPattern: 'john/' # new option
+ entityFilename: template.yaml
+ ```
+
+ With the aforementioned parameter you can filter projects, and keep only who belongs to the namespace "john".
+
+- Updated dependencies
+ - @backstage/backend-common@0.15.0
+ - @backstage/integration@1.3.0
+ - @backstage/backend-tasks@0.3.4
+ - @backstage/plugin-catalog-backend@1.3.1
+
+## 0.1.6-next.1
+
+### Patch Changes
+
+- 24979413a4: Enhancing GitLab provider with filtering projects by pattern RegExp
+
+ ```yaml
+ providers:
+ gitlab:
+ stg:
+ host: gitlab.stg.company.io
+ branch: main
+ projectPattern: 'john/' # new option
+ entityFilename: template.yaml
+ ```
+
+ With the aforementioned parameter you can filter projects, and keep only who belongs to the namespace "john".
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.3.1-next.2
+
+## 0.1.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.15.0-next.0
+ - @backstage/integration@1.3.0-next.0
+ - @backstage/backend-tasks@0.3.4-next.0
+ - @backstage/plugin-catalog-backend@1.3.1-next.0
+
+## 0.1.5
+
+### Patch Changes
+
+- a70869e775: Updated dependency `msw` to `^0.43.0`.
+
+- 8006d0f9bf: Updated dependency `msw` to `^0.44.0`.
+
+- 49ff472c0b: Add the possibility in the `GitlabDiscoveryEntityProvider` to scan the whole project instead of concrete groups. For that, use a configuration like this one, where the group parameter is omitted (not mandatory anymore):
+
+ ```yaml
+ catalog:
+ providers:
+ gitlab:
+ yourProviderId:
+ host: gitlab-host # Identifies one of the hosts set up in the integrations
+ branch: main # Optional. Uses `master` as default
+ entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml`
+ ```
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.3.0
+ - @backstage/backend-common@0.14.1
+ - @backstage/catalog-model@1.1.0
+ - @backstage/integration@1.2.2
+ - @backstage/backend-tasks@0.3.3
+ - @backstage/errors@1.1.0
+
+## 0.1.5-next.2
+
+### Patch Changes
+
+- a70869e775: Updated dependency `msw` to `^0.43.0`.
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.3.0-next.3
+ - @backstage/backend-common@0.14.1-next.3
+ - @backstage/integration@1.2.2-next.3
+ - @backstage/backend-tasks@0.3.3-next.3
+ - @backstage/catalog-model@1.1.0-next.3
+
+## 0.1.5-next.1
+
+### Patch Changes
+
+- 49ff472c0b: Add the possibility in the `GitlabDiscoveryEntityProvider` to scan the whole project instead of concrete groups. For that, use a configuration like this one, where the group parameter is omitted (not mandatory anymore):
+
+ ```yaml
+ catalog:
+ providers:
+ gitlab:
+ yourProviderId:
+ host: gitlab-host # Identifies one of the hosts set up in the integrations
+ branch: main # Optional. Uses `master` as default
+ entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml`
+ ```
+
+- Updated dependencies
+ - @backstage/catalog-model@1.1.0-next.1
+ - @backstage/backend-common@0.14.1-next.1
+ - @backstage/errors@1.1.0-next.0
+ - @backstage/plugin-catalog-backend@1.2.1-next.1
+ - @backstage/backend-tasks@0.3.3-next.1
+ - @backstage/integration@1.2.2-next.1
+
+## 0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.14.1-next.0
+ - @backstage/catalog-model@1.1.0-next.0
+ - @backstage/integration@1.2.2-next.0
+ - @backstage/backend-tasks@0.3.3-next.0
+ - @backstage/plugin-catalog-backend@1.2.1-next.0
+
+## 0.1.4
+
+### Patch Changes
+
+- eea8126171: Add a new provider `GitlabDiscoveryEntityProvider` as replacement for `GitlabDiscoveryProcessor`
+
+ In order to migrate from the `GitlabDiscoveryProcessor` you need to apply
+ the following changes:
+
+ **Before:**
+
+ ```yaml
+ # app-config.yaml
+
+ catalog:
+ locations:
+ - type: gitlab-discovery
+ target: https://company.gitlab.com/prefix/*/catalog-info.yaml
+ ```
+
+ ```ts
+ /* packages/backend/src/plugins/catalog.ts */
+
+ import { GitlabDiscoveryProcessor } from '@backstage/plugin-catalog-backend-module-gitlab';
+
+ const builder = await CatalogBuilder.create(env);
+ /** ... other processors ... */
+ builder.addProcessor(
+ GitLabDiscoveryProcessor.fromConfig(env.config, { logger: env.logger }),
+ );
+ ```
+
+ **After:**
+
+ ```yaml
+ # app-config.yaml
+
+ catalog:
+ providers:
+ gitlab:
+ yourProviderId: # identifies your dataset / provider independent of config changes
+ host: gitlab-host # Identifies one of the hosts set up in the integrations
+ branch: main # Optional. Uses `master` as default
+ group: example-group # Group and subgroup (if needed) to look for repositories
+ entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml`
+ ```
+
+ ```ts
+ /* packages/backend/src/plugins/catalog.ts */
+
+ import { GitlabDiscoveryEntityProvider } from '@backstage/plugin-catalog-backend-module-gitlab';
+
+ const builder = await CatalogBuilder.create(env);
+ /** ... other processors and/or providers ... */
+ builder.addEntityProvider(
+ ...GitlabDiscoveryEntityProvider.fromConfig(env.config, {
+ logger: env.logger,
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 30 },
+ timeout: { minutes: 3 },
+ }),
+ }),
+ );
+ ```
+
+- bad907d794: The `last_activity_after` timestamp is now being omitted when querying the GitLab API for the first time.
+
+- 3ac4522537: do not create location object if file with component definition do not exists in project, that decrease count of request to gitlab with 404 status code. Now we can create processor with new flag to enable this logic:
+
+ ```ts
+ const processor = GitLabDiscoveryProcessor.fromConfig(config, {
+ logger,
+ skipReposWithoutExactFileMatch: true,
+ });
+ ```
+
+ **WARNING:** This new functionality does not support globs in the repo file path
+
+- 8f7b1835df: Updated dependency `msw` to `^0.41.0`.
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.2.0
+ - @backstage/backend-tasks@0.3.2
+ - @backstage/backend-common@0.14.0
+ - @backstage/integration@1.2.1
+ - @backstage/catalog-model@1.0.3
+
+## 0.1.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.14.0-next.2
+ - @backstage/integration@1.2.1-next.2
+ - @backstage/plugin-catalog-backend@1.2.0-next.2
+
+## 0.1.4-next.1
+
+### Patch Changes
+
+- 8f7b1835df: Updated dependency `msw` to `^0.41.0`.
+- Updated dependencies
+ - @backstage/backend-common@0.13.6-next.1
+ - @backstage/integration@1.2.1-next.1
+ - @backstage/plugin-catalog-backend@1.2.0-next.1
+ - @backstage/catalog-model@1.0.3-next.0
+
+## 0.1.4-next.0
+
+### Patch Changes
+
+- 3ac4522537: do not create location object if file with component definition do not exists in project, that decrease count of request to gitlab with 404 status code. Now we can create processor with new flag to enable this logic:
+
+ ```ts
+ const processor = GitLabDiscoveryProcessor.fromConfig(config, {
+ logger,
+ skipReposWithoutExactFileMatch: true,
+ });
+ ```
+
+ **WARNING:** This new functionality does not support globs in the repo file path
+
+- Updated dependencies
+ - @backstage/backend-common@0.13.6-next.0
+ - @backstage/integration@1.2.1-next.0
+ - @backstage/plugin-catalog-backend@1.2.0-next.0
+
+## 0.1.3
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.13.3
+ - @backstage/plugin-catalog-backend@1.1.2
+ - @backstage/integration@1.2.0
+ - @backstage/config@1.0.1
+ - @backstage/catalog-model@1.0.2
+
+## 0.1.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.13.3-next.2
+ - @backstage/plugin-catalog-backend@1.1.2-next.2
+ - @backstage/config@1.0.1-next.0
+ - @backstage/catalog-model@1.0.2-next.0
+ - @backstage/integration@1.2.0-next.1
+
+## 0.1.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.13.3-next.0
+ - @backstage/integration@1.2.0-next.0
+ - @backstage/plugin-catalog-backend@1.1.2-next.0
+
+## 0.1.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.1.0
+ - @backstage/integration@1.1.0
+ - @backstage/catalog-model@1.0.1
+ - @backstage/backend-common@0.13.2
+
+## 0.1.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.1.0-next.1
+ - @backstage/integration@1.1.0-next.1
+ - @backstage/backend-common@0.13.2-next.1
+
+## 0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.0.1-next.0
+ - @backstage/plugin-catalog-backend@1.0.1-next.0
+ - @backstage/backend-common@0.13.2-next.0
+ - @backstage/integration@1.0.1-next.0
+
+## 0.1.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.0.0
+ - @backstage/backend-common@0.13.1
+ - @backstage/catalog-model@1.0.0
+ - @backstage/integration@1.0.0
+ - @backstage/config@1.0.0
+ - @backstage/errors@1.0.0
+ - @backstage/types@1.0.0
+
+## 0.1.0
+
+### Minor Changes
+
+- 66ba5d9023: Added package, moving out GitLab specific functionality from the catalog-backend
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.13.0
+ - @backstage/plugin-catalog-backend@0.24.0
+ - @backstage/catalog-model@0.13.0
+
+## 0.1.0-next.0
+
+### Minor Changes
+
+- 66ba5d9023: Added package, moving out GitLab specific functionality from the catalog-backend
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.13.0-next.0
+ - @backstage/plugin-catalog-backend@0.24.0-next.0
+ - @backstage/catalog-model@0.13.0-next.0
+
+## @backstage/plugin-signals-backend@0.3.0-next.1
+
+### Minor Changes
+
+- f59ea1d: Removed support for the old backend system. If you were using the old `createRouter` export, please migrate to [the new backend system](https://backstage.io/docs/backend-system/).
+
+## @backstage/create-app@0.5.24-next.1
+
+### Patch Changes
+
+- 828c993: Added `-j 2` to `dev` script to help cases where the backend does not start up during local development
+
+## @backstage/dev-utils@1.1.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/integration-react@1.2.2
+
+## @backstage/plugin-api-docs@0.12.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/plugin-catalog@1.26.1-next.0
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-catalog@1.26.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/integration-react@1.2.2
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.6-next.1
+
+### Patch Changes
+
+- 29a4aa8: fix(config): add missing parameters in config schema
+
+## @backstage/plugin-catalog-graph@0.4.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-catalog-import@0.12.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/integration-react@1.2.2
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-catalog-react@1.15.1-next.0
+
+### Patch Changes
+
+- cbfc0a4: Fixed an issue where the `` in `offset` mode would unnecessarily re-fetch data when the filter didn't change, causing a flicker effect.
+- Updated dependencies
+ - @backstage/integration-react@1.2.2
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-home@0.8.4-next.1
+
+### Patch Changes
+
+- d8f9079: Updated dependency `@rjsf/utils` to `5.23.2`.
+ Updated dependency `@rjsf/core` to `5.23.2`.
+ Updated dependency `@rjsf/material-ui` to `5.23.2`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.23.2`.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/plugin-home-react@0.1.22-next.0
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-home-react@0.1.22-next.0
+
+### Patch Changes
+
+- d8f9079: Updated dependency `@rjsf/utils` to `5.23.2`.
+ Updated dependency `@rjsf/core` to `5.23.2`.
+ Updated dependency `@rjsf/material-ui` to `5.23.2`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.23.2`.
+
+## @backstage/plugin-kubernetes@0.12.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-kubernetes-cluster@0.0.21-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+
+## @backstage/plugin-org@0.6.35-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-org-react@0.1.34-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+
+## @backstage/plugin-scaffolder@1.27.4-next.1
+
+### Patch Changes
+
+- d8f9079: Updated dependency `@rjsf/utils` to `5.23.2`.
+ Updated dependency `@rjsf/core` to `5.23.2`.
+ Updated dependency `@rjsf/material-ui` to `5.23.2`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.23.2`.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/plugin-scaffolder-react@1.14.3-next.1
+ - @backstage/integration-react@1.2.2
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-scaffolder-backend@1.29.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.5-next.1
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.5-next.1
+
+### Patch Changes
+
+- edaf925: Updates to allow users to subscribe to the newly created repository within GitHub to mimic similar functionality found within the GitHub UI.
+
+## @backstage/plugin-scaffolder-react@1.14.3-next.1
+
+### Patch Changes
+
+- d8f9079: Updated dependency `@rjsf/utils` to `5.23.2`.
+ Updated dependency `@rjsf/core` to `5.23.2`.
+ Updated dependency `@rjsf/material-ui` to `5.23.2`.
+ Updated dependency `@rjsf/validator-ajv8` to `5.23.2`.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+
+## @backstage/plugin-search@1.4.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-techdocs@1.12.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/integration-react@1.2.2
+ - @backstage/core-compat-api@0.3.4
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.44-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/plugin-catalog@1.26.1-next.0
+ - @backstage/plugin-techdocs@1.12.1-next.0
+ - @backstage/integration-react@1.2.2
+
+## @backstage/plugin-techdocs-backend@1.11.5-next.1
+
+### Patch Changes
+
+- 29a4aa8: fix(config): add missing parameters in config schema
+
+## @backstage/plugin-user-settings@0.8.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/core-compat-api@0.3.4
+
+## example-app@0.2.105-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/plugin-home@0.8.4-next.1
+ - @backstage/plugin-scaffolder-react@1.14.3-next.1
+ - @backstage/plugin-scaffolder@1.27.4-next.1
+ - @backstage/plugin-api-docs@0.12.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.0
+ - @backstage/plugin-catalog-graph@0.4.15-next.0
+ - @backstage/plugin-catalog-import@0.12.9-next.0
+ - @backstage/plugin-kubernetes@0.12.3-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.21-next.0
+ - @backstage/plugin-org@0.6.35-next.0
+ - @backstage/plugin-search@1.4.22-next.0
+ - @backstage/plugin-techdocs@1.12.1-next.0
+ - @backstage/plugin-user-settings@0.8.18-next.0
+ - @backstage/cli@0.29.5-next.0
+ - @backstage/integration-react@1.2.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.12
+ - @backstage/plugin-devtools@0.1.22
+ - @backstage/plugin-notifications@0.5.0
+ - @backstage/plugin-signals@0.0.14
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20-next.0
+
+## example-app-next@0.0.19-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/plugin-home@0.8.4-next.1
+ - @backstage/plugin-scaffolder-react@1.14.3-next.1
+ - @backstage/plugin-scaffolder@1.27.4-next.1
+ - @backstage/plugin-api-docs@0.12.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.0
+ - @backstage/plugin-catalog-graph@0.4.15-next.0
+ - @backstage/plugin-catalog-import@0.12.9-next.0
+ - @backstage/plugin-kubernetes@0.12.3-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.21-next.0
+ - @backstage/plugin-org@0.6.35-next.0
+ - @backstage/plugin-search@1.4.22-next.0
+ - @backstage/plugin-techdocs@1.12.1-next.0
+ - @backstage/plugin-user-settings@0.8.18-next.0
+ - @backstage/cli@0.29.5-next.0
+ - @backstage/integration-react@1.2.2
+ - @backstage/plugin-app@0.1.4
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.12
+ - @backstage/plugin-notifications@0.5.0
+ - @backstage/plugin-signals@0.0.14
+ - @backstage/core-compat-api@0.3.4
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20-next.0
+
+## example-backend@0.0.34-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.5-next.1
+ - @backstage/plugin-signals-backend@0.3.0-next.1
+ - @backstage/plugin-techdocs-backend@1.11.5-next.1
+ - @backstage/plugin-scaffolder-backend@1.29.0-next.1
+ - @backstage/plugin-notifications-backend@0.5.1-next.0
+
+## example-backend-legacy@0.2.106-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-signals-backend@0.3.0-next.1
+ - @backstage/plugin-techdocs-backend@1.11.5-next.1
+ - @backstage/plugin-scaffolder-backend@1.29.0-next.1
+
+## e2e-test@0.2.24-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.24-next.1
+
+## @internal/scaffolder@0.0.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.14.3-next.1
+
+## techdocs-cli-embedded-app@0.2.104-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog@1.26.1-next.0
+ - @backstage/plugin-techdocs@1.12.1-next.0
+ - @backstage/cli@0.29.5-next.0
+ - @backstage/integration-react@1.2.2
diff --git a/docs/releases/v1.35.0-next.2-changelog.md b/docs/releases/v1.35.0-next.2-changelog.md
new file mode 100644
index 0000000000..0c9cf4a81f
--- /dev/null
+++ b/docs/releases/v1.35.0-next.2-changelog.md
@@ -0,0 +1,2203 @@
+# Release v1.35.0-next.2
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.35.0-next.2](https://backstage.github.io/upgrade-helper/?to=1.35.0-next.2)
+
+## @backstage/app-defaults@1.5.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/theme@0.6.3
+
+## @backstage/backend-app-api@1.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/cli-common@0.1.15
+
+## @backstage/backend-defaults@0.7.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-app-api@1.1.1-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/cli-node@0.2.12-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/integration-aws-node@0.1.15-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.15
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/backend-dynamic-feature-service@0.5.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-app-api@1.1.1-next.1
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/cli-node@0.2.12-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-backend@1.30.0-next.1
+ - @backstage/plugin-events-backend@0.4.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+ - @backstage/plugin-app-node@0.1.29-next.1
+ - @backstage/cli-common@0.1.15
+
+## @backstage/backend-openapi-utils@0.4.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/backend-plugin-api@1.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/cli-common@0.1.15
+
+## @backstage/backend-test-utils@1.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-app-api@1.1.1-next.1
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/catalog-client@1.9.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/catalog-model@1.7.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/cli@0.29.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/cli-node@0.2.12-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/release-manifests@0.0.12
+ - @backstage/cli-common@0.1.15
+ - @backstage/eslint-plugin@0.1.10
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/cli-node@0.2.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/cli-common@0.1.15
+
+## @backstage/config@1.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/config-loader@1.9.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/cli-common@0.1.15
+
+## @backstage/core-app-api@1.15.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/core-compat-api@0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/core-components@0.16.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/theme@0.6.3
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/core-plugin-api@1.10.3-next.0
+
+### Patch Changes
+
+- b40eb41: Move `Expand` and `ExpandRecursive` to `@backstage/types`
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/create-app@0.5.24-next.2
+
+### Patch Changes
+
+- Bumped create-app version.
+- Updated dependencies
+ - @backstage/cli-common@0.1.15
+
+## @backstage/dev-utils@1.1.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/app-defaults@1.5.16-next.0
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/theme@0.6.3
+
+## @backstage/errors@1.2.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+
+## @backstage/frontend-app-api@0.10.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/frontend-defaults@0.1.5-next.0
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/frontend-defaults@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/frontend-app-api@0.10.4-next.0
+ - @backstage/plugin-app@0.1.5-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/frontend-plugin-api@0.9.4-next.0
+
+### Patch Changes
+
+- b40eb41: Move `Expand` and `ExpandRecursive` to `@backstage/types`
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/frontend-test-utils@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/frontend-app-api@0.10.4-next.0
+ - @backstage/plugin-app@0.1.5-next.0
+ - @backstage/test-utils@1.7.4-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/integration@1.16.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/integration-aws-node@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/integration-react@1.2.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/repo-tools@0.12.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/cli-node@0.2.12-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/cli-common@0.1.15
+
+## @techdocs/cli@1.8.25-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-techdocs-node@1.12.16-next.1
+ - @backstage/cli-common@0.1.15
+
+## @backstage/test-utils@1.7.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/theme@0.6.3
+
+## @backstage/types@1.2.1-next.0
+
+### Patch Changes
+
+- b40eb41: Move `Expand` and `ExpandRecursive` to `@backstage/types`
+
+## @backstage/plugin-api-docs@0.12.3-next.1
+
+### Patch Changes
+
+- dcf6e72: Fix typo in default path of api docs definition route
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.1
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+
+## @backstage/plugin-app@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/theme@0.6.3
+
+## @backstage/plugin-app-backend@0.4.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-app-node@0.1.29-next.1
+
+## @backstage/plugin-app-node@0.1.29-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config-loader@1.9.5-next.1
+
+## @backstage/plugin-app-visualizer@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-components@0.16.3-next.0
+
+## @backstage/plugin-auth-backend@0.24.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.4-next.1
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.4-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.4-next.1
+ - @backstage/plugin-auth-backend-module-auth0-provider@0.1.4-next.1
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.4-next.1
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.4-next.1
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.4-next.1
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.4-next.1
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.2-next.1
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.4-next.1
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.4-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-auth0-provider@0.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-backend@0.24.2-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-google-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.3.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-backend@0.24.2-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.1.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @backstage/plugin-auth-node@0.5.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/catalog-client@1.9.1-next.0
+
+## @backstage/plugin-auth-react@0.1.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.27-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog@1.26.1-next.1
+
+### Patch Changes
+
+- 208e53b: Fixing spelling mistake in translation
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/plugin-search-react@1.8.5-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-common@1.5.9-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+
+## @backstage/plugin-catalog-backend@1.30.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-openapi-utils@0.4.1-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.3.0-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-kubernetes-common@0.9.2-next.0
+ - @backstage/integration-aws-node@0.1.15-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog-backend-module-azure@0.3.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-openapi-utils@0.4.1-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.3.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog-backend-module-gcp@0.3.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-kubernetes-common@0.9.2-next.0
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog-backend-module-github@0.7.9-next.1
+
+### Patch Changes
+
+- 4ab00e4: Fixes an issue in `GithubMultiOrgEntityProvider` that caused an error when processing teams without a parent.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-catalog-backend@1.30.0-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog-backend-module-github-org@0.3.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend-module-github@0.7.9-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.6.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-catalog-backend-module-gitlab@0.6.2-next.1
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-backend@1.30.0-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+
+## @backstage/plugin-catalog-backend-module-ldap@0.11.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+
+## @backstage/plugin-catalog-backend-module-logs@0.1.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-catalog-backend@1.30.0-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.6-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+
+## @backstage/plugin-catalog-backend-module-openapi@0.2.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.2.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-scaffolder-common@1.5.9-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.5.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.7-next.0
+
+## @backstage/plugin-catalog-common@1.1.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+
+## @backstage/plugin-catalog-graph@0.4.15-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/catalog-client@1.9.1-next.0
+
+## @backstage/plugin-catalog-import@0.12.9-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-catalog-node@1.15.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+
+## @backstage/plugin-catalog-react@1.15.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/frontend-test-utils@0.2.5-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/plugin-catalog-unprocessed-entities@0.2.13-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/plugin-catalog-unprocessed-entities-common@0.0.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.4-next.0
+
+## @backstage/plugin-config-schema@0.1.64-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/plugin-devtools@0.1.23-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-devtools-common@0.1.15-next.0
+
+## @backstage/plugin-devtools-backend@0.5.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-devtools-common@0.1.15-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/cli-common@0.1.15
+
+## @backstage/plugin-devtools-common@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+
+## @backstage/plugin-events-backend@0.4.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-openapi-utils@0.4.1-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.4.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-events-backend-module-azure@0.2.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-events-backend-module-github@0.2.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-events-backend-test-utils@0.1.40-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-events-node@0.4.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/plugin-home@0.8.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-home-react@0.1.22-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/theme@0.6.3
+
+## @backstage/plugin-home-react@0.1.22-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-components@0.16.3-next.0
+
+## @backstage/plugin-kubernetes@0.12.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-kubernetes-react@0.5.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-kubernetes-common@0.9.2-next.0
+
+## @backstage/plugin-kubernetes-backend@0.19.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-kubernetes-common@0.9.2-next.0
+ - @backstage/plugin-kubernetes-node@0.2.2-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/integration-aws-node@0.1.15-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+
+## @backstage/plugin-kubernetes-cluster@0.0.21-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-kubernetes-react@0.5.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-kubernetes-common@0.9.2-next.0
+
+## @backstage/plugin-kubernetes-common@0.9.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+
+## @backstage/plugin-kubernetes-node@0.2.2-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-kubernetes-common@0.9.2-next.0
+
+## @backstage/plugin-kubernetes-react@0.5.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-kubernetes-common@0.9.2-next.0
+
+## @backstage/plugin-notifications@0.5.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-signals-react@0.0.9-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-notifications-common@0.0.8-next.0
+
+## @backstage/plugin-notifications-backend@0.5.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-signals-node@0.1.16-next.1
+ - @backstage/plugin-notifications-node@0.2.11-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-notifications-common@0.0.8-next.0
+
+## @backstage/plugin-notifications-backend-module-email@0.3.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/integration-aws-node@0.1.15-next.0
+ - @backstage/plugin-notifications-node@0.2.11-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-notifications-common@0.0.8-next.0
+
+## @backstage/plugin-notifications-common@0.0.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.3.2-next.0
+
+## @backstage/plugin-notifications-node@0.2.11-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-signals-node@0.1.16-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-notifications-common@0.0.8-next.0
+
+## @backstage/plugin-org@0.6.35-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+
+## @backstage/plugin-org-react@0.1.34-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/catalog-client@1.9.1-next.0
+
+## @backstage/plugin-permission-backend@0.5.53-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+
+## @backstage/plugin-permission-common@0.8.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+
+## @backstage/plugin-permission-node@0.8.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+
+## @backstage/plugin-permission-react@0.4.30-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+
+## @backstage/plugin-proxy-backend@0.5.10-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+
+## @backstage/plugin-scaffolder@1.27.4-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.14.3-next.2
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-common@1.5.9-next.0
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend@1.29.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-scaffolder-common@1.5.9-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1-next.1
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4-next.1
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.5-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.6-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.5-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.5-next.1
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.5-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.5-next.1
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.5-next.2
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/integration@1.16.1-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27-next.0
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.5-next.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.5-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27-next.0
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.1.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/plugin-notifications-node@0.2.11-next.1
+ - @backstage/plugin-notifications-common@0.0.8-next.0
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.5.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.2.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.6-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.18-next.1
+
+## @backstage/plugin-scaffolder-common@1.5.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+
+## @backstage/plugin-scaffolder-node@0.6.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-scaffolder-common@1.5.9-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-test-utils@1.2.1-next.1
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+
+## @backstage/plugin-scaffolder-react@1.14.3-next.2
+
+### Patch Changes
+
+- 91bb99a: Fix field extension validation not working when field is in dependencies in an array field
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-scaffolder-common@1.5.9-next.0
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/theme@0.6.3
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/plugin-search@1.4.22-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/plugin-search-react@1.8.5-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/plugin-search-backend@1.8.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-openapi-utils@0.4.1-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+
+## @backstage/plugin-search-backend-module-catalog@0.3.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.6.4-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/integration-aws-node@0.1.15-next.0
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+
+## @backstage/plugin-search-backend-module-explore@0.2.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+
+## @backstage/plugin-search-backend-module-pg@0.5.40-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+
+## @backstage/plugin-search-backend-module-techdocs@0.3.5-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+ - @backstage/plugin-techdocs-node@1.12.16-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+
+## @backstage/plugin-search-backend-node@1.3.7-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+
+## @backstage/plugin-search-common@1.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/plugin-permission-common@0.8.4-next.0
+
+## @backstage/plugin-search-react@1.8.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/theme@0.6.3
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/plugin-signals@0.0.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-signals-react@0.0.9-next.0
+ - @backstage/theme@0.6.3
+
+## @backstage/plugin-signals-backend@0.3.0-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-signals-node@0.1.16-next.1
+
+## @backstage/plugin-signals-node@0.1.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+
+## @backstage/plugin-signals-react@0.0.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+
+## @backstage/plugin-techdocs@1.12.1-next.1
+
+### Patch Changes
+
+- 3710b35: Allow passing down `withSearch` prop to `EntityTechdocsContent` component since it was `true` by default, now user can use the `EntityTechdocsContent` component _without_ showing the search field on top of the content.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/plugin-search-react@1.8.5-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-auth-react@0.1.11-next.0
+ - @backstage/plugin-techdocs-react@1.2.13-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/integration@1.16.1-next.0
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.44-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.12.1-next.1
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.1
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/plugin-search-react@1.8.5-next.0
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/test-utils@1.7.4-next.0
+ - @backstage/plugin-techdocs-react@1.2.13-next.0
+
+## @backstage/plugin-techdocs-backend@1.11.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5-next.1
+ - @backstage/plugin-techdocs-node@1.12.16-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/integration@1.16.1-next.0
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.20-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-techdocs-react@1.2.13-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## @backstage/plugin-techdocs-node@1.12.16-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/integration-aws-node@0.1.15-next.0
+ - @backstage/integration@1.16.1-next.0
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-techdocs-react@1.2.13-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/plugin-user-settings@0.8.18-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-signals-react@0.0.9-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.29-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-signals-node@0.1.16-next.1
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.105-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.12.1-next.1
+ - @backstage/plugin-scaffolder-react@1.14.3-next.2
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.1
+ - @backstage/plugin-api-docs@0.12.3-next.1
+ - @backstage/plugin-scaffolder@1.27.4-next.2
+ - @backstage/frontend-app-api@0.10.4-next.0
+ - @backstage/plugin-catalog-graph@0.4.15-next.1
+ - @backstage/plugin-catalog-import@0.12.9-next.1
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/plugin-devtools@0.1.23-next.0
+ - @backstage/plugin-home@0.8.4-next.2
+ - @backstage/plugin-kubernetes@0.12.3-next.1
+ - @backstage/plugin-org@0.6.35-next.1
+ - @backstage/plugin-search@1.4.22-next.1
+ - @backstage/plugin-search-react@1.8.5-next.0
+ - @backstage/plugin-user-settings@0.8.18-next.1
+ - @backstage/app-defaults@1.5.16-next.0
+ - @backstage/cli@0.29.5-next.1
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-auth-react@0.1.11-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.21-next.1
+ - @backstage/plugin-notifications@0.5.1-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/plugin-signals@0.0.15-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20-next.1
+ - @backstage/plugin-techdocs-react@1.2.13-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/theme@0.6.3
+
+## example-app-next@0.0.19-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.12.1-next.1
+ - @backstage/plugin-scaffolder-react@1.14.3-next.2
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.1
+ - @backstage/plugin-api-docs@0.12.3-next.1
+ - @backstage/plugin-scaffolder@1.27.4-next.2
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/frontend-app-api@0.10.4-next.0
+ - @backstage/frontend-defaults@0.1.5-next.0
+ - @backstage/plugin-app@0.1.5-next.0
+ - @backstage/plugin-app-visualizer@0.1.15-next.0
+ - @backstage/plugin-catalog-graph@0.4.15-next.1
+ - @backstage/plugin-catalog-import@0.12.9-next.1
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/plugin-home@0.8.4-next.2
+ - @backstage/plugin-kubernetes@0.12.3-next.1
+ - @backstage/plugin-org@0.6.35-next.1
+ - @backstage/plugin-search@1.4.22-next.1
+ - @backstage/plugin-search-react@1.8.5-next.0
+ - @backstage/plugin-user-settings@0.8.18-next.1
+ - @backstage/app-defaults@1.5.16-next.0
+ - @backstage/cli@0.29.5-next.1
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-auth-react@0.1.11-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.21-next.1
+ - @backstage/plugin-notifications@0.5.1-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/plugin-signals@0.0.15-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20-next.1
+ - @backstage/plugin-techdocs-react@1.2.13-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/theme@0.6.3
+
+## app-next-example-plugin@0.0.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+
+## example-backend@0.0.34-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-app-backend@0.4.4-next.1
+ - @backstage/plugin-auth-backend@0.24.2-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-backend@1.30.0-next.1
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.6-next.1
+ - @backstage/plugin-devtools-backend@0.5.1-next.1
+ - @backstage/plugin-events-backend@0.4.1-next.1
+ - @backstage/plugin-kubernetes-backend@0.19.2-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-proxy-backend@0.5.10-next.1
+ - @backstage/plugin-scaffolder-backend@1.29.0-next.2
+ - @backstage/plugin-search-backend@1.8.1-next.1
+ - @backstage/plugin-signals-backend@0.3.0-next.2
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.4-next.1
+ - @backstage/plugin-notifications-backend@0.5.1-next.1
+ - @backstage/plugin-permission-backend@0.5.53-next.1
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+ - @backstage/plugin-techdocs-backend@1.11.5-next.2
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.4-next.1
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.4-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4-next.1
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4-next.1
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.4-next.1
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.5-next.2
+ - @backstage/plugin-scaffolder-backend-module-notifications@0.1.6-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.3.0-next.1
+ - @backstage/plugin-search-backend-module-explore@0.2.7-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5-next.1
+
+## example-backend-legacy@0.2.106-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-app-backend@0.4.4-next.1
+ - @backstage/plugin-auth-backend@0.24.2-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-backend@1.30.0-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-backend@0.4.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-kubernetes-backend@0.19.2-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-proxy-backend@0.5.10-next.1
+ - @backstage/plugin-scaffolder-backend@1.29.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.5-next.1
+ - @backstage/plugin-search-backend@1.8.1-next.1
+ - @backstage/plugin-signals-backend@0.3.0-next.2
+ - @backstage/plugin-signals-node@0.1.16-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1-next.1
+ - @backstage/plugin-permission-backend@0.5.53-next.1
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+ - @backstage/plugin-techdocs-backend@1.11.5-next.2
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4-next.1
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4-next.1
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.5-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.3.0-next.1
+ - @backstage/plugin-search-backend-module-elasticsearch@1.6.4-next.1
+ - @backstage/plugin-search-backend-module-explore@0.2.7-next.1
+ - @backstage/plugin-search-backend-module-pg@0.5.40-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## e2e-test@0.2.24-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.24-next.2
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/cli-common@0.1.15
+
+## @internal/frontend@0.0.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/types@1.2.1-next.0
+ - @backstage/version-bridge@1.0.10
+
+## @internal/scaffolder@0.0.5-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.14.3-next.2
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+
+## techdocs-cli-embedded-app@0.2.104-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.12.1-next.1
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.1
+ - @backstage/app-defaults@1.5.16-next.0
+ - @backstage/cli@0.29.5-next.1
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/test-utils@1.7.4-next.0
+ - @backstage/plugin-techdocs-react@1.2.13-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/theme@0.6.3
+
+## @internal/plugin-todo-list@1.0.35-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-components@0.16.3-next.0
+
+## @internal/plugin-todo-list-backend@1.0.35-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+
+## @internal/plugin-todo-list-common@1.0.24-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-common@0.8.4-next.0
diff --git a/docs/releases/v1.35.0.md b/docs/releases/v1.35.0.md
new file mode 100644
index 0000000000..04aba27da2
--- /dev/null
+++ b/docs/releases/v1.35.0.md
@@ -0,0 +1,73 @@
+---
+id: v1.35.0
+title: v1.35.0
+description: Backstage Release v1.35.0
+---
+
+These are the release notes for the v1.35.0 release of [Backstage](https://backstage.io/).
+
+A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for the hard work in getting this release developed and done.
+
+## Highlights
+
+### **BREAKING**: Reduced support for the old backend system
+
+The following packages have dropped support for the old backend system:
+
+- `@backstage/plugin-signals-backend`
+- `@backstage/plugin-search-backend-module-catalog`
+
+See the [migration guide](https://backstage.io/docs/backend-system/building-backends/migrating) for details on how to migrate your backend to use the current backend system.
+
+### GitHub organization ingestion reliability
+
+The GitHub org entity provider will now handle both primary and secondary GitHub rate limits, pausing work when rate limits are encountered. This particularly improves reliability when ingesting large GitHub organizations. Contributed by [@sonikro](https://github.com/sonikro) in [#28085](https://github.com/backstage/backstage/pull/28085)
+
+### Task ID in scaffolder templates
+
+The current task ID is now available in templates via `${{ context.task.id }}`, and in actions `ctx.task.id`. Contributed by [@fabiovincenzi](https://github.com/fabiovincenzi) in [#27592](https://github.com/backstage/backstage/pull/27592)
+
+### Fixed `yarn dev` command when only a single CPU core is reported
+
+Users have been reporting issues with the `yarn dev` command not properly running the `app` and `backend` packages concurrently, instead starting them one after another. This turned out to be an issue on single-core machines where `yarn workspaces foreach` defaults to running one process at a time. This is fixed by adding the `--jobs unlimited` option to the command.
+
+### Removed experimental Vite support
+
+The `EXPERIMENTAL_VITE` flag is no longer supported by the Backstage CLI. If you were using it to improve bundling performance, we recommend switching to `EXPERIMENTAL_RSPACK` instead.
+
+### Proxy endpoint extensions
+
+The proxy plugin now has a new `proxyEndpointsExtensionPoint` that lets you programmatically configure proxy endpoints. Contributed by [@mbenson](https://github.com/mbenson) in [#27257](https://github.com/backstage/backstage/pull/27257)
+
+### Backend config schema workaround
+
+Configuration schema from the `@backstage/backend-common` package will now be ignored if `@backstage/backend-defaults` is present, as it was causing conflicts in the backend configuration schema.
+
+### Plugin backend error middleware
+
+The error handler middleware has been added to the default `HttpRouterService`, this is in addition to the existing error handler middleware for the `RootHttpRouterService`. This change moves error reporting to be done within the context of a plugin, providing additional metadata. If you were using the `MiddlewareFactory` to add your own error handler middleware to the plugin router, this can be removed.
+
+### Improved catalog `/entities` endpoint concurrency
+
+When using the `catalog.disableRelationsCompatibility` flag to enable query streaming mode of the `/entities` endpoint, the endpoint will now fetch the next batch of entities without waiting for the current batch to be written to the response.
+
+## Security Fixes
+
+This release does not contain any security fixes.
+
+## Upgrade path
+
+We recommend that you keep your Backstage project up to date with this latest release. For more guidance on how to upgrade, check out the documentation for [keeping Backstage updated](https://backstage.io/docs/getting-started/keeping-backstage-updated).
+
+## Links and References
+
+Below you can find a list of links and references to help you learn about and start using this new release.
+
+- [Backstage official website](https://backstage.io/), [documentation](https://backstage.io/docs/), and [getting started guide](https://backstage.io/docs/getting-started/)
+- [GitHub repository](https://github.com/backstage/backstage)
+- Backstage's [versioning and support policy](https://backstage.io/docs/overview/versioning-policy)
+- [Community Discord](https://discord.gg/backstage-687207715902193673) for discussions and support
+- [Changelog](https://github.com/backstage/backstage/tree/master/docs/releases/v1.35.0-changelog.md)
+- Backstage [Demos](https://backstage.io/demos), [Blog](https://backstage.io/blog), [Roadmap](https://backstage.io/docs/overview/roadmap) and [Plugins](https://backstage.io/plugins)
+
+Sign up for our [newsletter](https://info.backstage.spotify.com/newsletter_subscribe) if you want to be informed about what is happening in the world of Backstage.
diff --git a/docs/releases/v1.36.0-next.0-changelog.md b/docs/releases/v1.36.0-next.0-changelog.md
new file mode 100644
index 0000000000..007b3b15f5
--- /dev/null
+++ b/docs/releases/v1.36.0-next.0-changelog.md
@@ -0,0 +1,2127 @@
+# Release v1.36.0-next.0
+
+Upgrade Helper: [https://backstage.github.io/upgrade-helper/?to=1.36.0-next.0](https://backstage.github.io/upgrade-helper/?to=1.36.0-next.0)
+
+## @backstage/backend-defaults@0.8.0-next.0
+
+### Minor Changes
+
+- a4aa244: This change introduces the `auditor` service implementation details.
+
+### Patch Changes
+
+- f866b86: Internal refactor to use explicit `require` for lazy-loading dependency.
+- a19cb2b: Added default implementation for the new `PermissionsRegistryService`.
+- Updated dependencies
+ - @backstage/cli-node@0.2.13-next.0
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-app-api@1.1.2-next.0
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/backend-plugin-api@1.2.0-next.0
+
+### Minor Changes
+
+- a4aa244: This change introduces the `auditor` service definition.
+
+### Patch Changes
+
+- 9ddfd94: Added new `PermissionsRegistryService` that is used by plugins to register permissions, resource types, and rules into the permission system. This replaces the existing `createPermissionIntegrationRouter` from `@backstage/plugin-permission-node`.
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/backend-test-utils@1.3.0-next.0
+
+### Minor Changes
+
+- dd05a97: Added mocks for the new `PermissionsRegistryService`.
+- a4aa244: This change introduces mocks for the `auditor` service.
+
+### Patch Changes
+
+- f866b86: Internal refactor to use explicit `require` for lazy-loading dependency.
+- fb051f2: Sync feature installation compatibility logic with `@backstage/backend-app-api`.
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-app-api@1.1.2-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/canon@0.1.0-next.0
+
+### Minor Changes
+
+- 65f4acc: This is the first alpha release for Canon. As part of this release we are introducing 5 layout components and 7 components. All theming is done through CSS variables.
+
+## @backstage/cli@0.30.0-next.0
+
+### Minor Changes
+
+- cb76663: **BREAKING**: Add support for native ESM in Node.js code. This changes the behavior of dynamic import expressions in Node.js code. Typically this can be fixed by replacing `import(...)` with `require(...)`, with an `as typeof import(...)` cast if needed for types. This is because dynamic imports will no longer be transformed to `require(...)` calls, but instead be left as-is. This in turn allows you to load ESM modules from CommonJS code using `import(...)`.
+
+ This change adds support for the following in Node.js packages, across type checking, package builds, runtime transforms and Jest tests:
+
+ - Dynamic imports that load ESM modules from CommonJS code.
+ - Both `.mjs` and `.mts` files as explicit ESM files, as well as `.cjs` and `.cts` as explicit CommonJS files.
+ - Support for the `"type": "module"` field in `package.json` to indicate that the package is an ESM package.
+
+ There are a few caveats to be aware of:
+
+ - To enable support for native ESM in tests, you need to run the tests with the `--experimental-vm-modules` flag enabled, typically via `NODE_OPTIONS='--experimental-vm-modules'`.
+ - Declaring a package as `"type": "module"` in `package.json` is supported, but in tests it will cause all local transitive dependencies to also be treated as ESM, regardless of whether they declare `"type": "module"` or not.
+ - Node.js has an [ESM interoperability layer with CommonJS](https://nodejs.org/docs/latest-v22.x/api/esm.html#interoperability-with-commonjs) that allows for imports from ESM to identify named exports in CommonJS packages. This interoperability layer is **only** enabled when importing packages with a `.cts` or `.cjs` extension. This is because the interoperability layer is not fully compatible with the NPM ecosystem, and would break package if it was enabled for `.js` files.
+ - Dynamic imports of CommonJS packages will vary in shape depending on the runtime, i.e. test vs local development, etc. It is therefore recommended to avoid dynamic imports of CommonJS packages and instead use `require`, or to use the explicit CommonJS extensions as mentioned above. If you do need to dynamically import CommonJS packages, avoid using `default` exports, as the shape of them vary across different environments and you would otherwise need to manually unwrap the import based on the shape of the module object.
+
+### Patch Changes
+
+- f21b125: Ensure that both global-agent and undici agents are enabled when proxying is enabled.
+- Updated dependencies
+ - @backstage/cli-node@0.2.13-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/eslint-plugin@0.1.10
+ - @backstage/integration@1.16.1
+ - @backstage/release-manifests@0.0.12
+ - @backstage/types@1.2.1
+
+## @techdocs/cli@1.9.0-next.0
+
+### Minor Changes
+
+- 8de3d2d: Allow configurable optional retries for publisher AWS S3 operations.
+
+### Patch Changes
+
+- 69f84ac: Internal update to work with dynamic imports.
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-techdocs-node@1.13.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+
+## @backstage/plugin-catalog-backend@1.31.0-next.0
+
+### Minor Changes
+
+- 8805f93: The catalog backend now supports the new `PermissionsRegistryService`, which can be used to add custom permission rules.
+- a4aa244: This change integrates the `auditor` service into the Catalog plugin.
+
+### Patch Changes
+
+- c9139e1: Ignore benign database conflict errors during stitching, now logged with debug level instead.
+- f178b12: Cleanup `refresh_state_references` for entity processors and providers that are no longer in control of a `refresh_state` row for entity
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.3.1-next.0
+ - @backstage/backend-openapi-utils@0.4.2-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-scaffolder-backend@1.30.0-next.0
+
+### Minor Changes
+
+- a4aa244: This change integrates the `auditor` service into the Scaffolder plugin.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-scaffolder-backend-module-azure@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.7-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-gerrit@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitea@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.2-next.0
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-scaffolder-node@0.7.0-next.0
+
+### Minor Changes
+
+- a4aa244: This change introduces an optional `taskId` property to `TaskContext`.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-techdocs-node@1.13.0-next.0
+
+### Minor Changes
+
+- 8de3d2d: Allow configurable optional retries for publisher AWS S3 operations.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/backend-app-api@1.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/backend-dynamic-feature-service@0.5.4-next.0
+
+### Patch Changes
+
+- 96c20cd: Make sure changes are successfully tracked before starting up scanner.
+- Updated dependencies
+ - @backstage/cli-node@0.2.13-next.0
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/backend-app-api@1.1.2-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-app-node@0.1.30-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-backend@0.4.2-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/backend-openapi-utils@0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
+## @backstage/cli-node@0.2.13-next.0
+
+### Patch Changes
+
+- cb76663: Added `type` field to `BackstagePackageJson` type.
+- Updated dependencies
+ - @backstage/cli-common@0.1.15
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
+## @backstage/config-loader@1.9.6-next.0
+
+### Patch Changes
+
+- f866b86: Internal refactor to use explicit `require` for lazy-loading dependency.
+- Updated dependencies
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
+## @backstage/core-compat-api@0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/create-app@0.5.25-next.0
+
+### Patch Changes
+
+- Bumped create-app version.
+- Updated dependencies
+ - @backstage/cli-common@0.1.15
+
+## @backstage/dev-utils@1.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
+## @backstage/frontend-app-api@0.10.5-next.0
+
+### Patch Changes
+
+- 3e21b8d: Added `getNodesByRoutePath` method to the `AppTreeApi`.
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/frontend-defaults@0.1.6-next.0
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/frontend-defaults@0.1.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/frontend-app-api@0.10.5-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-app@0.1.6-next.0
+
+## @backstage/frontend-plugin-api@0.9.5-next.0
+
+### Patch Changes
+
+- 3e21b8d: Added `getNodesByRoutePath` method to the `AppTreeApi`.
+- Updated dependencies
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+
+## @backstage/frontend-test-utils@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/frontend-app-api@0.10.5-next.0
+ - @backstage/config@1.3.2
+ - @backstage/test-utils@1.7.4
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-app@0.1.6-next.0
+
+## @backstage/repo-tools@0.12.2-next.0
+
+### Patch Changes
+
+- 98ddf05: The `api-reports` command is now also able to generate SQL reports, enabled by the `--sql-reports` flag.
+- cb76663: Internal refactor to support native ESM.
+- ecd01a9: Internal refactor of API report generation.
+- Updated dependencies
+ - @backstage/cli-node@0.2.13-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/cli-common@0.1.15
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-api-docs@0.12.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/plugin-app@0.1.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/plugin-app-backend@0.4.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-app-node@0.1.30-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-app-node@0.1.30-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+
+## @backstage/plugin-app-visualizer@0.1.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+
+## @backstage/plugin-auth-backend@0.24.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-backend-module-atlassian-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-auth0-provider@0.1.5-next.0
+ - @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.3-next.0
+ - @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.5-next.0
+ - @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-google-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-microsoft-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-oidc-provider@0.3.5-next.0
+ - @backstage/plugin-auth-backend-module-okta-provider@0.1.5-next.0
+ - @backstage/plugin-auth-backend-module-onelogin-provider@0.2.5-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-atlassian-provider@0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-auth0-provider@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-aws-alb-provider@0.3.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-backend@0.24.3-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-bitbucket-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-github-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-google-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-guest-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-microsoft-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-oidc-provider@0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-backend@0.24.3-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-okta-provider@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-onelogin-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-pinniped-provider@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-backend-module-vmware-cloud-provider@0.4.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## @backstage/plugin-auth-node@0.5.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
+## @backstage/plugin-catalog@1.26.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration-react@1.2.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-scaffolder-common@1.5.9
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-catalog-backend-module-aws@0.4.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-catalog-common@1.1.3
+
+## @backstage/plugin-catalog-backend-module-azure@0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-catalog-common@1.1.3
+
+## @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-openapi-utils@0.4.2-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.4.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-catalog-backend-module-gcp@0.3.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.2.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-catalog-backend-module-github@0.7.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-catalog-backend-module-github-org@0.3.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-backend-module-github@0.7.10-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.6.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-catalog-backend-module-gitlab-org@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-catalog-backend-module-gitlab@0.6.3-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.6.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-catalog-backend-module-ldap@0.11.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+
+## @backstage/plugin-catalog-backend-module-logs@0.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.6.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-common@1.1.3
+
+## @backstage/plugin-catalog-backend-module-openapi@0.2.7-next.0
+
+### Patch Changes
+
+- 7fc6f7c: Fix `resolveUrl` for split openapi definition relative path
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.2.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.5.5-next.0
+
+### Patch Changes
+
+- 4e073c7: Use new `PermissionsRegistryService` instead of the deprecated `catalogPermissionExtensionPoint`.
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-catalog-unprocessed-entities-common@0.0.7
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-catalog-graph@0.4.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
+## @backstage/plugin-catalog-import@0.12.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-react@1.2.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
+## @backstage/plugin-catalog-node@1.15.2-next.0
+
+### Patch Changes
+
+- 4a941e7: Deprecated the alpha `catalogPermissionExtensionPoint` and related types, since the same functionality is now available via the new `PermissionsRegistryService`.
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-catalog-react@1.15.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/frontend-test-utils@0.2.6-next.0
+ - @backstage/integration-react@1.2.3
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/plugin-devtools@0.1.24-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-devtools-common@0.1.15
+ - @backstage/plugin-permission-react@0.4.30
+
+## @backstage/plugin-devtools-backend@0.5.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-devtools-common@0.1.15
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-events-backend@0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-openapi-utils@0.4.2-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.4.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/types@1.2.1
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-events-backend-module-azure@0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-events-backend-module-gerrit@0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-events-backend-module-github@0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-events-backend-module-gitlab@0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-events-backend-test-utils@0.1.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-events-node@0.4.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
+## @backstage/plugin-home@0.8.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-home-react@0.1.22
+
+## @backstage/plugin-kubernetes@0.12.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-kubernetes-react@0.5.4-next.0
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
+## @backstage/plugin-kubernetes-backend@0.19.3-next.0
+
+### Patch Changes
+
+- ac0e1ac: Fixed the lack of `secrets` to fetch from the kubernetes api by adding option to specify additional Objects which are not part of Default Objects
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/plugin-kubernetes-node@0.2.3-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-kubernetes-cluster@0.0.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-kubernetes-react@0.5.4-next.0
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
+## @backstage/plugin-kubernetes-common@0.9.3-next.0
+
+### Patch Changes
+
+- ac0e1ac: Fixed the lack of `secrets` to fetch from the kubernetes api by adding option to specify additional Objects which are not part of Default Objects
+- Updated dependencies
+ - @backstage/catalog-model@1.7.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-kubernetes-node@0.2.3-next.0
+
+### Patch Changes
+
+- ac0e1ac: Fixed the lack of `secrets` to fetch from the kubernetes api by adding option to specify additional Objects which are not part of Default Objects
+- Updated dependencies
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/types@1.2.1
+
+## @backstage/plugin-kubernetes-react@0.5.4-next.0
+
+### Patch Changes
+
+- f35a754: Fixed bug in string-to-integer conversion to properly handle decimal values with BigInt.
+- Updated dependencies
+ - @backstage/plugin-kubernetes-common@0.9.3-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
+## @backstage/plugin-notifications@0.5.2-next.0
+
+### Patch Changes
+
+- 438c36c: added topic filter for notifications
+- Updated dependencies
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/theme@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-signals-react@0.0.9
+
+## @backstage/plugin-notifications-backend@0.5.2-next.0
+
+### Patch Changes
+
+- 438c36c: added topic filter for notifications
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-notifications-node@0.2.12-next.0
+ - @backstage/plugin-signals-node@0.1.17-next.0
+
+## @backstage/plugin-notifications-backend-module-email@0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/types@1.2.1
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-notifications-node@0.2.12-next.0
+
+## @backstage/plugin-notifications-node@0.2.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-signals-node@0.1.17-next.0
+
+## @backstage/plugin-org@0.6.36-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
+## @backstage/plugin-org-react@0.1.35-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+
+## @backstage/plugin-permission-backend@0.5.54-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-permission-node@0.8.8-next.0
+
+### Patch Changes
+
+- 049d5d4: The returned router from `createPermissionIntegrationRouter` is now mutable, allowing for permissions and resources to be added after creation of the router.
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
+## @backstage/plugin-proxy-backend@0.5.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/types@1.2.1
+ - @backstage/plugin-proxy-node@0.1.1-next.0
+
+## @backstage/plugin-proxy-node@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+
+## @backstage/plugin-scaffolder@1.27.5-next.0
+
+### Patch Changes
+
+- 3107f1f: Fixed a bug in the BitbucketRepoBranchPicker component that crashed the scaffolder
+- 3edf7e7: Add schema output return type to the `makeFieldSchema` function return
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.14.4-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-react@1.2.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-scaffolder-backend-module-azure@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket@0.3.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.6-next.0
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-bitbucket-cloud-common@0.2.27
+
+## @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.3.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+
+## @backstage/plugin-scaffolder-backend-module-gcp@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-scaffolder-backend-module-gerrit@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-scaffolder-backend-module-gitea@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-scaffolder-backend-module-github@0.5.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.7.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+
+## @backstage/plugin-scaffolder-backend-module-notifications@0.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/plugin-notifications-common@0.0.8
+ - @backstage/plugin-notifications-node@0.2.12-next.0
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.5.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/types@1.2.1
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.4.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/types@1.2.1
+ - @backstage/plugin-scaffolder-node-test-utils@0.1.19-next.0
+
+## @backstage/plugin-scaffolder-node-test-utils@0.1.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-test-utils@1.3.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/types@1.2.1
+
+## @backstage/plugin-scaffolder-react@1.14.4-next.0
+
+### Patch Changes
+
+- 3edf7e7: Add schema output return type to the `makeFieldSchema` function return
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/theme@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-scaffolder-common@1.5.9
+
+## @backstage/plugin-search@1.4.23-next.0
+
+### Patch Changes
+
+- 63e1012: Added new extension points to extend search filters `SearchFilterBlueprint` and `SearchFilterResultTypeBlueprint`
+- Updated dependencies
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend@1.8.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-openapi-utils@0.4.2-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-catalog@0.3.1-next.0
+
+### Patch Changes
+
+- eee8d76: Modified the logic for generating the location URL by encoding the entity property values with `encodeURIComponent`. This enhancement improves the safety and reliability of the URL.
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.6.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-explore@0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-pg@0.5.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-stack-overflow-collator@0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-module-techdocs@0.3.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/plugin-techdocs-node@1.13.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-backend-node@1.3.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-search-react@1.8.6-next.0
+
+### Patch Changes
+
+- 63e1012: Added new extension points to extend search filters `SearchFilterBlueprint` and `SearchFilterResultTypeBlueprint`
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/theme@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+ - @backstage/plugin-search-common@1.2.17
+
+## @backstage/plugin-signals-backend@0.3.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-signals-node@0.1.17-next.0
+
+## @backstage/plugin-signals-node@0.1.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## @backstage/plugin-techdocs@1.12.2-next.0
+
+### Patch Changes
+
+- f4be934: Changed the base URL in addLinkClickListener from window.location.origin to app.baseUrl for improved path handling. This fixes an issue where Backstage, when running on a subpath, was unable to handle non-Backstage URLs of the same origin correctly.
+
+- 1f40e6b: Add optional props to `TechDocCustomHome` to allow for more flexibility:
+
+ ```tsx
+ import { TechDocsCustomHome } from '@backstage/plugin-techdocs';
+ //...
+
+ const options = { emptyRowsWhenPaging: false };
+ const linkDestination = (entity: Entity): string | undefined => {
+ return entity.metadata.annotations?.['external-docs'];
+ };
+ const techDocsTabsConfig = [
+ {
+ label: 'Recommended Documentation',
+ panels: [
+ {
+ title: 'Golden Path',
+ description: 'Documentation about standards to follow',
+ panelType: 'DocsCardGrid',
+ panelProps: { CustomHeader: () => },
+ filterPredicate: entity =>
+ entity?.metadata?.tags?.includes('golden-path') ?? false,
+ },
+ {
+ title: 'Recommended',
+ description: 'Useful documentation',
+ panelType: 'InfoCardGrid',
+ panelProps: {
+ CustomHeader: () =>
+ linkDestination: linkDestination,
+ },
+ filterPredicate: entity =>
+ entity?.metadata?.tags?.includes('recommended') ?? false,
+ },
+ ],
+ },
+ {
+ label: 'Browse All',
+ panels: [
+ {
+ description: 'Browse all docs',
+ filterPredicate: filterEntity,
+ panelType: 'TechDocsIndexPage',
+ title: 'All',
+ panelProps: { PageWrapper: React.Fragment, CustomHeader: React.Fragment, options: options },
+ },
+ ],
+ },
+ ];
+
+ const AppRoutes = () => {
+
+ ) => ({children})}
+ />
+ }
+ />
+ ;
+ };
+ ```
+
+ Add new Grid option called `InfoCardGrid` which is a more customizable card option for the Docs grid.
+
+ ```tsx
+ entity.metadata['external-docs']}
+ />
+ ```
+
+ Expose existing `CustomDocsPanel` so that it can be used independently if desired.
+
+ ```tsx
+ const panels: PanelConfig[] = [
+ {
+ description: '',
+ filterPredicate: entity => {},
+ panelType: 'InfoCardGrid',
+ title: 'Standards',
+ panelProps: {
+ CustomHeader: () =>
+ linkDestination: linkDestination,
+ },
+ },
+ {
+ description: '',
+ filterPredicate: entity => {},
+ panelType: 'DocsCardGrid',
+ title: 'Contribute',
+ },
+ ];
+ {
+ panels.map((config, index) => (
+
+ ));
+ }
+ ```
+
+- Updated dependencies
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-techdocs-common@0.1.0
+ - @backstage/plugin-techdocs-react@1.2.13
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.45-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/plugin-techdocs@1.12.2-next.0
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/test-utils@1.7.4
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-techdocs-react@1.2.13
+
+## @backstage/plugin-techdocs-backend@1.11.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/plugin-techdocs-node@1.13.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.0
+ - @backstage/plugin-techdocs-common@0.1.0
+
+## @backstage/plugin-user-settings@0.8.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/errors@1.2.7
+ - @backstage/theme@0.6.3
+ - @backstage/types@1.2.1
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-signals-react@0.0.9
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## @backstage/plugin-user-settings-backend@0.2.30-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-signals-node@0.1.17-next.0
+ - @backstage/plugin-user-settings-common@0.0.1
+
+## example-app@0.2.106-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.30.0-next.0
+ - @backstage/plugin-notifications@0.5.2-next.0
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/plugin-search@1.4.23-next.0
+ - @backstage/plugin-techdocs@1.12.2-next.0
+ - @backstage/plugin-scaffolder@1.27.5-next.0
+ - @backstage/plugin-scaffolder-react@1.14.4-next.0
+ - @backstage/frontend-app-api@0.10.5-next.0
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-api-docs@0.12.4-next.0
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-graph@0.4.16-next.0
+ - @backstage/plugin-catalog-import@0.12.10-next.0
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13
+ - @backstage/plugin-devtools@0.1.24-next.0
+ - @backstage/plugin-home@0.8.5-next.0
+ - @backstage/plugin-kubernetes@0.12.4-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.22-next.0
+ - @backstage/plugin-org@0.6.36-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-signals@0.0.15
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20
+ - @backstage/plugin-techdocs-react@1.2.13
+ - @backstage/plugin-user-settings@0.8.19-next.0
+
+## example-app-next@0.0.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.30.0-next.0
+ - @backstage/plugin-notifications@0.5.2-next.0
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/plugin-search@1.4.23-next.0
+ - @backstage/plugin-techdocs@1.12.2-next.0
+ - @backstage/plugin-scaffolder@1.27.5-next.0
+ - @backstage/plugin-scaffolder-react@1.14.4-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/frontend-app-api@0.10.5-next.0
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/frontend-defaults@0.1.6-next.0
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-api-docs@0.12.4-next.0
+ - @backstage/plugin-app@0.1.6-next.0
+ - @backstage/plugin-app-visualizer@0.1.16-next.0
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-graph@0.4.16-next.0
+ - @backstage/plugin-catalog-import@0.12.10-next.0
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13
+ - @backstage/plugin-home@0.8.5-next.0
+ - @backstage/plugin-kubernetes@0.12.4-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.22-next.0
+ - @backstage/plugin-org@0.6.36-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-signals@0.0.15
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20
+ - @backstage/plugin-techdocs-react@1.2.13
+ - @backstage/plugin-user-settings@0.8.19-next.0
+
+## app-next-example-plugin@0.0.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-components@0.16.3
+
+## example-backend@0.0.35-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/plugin-notifications-backend@0.5.2-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/plugin-kubernetes-backend@0.19.3-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.5-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-backend@1.30.0-next.0
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.7-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.3.1-next.0
+ - @backstage/plugin-devtools-backend@0.5.2-next.0
+ - @backstage/plugin-permission-backend@0.5.54-next.0
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.5-next.0
+ - @backstage/plugin-search-backend@1.8.2-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-app-backend@0.4.5-next.0
+ - @backstage/plugin-auth-backend@0.24.3-next.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.5-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.5-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.0
+ - @backstage/plugin-events-backend@0.4.2-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-proxy-backend@0.5.11-next.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-notifications@0.1.7-next.0
+ - @backstage/plugin-search-backend-module-explore@0.2.8-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.0
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-signals-backend@0.3.1-next.0
+ - @backstage/plugin-techdocs-backend@1.11.6-next.0
+
+## example-backend-legacy@0.2.107-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/plugin-kubernetes-backend@0.19.3-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.5-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-backend@1.30.0-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.3.1-next.0
+ - @backstage/plugin-permission-backend@0.5.54-next.0
+ - @backstage/plugin-search-backend@1.8.2-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-app-backend@0.4.5-next.0
+ - @backstage/plugin-auth-backend@0.24.3-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.0
+ - @backstage/plugin-events-backend@0.4.2-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-proxy-backend@0.5.11-next.0
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.2-next.0
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.6-next.0
+ - @backstage/plugin-search-backend-module-elasticsearch@1.6.5-next.0
+ - @backstage/plugin-search-backend-module-explore@0.2.8-next.0
+ - @backstage/plugin-search-backend-module-pg@0.5.41-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.0
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-signals-backend@0.3.1-next.0
+ - @backstage/plugin-signals-node@0.1.17-next.0
+ - @backstage/plugin-techdocs-backend@1.11.6-next.0
+
+## e2e-test@0.2.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.25-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/errors@1.2.7
+
+## @internal/frontend@0.0.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/types@1.2.1
+ - @backstage/version-bridge@1.0.10
+
+## @internal/scaffolder@0.0.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-react@1.14.4-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+
+## techdocs-cli-embedded-app@0.2.105-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.30.0-next.0
+ - @backstage/plugin-techdocs@1.12.2-next.0
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/test-utils@1.7.4
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-techdocs-react@1.2.13
+
+## @internal/plugin-todo-list-backend@1.0.36-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-auth-node@0.5.7-next.0
diff --git a/docs/tooling/cli/02-build-system.md b/docs/tooling/cli/02-build-system.md
index 468e848694..f3b29e979d 100644
--- a/docs/tooling/cli/02-build-system.md
+++ b/docs/tooling/cli/02-build-system.md
@@ -483,29 +483,41 @@ of the build system, including the bundling, tests, builds, and type checking.
Loaders are always selected based on the file extension. The following is a list
of all supported file extensions:
-| Extension | Exports | Purpose |
-| --------- | ------------- | ------------------ |
-| `.ts` | Script Module | TypeScript |
-| `.tsx` | Script Module | TypeScript and XML |
-| `.js` | Script Module | JavaScript |
-| `.jsx` | Script Module | JavaScript and XML |
-| `.mjs` | Script Module | ECMAScript Module |
-| `.cjs` | Script Module | CommonJS Module |
-| `.json` | JSON Data | JSON Data |
-| `.yml` | JSON Data | YAML Data |
-| `.yaml` | JSON Data | YAML Data |
-| `.css` | classes | Style sheet |
-| `.eot` | URL Path | Font |
-| `.ttf` | URL Path | Font |
-| `.woff2` | URL Path | Font |
-| `.woff` | URL Path | Font |
-| `.bmp` | URL Path | Image |
-| `.gif` | URL Path | Image |
-| `.jpeg` | URL Path | Image |
-| `.jpg` | URL Path | Image |
-| `.png` | URL Path | Image |
-| `.svg` | URL Path | Image |
-| `.md` | URL Path | Markdown File |
+| Extension | Exports | Purpose |
+| --------- | ------------- | ---------------------------- |
+| `.ts` | Script Module | TypeScript |
+| `.tsx` | Script Module | TypeScript and XML |
+| `.mts` | Script Module | ECMAScript Module TypeScript |
+| `.cts` | Script Module | CommonJS TypeScript |
+| `.js` | Script Module | JavaScript |
+| `.jsx` | Script Module | JavaScript and XML |
+| `.mjs` | Script Module | ECMAScript Module |
+| `.cjs` | Script Module | CommonJS Module |
+| `.json` | JSON Data | JSON Data |
+| `.yml` | JSON Data | YAML Data |
+| `.yaml` | JSON Data | YAML Data |
+| `.css` | classes | Style sheet |
+| `.eot` | URL Path | Font |
+| `.ttf` | URL Path | Font |
+| `.woff2` | URL Path | Font |
+| `.woff` | URL Path | Font |
+| `.bmp` | URL Path | Image |
+| `.gif` | URL Path | Image |
+| `.jpeg` | URL Path | Image |
+| `.jpg` | URL Path | Image |
+| `.png` | URL Path | Image |
+| `.svg` | URL Path | Image |
+| `.md` | URL Path | Markdown File |
+
+## ECMAScript Modules
+
+The Backstage tooling supports [ECMAScript modules (ESM)](https://nodejs.org/docs/latest-v22.x/api/esm.html) in Node.js packages. This includes support for all the script module file extensions listed above during local development, in built packages, in tests, and during type checking. [Dynamic imports](https://nodejs.org/docs/latest-v22.x/api/esm.html#import-expressions) can be used to load ESM-only packages from CommonJS and vice versa. There are however a couple of limitations to be aware of:
+
+- To enable support for native ESM in tests, you need to run the tests with the `--experimental-vm-modules` flag enabled, typically via `NODE_OPTIONS='--experimental-vm-modules'`.
+- Declaring a package as `"type": "module"` in `package.json` is supported, but in tests it will cause all local transitive dependencies to also be treated as ESM, regardless of whether they declare `"type": "module"` or not.
+- When running tests with coverage enabled the default `babel` coverage provider can mess with the hoisting of named exports. This can be worked around by using the `v8` provider instead by setting `"coverageProvider": "v8"` in the Jest configuration, although note that the `v8` provider is a fair bit slower than the `babel` one.
+- Node.js has an [ESM interoperability layer with CommonJS](https://nodejs.org/docs/latest-v22.x/api/esm.html#interoperability-with-commonjs) that allows for imports from ESM to identify named exports in CommonJS packages. This interoperability layer is **only** enabled when importing packages with a `.cts` or `.cjs` extension. This is because the interoperability layer is not fully compatible with the NPM ecosystem, and would break package if it was enabled for `.js` files.
+- Dynamic imports of CommonJS packages will vary in shape depending on the runtime, i.e. test vs local development, etc. It is therefore recommended to avoid dynamic imports of CommonJS packages and instead use `require`, or to use the explicit CommonJS extensions as mentioned above. If you do need to dynamically import CommonJS packages, avoid using `default` exports, as the shape of them vary across different environments and you would otherwise need to manually unwrap the import based on the shape of the module object.
## Jest Configuration
diff --git a/docs/tooling/local-dev/linking-local-packages.md b/docs/tooling/local-dev/linking-local-packages.md
index 9205195f64..c2bb55722c 100644
--- a/docs/tooling/local-dev/linking-local-packages.md
+++ b/docs/tooling/local-dev/linking-local-packages.md
@@ -48,9 +48,9 @@ If you are encountering errors related to React, it is likely that the versions
## Generating temporary patches
-!!!info
+:::info
This feature is experimental and currently only supports Yarn workspaces.
-!!!
+:::
After making local changes to a package in an external workspace you might often want to merge and deploy these changes in your own project. You can use Yarn patches for this purpose, but it can be quite cumbersome to create these patches manually. To make this process easier, you can use `yarn backstage-repo-tools generate-patch` command from the `@backstage/repo-tools` package to generate a patch and resolution entries in the external workspace.
diff --git a/microsite/data/plugins/crossplane.yaml b/microsite/data/plugins/crossplane.yaml
new file mode 100644
index 0000000000..0fe66ae43c
--- /dev/null
+++ b/microsite/data/plugins/crossplane.yaml
@@ -0,0 +1,9 @@
+title: Crossplane
+author: terasky.com
+authorUrl: https://github.com/terasky-oss
+category: Kubernetes
+description: View Crossplane Resources in Backstage.
+documentation: https://github.com/TeraSky-OSS/backstage-plugins/tree/main/plugins/crossplane-resources
+iconUrl: https://github.com/cncf/artwork/blob/main/projects/crossplane/icon/color/crossplane-icon-color.png?raw=true
+npmPackageName: '@terasky/backstage-plugin-crossplane-resources-frontend'
+addedDate: '2024-12-30'
diff --git a/microsite/data/plugins/cyclops-modules.yaml b/microsite/data/plugins/cyclops-modules.yaml
new file mode 100644
index 0000000000..f2c083295e
--- /dev/null
+++ b/microsite/data/plugins/cyclops-modules.yaml
@@ -0,0 +1,14 @@
+---
+title: Cyclops Modules
+author: Cyclops UI
+authorUrl: https://cyclops-ui.com/
+category: App Delivery
+description: Manage Cyclops Modules through Backstage catalog
+documentation: https://github.com/cyclops-ui/backstage-plugins#readme
+iconUrl: /img/cyclops.svg
+npmPackageName: '@cyclopsui/backstage-plugin-cyclops-modules'
+tags:
+ - Kubernetes
+ - Productivity
+ - Delivery
+addedDate: '2024-01-02'
diff --git a/microsite/data/plugins/devpod.yaml b/microsite/data/plugins/devpod.yaml
new file mode 100644
index 0000000000..44f3d54eb5
--- /dev/null
+++ b/microsite/data/plugins/devpod.yaml
@@ -0,0 +1,9 @@
+title: DevPod
+author: terasky.com
+authorUrl: https://github.com/terasky-oss
+category: Development
+description: Automatically launch fully-contained dev environments with DevPod, directly from Backstage!
+documentation: https://github.com/TeraSky-OSS/backstage-plugins/tree/main/plugins/devpod-plugin
+iconUrl: https://raw.githubusercontent.com/loft-sh/devpod/refs/heads/main/docs/static/media/devpod-logo.png
+npmPackageName: '@terasky/backstage-plugin-devpod'
+addedDate: '2024-12-30'
diff --git a/microsite/data/plugins/digital.ai-deploy.yaml b/microsite/data/plugins/digital.ai-deploy.yaml
index 6077f59fa7..a36dd08ffb 100644
--- a/microsite/data/plugins/digital.ai-deploy.yaml
+++ b/microsite/data/plugins/digital.ai-deploy.yaml
@@ -4,7 +4,7 @@ author: digital.ai
authorUrl: https://digital.ai/
category: CI/CD
description: The plugin offers integration with Digital.ai Deploy and backstage components and services. It provide access to deployments and reports.
-documentation: https://docs.digital.ai/bundle/devops-deploy-version-v.24.1/page/deploy/concept/xl-deploy-backstage-overview.html
+documentation: https://docs.digital.ai/deploy/docs/concept/xl-deploy-backstage-overview
iconUrl: /img/digital.ai-deploy.svg
npmPackageName: '@digital.ai/plugin-dai-deploy'
tags:
diff --git a/microsite/data/plugins/digital.ai-release.yaml b/microsite/data/plugins/digital.ai-release.yaml
index 288a95a123..4407b26ac7 100644
--- a/microsite/data/plugins/digital.ai-release.yaml
+++ b/microsite/data/plugins/digital.ai-release.yaml
@@ -4,7 +4,7 @@ author: digital.ai
authorUrl: https://digital.ai/
category: CI/CD
description: The plugin offers integration with Digital.ai Release and backstage. It provide access to active releases, templates and manage workflow executions.
-documentation: https://docs.digital.ai/bundle/devops-release-version-v.24.1/page/release/concept/release-backstage-overview.html
+documentation: https://docs.digital.ai/release/docs/concept/release-backstage-overview
iconUrl: /img/digital.ai-release.svg
npmPackageName: '@digital-ai/plugin-dai-release'
tags:
diff --git a/microsite/data/plugins/glean.yaml b/microsite/data/plugins/glean.yaml
new file mode 100644
index 0000000000..057ec2f4fd
--- /dev/null
+++ b/microsite/data/plugins/glean.yaml
@@ -0,0 +1,10 @@
+---
+title: Glean
+author: Mark Shields
+authorUrl: https://github.com/beejiujitsu
+category: Search
+description: Index Backstage TechDocs-enabled Entities into Glean, the AI-powered work assistant
+documentation: https://github.com/beejiujitsu/wealthsimple-backstage-plugins/tree/master/plugins/glean-backend
+iconUrl: /img/glean-logo-circular-white.png
+npmPackageName: '@beejiujitsu/backstage-plugin-glean-backend'
+addedDate: '2024-12-30'
diff --git a/microsite/data/plugins/jaegertracing.yaml b/microsite/data/plugins/jaegertracing.yaml
new file mode 100644
index 0000000000..dc93193ddb
--- /dev/null
+++ b/microsite/data/plugins/jaegertracing.yaml
@@ -0,0 +1,14 @@
+---
+title: Jaeger Tracing
+author: Deepankumar
+authorUrl: https://github.com/deepan10
+category: Observability
+description: View Jaeger traces and trace details in Backstage components.
+documentation: https://github.com/backstage/community-plugins/blob/main/workspaces/jaeger/plugins/jaeger/README.md
+iconUrl: https://avatars.githubusercontent.com/u/28545596?s=200&v=4
+npmPackageName: '@backstage-community/plugin-jaeger'
+tags:
+ - monitoring
+ - tracing
+ - observability
+addedDate: '2024-12-21'
diff --git a/microsite/data/plugins/knative-event-mesh.yaml b/microsite/data/plugins/knative-event-mesh.yaml
new file mode 100644
index 0000000000..6ecb219b32
--- /dev/null
+++ b/microsite/data/plugins/knative-event-mesh.yaml
@@ -0,0 +1,10 @@
+---
+title: Knative Event Mesh
+author: Knative Community
+authorUrl: https://github.com/knative-extensions/backstage-plugins
+category: Monitoring
+description: A plugin that provides a way to view and manage Knative Event Mesh resources.
+documentation: https://knative.dev/docs/install/installing-backstage-plugins/
+npmPackageName: '@knative-extensions/plugin-knative-event-mesh-backend'
+iconUrl: https://raw.githubusercontent.com/knative/community/refs/heads/main/icons/logo.svg
+addedDate: '2024-12-16'
diff --git a/microsite/data/plugins/kubernetes-ingestor.yaml b/microsite/data/plugins/kubernetes-ingestor.yaml
new file mode 100644
index 0000000000..006333e990
--- /dev/null
+++ b/microsite/data/plugins/kubernetes-ingestor.yaml
@@ -0,0 +1,9 @@
+title: Kubernetes Ingestor
+author: terasky.com
+authorUrl: https://github.com/terasky-oss
+category: Kubernetes
+description: Automatically Ingest Kubernetes Workloads and Crossplane Claims as Components, and XRDs as Templates.
+documentation: https://github.com/TeraSky-OSS/backstage-plugins/tree/main/plugins/kubernetes-ingestor
+iconUrl: https://avatars.githubusercontent.com/u/13629408
+npmPackageName: '@terasky/backstage-plugin-kubernetes-ingestor'
+addedDate: '2024-12-30'
diff --git a/microsite/data/plugins/kyverno.yaml b/microsite/data/plugins/kyverno.yaml
new file mode 100644
index 0000000000..63554d02fe
--- /dev/null
+++ b/microsite/data/plugins/kyverno.yaml
@@ -0,0 +1,9 @@
+title: Kyverno Policy Reports
+author: terasky.com
+authorUrl: https://github.com/terasky-oss
+category: Kubernetes
+description: View Kyverno Policy reports for Kubernetes resources related to components in Backstage.
+documentation: https://github.com/TeraSky-OSS/backstage-plugins/tree/main/plugins/kyverno-policy-reports
+iconUrl: https://github.com/cncf/artwork/blob/main/projects/kyverno/icon/color/kyverno-icon-color.png?raw=true
+npmPackageName: '@terasky/backstage-plugin-kyverno-policy-reports'
+addedDate: '2025-01-05'
diff --git a/microsite/data/plugins/wiz.yaml b/microsite/data/plugins/wiz.yaml
new file mode 100644
index 0000000000..1496231dfa
--- /dev/null
+++ b/microsite/data/plugins/wiz.yaml
@@ -0,0 +1,10 @@
+---
+title: Wiz
+author: roadie.io
+authorUrl: https://github.com/RoadieHQ
+category: Monitoring
+description: View Wiz issues status in Backstage.
+documentation: https://roadie.io/backstage/plugins/wiz/
+iconUrl: https://roadie.io/images/wiz-logo.png
+npmPackageName: '@roadiehq/backstage-plugin-wiz'
+addedDate: '2024-10-14'
diff --git a/microsite/src/pages/community/index.tsx b/microsite/src/pages/community/index.tsx
index c9367f4662..171a5efcdf 100644
--- a/microsite/src/pages/community/index.tsx
+++ b/microsite/src/pages/community/index.tsx
@@ -106,6 +106,11 @@ const Community = () => {
url: 'https://www.alauda.io/community/169249',
logo: 'img/partner-logo-alauda.png',
},
+ {
+ name: 'Liatrio',
+ url: 'https://www.liatrio.com/service-offerings/backstage',
+ logo: 'img/partner-logo-liatrio.png',
+ },
];
//#endregion
diff --git a/microsite/static/img/cyclops.svg b/microsite/static/img/cyclops.svg
new file mode 100644
index 0000000000..fbc297443c
--- /dev/null
+++ b/microsite/static/img/cyclops.svg
@@ -0,0 +1,51 @@
+
+
diff --git a/microsite/static/img/glean-logo-circular-white.png b/microsite/static/img/glean-logo-circular-white.png
new file mode 100644
index 0000000000..bc83f0a6d8
Binary files /dev/null and b/microsite/static/img/glean-logo-circular-white.png differ
diff --git a/microsite/static/img/partner-logo-alauda.png b/microsite/static/img/partner-logo-alauda.png
index 09392a2582..b43719deb9 100644
Binary files a/microsite/static/img/partner-logo-alauda.png and b/microsite/static/img/partner-logo-alauda.png differ
diff --git a/microsite/static/img/partner-logo-liatrio.png b/microsite/static/img/partner-logo-liatrio.png
new file mode 100644
index 0000000000..bd6238cf8c
Binary files /dev/null and b/microsite/static/img/partner-logo-liatrio.png differ
diff --git a/microsite/yarn.lock b/microsite/yarn.lock
index c6543f53dd..ef2b96b95d 100644
--- a/microsite/yarn.lock
+++ b/microsite/yarn.lock
@@ -2840,90 +2840,90 @@ __metadata:
languageName: node
linkType: hard
-"@swc/core-darwin-arm64@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-darwin-arm64@npm:1.9.3"
+"@swc/core-darwin-arm64@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-darwin-arm64@npm:1.10.6"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@swc/core-darwin-x64@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-darwin-x64@npm:1.9.3"
+"@swc/core-darwin-x64@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-darwin-x64@npm:1.10.6"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@swc/core-linux-arm-gnueabihf@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-linux-arm-gnueabihf@npm:1.9.3"
+"@swc/core-linux-arm-gnueabihf@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-linux-arm-gnueabihf@npm:1.10.6"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
-"@swc/core-linux-arm64-gnu@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-linux-arm64-gnu@npm:1.9.3"
+"@swc/core-linux-arm64-gnu@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-linux-arm64-gnu@npm:1.10.6"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
-"@swc/core-linux-arm64-musl@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-linux-arm64-musl@npm:1.9.3"
+"@swc/core-linux-arm64-musl@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-linux-arm64-musl@npm:1.10.6"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
-"@swc/core-linux-x64-gnu@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-linux-x64-gnu@npm:1.9.3"
+"@swc/core-linux-x64-gnu@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-linux-x64-gnu@npm:1.10.6"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
-"@swc/core-linux-x64-musl@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-linux-x64-musl@npm:1.9.3"
+"@swc/core-linux-x64-musl@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-linux-x64-musl@npm:1.10.6"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
-"@swc/core-win32-arm64-msvc@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-win32-arm64-msvc@npm:1.9.3"
+"@swc/core-win32-arm64-msvc@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-win32-arm64-msvc@npm:1.10.6"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@swc/core-win32-ia32-msvc@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-win32-ia32-msvc@npm:1.9.3"
+"@swc/core-win32-ia32-msvc@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-win32-ia32-msvc@npm:1.10.6"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@swc/core-win32-x64-msvc@npm:1.9.3":
- version: 1.9.3
- resolution: "@swc/core-win32-x64-msvc@npm:1.9.3"
+"@swc/core-win32-x64-msvc@npm:1.10.6":
+ version: 1.10.6
+ resolution: "@swc/core-win32-x64-msvc@npm:1.10.6"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.3.46":
- version: 1.9.3
- resolution: "@swc/core@npm:1.9.3"
+ version: 1.10.6
+ resolution: "@swc/core@npm:1.10.6"
dependencies:
- "@swc/core-darwin-arm64": 1.9.3
- "@swc/core-darwin-x64": 1.9.3
- "@swc/core-linux-arm-gnueabihf": 1.9.3
- "@swc/core-linux-arm64-gnu": 1.9.3
- "@swc/core-linux-arm64-musl": 1.9.3
- "@swc/core-linux-x64-gnu": 1.9.3
- "@swc/core-linux-x64-musl": 1.9.3
- "@swc/core-win32-arm64-msvc": 1.9.3
- "@swc/core-win32-ia32-msvc": 1.9.3
- "@swc/core-win32-x64-msvc": 1.9.3
+ "@swc/core-darwin-arm64": 1.10.6
+ "@swc/core-darwin-x64": 1.10.6
+ "@swc/core-linux-arm-gnueabihf": 1.10.6
+ "@swc/core-linux-arm64-gnu": 1.10.6
+ "@swc/core-linux-arm64-musl": 1.10.6
+ "@swc/core-linux-x64-gnu": 1.10.6
+ "@swc/core-linux-x64-musl": 1.10.6
+ "@swc/core-win32-arm64-msvc": 1.10.6
+ "@swc/core-win32-ia32-msvc": 1.10.6
+ "@swc/core-win32-x64-msvc": 1.10.6
"@swc/counter": ^0.1.3
"@swc/types": ^0.1.17
peerDependencies:
@@ -2952,7 +2952,7 @@ __metadata:
peerDependenciesMeta:
"@swc/helpers":
optional: true
- checksum: 4d83aee0b4d9c543f247d680796e5b9cb69997369dcd81642c2603e185312dfb1674328a7ceb1d352c21275155a71789f76dafe8853055d076b6241d5760bbed
+ checksum: 574595e21c0b23904a8813b8c698aa32a66f47faa8c0e3b52c1cd2e2f764eb7cbc587d253a16070db18c518b55d9f88146ecf9a1b3e308471a8e2290078bc7e9
languageName: node
linkType: hard
diff --git a/package.json b/package.json
index b090ec9edb..11b419d3fb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "root",
- "version": "1.35.0-next.0",
+ "version": "1.36.0-next.0",
"private": true,
"repository": {
"type": "git",
@@ -17,14 +17,14 @@
"build:all": "backstage-cli repo build --all",
"build:api-docs": "LANG=en_EN yarn build:api-reports --docs --exclude 'plugins/@(adr|adr-backend|adr-common|airbrake|airbrake-backend|allure|analytics-module-ga|analytics-module-ga4|analytics-module-newrelic-browser|apache-airflow|api-docs|api-docs-module-protoc-gen-doc|apollo-explorer|app-visualizer|azure-devops|azure-devops-backend|azure-devops-common|azure-sites|azure-sites-backend|azure-sites-common|badges|badges-backend|bazaar|bazaar-backend|bitbucket-cloud-common|bitrise|catalog-graph|catalog-graphql|catalog-import|catalog-unprocessed-entities|cicd-statistics|cicd-statistics-module-gitlab|circleci|cloudbuild|code-climate|code-coverage|code-coverage-backend|codescene|config-schema|cost-insights|cost-insights-common|dynatrace|entity-feedback|entity-feedback-backend|entity-feedback-common|entity-validation|example-todo-list|example-todo-list-backend|example-todo-list-common|firehydrant|fossa|gcalendar|gcp-projects|git-release-manager|github-actions|github-deployments|github-issues|github-pull-requests-board|gitops-profiles|gocd|graphiql|graphql-backend|graphql-voyager|ilert|jenkins|jenkins-backend|jenkins-common|kafka|kafka-backend|lighthouse|lighthouse-backend|lighthouse-common|linguist|linguist-backend|linguist-common|microsoft-calendar|newrelic|newrelic-dashboard|nomad|nomad-backend|octopus-deploy|opencost|pagerduty|periskop|periskop-backend|playlist|playlist-backend|playlist-common|proxy-backend|puppetdb|rollbar|rollbar-backend|sentry|shortcuts|splunk-on-call|stack-overflow|stack-overflow-backend|stackstorm|tech-radar|tech-radar-2|todo|todo-backend|xcmetrics)'",
"build:api-reports": "yarn build:api-reports:only --tsc",
- "build:api-reports:only": "NODE_OPTIONS=--max-old-space-size=8192 backstage-repo-tools api-reports --allow-warnings 'packages/backend-app-api,packages/core-components,plugins/+(catalog|catalog-import|git-release-manager|jenkins|kubernetes)' -o ae-undocumented,ae-wrong-input-file-type --validate-release-tags",
+ "build:api-reports:only": "NODE_OPTIONS=--max-old-space-size=8192 backstage-repo-tools api-reports --sql-reports --allow-warnings 'packages/backend-app-api,packages/core-components,plugins/+(catalog|catalog-import|git-release-manager|jenkins|kubernetes)' -o ae-undocumented,ae-wrong-input-file-type --validate-release-tags",
"build:backend": "yarn workspace example-backend build",
"build:knip-reports": "backstage-repo-tools knip-reports",
"build:plugins-report": "node ./scripts/build-plugins-report",
"clean": "backstage-cli repo clean",
"create-plugin": "echo \"use 'yarn new' instead\"",
- "dev": "yarn workspaces foreach -A --include example-backend --include example-app --parallel -v -i run start",
- "dev:next": "yarn workspaces foreach -A --include example-backend --include example-app-next --parallel -v -i run start",
+ "dev": "yarn workspaces foreach -A --include example-backend --include example-app --parallel --jobs unlimited -v -i run start",
+ "dev:next": "yarn workspaces foreach -A --include example-backend --include example-app-next --parallel --jobs unlimited -v -i run start",
"docker-build": "yarn tsc && yarn workspace example-backend build && yarn workspace example-backend build-image",
"fix": "backstage-cli repo fix --publish",
"postinstall": "husky || true",
@@ -41,16 +41,16 @@
"snyk:test": "npx snyk test --yarn-workspaces --strict-out-of-sync=false",
"snyk:test:package": "yarn snyk:test --include",
"start": "yarn workspace example-app start",
- "start-backend": "yarn workspace example-backend start",
- "start-backend:legacy": "yarn workspace example-backend-legacy start",
- "start:lighthouse": "yarn workspaces foreach -A --include example-backend --include example-app --parallel -v -i run start",
+ "start:lighthouse": "yarn workspaces foreach -A --include example-backend --include example-app --parallel --jobs unlimited -v -i run start",
"start:microsite": "cd microsite/ && yarn start",
"start:next": "yarn workspace example-app-next start",
+ "start-backend": "yarn workspace example-backend start",
+ "start-backend:legacy": "yarn workspace example-backend-legacy start",
"storybook": "yarn ./storybook run storybook",
"techdocs-cli": "node scripts/techdocs-cli.js",
"techdocs-cli:dev": "cross-env TECHDOCS_CLI_DEV_MODE=true node scripts/techdocs-cli.js",
- "test": "NODE_OPTIONS=--no-node-snapshot backstage-cli repo test",
- "test:all": "NODE_OPTIONS=--no-node-snapshot backstage-cli repo test --coverage",
+ "test": "NODE_OPTIONS='--no-node-snapshot --experimental-vm-modules' backstage-cli repo test",
+ "test:all": "NODE_OPTIONS='--no-node-snapshot --experimental-vm-modules' backstage-cli repo test --coverage",
"test:e2e": "NODE_OPTIONS=--no-node-snapshot playwright test",
"tsc": "tsc",
"tsc:full": "backstage-cli repo clean && tsc --skipLibCheck false --incremental false"
@@ -84,6 +84,9 @@
]
},
"prettier": "@backstage/cli/config/prettier",
+ "jest": {
+ "rejectFrontendNetworkRequests": true
+ },
"resolutions": {
"@changesets/assemble-release-plan@^6.0.0": "patch:@changesets/assemble-release-plan@npm%3A6.0.0#./.yarn/patches/@changesets-assemble-release-plan-npm-6.0.0-f7b3005037.patch",
"@material-ui/pickers@^3.2.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch",
@@ -134,9 +137,6 @@
"sort-package-json": "^2.8.0",
"typescript": "~5.2.0"
},
- "jest": {
- "rejectFrontendNetworkRequests": true
- },
"packageManager": "yarn@3.8.1",
"engines": {
"node": "20 || 22"
diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md
index 91b769a9d8..716240f4d6 100644
--- a/packages/app-defaults/CHANGELOG.md
+++ b/packages/app-defaults/CHANGELOG.md
@@ -1,5 +1,27 @@
# @backstage/app-defaults
+## 1.5.16
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/core-app-api@1.15.4
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-permission-react@0.4.30
+
+## 1.5.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/theme@0.6.3
+
## 1.5.15
### Patch Changes
diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json
index ab4bb267c3..ea4735eda0 100644
--- a/packages/app-defaults/package.json
+++ b/packages/app-defaults/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/app-defaults",
- "version": "1.5.15",
+ "version": "1.5.16",
"description": "Provides the default wiring of a Backstage App",
"backstage": {
"role": "web-library"
diff --git a/packages/app-next-example-plugin/CHANGELOG.md b/packages/app-next-example-plugin/CHANGELOG.md
index 45368a7c8c..0bb209a797 100644
--- a/packages/app-next-example-plugin/CHANGELOG.md
+++ b/packages/app-next-example-plugin/CHANGELOG.md
@@ -1,5 +1,29 @@
# app-next-example-plugin
+## 0.0.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/core-components@0.16.3
+
+## 0.0.19
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-components@0.16.3
+
+## 0.0.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+
## 0.0.18
### Patch Changes
diff --git a/packages/app-next-example-plugin/package.json b/packages/app-next-example-plugin/package.json
index a1c4a67bf6..19c2d1afcf 100644
--- a/packages/app-next-example-plugin/package.json
+++ b/packages/app-next-example-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "app-next-example-plugin",
- "version": "0.0.18",
+ "version": "0.0.20-next.0",
"description": "Backstage internal example plugin",
"backstage": {
"role": "frontend-plugin",
diff --git a/packages/app-next/CHANGELOG.md b/packages/app-next/CHANGELOG.md
index a13a77c313..147ec312ed 100644
--- a/packages/app-next/CHANGELOG.md
+++ b/packages/app-next/CHANGELOG.md
@@ -1,5 +1,168 @@
# example-app-next
+## 0.0.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.30.0-next.0
+ - @backstage/plugin-notifications@0.5.2-next.0
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/plugin-search@1.4.23-next.0
+ - @backstage/plugin-techdocs@1.12.2-next.0
+ - @backstage/plugin-scaffolder@1.27.5-next.0
+ - @backstage/plugin-scaffolder-react@1.14.4-next.0
+ - @backstage/frontend-plugin-api@0.9.5-next.0
+ - @backstage/frontend-app-api@0.10.5-next.0
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.6-next.0
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/frontend-defaults@0.1.6-next.0
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-api-docs@0.12.4-next.0
+ - @backstage/plugin-app@0.1.6-next.0
+ - @backstage/plugin-app-visualizer@0.1.16-next.0
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-graph@0.4.16-next.0
+ - @backstage/plugin-catalog-import@0.12.10-next.0
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13
+ - @backstage/plugin-home@0.8.5-next.0
+ - @backstage/plugin-kubernetes@0.12.4-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.22-next.0
+ - @backstage/plugin-org@0.6.36-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-signals@0.0.15
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20
+ - @backstage/plugin-techdocs-react@1.2.13
+ - @backstage/plugin-user-settings@0.8.19-next.0
+
+## 0.0.19
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-home@0.8.4
+ - @backstage/cli@0.29.5
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/plugin-techdocs@1.12.1
+ - @backstage/plugin-scaffolder-react@1.14.3
+ - @backstage/frontend-plugin-api@0.9.4
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/plugin-catalog@1.26.1
+ - @backstage/plugin-scaffolder@1.27.4
+ - @backstage/plugin-api-docs@0.12.3
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-compat-api@0.3.5
+ - @backstage/frontend-app-api@0.10.4
+ - @backstage/frontend-defaults@0.1.5
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-app@0.1.5
+ - @backstage/plugin-app-visualizer@0.1.15
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-graph@0.4.15
+ - @backstage/plugin-catalog-import@0.12.9
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13
+ - @backstage/plugin-kubernetes@0.12.3
+ - @backstage/plugin-kubernetes-cluster@0.0.21
+ - @backstage/plugin-notifications@0.5.1
+ - @backstage/plugin-org@0.6.35
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-search@1.4.22
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-search-react@1.8.5
+ - @backstage/plugin-signals@0.0.15
+ - @backstage/plugin-techdocs-react@1.2.13
+ - @backstage/plugin-user-settings@0.8.18
+
+## 0.0.19-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.12.1-next.1
+ - @backstage/plugin-scaffolder-react@1.14.3-next.2
+ - @backstage/frontend-plugin-api@0.9.4-next.0
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.1
+ - @backstage/plugin-api-docs@0.12.3-next.1
+ - @backstage/plugin-scaffolder@1.27.4-next.2
+ - @backstage/core-compat-api@0.3.5-next.0
+ - @backstage/frontend-app-api@0.10.4-next.0
+ - @backstage/frontend-defaults@0.1.5-next.0
+ - @backstage/plugin-app@0.1.5-next.0
+ - @backstage/plugin-app-visualizer@0.1.15-next.0
+ - @backstage/plugin-catalog-graph@0.4.15-next.1
+ - @backstage/plugin-catalog-import@0.12.9-next.1
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/plugin-home@0.8.4-next.2
+ - @backstage/plugin-kubernetes@0.12.3-next.1
+ - @backstage/plugin-org@0.6.35-next.1
+ - @backstage/plugin-search@1.4.22-next.1
+ - @backstage/plugin-search-react@1.8.5-next.0
+ - @backstage/plugin-user-settings@0.8.18-next.1
+ - @backstage/app-defaults@1.5.16-next.0
+ - @backstage/cli@0.29.5-next.1
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-auth-react@0.1.11-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.21-next.1
+ - @backstage/plugin-notifications@0.5.1-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/plugin-signals@0.0.15-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20-next.1
+ - @backstage/plugin-techdocs-react@1.2.13-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/theme@0.6.3
+
+## 0.0.19-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/plugin-home@0.8.4-next.1
+ - @backstage/plugin-scaffolder-react@1.14.3-next.1
+ - @backstage/plugin-scaffolder@1.27.4-next.1
+ - @backstage/plugin-api-docs@0.12.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.0
+ - @backstage/plugin-catalog-graph@0.4.15-next.0
+ - @backstage/plugin-catalog-import@0.12.9-next.0
+ - @backstage/plugin-kubernetes@0.12.3-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.21-next.0
+ - @backstage/plugin-org@0.6.35-next.0
+ - @backstage/plugin-search@1.4.22-next.0
+ - @backstage/plugin-techdocs@1.12.1-next.0
+ - @backstage/plugin-user-settings@0.8.18-next.0
+ - @backstage/cli@0.29.5-next.0
+ - @backstage/integration-react@1.2.2
+ - @backstage/plugin-app@0.1.4
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.12
+ - @backstage/plugin-notifications@0.5.0
+ - @backstage/plugin-signals@0.0.14
+ - @backstage/core-compat-api@0.3.4
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20-next.0
+
## 0.0.19-next.0
### Patch Changes
diff --git a/packages/app-next/package.json b/packages/app-next/package.json
index 69ef444f77..2710335f4c 100644
--- a/packages/app-next/package.json
+++ b/packages/app-next/package.json
@@ -1,6 +1,6 @@
{
"name": "example-app-next",
- "version": "0.0.19-next.0",
+ "version": "0.0.20-next.0",
"backstage": {
"role": "frontend"
},
diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md
index e81455bdb1..b4730f5142 100644
--- a/packages/app/CHANGELOG.md
+++ b/packages/app/CHANGELOG.md
@@ -1,5 +1,155 @@
# example-app
+## 0.2.106-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli@0.30.0-next.0
+ - @backstage/plugin-notifications@0.5.2-next.0
+ - @backstage/plugin-search-react@1.8.6-next.0
+ - @backstage/plugin-search@1.4.23-next.0
+ - @backstage/plugin-techdocs@1.12.2-next.0
+ - @backstage/plugin-scaffolder@1.27.5-next.0
+ - @backstage/plugin-scaffolder-react@1.14.4-next.0
+ - @backstage/frontend-app-api@0.10.5-next.0
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/core-components@0.16.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-api-docs@0.12.4-next.0
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog@1.26.2-next.0
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-graph@0.4.16-next.0
+ - @backstage/plugin-catalog-import@0.12.10-next.0
+ - @backstage/plugin-catalog-react@1.15.2-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13
+ - @backstage/plugin-devtools@0.1.24-next.0
+ - @backstage/plugin-home@0.8.5-next.0
+ - @backstage/plugin-kubernetes@0.12.4-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.22-next.0
+ - @backstage/plugin-org@0.6.36-next.0
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-signals@0.0.15
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20
+ - @backstage/plugin-techdocs-react@1.2.13
+ - @backstage/plugin-user-settings@0.8.19-next.0
+
+## 0.2.105
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-home@0.8.4
+ - @backstage/cli@0.29.5
+ - @backstage/plugin-catalog-react@1.15.1
+ - @backstage/plugin-techdocs@1.12.1
+ - @backstage/plugin-scaffolder-react@1.14.3
+ - @backstage/core-plugin-api@1.10.3
+ - @backstage/core-components@0.16.3
+ - @backstage/plugin-catalog@1.26.1
+ - @backstage/plugin-scaffolder@1.27.4
+ - @backstage/plugin-api-docs@0.12.3
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20
+ - @backstage/app-defaults@1.5.16
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/core-app-api@1.15.4
+ - @backstage/frontend-app-api@0.10.4
+ - @backstage/integration-react@1.2.3
+ - @backstage/theme@0.6.3
+ - @backstage/plugin-auth-react@0.1.11
+ - @backstage/plugin-catalog-common@1.1.3
+ - @backstage/plugin-catalog-graph@0.4.15
+ - @backstage/plugin-catalog-import@0.12.9
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13
+ - @backstage/plugin-devtools@0.1.23
+ - @backstage/plugin-kubernetes@0.12.3
+ - @backstage/plugin-kubernetes-cluster@0.0.21
+ - @backstage/plugin-notifications@0.5.1
+ - @backstage/plugin-org@0.6.35
+ - @backstage/plugin-permission-react@0.4.30
+ - @backstage/plugin-search@1.4.22
+ - @backstage/plugin-search-common@1.2.17
+ - @backstage/plugin-search-react@1.8.5
+ - @backstage/plugin-signals@0.0.15
+ - @backstage/plugin-techdocs-react@1.2.13
+ - @backstage/plugin-user-settings@0.8.18
+
+## 0.2.105-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-techdocs@1.12.1-next.1
+ - @backstage/plugin-scaffolder-react@1.14.3-next.2
+ - @backstage/core-plugin-api@1.10.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.1
+ - @backstage/plugin-api-docs@0.12.3-next.1
+ - @backstage/plugin-scaffolder@1.27.4-next.2
+ - @backstage/frontend-app-api@0.10.4-next.0
+ - @backstage/plugin-catalog-graph@0.4.15-next.1
+ - @backstage/plugin-catalog-import@0.12.9-next.1
+ - @backstage/plugin-catalog-react@1.15.1-next.1
+ - @backstage/plugin-devtools@0.1.23-next.0
+ - @backstage/plugin-home@0.8.4-next.2
+ - @backstage/plugin-kubernetes@0.12.3-next.1
+ - @backstage/plugin-org@0.6.35-next.1
+ - @backstage/plugin-search@1.4.22-next.1
+ - @backstage/plugin-search-react@1.8.5-next.0
+ - @backstage/plugin-user-settings@0.8.18-next.1
+ - @backstage/app-defaults@1.5.16-next.0
+ - @backstage/cli@0.29.5-next.1
+ - @backstage/core-app-api@1.15.4-next.0
+ - @backstage/core-components@0.16.3-next.0
+ - @backstage/integration-react@1.2.3-next.0
+ - @backstage/plugin-auth-react@0.1.11-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.13-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.21-next.1
+ - @backstage/plugin-notifications@0.5.1-next.0
+ - @backstage/plugin-permission-react@0.4.30-next.0
+ - @backstage/plugin-signals@0.0.15-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20-next.1
+ - @backstage/plugin-techdocs-react@1.2.13-next.0
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-catalog-common@1.1.3-next.0
+ - @backstage/theme@0.6.3
+
+## 0.2.105-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.15.1-next.0
+ - @backstage/plugin-home@0.8.4-next.1
+ - @backstage/plugin-scaffolder-react@1.14.3-next.1
+ - @backstage/plugin-scaffolder@1.27.4-next.1
+ - @backstage/plugin-api-docs@0.12.3-next.0
+ - @backstage/plugin-catalog@1.26.1-next.0
+ - @backstage/plugin-catalog-graph@0.4.15-next.0
+ - @backstage/plugin-catalog-import@0.12.9-next.0
+ - @backstage/plugin-kubernetes@0.12.3-next.0
+ - @backstage/plugin-kubernetes-cluster@0.0.21-next.0
+ - @backstage/plugin-org@0.6.35-next.0
+ - @backstage/plugin-search@1.4.22-next.0
+ - @backstage/plugin-techdocs@1.12.1-next.0
+ - @backstage/plugin-user-settings@0.8.18-next.0
+ - @backstage/cli@0.29.5-next.0
+ - @backstage/integration-react@1.2.2
+ - @backstage/plugin-catalog-unprocessed-entities@0.2.12
+ - @backstage/plugin-devtools@0.1.22
+ - @backstage/plugin-notifications@0.5.0
+ - @backstage/plugin-signals@0.0.14
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.20-next.0
+
## 0.2.105-next.0
### Patch Changes
diff --git a/packages/app/package.json b/packages/app/package.json
index 7953584527..e3cb08924f 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "example-app",
- "version": "0.2.105-next.0",
+ "version": "0.2.106-next.0",
"backstage": {
"role": "frontend"
},
@@ -73,18 +73,13 @@
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.61",
- "@modyfi/vite-plugin-yaml": "^1.1.0",
"@octokit/rest": "^19.0.3",
- "@vitejs/plugin-react": "^4.3.1",
"history": "^5.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router": "^6.3.0",
"react-router-dom": "^6.3.0",
"react-use": "^17.2.4",
- "vite": "^5.0.0",
- "vite-plugin-html": "^3.2.2",
- "vite-plugin-node-polyfills": "^0.22.0",
"zen-observable": "^0.10.0"
},
"devDependencies": {
diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md
index 332ec8de62..ee77fb93cd 100644
--- a/packages/backend-app-api/CHANGELOG.md
+++ b/packages/backend-app-api/CHANGELOG.md
@@ -1,5 +1,48 @@
# @backstage/backend-app-api
+## 1.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+
+## 1.1.1
+
+### Patch Changes
+
+- 02534c7: Corrected spelling mistake in error message
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/config-loader@1.9.5
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+
+## 1.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/cli-common@0.1.15
+
## 1.1.1-next.0
### Patch Changes
diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json
index 0adc549ca1..e2c3cd3cbb 100644
--- a/packages/backend-app-api/package.json
+++ b/packages/backend-app-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-app-api",
- "version": "1.1.1-next.0",
+ "version": "1.1.2-next.0",
"description": "Core API used by Backstage backend apps",
"backstage": {
"role": "node-library"
diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.ts b/packages/backend-app-api/src/wiring/BackendInitializer.ts
index aa48c26877..6bec5439ec 100644
--- a/packages/backend-app-api/src/wiring/BackendInitializer.ts
+++ b/packages/backend-app-api/src/wiring/BackendInitializer.ts
@@ -34,7 +34,7 @@ import type {
} from '../../../backend-plugin-api/src/wiring/types';
// eslint-disable-next-line @backstage/no-relative-monorepo-imports
import type { InternalServiceFactory } from '../../../backend-plugin-api/src/services/system/types';
-import { ForwardedError, ConflictError } from '@backstage/errors';
+import { ForwardedError, ConflictError, assertError } from '@backstage/errors';
import {
instanceMetadataServiceRef,
featureDiscoveryServiceRef,
@@ -405,8 +405,9 @@ export class BackendInitializer {
// Once the plugin and all modules have been initialized, we can signal that the plugin has stared up successfully
const lifecycleService = await this.#getPluginLifecycleImpl(pluginId);
await lifecycleService.startup();
- } catch (error) {
- initLogger.onPluginFailed(pluginId);
+ } catch (error: unknown) {
+ assertError(error);
+ initLogger.onPluginFailed(pluginId, error);
throw error;
}
}),
diff --git a/packages/backend-app-api/src/wiring/createInitializationLogger.ts b/packages/backend-app-api/src/wiring/createInitializationLogger.ts
index 2a472dec5b..e623d43074 100644
--- a/packages/backend-app-api/src/wiring/createInitializationLogger.ts
+++ b/packages/backend-app-api/src/wiring/createInitializationLogger.ts
@@ -27,7 +27,7 @@ export function createInitializationLogger(
rootLogger?: RootLoggerService,
): {
onPluginStarted(pluginId: string): void;
- onPluginFailed(pluginId: string): void;
+ onPluginFailed(pluginId: string, error: Error): void;
onAllStarted(): void;
} {
const logger = rootLogger?.child({ type: 'initialization' });
@@ -68,14 +68,15 @@ export function createInitializationLogger(
starting.delete(pluginId);
started.add(pluginId);
},
- onPluginFailed(pluginId: string) {
+ onPluginFailed(pluginId: string, error: Error) {
starting.delete(pluginId);
const status =
starting.size > 0
? `, waiting for ${starting.size} other plugins to finish before shutting down the process`
: '';
logger?.error(
- `Plugin '${pluginId}' threw an error during startup${status}`,
+ `Plugin '${pluginId}' threw an error during startup${status}.`,
+ error,
);
},
onAllStarted() {
diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md
index 45da7f089e..9f2dcb4914 100644
--- a/packages/backend-defaults/CHANGELOG.md
+++ b/packages/backend-defaults/CHANGELOG.md
@@ -1,5 +1,82 @@
# @backstage/backend-defaults
+## 0.8.0-next.0
+
+### Minor Changes
+
+- a4aa244: This change introduces the `auditor` service implementation details.
+
+### Patch Changes
+
+- f866b86: Internal refactor to use explicit `require` for lazy-loading dependency.
+- a19cb2b: Added default implementation for the new `PermissionsRegistryService`.
+- Updated dependencies
+ - @backstage/cli-node@0.2.13-next.0
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-app-api@1.1.2-next.0
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration@1.16.1
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## 0.7.0
+
+### Minor Changes
+
+- ec547b8: Ensure that an error handler middleware exists at the end of each plugin `httpRouter` handler chain. This makes it so that exceptions thrown by plugin routes are caught and encoded in the standard error format.
+
+ If you were using the standard `MiddlewareFactory` just to put an `error` middleware in you router, you can now remove that at your earliest convenience since it's redundant. If you have custom error handlers in your plugin router, those will continue to function as previously. If you were relying on thrown errors propagating all the way down to the root HTTP router, you will find that they no longer do that, and may want to hoist your error handling up to the plugin level instead.
+
+### Patch Changes
+
+- 575613f: Go back to using `node-fetch` for gitlab
+- d2b16db: The `GerritUrlReader` can now read content from a commit and not only from the top of a branch. The
+ Gitiles URL must contain the full commit `SHA` hash like: `https://gerrit.com/gitiles/repo/+/2846e8dc327ae2f60249983b1c3b96f42f205bae/catalog-info.yaml`.
+- 8ecf8cb: Exclude `@backstage/backend-common` from schema collection if `@backstage/backend-defaults` is present
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- Updated dependencies
+ - @backstage/backend-app-api@1.1.1
+ - @backstage/types@1.2.1
+ - @backstage/config-loader@1.9.5
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/integration@1.16.1
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/cli-node@0.2.12
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/integration-aws-node@0.1.15
+ - @backstage/plugin-events-node@0.4.7
+
+## 0.7.0-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-app-api@1.1.1-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/cli-node@0.2.12-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/integration-aws-node@0.1.15-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/backend-dev-utils@0.1.5
+ - @backstage/cli-common@0.1.15
+ - @backstage/integration@1.16.1-next.0
+
## 0.7.0-next.0
### Minor Changes
diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json
index fac386d302..e66d7a06f1 100644
--- a/packages/backend-defaults/package.json
+++ b/packages/backend-defaults/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-defaults",
- "version": "0.7.0-next.0",
+ "version": "0.8.0-next.0",
"description": "Backend defaults used by Backstage backend apps",
"backstage": {
"role": "node-library"
@@ -20,6 +20,7 @@
"license": "Apache-2.0",
"exports": {
".": "./src/index.ts",
+ "./auditor": "./src/entrypoints/auditor/index.ts",
"./auth": "./src/entrypoints/auth/index.ts",
"./cache": "./src/entrypoints/cache/index.ts",
"./database": "./src/entrypoints/database/index.ts",
@@ -28,6 +29,7 @@
"./httpRouter": "./src/entrypoints/httpRouter/index.ts",
"./lifecycle": "./src/entrypoints/lifecycle/index.ts",
"./logger": "./src/entrypoints/logger/index.ts",
+ "./permissionsRegistry": "./src/entrypoints/permissionsRegistry/index.ts",
"./permissions": "./src/entrypoints/permissions/index.ts",
"./rootConfig": "./src/entrypoints/rootConfig/index.ts",
"./rootHealth": "./src/entrypoints/rootHealth/index.ts",
@@ -43,6 +45,9 @@
"types": "src/index.ts",
"typesVersions": {
"*": {
+ "auditor": [
+ "src/entrypoints/auditor/index.ts"
+ ],
"auth": [
"src/entrypoints/auth/index.ts"
],
@@ -67,6 +72,9 @@
"logger": [
"src/entrypoints/logger/index.ts"
],
+ "permissionsRegistry": [
+ "src/entrypoints/permissionsRegistry/index.ts"
+ ],
"permissions": [
"src/entrypoints/permissions/index.ts"
],
@@ -185,14 +193,6 @@
"yn": "^4.0.0",
"zod": "^3.22.4"
},
- "peerDependencies": {
- "@google-cloud/cloud-sql-connector": "^1.4.0"
- },
- "peerDependenciesMeta": {
- "@google-cloud/cloud-sql-connector": {
- "optional": true
- }
- },
"devDependencies": {
"@aws-sdk/util-stream-node": "^3.350.0",
"@backstage/backend-plugin-api": "workspace:^",
@@ -214,5 +214,13 @@
"supertest": "^7.0.0",
"wait-for-expect": "^3.0.2"
},
+ "peerDependencies": {
+ "@google-cloud/cloud-sql-connector": "^1.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@google-cloud/cloud-sql-connector": {
+ "optional": true
+ }
+ },
"configSchema": "config.d.ts"
}
diff --git a/packages/backend-defaults/report-auditor.api.md b/packages/backend-defaults/report-auditor.api.md
new file mode 100644
index 0000000000..353b6f241f
--- /dev/null
+++ b/packages/backend-defaults/report-auditor.api.md
@@ -0,0 +1,111 @@
+## API Report File for "@backstage/backend-defaults"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+import { AuditorService } from '@backstage/backend-plugin-api';
+import type { AuditorServiceCreateEventOptions } from '@backstage/backend-plugin-api';
+import type { AuditorServiceEvent } from '@backstage/backend-plugin-api';
+import type { AuditorServiceEventSeverityLevel } from '@backstage/backend-plugin-api';
+import type { AuthService } from '@backstage/backend-plugin-api';
+import type { Format } from 'logform';
+import type { HttpAuthService } from '@backstage/backend-plugin-api';
+import type { JsonObject } from '@backstage/types';
+import type { PluginMetadataService } from '@backstage/backend-plugin-api';
+import type { Request as Request_2 } from 'express';
+import { ServiceFactory } from '@backstage/backend-plugin-api';
+import * as winston from 'winston';
+
+// @public
+export type AuditorEvent = {
+ plugin: string;
+ eventId: string;
+ severityLevel: AuditorServiceEventSeverityLevel;
+ actor: AuditorEventActorDetails;
+ meta?: JsonObject;
+ request?: AuditorEventRequest;
+} & AuditorEventStatus;
+
+// @public (undocumented)
+export type AuditorEventActorDetails = {
+ actorId?: string;
+ ip?: string;
+ hostname?: string;
+ userAgent?: string;
+};
+
+// @public
+export type AuditorEventOptions = {
+ eventId: string;
+ severityLevel?: AuditorServiceEventSeverityLevel;
+ request?: Request_2;
+ meta?: TMeta;
+} & AuditorEventStatus;
+
+// @public (undocumented)
+export type AuditorEventRequest = {
+ url: string;
+ method: string;
+};
+
+// @public (undocumented)
+export type AuditorEventStatus =
+ | {
+ status: 'initiated';
+ }
+ | {
+ status: 'succeeded';
+ }
+ | {
+ status: 'failed';
+ error: string;
+ };
+
+// @public
+export type AuditorLogFunction = (event: AuditorEvent) => void | Promise;
+
+// @public
+export const auditorServiceFactory: ServiceFactory<
+ AuditorService,
+ 'plugin',
+ 'singleton'
+>;
+
+// @public
+export class DefaultAuditorService implements AuditorService {
+ static create(
+ logFn: AuditorLogFunction,
+ deps: {
+ auth: AuthService;
+ httpAuth: HttpAuthService;
+ plugin: PluginMetadataService;
+ },
+ ): DefaultAuditorService;
+ // (undocumented)
+ createEvent(
+ options: AuditorServiceCreateEventOptions,
+ ): Promise;
+}
+
+// @public
+export class WinstonRootAuditorService {
+ static create(
+ options?: WinstonRootAuditorServiceOptions,
+ ): WinstonRootAuditorService;
+ // (undocumented)
+ forPlugin(deps: {
+ auth: AuthService;
+ httpAuth: HttpAuthService;
+ plugin: PluginMetadataService;
+ }): AuditorService;
+}
+
+// @public
+export type WinstonRootAuditorServiceOptions = {
+ meta?: JsonObject;
+ format?: Format;
+ transports?: winston.transport[];
+};
+
+// (No @packageDocumentation comment for this package)
+```
diff --git a/packages/backend-defaults/report-auth.sql.md b/packages/backend-defaults/report-auth.sql.md
new file mode 100644
index 0000000000..9551c34bb0
--- /dev/null
+++ b/packages/backend-defaults/report-auth.sql.md
@@ -0,0 +1,15 @@
+## SQL Report file for "@backstage/backend-defaults/auth"
+
+> Do not edit this file. It is a report generated by `yarn build:api-reports`
+
+## Table `backstage_backend_public_keys__keys`
+
+| Column | Type | Nullable | Max Length | Default |
+| ------------ | ------------------- | -------- | ---------- | ------- |
+| `expires_at` | `character varying` | false | 255 | - |
+| `id` | `character varying` | false | 255 | - |
+| `key` | `text` | false | - | - |
+
+### Indices
+
+- `backstage_backend_public_keys__keys_pkey` (`id`) unique primary
diff --git a/packages/backend-defaults/report-permissionsRegistry.api.md b/packages/backend-defaults/report-permissionsRegistry.api.md
new file mode 100644
index 0000000000..c453ca6a1b
--- /dev/null
+++ b/packages/backend-defaults/report-permissionsRegistry.api.md
@@ -0,0 +1,17 @@
+## API Report File for "@backstage/backend-defaults"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+import { PermissionsRegistryService } from '@backstage/backend-plugin-api';
+import { ServiceFactory } from '@backstage/backend-plugin-api';
+
+// @public
+export const permissionsRegistryServiceFactory: ServiceFactory<
+ PermissionsRegistryService,
+ 'plugin',
+ 'singleton'
+>;
+
+// (No @packageDocumentation comment for this package)
+```
diff --git a/packages/backend-defaults/report-scheduler.sql.md b/packages/backend-defaults/report-scheduler.sql.md
new file mode 100644
index 0000000000..5542ac48b0
--- /dev/null
+++ b/packages/backend-defaults/report-scheduler.sql.md
@@ -0,0 +1,18 @@
+## SQL Report file for "@backstage/backend-defaults/scheduler"
+
+> Do not edit this file. It is a report generated by `yarn build:api-reports`
+
+## Table `backstage_backend_tasks__tasks`
+
+| Column | Type | Nullable | Max Length | Default |
+| ------------------------ | -------------------------- | -------- | ---------- | ------- |
+| `current_run_expires_at` | `timestamp with time zone` | true | - | - |
+| `current_run_started_at` | `timestamp with time zone` | true | - | - |
+| `current_run_ticket` | `text` | true | - | - |
+| `id` | `character varying` | false | 255 | - |
+| `next_run_start_at` | `timestamp with time zone` | true | - | - |
+| `settings_json` | `text` | false | - | - |
+
+### Indices
+
+- `backstage_backend_tasks__tasks_pkey` (`id`) unique primary
diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts
index 4b0f497980..d618c94138 100644
--- a/packages/backend-defaults/src/CreateBackend.ts
+++ b/packages/backend-defaults/src/CreateBackend.ts
@@ -15,6 +15,7 @@
*/
import { Backend, createSpecializedBackend } from '@backstage/backend-app-api';
+import { auditorServiceFactory } from '@backstage/backend-defaults/auditor';
import { authServiceFactory } from '@backstage/backend-defaults/auth';
import { cacheServiceFactory } from '@backstage/backend-defaults/cache';
import { databaseServiceFactory } from '@backstage/backend-defaults/database';
@@ -24,6 +25,7 @@ import { httpRouterServiceFactory } from '@backstage/backend-defaults/httpRouter
import { lifecycleServiceFactory } from '@backstage/backend-defaults/lifecycle';
import { loggerServiceFactory } from '@backstage/backend-defaults/logger';
import { permissionsServiceFactory } from '@backstage/backend-defaults/permissions';
+import { permissionsRegistryServiceFactory } from '@backstage/backend-defaults/permissionsRegistry';
import { rootConfigServiceFactory } from '@backstage/backend-defaults/rootConfig';
import { rootHealthServiceFactory } from '@backstage/backend-defaults/rootHealth';
import { rootHttpRouterServiceFactory } from '@backstage/backend-defaults/rootHttpRouter';
@@ -35,6 +37,7 @@ import { userInfoServiceFactory } from '@backstage/backend-defaults/userInfo';
import { eventsServiceFactory } from '@backstage/plugin-events-node';
export const defaultServiceFactories = [
+ auditorServiceFactory,
authServiceFactory,
cacheServiceFactory,
rootConfigServiceFactory,
@@ -45,6 +48,7 @@ export const defaultServiceFactories = [
lifecycleServiceFactory,
loggerServiceFactory,
permissionsServiceFactory,
+ permissionsRegistryServiceFactory,
rootHealthServiceFactory,
rootHttpRouterServiceFactory,
rootLifecycleServiceFactory,
diff --git a/packages/backend-defaults/src/entrypoints/auditor/DefaultAuditorService.test.ts b/packages/backend-defaults/src/entrypoints/auditor/DefaultAuditorService.test.ts
new file mode 100644
index 0000000000..c960a1daa2
--- /dev/null
+++ b/packages/backend-defaults/src/entrypoints/auditor/DefaultAuditorService.test.ts
@@ -0,0 +1,144 @@
+/*
+ * 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 { mockServices } from '@backstage/backend-test-utils';
+import { DefaultAuditorService } from './DefaultAuditorService';
+
+const mockDeps = {
+ auth: mockServices.auth.mock(),
+ httpAuth: mockServices.httpAuth.mock(),
+ plugin: {
+ getId: () => 'test',
+ },
+};
+
+describe('DefaultAuditorService', () => {
+ it('creates a auditor instance with default options', () => {
+ const auditor = DefaultAuditorService.create(jest.fn(), mockDeps);
+ expect(auditor).toBeInstanceOf(DefaultAuditorService);
+ });
+
+ it('should log a status "initiated" using createEvent', async () => {
+ const logFn = jest.fn();
+ const auditor = DefaultAuditorService.create(logFn, mockDeps);
+
+ await auditor.createEvent({
+ eventId: 'test-event',
+ });
+
+ expect(logFn).toHaveBeenCalledWith({
+ eventId: 'test-event',
+ status: 'initiated',
+ plugin: 'test',
+ severityLevel: 'low',
+ actor: {},
+ });
+ });
+
+ it('should log a status "succeeded" using createEvent', async () => {
+ const logFn = jest.fn();
+ const auditor = DefaultAuditorService.create(logFn, mockDeps);
+
+ const auditorEvent = await auditor.createEvent({
+ eventId: 'test-event',
+ });
+
+ await auditorEvent.success();
+
+ expect(logFn).toHaveBeenCalledTimes(2);
+ expect(logFn).toHaveBeenLastCalledWith({
+ eventId: 'test-event',
+ status: 'succeeded',
+ plugin: 'test',
+ severityLevel: 'low',
+ actor: {},
+ });
+ });
+
+ it('should log a status "failed"', async () => {
+ const logFn = jest.fn();
+ const auditor = DefaultAuditorService.create(logFn, mockDeps);
+
+ const auditorEvent = await auditor.createEvent({
+ eventId: 'test-event',
+ });
+
+ const error = new Error('error');
+ await auditorEvent.fail({ error });
+
+ expect(logFn).toHaveBeenCalledTimes(2);
+ expect(logFn).toHaveBeenLastCalledWith({
+ eventId: 'test-event',
+ status: 'failed',
+ error: error.toString(),
+ plugin: 'test',
+ severityLevel: 'low',
+ actor: {},
+ });
+ });
+
+ it('should use root meta', async () => {
+ const logFn = jest.fn();
+ const auditor = DefaultAuditorService.create(logFn, mockDeps);
+
+ const auditorEvent = await auditor.createEvent({
+ eventId: 'test-event',
+ meta: {
+ initiated: 'test',
+ },
+ });
+
+ await auditorEvent.success({ meta: { succeeded: 'test' } });
+
+ const error = new Error('error');
+ await auditorEvent.fail({ error, meta: { failed: 'test' } });
+
+ expect(logFn).toHaveBeenCalledTimes(3);
+ expect(logFn).toHaveBeenNthCalledWith(1, {
+ eventId: 'test-event',
+ status: 'initiated',
+ meta: {
+ initiated: 'test',
+ },
+ plugin: 'test',
+ severityLevel: 'low',
+ actor: {},
+ });
+ expect(logFn).toHaveBeenNthCalledWith(2, {
+ eventId: 'test-event',
+ status: 'succeeded',
+ meta: {
+ initiated: 'test',
+ succeeded: 'test',
+ },
+ plugin: 'test',
+ severityLevel: 'low',
+ actor: {},
+ });
+ expect(logFn).toHaveBeenNthCalledWith(3, {
+ eventId: 'test-event',
+ status: 'failed',
+ meta: {
+ initiated: 'test',
+ failed: 'test',
+ },
+ error: error.toString(),
+ plugin: 'test',
+ severityLevel: 'low',
+ actor: {},
+ });
+ });
+});
diff --git a/packages/backend-defaults/src/entrypoints/auditor/DefaultAuditorService.ts b/packages/backend-defaults/src/entrypoints/auditor/DefaultAuditorService.ts
new file mode 100644
index 0000000000..79e206e305
--- /dev/null
+++ b/packages/backend-defaults/src/entrypoints/auditor/DefaultAuditorService.ts
@@ -0,0 +1,230 @@
+/*
+ * 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 type {
+ AuditorService,
+ AuditorServiceCreateEventOptions,
+ AuditorServiceEvent,
+ AuditorServiceEventSeverityLevel,
+ AuthService,
+ BackstageCredentials,
+ HttpAuthService,
+ PluginMetadataService,
+} from '@backstage/backend-plugin-api';
+import { ForwardedError } from '@backstage/errors';
+import type { JsonObject } from '@backstage/types';
+import type { Request } from 'express';
+
+/** @public */
+export type AuditorEventActorDetails = {
+ actorId?: string;
+ ip?: string;
+ hostname?: string;
+ userAgent?: string;
+};
+
+/** @public */
+export type AuditorEventRequest = {
+ url: string;
+ method: string;
+};
+
+/** @public */
+export type AuditorEventStatus =
+ | { status: 'initiated' }
+ | { status: 'succeeded' }
+ | {
+ status: 'failed';
+ error: string;
+ };
+
+/**
+ * Options for creating an auditor event.
+ *
+ * @public
+ */
+export type AuditorEventOptions = {
+ /**
+ * Use kebab-case to name audit events (e.g., "user-login", "file-download").
+ *
+ * The `pluginId` already provides plugin/module context, so avoid redundant prefixes in the `eventId`.
+ */
+ eventId: string;
+
+ severityLevel?: AuditorServiceEventSeverityLevel;
+
+ /** (Optional) The associated HTTP request, if applicable. */
+ request?: Request;
+
+ /** (Optional) Additional metadata relevant to the event, structured as a JSON object. */
+ meta?: TMeta;
+} & AuditorEventStatus;
+
+/**
+ * Common fields of an audit event.
+ *
+ * @public
+ */
+export type AuditorEvent = {
+ plugin: string;
+ eventId: string;
+ severityLevel: AuditorServiceEventSeverityLevel;
+ actor: AuditorEventActorDetails;
+ meta?: JsonObject;
+ request?: AuditorEventRequest;
+} & AuditorEventStatus;
+
+/**
+ * Logging function used by the auditor.
+ * @public
+ */
+export type AuditorLogFunction = (event: AuditorEvent) => void | Promise;
+
+/**
+ * A {@link @backstage/backend-plugin-api#AuditorService} implementation that logs events using a provided callback.
+ *
+ * @public
+ *
+ * @example
+ * ```ts
+ * export const auditorServiceFactory = createServiceFactory({
+ * service: coreServices.auditor,
+ * deps: {
+ * logger: coreServices.logger,
+ * auth: coreServices.auth,
+ * httpAuth: coreServices.httpAuth,
+ * plugin: coreServices.pluginMetadata,
+ * },
+ * factory({ logger, plugin, auth, httpAuth }) {
+ * const auditLogger = logger.child({ isAuditEvent: true });
+ * return DefaultAuditorService.create(
+ * event => auditLogger.info(`${event.plugin}.${event.eventId}`, event),
+ * { plugin, auth, httpAuth },
+ * );
+ * },
+ * });
+ * ```
+ */
+export class DefaultAuditorService implements AuditorService {
+ private readonly logFn: AuditorLogFunction;
+ private readonly auth: AuthService;
+ private readonly httpAuth: HttpAuthService;
+ private readonly plugin: PluginMetadataService;
+
+ private constructor(
+ logFn: AuditorLogFunction,
+ deps: {
+ auth: AuthService;
+ httpAuth: HttpAuthService;
+ plugin: PluginMetadataService;
+ },
+ ) {
+ this.logFn = logFn;
+ this.auth = deps.auth;
+ this.httpAuth = deps.httpAuth;
+ this.plugin = deps.plugin;
+ }
+
+ /**
+ * Creates a {@link DefaultAuditorService} instance.
+ */
+ static create(
+ logFn: AuditorLogFunction,
+ deps: {
+ auth: AuthService;
+ httpAuth: HttpAuthService;
+ plugin: PluginMetadataService;
+ },
+ ): DefaultAuditorService {
+ return new DefaultAuditorService(logFn, deps);
+ }
+
+ private async log(
+ options: AuditorEventOptions,
+ ): Promise {
+ const { eventId, severityLevel = 'low', request, meta, ...rest } = options;
+
+ await this.logFn({
+ plugin: this.plugin.getId(),
+ eventId,
+ severityLevel,
+ actor: {
+ actorId: await this.getActorId(request),
+ ip: request?.ip,
+ hostname: request?.hostname,
+ userAgent: request?.get('user-agent'),
+ },
+ request: request
+ ? {
+ url: request?.originalUrl,
+ method: request?.method,
+ }
+ : undefined,
+ meta: Object.keys(meta ?? {}).length === 0 ? undefined : meta,
+ ...rest,
+ });
+ }
+
+ async createEvent(
+ options: AuditorServiceCreateEventOptions,
+ ): Promise {
+ await this.log({ ...options, status: 'initiated' });
+
+ return {
+ success: async params => {
+ await this.log({
+ ...options,
+ meta: { ...options.meta, ...params?.meta },
+ status: 'succeeded',
+ });
+ },
+ fail: async params => {
+ await this.log({
+ ...options,
+ ...params,
+ error: String(params.error),
+ meta: { ...options.meta, ...params?.meta },
+ status: 'failed',
+ });
+ },
+ };
+ }
+
+ private async getActorId(
+ request?: Request,
+ ): Promise {
+ let credentials: BackstageCredentials =
+ await this.auth.getOwnServiceCredentials();
+
+ if (request) {
+ try {
+ credentials = await this.httpAuth.credentials(request);
+ } catch (error) {
+ throw new ForwardedError('Could not resolve credentials', error);
+ }
+ }
+
+ if (this.auth.isPrincipal(credentials, 'user')) {
+ return credentials.principal.userEntityRef;
+ }
+
+ if (this.auth.isPrincipal(credentials, 'service')) {
+ return credentials.principal.subject;
+ }
+
+ return undefined;
+ }
+}
diff --git a/packages/backend-defaults/src/entrypoints/auditor/WinstonRootAuditorService.test.ts b/packages/backend-defaults/src/entrypoints/auditor/WinstonRootAuditorService.test.ts
new file mode 100644
index 0000000000..2d9a959c64
--- /dev/null
+++ b/packages/backend-defaults/src/entrypoints/auditor/WinstonRootAuditorService.test.ts
@@ -0,0 +1,169 @@
+/*
+ * 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 { mockServices } from '@backstage/backend-test-utils';
+import { WinstonRootAuditorService } from './WinstonRootAuditorService';
+import { DefaultAuditorService } from './DefaultAuditorService';
+
+describe('WinstonRootAuditorService', () => {
+ it('creates a auditor instance with default options', () => {
+ const auditor = WinstonRootAuditorService.create();
+ expect(auditor).toBeInstanceOf(WinstonRootAuditorService);
+ });
+
+ it('creates a child logger', () => {
+ const auditor = WinstonRootAuditorService.create();
+ const childLogger = auditor.forPlugin({
+ auth: mockServices.auth.mock(),
+ httpAuth: mockServices.httpAuth.mock(),
+ plugin: {
+ getId: () => 'test-plugin',
+ },
+ });
+ expect(childLogger).toBeInstanceOf(DefaultAuditorService);
+ });
+
+ it('should log a status "initiated" using createEvent', async () => {
+ const pluginId = 'test-plugin';
+
+ const auditor = WinstonRootAuditorService.create().forPlugin({
+ auth: mockServices.auth.mock(),
+ httpAuth: mockServices.httpAuth.mock(),
+ plugin: {
+ getId: () => pluginId,
+ },
+ });
+ // workaround to spy on private method
+ const auditorSpy = jest.spyOn(auditor as any, 'log');
+
+ await auditor.createEvent({
+ eventId: 'test-event',
+ });
+
+ expect(auditorSpy).toHaveBeenCalledWith({
+ eventId: 'test-event',
+ status: 'initiated',
+ });
+ });
+
+ it('should log a status "succeeded" using createEvent', async () => {
+ const pluginId = 'test-plugin';
+
+ const auditor = WinstonRootAuditorService.create().forPlugin({
+ auth: mockServices.auth.mock(),
+ httpAuth: mockServices.httpAuth.mock(),
+ plugin: {
+ getId: () => pluginId,
+ },
+ });
+ // workaround to spy on private method
+ const auditorSpy = jest.spyOn(auditor as any, 'log');
+
+ const auditorEvent = await auditor.createEvent({
+ eventId: 'test-event',
+ });
+
+ await auditorEvent.success();
+
+ expect(auditorSpy).toHaveBeenCalledTimes(2);
+ expect(auditorSpy).toHaveBeenLastCalledWith({
+ eventId: 'test-event',
+ meta: {},
+ status: 'succeeded',
+ });
+ });
+
+ it('should log a status "failed"', async () => {
+ const pluginId = 'test-plugin';
+
+ const auditor = WinstonRootAuditorService.create().forPlugin({
+ auth: mockServices.auth.mock(),
+ httpAuth: mockServices.httpAuth.mock(),
+ plugin: {
+ getId: () => pluginId,
+ },
+ });
+ // workaround to spy on private method
+ const auditorSpy = jest.spyOn(auditor as any, 'log');
+
+ const auditorEvent = await auditor.createEvent({
+ eventId: 'test-event',
+ });
+
+ const error = new Error('error');
+ await auditorEvent.fail({ error });
+
+ expect(auditorSpy).toHaveBeenCalledTimes(2);
+ expect(auditorSpy).toHaveBeenLastCalledWith({
+ eventId: 'test-event',
+ meta: {},
+ status: 'failed',
+ error: error.toString(),
+ });
+ });
+
+ it('should use root meta', async () => {
+ const pluginId = 'test-plugin';
+
+ const auditor = WinstonRootAuditorService.create().forPlugin({
+ auth: mockServices.auth.mock(),
+ httpAuth: mockServices.httpAuth.mock(),
+ plugin: {
+ getId: () => pluginId,
+ },
+ });
+ // workaround to spy on private method
+ const auditorSpy = jest.spyOn(auditor as any, 'log');
+
+ const auditorEvent = await auditor.createEvent({
+ eventId: 'test-event',
+ meta: {
+ initiated: 'test',
+ },
+ });
+
+ await auditorEvent.success({ meta: { succeeded: 'test' } });
+
+ const error = new Error('error');
+ await auditorEvent.fail({ error, meta: { failed: 'test' } });
+
+ expect(auditorSpy).toHaveBeenCalledTimes(3);
+ expect(auditorSpy).toHaveBeenNthCalledWith(1, {
+ eventId: 'test-event',
+ status: 'initiated',
+ meta: {
+ initiated: 'test',
+ },
+ });
+ expect(auditorSpy).toHaveBeenNthCalledWith(2, {
+ eventId: 'test-event',
+ status: 'succeeded',
+ meta: {
+ initiated: 'test',
+ succeeded: 'test',
+ },
+ });
+ expect(auditorSpy).toHaveBeenNthCalledWith(3, {
+ eventId: 'test-event',
+ status: 'failed',
+ meta: {
+ initiated: 'test',
+ failed: 'test',
+ },
+ error: error.toString(),
+ });
+ });
+});
diff --git a/packages/backend-defaults/src/entrypoints/auditor/WinstonRootAuditorService.ts b/packages/backend-defaults/src/entrypoints/auditor/WinstonRootAuditorService.ts
new file mode 100644
index 0000000000..6ea5d02606
--- /dev/null
+++ b/packages/backend-defaults/src/entrypoints/auditor/WinstonRootAuditorService.ts
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2025 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 type {
+ AuditorService,
+ AuthService,
+ HttpAuthService,
+ PluginMetadataService,
+} from '@backstage/backend-plugin-api';
+import type { JsonObject } from '@backstage/types';
+import type { Format } from 'logform';
+import * as winston from 'winston';
+import { WinstonLogger } from '../rootLogger';
+import { DefaultAuditorService } from './DefaultAuditorService';
+
+/** @public */
+export const defaultFormatter = winston.format.combine(
+ winston.format.timestamp({
+ format: 'YYYY-MM-DD HH:mm:ss',
+ }),
+ winston.format.errors({ stack: true }),
+ winston.format.splat(),
+ winston.format.json(),
+);
+
+/**
+ * Adds `isAuditEvent` field
+ *
+ * @public
+ */
+export const auditorFieldFormat = winston.format(info => {
+ return { ...info, isAuditEvent: true };
+})();
+
+/**
+ * Options for creating a {@link WinstonRootAuditorService}.
+ * @public
+ */
+export type WinstonRootAuditorServiceOptions = {
+ meta?: JsonObject;
+ format?: Format;
+ transports?: winston.transport[];
+};
+
+/**
+ * An implementation of the {@link @backstage/backend-plugin-api#AuditorService} that logs events using a separate winston logger.
+ *
+ * @public
+ *
+ * @example
+ * ```ts
+ * export const auditorServiceFactory = createServiceFactory({
+ * service: coreServices.auditor,
+ * deps: {
+ * auth: coreServices.auth,
+ * httpAuth: coreServices.httpAuth,
+ * plugin: coreServices.pluginMetadata,
+ * },
+ * createRootContext() {
+ * return WinstonRootAuditorService.create();
+ * },
+ * factory({ plugin, auth, httpAuth }, root) {
+ * return root.forPlugin({ plugin, auth, httpAuth });
+ * },
+ * });
+ * ```
+ */
+export class WinstonRootAuditorService {
+ private constructor(private readonly winstonLogger: WinstonLogger) {}
+
+ /**
+ * Creates a {@link WinstonRootAuditorService} instance.
+ */
+ static create(
+ options?: WinstonRootAuditorServiceOptions,
+ ): WinstonRootAuditorService {
+ let winstonLogger = WinstonLogger.create({
+ meta: {
+ service: 'backstage',
+ },
+ level: 'info',
+ format: winston.format.combine(
+ auditorFieldFormat,
+ options?.format ?? defaultFormatter,
+ ),
+ transports: options?.transports,
+ });
+
+ if (options?.meta) {
+ winstonLogger = winstonLogger.child(options.meta) as WinstonLogger;
+ }
+
+ return new WinstonRootAuditorService(winstonLogger);
+ }
+
+ forPlugin(deps: {
+ auth: AuthService;
+ httpAuth: HttpAuthService;
+ plugin: PluginMetadataService;
+ }): AuditorService {
+ return DefaultAuditorService.create(
+ e => this.winstonLogger.info(`${e.plugin}.${e.eventId}`, e),
+ deps,
+ );
+ }
+}
diff --git a/packages/backend-defaults/src/entrypoints/auditor/auditorServiceFactory.ts b/packages/backend-defaults/src/entrypoints/auditor/auditorServiceFactory.ts
new file mode 100644
index 0000000000..1323ac5d76
--- /dev/null
+++ b/packages/backend-defaults/src/entrypoints/auditor/auditorServiceFactory.ts
@@ -0,0 +1,47 @@
+/*
+ * 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 {
+ coreServices,
+ createServiceFactory,
+} from '@backstage/backend-plugin-api';
+import { DefaultAuditorService } from './DefaultAuditorService';
+
+/**
+ * Plugin-level auditing.
+ *
+ * See {@link @backstage/code-plugin-api#AuditorService}
+ * and {@link https://backstage.io/docs/backend-system/core-services/auditor | the service docs}
+ * for more information.
+ *
+ * @public
+ */
+export const auditorServiceFactory = createServiceFactory({
+ service: coreServices.auditor,
+ deps: {
+ logger: coreServices.logger,
+ auth: coreServices.auth,
+ httpAuth: coreServices.httpAuth,
+ plugin: coreServices.pluginMetadata,
+ },
+ factory({ logger, plugin, auth, httpAuth }) {
+ const auditLogger = logger.child({ isAuditEvent: true });
+ return DefaultAuditorService.create(
+ event => auditLogger.info(`${event.plugin}.${event.eventId}`, event),
+ { plugin, auth, httpAuth },
+ );
+ },
+});
diff --git a/packages/canon/docs/components/Text/styles.css b/packages/backend-defaults/src/entrypoints/auditor/index.ts
similarity index 56%
rename from packages/canon/docs/components/Text/styles.css
rename to packages/backend-defaults/src/entrypoints/auditor/index.ts
index b1bc40a1ac..3231c6a571 100644
--- a/packages/canon/docs/components/Text/styles.css
+++ b/packages/backend-defaults/src/entrypoints/auditor/index.ts
@@ -14,30 +14,15 @@
* limitations under the License.
*/
-.sb-text {
- font-size: 16px;
- line-height: 28px;
- margin: 0;
- margin-bottom: 16px;
- color: #4f4f4f;
-
- & p {
- font-size: 16px;
- line-height: 28px;
- margin: 0;
- }
-
- & code {
- font-size: 13px;
- color: #215cff;
- background-color: #f1f3fc;
- padding: 4px 4px;
- border-radius: 4px;
- }
-
- & a {
- color: #215cff;
- text-decoration: none;
- border-bottom: 1px solid #215cff;
- }
-}
+export type {
+ AuditorEvent,
+ AuditorEventActorDetails,
+ AuditorEventOptions,
+ AuditorEventRequest,
+ AuditorEventStatus,
+ AuditorLogFunction,
+} from './DefaultAuditorService';
+export { DefaultAuditorService } from './DefaultAuditorService';
+export { auditorServiceFactory } from './auditorServiceFactory';
+export { WinstonRootAuditorService } from './WinstonRootAuditorService';
+export type { WinstonRootAuditorServiceOptions } from './WinstonRootAuditorService';
diff --git a/packages/backend-defaults/src/entrypoints/database/connectors/postgres.ts b/packages/backend-defaults/src/entrypoints/database/connectors/postgres.ts
index e7e973ae4b..3583049a7d 100644
--- a/packages/backend-defaults/src/entrypoints/database/connectors/postgres.ts
+++ b/packages/backend-defaults/src/entrypoints/database/connectors/postgres.ts
@@ -103,7 +103,7 @@ export async function buildPgDatabaseConfig(
Connector: CloudSqlConnector,
IpAddressTypes,
AuthTypes,
- } = await import('@google-cloud/cloud-sql-connector');
+ } = require('@google-cloud/cloud-sql-connector') as typeof import('@google-cloud/cloud-sql-connector');
const connector = new CloudSqlConnector();
const clientOpts = await connector.getOptions({
instanceConnectionName: config.connection.instance,
diff --git a/packages/backend-defaults/src/entrypoints/permissionsRegistry/index.ts b/packages/backend-defaults/src/entrypoints/permissionsRegistry/index.ts
new file mode 100644
index 0000000000..abe04d7941
--- /dev/null
+++ b/packages/backend-defaults/src/entrypoints/permissionsRegistry/index.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2023 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 { permissionsRegistryServiceFactory } from './permissionsRegistryServiceFactory';
diff --git a/packages/backend-defaults/src/entrypoints/permissionsRegistry/permissionsRegistryServiceFactory.ts b/packages/backend-defaults/src/entrypoints/permissionsRegistry/permissionsRegistryServiceFactory.ts
new file mode 100644
index 0000000000..17bcb21091
--- /dev/null
+++ b/packages/backend-defaults/src/entrypoints/permissionsRegistry/permissionsRegistryServiceFactory.ts
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2022 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 {
+ coreServices,
+ createServiceFactory,
+} from '@backstage/backend-plugin-api';
+import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';
+
+/**
+ * Permission system integration for registering resources and permissions.
+ *
+ * See {@link @backstage/core-plugin-api#PermissionsRegistryService}
+ * and {@link https://backstage.io/docs/backend-system/core-services/permission-integrations | the service docs}
+ * for more information.
+ *
+ * @public
+ */
+export const permissionsRegistryServiceFactory = createServiceFactory({
+ service: coreServices.permissionsRegistry,
+ deps: {
+ lifecycle: coreServices.lifecycle,
+ httpRouter: coreServices.httpRouter,
+ },
+ async factory({ httpRouter, lifecycle }) {
+ const router = createPermissionIntegrationRouter();
+
+ httpRouter.use(router);
+
+ let started = false;
+ lifecycle.addStartupHook(() => {
+ started = true;
+ });
+
+ return {
+ addResourceType(resource) {
+ if (started) {
+ throw new Error(
+ 'Cannot add permission resource types after the plugin has started',
+ );
+ }
+ router.addResourceType(resource);
+ },
+ addPermissions(permissions) {
+ if (started) {
+ throw new Error(
+ 'Cannot add permissions after the plugin has started',
+ );
+ }
+ router.addPermissions(permissions);
+ },
+ addPermissionRules(rules) {
+ if (started) {
+ throw new Error(
+ 'Cannot add permission rules after the plugin has started',
+ );
+ }
+ router.addPermissionRules(rules);
+ },
+ };
+ },
+});
diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.test.ts
index 14ca4c018e..2fbb85b9b1 100644
--- a/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.test.ts
+++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.test.ts
@@ -20,7 +20,7 @@ import {
registerMswTestHooks,
} from '@backstage/backend-test-utils';
import { ConfigReader } from '@backstage/config';
-import { NotModifiedError, NotFoundError } from '@backstage/errors';
+import { NotModifiedError } from '@backstage/errors';
import {
GerritIntegration,
readGerritIntegrationConfig,
@@ -36,22 +36,11 @@ import { GerritUrlReader } from './GerritUrlReader';
import getRawBody from 'raw-body';
const mockDir = createMockDirectory({ mockOsTmpDir: true });
-const env = process.env;
-process.env = { ...env, DISABLE_GERRIT_GITILES_REQUIREMENT: '1' };
const treeResponseFactory = DefaultReadTreeResponseFactory.create({
config: new ConfigReader({}),
});
-const cloneMock = jest.fn(() => Promise.resolve());
-jest.mock('./git', () => ({
- Git: {
- fromAuth: () => ({
- clone: cloneMock,
- }),
- },
-}));
-
// Gerrit processor without a gitilesBaseUrl configured
const gerritProcessor = new GerritUrlReader(
new GerritIntegration(
@@ -96,12 +85,10 @@ describe.skip('GerritUrlReader', () => {
beforeEach(() => {
mockDir.clear();
- process.env = { ...env, DISABLE_GERRIT_GITILES_REQUIREMENT: '1' };
});
afterAll(() => {
jest.clearAllMocks();
- process.env = env;
});
describe('reader factory', () => {
@@ -186,7 +173,24 @@ describe.skip('GerritUrlReader', () => {
const buffer = await result.buffer();
expect(buffer.toString()).toBe(responseBuffer.toString());
});
-
+ it('should be able to read file contents of a commit as buffer', async () => {
+ worker.use(
+ rest.get(
+ 'https://gerrit.com/projects/web%2Fproject/commits/f775f9119c313c7ffc890d7908a45997273434d5/files/LICENSE/content',
+ (_, res, ctx) => {
+ return res(
+ ctx.status(200),
+ ctx.body(responseBuffer.toString('base64')),
+ );
+ },
+ ),
+ );
+ const result = await gerritProcessor.readUrl(
+ 'https://gerrit.com/web/project/+/f775f9119c313c7ffc890d7908a45997273434d5/LICENSE',
+ );
+ const buffer = await result.buffer();
+ expect(buffer.toString()).toBe(responseBuffer.toString());
+ });
it('should be able to read file contents as stream', async () => {
worker.use(
rest.get(
@@ -258,6 +262,7 @@ describe.skip('GerritUrlReader', () => {
const treeUrlGitiles =
'https://gerrit.com/gitiles/app/web/+/refs/heads/master/';
const etag = '52432507a70b677b5674b019c9a46b2e9f29d0a1';
+ const sha = 'f775f9119c313c7ffc890d7908a45997273434d5';
const mkdocsContent = 'a repo fetched using git clone';
const mdContent = 'doc';
const repoArchiveBuffer = fs.readFileSync(
@@ -302,6 +307,19 @@ describe.skip('GerritUrlReader', () => {
ctx.body(repoArchiveDocsBuffer),
),
),
+ rest.get(
+ `https://gerrit.com/gitiles/app/web/\\+archive/${sha}.tar.gz`,
+ (_, res, ctx) =>
+ res(
+ ctx.status(200),
+ ctx.set('Content-Type', 'application/x-gzip'),
+ ctx.set(
+ 'content-disposition',
+ 'attachment; filename=web-refs/heads/master.tar.gz',
+ ),
+ ctx.body(repoArchiveBuffer),
+ ),
+ ),
);
});
@@ -330,8 +348,6 @@ describe.skip('GerritUrlReader', () => {
const mdFile = await files[1].content();
expect(mdFile.toString()).toBe('site_name: Test\n');
-
- expect(cloneMock).not.toHaveBeenCalled();
});
it('throws NotModifiedError for matching etags.', async () => {
@@ -346,15 +362,17 @@ describe.skip('GerritUrlReader', () => {
);
});
- it('throws NotFoundError if branch info not found.', async () => {
+ it('throws ResponseError if branch info not found.', async () => {
worker.use(
rest.get(branchAPIUrl, (_, res, ctx) => {
return res(ctx.status(404, 'Not found.'));
}),
);
- await expect(gerritProcessor.readTree(treeUrl)).rejects.toThrow(
- NotFoundError,
+ await expect(
+ gerritProcessor.readTree(treeUrl),
+ ).rejects.toMatchInlineSnapshot(
+ `[ResponseError: Request failed with 404 Not found.]`,
);
});
@@ -386,8 +404,20 @@ describe.skip('GerritUrlReader', () => {
const mdFile = await files[0].content();
expect(mdFile.toString()).toBe('# Test\n');
+ });
+ it('throws NotModifiedError for a known commit.', async () => {
+ const shaTreeUrl = `https://gerrit.com/app/web/+/${sha}/`;
- expect(cloneMock).not.toHaveBeenCalled();
+ await expect(
+ gerritProcessor.readTree(shaTreeUrl, { etag: sha }),
+ ).rejects.toThrow(NotModifiedError);
+ });
+ it('can fetch files for a specifc sha.', async () => {
+ const response = await gerritProcessorWithGitiles.readTree(
+ `https://gerrit.com/gitiles/app/web/+/${sha}/`,
+ );
+
+ expect(response.etag).toBe(sha);
});
});
});
diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.ts
index 2ef9116208..835624627b 100644
--- a/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.ts
+++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.ts
@@ -28,14 +28,18 @@ import { Readable } from 'stream';
import {
GerritIntegration,
ScmIntegrations,
- buildGerritGitilesArchiveUrl,
+ buildGerritGitilesArchiveUrlFromLocation,
getGerritBranchApiUrl,
getGerritFileContentsApiUrl,
getGerritRequestOptions,
- parseGerritGitilesUrl,
parseGerritJsonResponse,
+ parseGitilesUrlRef,
} from '@backstage/integration';
-import { NotFoundError, NotModifiedError } from '@backstage/errors';
+import {
+ NotFoundError,
+ NotModifiedError,
+ ResponseError,
+} from '@backstage/errors';
import { ReadTreeResponseFactory, ReaderFactory } from './types';
/**
@@ -135,34 +139,9 @@ export class GerritUrlReader implements UrlReaderService {
url: string,
options?: UrlReaderServiceReadTreeOptions,
): Promise {
- const apiUrl = getGerritBranchApiUrl(this.integration.config, url);
- let response: Response;
- try {
- response = await fetch(apiUrl, {
- method: 'GET',
- ...getGerritRequestOptions(this.integration.config),
- });
- } catch (e) {
- throw new Error(`Unable to read branch state ${url}, ${e}`);
- }
+ const urlRevision = await this.getRevisionForUrl(url, options);
- if (response.status === 404) {
- throw new NotFoundError(`Not found: ${url}`);
- }
-
- if (!response.ok) {
- throw new Error(
- `${url} could not be read as ${apiUrl}, ${response.status} ${response.statusText}`,
- );
- }
- const branchInfo = (await parseGerritJsonResponse(response as any)) as {
- revision: string;
- };
- if (options?.etag === branchInfo.revision) {
- throw new NotModifiedError();
- }
-
- return this.readTreeFromGitiles(url, branchInfo.revision, options);
+ return this.readTreeFromGitiles(url, urlRevision, options);
}
async search(): Promise {
@@ -179,16 +158,10 @@ export class GerritUrlReader implements UrlReaderService {
revision: string,
options?: UrlReaderServiceReadTreeOptions,
) {
- const { branch, filePath, project } = parseGerritGitilesUrl(
+ const archiveUrl = buildGerritGitilesArchiveUrlFromLocation(
this.integration.config,
url,
);
- const archiveUrl = buildGerritGitilesArchiveUrl(
- this.integration.config,
- project,
- branch,
- filePath,
- );
const archiveResponse = await fetch(archiveUrl, {
...getGerritRequestOptions(this.integration.config),
// TODO(freben): The signal cast is there because pre-3.x versions of
@@ -217,4 +190,41 @@ export class GerritUrlReader implements UrlReaderService {
stripFirstDirectory: false,
});
}
+
+ private async getRevisionForUrl(
+ url: string,
+ options?: UrlReaderServiceReadTreeOptions,
+ ): Promise {
+ const { ref, refType } = parseGitilesUrlRef(this.integration.config, url);
+ // The url points to a static revision.
+ if (refType === 'sha') {
+ if (options?.etag === ref) {
+ throw new NotModifiedError();
+ }
+ return ref;
+ }
+
+ const apiUrl = getGerritBranchApiUrl(this.integration.config, url);
+ let response: Response;
+ try {
+ response = await fetch(apiUrl, {
+ method: 'GET',
+ ...getGerritRequestOptions(this.integration.config),
+ });
+ } catch (e) {
+ throw new Error(`Unable to read branch state ${url}, ${e}`);
+ }
+
+ if (!response.ok) {
+ throw await ResponseError.fromResponse(response);
+ }
+
+ const branchInfo = (await parseGerritJsonResponse(response as any)) as {
+ revision: string;
+ };
+ if (options?.etag === branchInfo.revision) {
+ throw new NotModifiedError();
+ }
+ return branchInfo.revision;
+ }
}
diff --git a/packages/backend-dynamic-feature-service/CHANGELOG.md b/packages/backend-dynamic-feature-service/CHANGELOG.md
index 7f41948476..31c18fa2ad 100644
--- a/packages/backend-dynamic-feature-service/CHANGELOG.md
+++ b/packages/backend-dynamic-feature-service/CHANGELOG.md
@@ -1,5 +1,82 @@
# @backstage/backend-dynamic-feature-service
+## 0.5.4-next.0
+
+### Patch Changes
+
+- 96c20cd: Make sure changes are successfully tracked before starting up scanner.
+- Updated dependencies
+ - @backstage/cli-node@0.2.13-next.0
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/config-loader@1.9.6-next.0
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-node@0.7.0-next.0
+ - @backstage/backend-app-api@1.1.2-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-app-node@0.1.30-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-backend@0.4.2-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-search-common@1.2.17
+
+## 0.5.3
+
+### Patch Changes
+
+- 8379bf4: Remove usages of `PluginDatabaseManager` and `PluginEndpointDiscovery` and replace with their equivalent service types
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/plugin-scaffolder-node@0.6.3
+ - @backstage/backend-app-api@1.1.1
+ - @backstage/types@1.2.1
+ - @backstage/config-loader@1.9.5
+ - @backstage/plugin-catalog-backend@1.30.0
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-events-backend@0.4.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/cli-common@0.1.15
+ - @backstage/cli-node@0.2.12
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-app-node@0.1.29
+ - @backstage/plugin-events-node@0.4.7
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-search-common@1.2.17
+
+## 0.5.3-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-app-api@1.1.1-next.1
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/cli-node@0.2.12-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/config-loader@1.9.5-next.1
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-backend@1.30.0-next.1
+ - @backstage/plugin-events-backend@0.4.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-scaffolder-node@0.6.3-next.1
+ - @backstage/plugin-search-common@1.2.17-next.0
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+ - @backstage/plugin-app-node@0.1.29-next.1
+ - @backstage/cli-common@0.1.15
+
## 0.5.3-next.0
### Patch Changes
diff --git a/packages/backend-dynamic-feature-service/package.json b/packages/backend-dynamic-feature-service/package.json
index 204c0112c2..f30c57f90b 100644
--- a/packages/backend-dynamic-feature-service/package.json
+++ b/packages/backend-dynamic-feature-service/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-dynamic-feature-service",
- "version": "0.5.3-next.0",
+ "version": "0.5.4-next.0",
"description": "Backstage dynamic feature service",
"backstage": {
"role": "node-library"
diff --git a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.ts b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.ts
index c64fca053c..398e9fb14c 100644
--- a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.ts
+++ b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.ts
@@ -68,7 +68,7 @@ export class DynamicPluginManager implements DynamicPluginProvider {
preferAlpha: options.preferAlpha,
});
const scannedPlugins = (await scanner.scanRoot()).packages;
- scanner.trackChanges();
+ await scanner.trackChanges();
const moduleLoader =
options.moduleLoader ||
new CommonJSModuleLoader({ logger: options.logger });
diff --git a/packages/backend-legacy/CHANGELOG.md b/packages/backend-legacy/CHANGELOG.md
index 07d9377770..ea646c22ba 100644
--- a/packages/backend-legacy/CHANGELOG.md
+++ b/packages/backend-legacy/CHANGELOG.md
@@ -1,5 +1,134 @@
# example-backend-legacy
+## 0.2.107-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/plugin-kubernetes-backend@0.19.3-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.5-next.0
+ - @backstage/plugin-catalog-node@1.15.2-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-backend@1.30.0-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.3.1-next.0
+ - @backstage/plugin-permission-backend@0.5.54-next.0
+ - @backstage/plugin-search-backend@1.8.2-next.0
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-app-backend@0.4.5-next.0
+ - @backstage/plugin-auth-backend@0.24.3-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.0
+ - @backstage/plugin-events-backend@0.4.2-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-proxy-backend@0.5.11-next.0
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.2-next.0
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.6-next.0
+ - @backstage/plugin-search-backend-module-elasticsearch@1.6.5-next.0
+ - @backstage/plugin-search-backend-module-explore@0.2.8-next.0
+ - @backstage/plugin-search-backend-module-pg@0.5.41-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.0
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-signals-backend@0.3.1-next.0
+ - @backstage/plugin-signals-node@0.1.17-next.0
+ - @backstage/plugin-techdocs-backend@1.11.6-next.0
+
+## 0.2.106
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-signals-backend@0.3.0
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/plugin-scaffolder-backend@1.29.0
+ - @backstage/plugin-proxy-backend@0.5.10
+ - @backstage/plugin-search-backend-module-catalog@0.3.0
+ - @backstage/plugin-techdocs-backend@1.11.5
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1
+ - @backstage/plugin-permission-backend@0.5.53
+ - @backstage/plugin-catalog-backend@1.30.0
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-events-backend@0.4.1
+ - @backstage/plugin-app-backend@0.4.4
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/integration@1.16.1
+ - @backstage/plugin-auth-backend@0.24.2
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-client@1.9.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/config@1.3.2
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4
+ - @backstage/plugin-catalog-node@1.15.1
+ - @backstage/plugin-events-node@0.4.7
+ - @backstage/plugin-kubernetes-backend@0.19.2
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.5
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.5
+ - @backstage/plugin-search-backend@1.8.1
+ - @backstage/plugin-search-backend-module-elasticsearch@1.6.4
+ - @backstage/plugin-search-backend-module-explore@0.2.7
+ - @backstage/plugin-search-backend-module-pg@0.5.40
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5
+ - @backstage/plugin-search-backend-node@1.3.7
+ - @backstage/plugin-signals-node@0.1.16
+
+## 0.2.106-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/plugin-app-backend@0.4.4-next.1
+ - @backstage/plugin-auth-backend@0.24.2-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-backend@1.30.0-next.1
+ - @backstage/plugin-catalog-node@1.15.1-next.1
+ - @backstage/plugin-events-backend@0.4.1-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+ - @backstage/plugin-kubernetes-backend@0.19.2-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-proxy-backend@0.5.10-next.1
+ - @backstage/plugin-scaffolder-backend@1.29.0-next.2
+ - @backstage/plugin-scaffolder-backend-module-rails@0.5.5-next.1
+ - @backstage/plugin-search-backend@1.8.1-next.1
+ - @backstage/plugin-signals-backend@0.3.0-next.2
+ - @backstage/plugin-signals-node@0.1.16-next.1
+ - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1-next.1
+ - @backstage/plugin-permission-backend@0.5.53-next.1
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+ - @backstage/plugin-techdocs-backend@1.11.5-next.2
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4-next.1
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4-next.1
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.5-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.3.0-next.1
+ - @backstage/plugin-search-backend-module-elasticsearch@1.6.4-next.1
+ - @backstage/plugin-search-backend-module-explore@0.2.7-next.1
+ - @backstage/plugin-search-backend-module-pg@0.5.40-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5-next.1
+ - @backstage/catalog-client@1.9.1-next.0
+ - @backstage/integration@1.16.1-next.0
+
+## 0.2.106-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-signals-backend@0.3.0-next.1
+ - @backstage/plugin-techdocs-backend@1.11.5-next.1
+ - @backstage/plugin-scaffolder-backend@1.29.0-next.1
+
## 0.2.106-next.0
### Patch Changes
diff --git a/packages/backend-legacy/package.json b/packages/backend-legacy/package.json
index a7d8559196..b3f71edb1e 100644
--- a/packages/backend-legacy/package.json
+++ b/packages/backend-legacy/package.json
@@ -1,6 +1,6 @@
{
"name": "example-backend-legacy",
- "version": "0.2.106-next.0",
+ "version": "0.2.107-next.0",
"backstage": {
"role": "backend"
},
diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md
index 74066b2bcd..38805bb484 100644
--- a/packages/backend-openapi-utils/CHANGELOG.md
+++ b/packages/backend-openapi-utils/CHANGELOG.md
@@ -1,5 +1,32 @@
# @backstage/backend-openapi-utils
+## 0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+
+## 0.4.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/errors@1.2.7
+
+## 0.4.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/errors@1.2.7-next.0
+
## 0.4.1-next.0
### Patch Changes
diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json
index 9746345e68..4453d4338a 100644
--- a/packages/backend-openapi-utils/package.json
+++ b/packages/backend-openapi-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-openapi-utils",
- "version": "0.4.1-next.0",
+ "version": "0.4.2-next.0",
"description": "OpenAPI typescript support.",
"backstage": {
"role": "node-library"
diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md
index 06c8531a4e..54f195ca71 100644
--- a/packages/backend-plugin-api/CHANGELOG.md
+++ b/packages/backend-plugin-api/CHANGELOG.md
@@ -1,5 +1,47 @@
# @backstage/backend-plugin-api
+## 1.2.0-next.0
+
+### Minor Changes
+
+- a4aa244: This change introduces the `auditor` service definition.
+
+### Patch Changes
+
+- 9ddfd94: Added new `PermissionsRegistryService` that is used by plugins to register permissions, resource types, and rules into the permission system. This replaces the existing `createPermissionIntegrationRouter` from `@backstage/plugin-permission-node`.
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-permission-common@0.8.4
+
+## 1.1.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/cli-common@0.1.15
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-permission-common@0.8.4
+
+## 1.1.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/cli-common@0.1.15
+
## 1.1.1-next.0
### Patch Changes
diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json
index c8577fbea8..9c78a6cd15 100644
--- a/packages/backend-plugin-api/package.json
+++ b/packages/backend-plugin-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-plugin-api",
- "version": "1.1.1-next.0",
+ "version": "1.2.0-next.0",
"description": "Core API used by Backstage backend plugins",
"backstage": {
"role": "node-library"
@@ -58,6 +58,7 @@
"@backstage/errors": "workspace:^",
"@backstage/plugin-auth-node": "workspace:^",
"@backstage/plugin-permission-common": "workspace:^",
+ "@backstage/plugin-permission-node": "workspace:^",
"@backstage/types": "workspace:^",
"@types/express": "^4.17.6",
"@types/luxon": "^3.0.0",
diff --git a/packages/backend-plugin-api/report.api.md b/packages/backend-plugin-api/report.api.md
index 8416c6c200..a4f9b9fa1d 100644
--- a/packages/backend-plugin-api/report.api.md
+++ b/packages/backend-plugin-api/report.api.md
@@ -16,14 +16,45 @@ import { isChildPath } from '@backstage/cli-common';
import { JsonObject } from '@backstage/types';
import { JsonValue } from '@backstage/types';
import { Knex } from 'knex';
+import { Permission } from '@backstage/plugin-permission-common';
import { PermissionAttributes } from '@backstage/plugin-permission-common';
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
+import { PermissionRule } from '@backstage/plugin-permission-node';
import { QueryPermissionRequest } from '@backstage/plugin-permission-common';
import { QueryPermissionResponse } from '@backstage/plugin-permission-common';
import { Readable } from 'stream';
import type { Request as Request_2 } from 'express';
import type { Response as Response_2 } from 'express';
+// @public
+export interface AuditorService {
+ // (undocumented)
+ createEvent(
+ options: AuditorServiceCreateEventOptions,
+ ): Promise;
+}
+
+// @public (undocumented)
+export type AuditorServiceCreateEventOptions = {
+ eventId: string;
+ severityLevel?: AuditorServiceEventSeverityLevel;
+ request?: Request_2;
+ meta?: JsonObject;
+};
+
+// @public (undocumented)
+export type AuditorServiceEvent = {
+ success(options?: { meta?: JsonObject }): Promise;
+ fail(options: { meta?: JsonObject; error: Error }): Promise;
+};
+
+// @public
+export type AuditorServiceEventSeverityLevel =
+ | 'low'
+ | 'medium'
+ | 'high'
+ | 'critical';
+
// @public
export interface AuthService {
authenticate(
@@ -183,7 +214,13 @@ export namespace coreServices {
const httpRouter: ServiceRef;
const lifecycle: ServiceRef;
const logger: ServiceRef;
+ const auditor: ServiceRef;
const permissions: ServiceRef;
+ const permissionsRegistry: ServiceRef<
+ PermissionsRegistryService,
+ 'plugin',
+ 'singleton'
+ >;
const pluginMetadata: ServiceRef<
PluginMetadataService,
'plugin',
@@ -425,6 +462,29 @@ export interface LoggerService {
warn(message: string, meta?: Error | JsonObject): void;
}
+// @public
+export interface PermissionsRegistryService {
+ addPermissionRules(rules: PermissionRule[]): void;
+ addPermissions(permissions: Permission[]): void;
+ addResourceType(
+ options: PermissionsRegistryServiceAddResourceTypeOptions<
+ TResourceType,
+ TResource
+ >,
+ ): void;
+}
+
+// @public
+export type PermissionsRegistryServiceAddResourceTypeOptions<
+ TResourceType extends string,
+ TResource,
+> = {
+ resourceType: TResourceType;
+ permissions?: Array;
+ rules: PermissionRule>[];
+ getResources?(resourceRefs: string[]): Promise>;
+};
+
// @public
export interface PermissionsService extends PermissionEvaluator {
authorize(
diff --git a/packages/backend-plugin-api/src/services/definitions/AuditorService.ts b/packages/backend-plugin-api/src/services/definitions/AuditorService.ts
new file mode 100644
index 0000000000..c98fe65df3
--- /dev/null
+++ b/packages/backend-plugin-api/src/services/definitions/AuditorService.ts
@@ -0,0 +1,73 @@
+/*
+ * 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 type { JsonObject } from '@backstage/types';
+import type { Request } from 'express';
+
+/**
+ * low (default): normal usage
+ * medium: accessing write endpoints
+ * high: non-root permission changes
+ * critical: root permission changes
+ * @public
+ */
+export type AuditorServiceEventSeverityLevel =
+ | 'low'
+ | 'medium'
+ | 'high'
+ | 'critical';
+
+/** @public */
+export type AuditorServiceCreateEventOptions = {
+ /**
+ * Use kebab-case to name audit events (e.g., "user-login", "file-download", "fetch"). Represents a logical group of similar events or operations. For example, "fetch" could be used as an eventId encompassing various fetch methods like "by-id" or "by-location".
+ *
+ * The `pluginId` already provides plugin/module context, so avoid redundant prefixes in the `eventId`.
+ */
+ eventId: string;
+
+ /** (Optional) The severity level for the audit event. */
+ severityLevel?: AuditorServiceEventSeverityLevel;
+
+ /** (Optional) The associated HTTP request, if applicable. */
+ request?: Request;
+
+ /**
+ * (Optional) Additional metadata relevant to the event, structured as a JSON object.
+ * This could include a `queryType` field, using kebab-case, for variations within the main event (e.g., "by-id", "by-user").
+ * For example, if the `eventId` is "fetch", the `queryType` in `meta` could be "by-id" or "by-location".
+ */
+ meta?: JsonObject;
+};
+
+/** @public */
+export type AuditorServiceEvent = {
+ success(options?: { meta?: JsonObject }): Promise;
+ fail(options: { meta?: JsonObject; error: Error }): Promise;
+};
+
+/**
+ * A service that provides an auditor facility.
+ *
+ * See the {@link https://backstage.io/docs/backend-system/core-services/auditor | service documentation} for more details.
+ *
+ * @public
+ */
+export interface AuditorService {
+ createEvent(
+ options: AuditorServiceCreateEventOptions,
+ ): Promise;
+}
diff --git a/packages/backend-plugin-api/src/services/definitions/PermissionsRegistryService.ts b/packages/backend-plugin-api/src/services/definitions/PermissionsRegistryService.ts
new file mode 100644
index 0000000000..46236aa6cc
--- /dev/null
+++ b/packages/backend-plugin-api/src/services/definitions/PermissionsRegistryService.ts
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2022 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 { Permission } from '@backstage/plugin-permission-common';
+import { PermissionRule } from '@backstage/plugin-permission-node';
+
+/**
+ * Prevent use of type parameter from contributing to type inference.
+ *
+ * https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-980401795
+ * @ignore
+ */
+type NoInfer = T extends infer S ? S : never;
+
+/**
+ * Options for adding a resource type to the permission system.
+ *
+ * @public
+ */
+export type PermissionsRegistryServiceAddResourceTypeOptions<
+ TResourceType extends string,
+ TResource,
+> = {
+ /**
+ * The identifier for the resource type.
+ */
+ resourceType: TResourceType;
+
+ /**
+ * Permissions that are available for this resource type.
+ */
+ permissions?: Array;
+
+ /**
+ * Permission rules that are available for this resource type.
+ */
+ rules: PermissionRule>[];
+
+ /**
+ * The function used to load associated resources based in the provided
+ * references.
+ *
+ * @remarks
+ *
+ * If this function is not provided the permission system will not be able to
+ * resolve conditional decisions except when requesting resources directly
+ * from the plugin.
+ */
+ getResources?(resourceRefs: string[]): Promise>;
+};
+
+/**
+ * Permission system integration for registering resources and permissions.
+ *
+ * See the {@link https://backstage.io/docs/permissions/overview | permissions documentation}
+ * and the {@link https://backstage.io/docs/backend-system/core-services/permission-integrations | service documentation}
+ * for more details.
+ *
+ * @public
+ */
+export interface PermissionsRegistryService {
+ /**
+ * Add permissions for this plugin to the permission system.
+ */
+ addPermissions(permissions: Permission[]): void;
+
+ /**
+ * Adds a set of permission rules to the permission system for a resource type
+ * that is owned by this plugin.
+ *
+ * @remarks
+ *
+ * Rules should be created using corresponding `create*PermissionRule`
+ * functions exported by plugins, who in turn are created with
+ * `makeCreatePermissionRule`.
+ *
+ * Rules can be added either directly by the plugin itself or through a plugin
+ * module.
+ */
+ addPermissionRules(rules: PermissionRule[]): void;
+
+ /**
+ * Add a new resource type that is owned by this plugin to the permission
+ * system.
+ *
+ * @remarks
+ *
+ * To make this concrete, we can use the Backstage software catalog as an
+ * example. The catalog has conditional rules around access to specific
+ * _entities_ in the catalog. The _type_ of resource is captured here as
+ * `resourceType`, a string identifier (`catalog-entity` in this example) that
+ * can be provided with permission definitions. This is merely a _type_ to
+ * verify that conditions in an authorization policy are constructed
+ * correctly, not a reference to a specific resource.
+ *
+ * The `rules` parameter is an array of
+ * {@link @backstage/plugin-permission-node#PermissionRule}s that introduce
+ * conditional filtering logic for resources; for the catalog, these are
+ * things like `isEntityOwner` or `hasAnnotation`. Rules describe how to
+ * filter a list of resources, and the `conditions` returned allow these rules
+ * to be applied with specific parameters (such as 'group:default/team-a', or
+ * 'backstage.io/edit-url').
+ *
+ * The `getResources` argument should load resources based on a reference
+ * identifier. For the catalog, this is an
+ * [entity reference](https://backstage.io/docs/features/software-catalog/references#string-references).
+ * For other plugins, this can be any serialized format. This is used to add a
+ * permissions registry API via the HTTP router service. This API will be
+ * called by the `permission-backend` when authorization conditions relating
+ * to this plugin need to be evaluated.
+ */
+ addResourceType(
+ options: PermissionsRegistryServiceAddResourceTypeOptions<
+ TResourceType,
+ TResource
+ >,
+ ): void;
+}
diff --git a/packages/backend-plugin-api/src/services/definitions/coreServices.ts b/packages/backend-plugin-api/src/services/definitions/coreServices.ts
index f87bff023c..8c8c6c0f82 100644
--- a/packages/backend-plugin-api/src/services/definitions/coreServices.ts
+++ b/packages/backend-plugin-api/src/services/definitions/coreServices.ts
@@ -161,6 +161,19 @@ export namespace coreServices {
import('./LoggerService').LoggerService
>({ id: 'core.logger' });
+ /**
+ * Plugin-level auditing.
+ *
+ * See {@link AuditorService}
+ * and {@link https://backstage.io/docs/backend-system/core-services/auditor | the service docs}
+ * for more information.
+ *
+ * @public
+ */
+ export const auditor = createServiceRef<
+ import('./AuditorService').AuditorService
+ >({ id: 'core.auditor' });
+
/**
* Permission system integration for authorization of user actions.
*
@@ -174,6 +187,19 @@ export namespace coreServices {
import('./PermissionsService').PermissionsService
>({ id: 'core.permissions' });
+ /**
+ * Permission system integration for registering resources and permissions.
+ *
+ * See {@link PermissionsRegistryService}
+ * and {@link https://backstage.io/docs/backend-system/core-services/permission-integrations | the service docs}
+ * for more information.
+ *
+ * @public
+ */
+ export const permissionsRegistry = createServiceRef<
+ import('./PermissionsRegistryService').PermissionsRegistryService
+ >({ id: 'core.permissionsRegistry' });
+
/**
* Built-in service for accessing metadata about the current plugin.
*
diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts
index 1df00bdead..d6346cbe4e 100644
--- a/packages/backend-plugin-api/src/services/definitions/index.ts
+++ b/packages/backend-plugin-api/src/services/definitions/index.ts
@@ -14,43 +14,52 @@
* limitations under the License.
*/
-export { coreServices } from './coreServices';
+export type {
+ AuditorService,
+ AuditorServiceCreateEventOptions,
+ AuditorServiceEvent,
+ AuditorServiceEventSeverityLevel,
+} from './AuditorService';
export type {
AuthService,
BackstageCredentials,
- BackstageUserPrincipal,
- BackstageServicePrincipal,
+ BackstageNonePrincipal,
BackstagePrincipalAccessRestrictions,
BackstagePrincipalTypes,
- BackstageNonePrincipal,
+ BackstageServicePrincipal,
+ BackstageUserPrincipal,
} from './AuthService';
export type {
CacheService,
CacheServiceOptions,
CacheServiceSetOptions,
} from './CacheService';
-export type { RootConfigService } from './RootConfigService';
export type { DatabaseService } from './DatabaseService';
export type { DiscoveryService } from './DiscoveryService';
-export type { RootHealthService } from './RootHealthService';
+export type { HttpAuthService } from './HttpAuthService';
export type {
HttpRouterService,
HttpRouterServiceAuthPolicy,
} from './HttpRouterService';
-export type { HttpAuthService } from './HttpAuthService';
export type {
LifecycleService,
- LifecycleServiceStartupHook,
- LifecycleServiceStartupOptions,
LifecycleServiceShutdownHook,
LifecycleServiceShutdownOptions,
+ LifecycleServiceStartupHook,
+ LifecycleServiceStartupOptions,
} from './LifecycleService';
export type { LoggerService } from './LoggerService';
export type {
PermissionsService,
PermissionsServiceRequestOptions,
} from './PermissionsService';
+export type {
+ PermissionsRegistryService,
+ PermissionsRegistryServiceAddResourceTypeOptions,
+} from './PermissionsRegistryService';
export type { PluginMetadataService } from './PluginMetadataService';
+export type { RootConfigService } from './RootConfigService';
+export type { RootHealthService } from './RootHealthService';
export type { RootHttpRouterService } from './RootHttpRouterService';
export type { RootLifecycleService } from './RootLifecycleService';
export type { RootLoggerService } from './RootLoggerService';
@@ -65,15 +74,16 @@ export type {
SchedulerServiceTaskScheduleDefinitionConfig,
} from './SchedulerService';
export type {
+ UrlReaderService,
UrlReaderServiceReadTreeOptions,
UrlReaderServiceReadTreeResponse,
UrlReaderServiceReadTreeResponseDirOptions,
UrlReaderServiceReadTreeResponseFile,
- UrlReaderServiceReadUrlResponse,
UrlReaderServiceReadUrlOptions,
+ UrlReaderServiceReadUrlResponse,
UrlReaderServiceSearchOptions,
UrlReaderServiceSearchResponse,
UrlReaderServiceSearchResponseFile,
- UrlReaderService,
} from './UrlReaderService';
export type { BackstageUserInfo, UserInfoService } from './UserInfoService';
+export { coreServices } from './coreServices';
diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md
index da9418451f..f0d59590a8 100644
--- a/packages/backend-test-utils/CHANGELOG.md
+++ b/packages/backend-test-utils/CHANGELOG.md
@@ -1,5 +1,54 @@
# @backstage/backend-test-utils
+## 1.3.0-next.0
+
+### Minor Changes
+
+- dd05a97: Added mocks for the new `PermissionsRegistryService`.
+- a4aa244: This change introduces mocks for the `auditor` service.
+
+### Patch Changes
+
+- f866b86: Internal refactor to use explicit `require` for lazy-loading dependency.
+- fb051f2: Sync feature installation compatibility logic with `@backstage/backend-app-api`.
+- Updated dependencies
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/backend-app-api@1.1.2-next.0
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-events-node@0.4.8-next.0
+
+## 1.2.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/backend-app-api@1.1.1
+ - @backstage/types@1.2.1
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/config@1.3.2
+ - @backstage/errors@1.2.7
+ - @backstage/plugin-events-node@0.4.7
+
+## 1.2.1-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/types@1.2.1-next.0
+ - @backstage/backend-app-api@1.1.1-next.1
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/config@1.3.2-next.0
+ - @backstage/errors@1.2.7-next.0
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-events-node@0.4.7-next.1
+
## 1.2.1-next.0
### Patch Changes
diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json
index c70a36e1f4..030f470557 100644
--- a/packages/backend-test-utils/package.json
+++ b/packages/backend-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-test-utils",
- "version": "1.2.1-next.0",
+ "version": "1.3.0-next.0",
"description": "Test helpers library for Backstage backends",
"backstage": {
"role": "node-library"
diff --git a/packages/backend-test-utils/report.api.md b/packages/backend-test-utils/report.api.md
index a79bd9d03c..b358b268dc 100644
--- a/packages/backend-test-utils/report.api.md
+++ b/packages/backend-test-utils/report.api.md
@@ -8,6 +8,7 @@
///
///
+import { AuditorService } from '@backstage/backend-plugin-api';
import { AuthService } from '@backstage/backend-plugin-api';
import { Backend } from '@backstage/backend-app-api';
import { BackendFeature } from '@backstage/backend-plugin-api';
@@ -33,6 +34,7 @@ import { LifecycleService } from '@backstage/backend-plugin-api';
import { LoggerService } from '@backstage/backend-plugin-api';
import { ParamsDictionary } from 'express-serve-static-core';
import { ParsedQs } from 'qs';
+import { PermissionsRegistryService } from '@backstage/backend-plugin-api';
import { PermissionsService } from '@backstage/backend-plugin-api';
import { RootConfigService } from '@backstage/backend-plugin-api';
import { RootHealthService } from '@backstage/backend-plugin-api';
@@ -152,6 +154,15 @@ export function mockErrorHandler(): ErrorRequestHandler<
// @public
export namespace mockServices {
+ // (undocumented)
+ export namespace auditor {
+ const // (undocumented)
+ factory: () => ServiceFactory;
+ const // (undocumented)
+ mock: (
+ partialImpl?: Partial | undefined,
+ ) => ServiceMock;
+ }
// (undocumented)
export function auth(options?: {
pluginId?: string;
@@ -264,6 +275,19 @@ export namespace mockServices {
) => ServiceMock;
}
// (undocumented)
+ export namespace permissionsRegistry {
+ const // (undocumented)
+ factory: () => ServiceFactory<
+ PermissionsRegistryService,
+ 'plugin',
+ 'singleton'
+ >;
+ const // (undocumented)
+ mock: (
+ partialImpl?: Partial | undefined,
+ ) => ServiceMock;
+ }
+ // (undocumented)
export function rootConfig(options?: rootConfig.Options): RootConfigService;
// (undocumented)
export namespace rootConfig {
diff --git a/packages/backend-test-utils/src/cache/memcache.ts b/packages/backend-test-utils/src/cache/memcache.ts
index b7ac07cb13..e985ee1c7d 100644
--- a/packages/backend-test-utils/src/cache/memcache.ts
+++ b/packages/backend-test-utils/src/cache/memcache.ts
@@ -59,7 +59,8 @@ export async function startMemcachedContainer(
image: string,
): Promise {
// Lazy-load to avoid side-effect of importing testcontainers
- const { GenericContainer } = await import('testcontainers');
+ const { GenericContainer } =
+ require('testcontainers') as typeof import('testcontainers');
const container = await new GenericContainer(image)
.withExposedPorts(11211)
diff --git a/packages/backend-test-utils/src/cache/redis.ts b/packages/backend-test-utils/src/cache/redis.ts
index 6185e4d076..cd6e5c2893 100644
--- a/packages/backend-test-utils/src/cache/redis.ts
+++ b/packages/backend-test-utils/src/cache/redis.ts
@@ -57,7 +57,8 @@ export async function connectToExternalRedis(
export async function startRedisContainer(image: string): Promise {
// Lazy-load to avoid side-effect of importing testcontainers
- const { GenericContainer } = await import('testcontainers');
+ const { GenericContainer } =
+ require('testcontainers') as typeof import('testcontainers');
const container = await new GenericContainer(image)
.withExposedPorts(6379)
diff --git a/packages/backend-test-utils/src/database/mysql.ts b/packages/backend-test-utils/src/database/mysql.ts
index b27edb7f9d..a7c11d8452 100644
--- a/packages/backend-test-utils/src/database/mysql.ts
+++ b/packages/backend-test-utils/src/database/mysql.ts
@@ -72,7 +72,8 @@ export async function startMysqlContainer(image: string): Promise<{
const password = uuid();
// Lazy-load to avoid side-effect of importing testcontainers
- const { GenericContainer } = await import('testcontainers');
+ const { GenericContainer } =
+ require('testcontainers') as typeof import('testcontainers');
const container = await new GenericContainer(image)
.withExposedPorts(3306)
diff --git a/packages/backend-test-utils/src/database/postgres.ts b/packages/backend-test-utils/src/database/postgres.ts
index c8a946d121..e6122b9ab7 100644
--- a/packages/backend-test-utils/src/database/postgres.ts
+++ b/packages/backend-test-utils/src/database/postgres.ts
@@ -72,7 +72,8 @@ export async function startPostgresContainer(image: string): Promise<{
const password = uuid();
// Lazy-load to avoid side-effect of importing testcontainers
- const { GenericContainer } = await import('testcontainers');
+ const { GenericContainer } =
+ require('testcontainers') as typeof import('testcontainers');
const container = await new GenericContainer(image)
.withExposedPorts(5432)
diff --git a/packages/backend-test-utils/src/next/services/mockServices.ts b/packages/backend-test-utils/src/next/services/mockServices.ts
index b9bca62767..15026d5dda 100644
--- a/packages/backend-test-utils/src/next/services/mockServices.ts
+++ b/packages/backend-test-utils/src/next/services/mockServices.ts
@@ -21,6 +21,7 @@ import { httpRouterServiceFactory } from '@backstage/backend-defaults/httpRouter
import { lifecycleServiceFactory } from '@backstage/backend-defaults/lifecycle';
import { loggerServiceFactory } from '@backstage/backend-defaults/logger';
import { permissionsServiceFactory } from '@backstage/backend-defaults/permissions';
+import { permissionsRegistryServiceFactory } from '@backstage/backend-defaults/permissionsRegistry';
import { rootHealthServiceFactory } from '@backstage/backend-defaults/rootHealth';
import { rootHttpRouterServiceFactory } from '@backstage/backend-defaults/rootHttpRouter';
import { rootLifecycleServiceFactory } from '@backstage/backend-defaults/rootLifecycle';
@@ -47,12 +48,13 @@ import {
eventsServiceRef,
} from '@backstage/plugin-events-node';
import { JsonObject } from '@backstage/types';
+import { Knex } from 'knex';
import { MockAuthService } from './MockAuthService';
import { MockHttpAuthService } from './MockHttpAuthService';
import { MockRootLoggerService } from './MockRootLoggerService';
import { MockUserInfoService } from './MockUserInfoService';
import { mockCredentials } from './mockCredentials';
-import { Knex } from 'knex';
+import { auditorServiceFactory } from '@backstage/backend-defaults/auditor';
/** @internal */
function createLoggerMock() {
@@ -220,6 +222,19 @@ export namespace mockServices {
}));
}
+ export namespace auditor {
+ export const factory = () => auditorServiceFactory;
+
+ export const mock = simpleMock(coreServices.auditor, () => ({
+ createEvent: jest.fn(async _ => {
+ return {
+ success: jest.fn(),
+ fail: jest.fn(),
+ };
+ }),
+ }));
+ }
+
export function auth(options?: {
pluginId?: string;
disableDefaultAuthPolicy?: boolean;
@@ -468,6 +483,15 @@ export namespace mockServices {
}));
}
+ export namespace permissionsRegistry {
+ export const factory = () => permissionsRegistryServiceFactory;
+ export const mock = simpleMock(coreServices.permissionsRegistry, () => ({
+ addPermissionRules: jest.fn(),
+ addPermissions: jest.fn(),
+ addResourceType: jest.fn(),
+ }));
+ }
+
export namespace rootLifecycle {
export const factory = () => rootLifecycleServiceFactory;
export const mock = simpleMock(coreServices.rootLifecycle, () => ({
diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.ts
index 4471f6ed24..20d02cf880 100644
--- a/packages/backend-test-utils/src/next/wiring/TestBackend.ts
+++ b/packages/backend-test-utils/src/next/wiring/TestBackend.ts
@@ -67,6 +67,7 @@ export interface TestBackend extends Backend {
export const defaultServiceFactories = [
mockServices.auth.factory(),
+ mockServices.auditor.factory(),
mockServices.cache.factory(),
mockServices.rootConfig.factory(),
mockServices.database.factory(),
@@ -75,6 +76,7 @@ export const defaultServiceFactories = [
mockServices.lifecycle.factory(),
mockServices.logger.factory(),
mockServices.permissions.factory(),
+ mockServices.permissionsRegistry.factory(),
mockServices.rootHealth.factory(),
mockServices.rootLifecycle.factory(),
mockServices.rootLogger.factory(),
@@ -209,10 +211,19 @@ function isPromise(value: unknown | Promise): value is Promise {
);
}
+// Same as in the backend-app-api, handles double defaults from dynamic imports
function unwrapFeature(
- feature: BackendFeature | (() => BackendFeature),
+ feature: BackendFeature | { default: BackendFeature },
): BackendFeature {
- return typeof feature === 'function' ? feature() : feature;
+ if ('$$type' in feature) {
+ return feature;
+ }
+
+ if ('default' in feature) {
+ return feature.default;
+ }
+
+ return feature;
}
const backendInstancesToCleanUp = new Array();
diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md
index 81759b2fa1..7ac873d818 100644
--- a/packages/backend/CHANGELOG.md
+++ b/packages/backend/CHANGELOG.md
@@ -1,5 +1,130 @@
# example-backend
+## 0.0.35-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-permission-node@0.8.8-next.0
+ - @backstage/plugin-notifications-backend@0.5.2-next.0
+ - @backstage/backend-defaults@0.8.0-next.0
+ - @backstage/plugin-catalog-backend@1.31.0-next.0
+ - @backstage/plugin-kubernetes-backend@0.19.3-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.5-next.0
+ - @backstage/backend-plugin-api@1.2.0-next.0
+ - @backstage/plugin-scaffolder-backend@1.30.0-next.0
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.7-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.3.1-next.0
+ - @backstage/plugin-devtools-backend@0.5.2-next.0
+ - @backstage/plugin-permission-backend@0.5.54-next.0
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.5-next.0
+ - @backstage/plugin-search-backend@1.8.2-next.0
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-app-backend@0.4.5-next.0
+ - @backstage/plugin-auth-backend@0.24.3-next.0
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.5-next.0
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.5-next.0
+ - @backstage/plugin-auth-node@0.5.7-next.0
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.5-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.0
+ - @backstage/plugin-events-backend@0.4.2-next.0
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-proxy-backend@0.5.11-next.0
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.6-next.0
+ - @backstage/plugin-scaffolder-backend-module-notifications@0.1.7-next.0
+ - @backstage/plugin-search-backend-module-explore@0.2.8-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.0
+ - @backstage/plugin-search-backend-node@1.3.8-next.0
+ - @backstage/plugin-signals-backend@0.3.1-next.0
+ - @backstage/plugin-techdocs-backend@1.11.6-next.0
+
+## 0.0.34
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.5
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.6
+ - @backstage/plugin-devtools-backend@0.5.1
+ - @backstage/plugin-signals-backend@0.3.0
+ - @backstage/backend-defaults@0.7.0
+ - @backstage/plugin-scaffolder-backend@1.29.0
+ - @backstage/plugin-proxy-backend@0.5.10
+ - @backstage/plugin-search-backend-module-catalog@0.3.0
+ - @backstage/plugin-techdocs-backend@1.11.5
+ - @backstage/plugin-permission-backend@0.5.53
+ - @backstage/plugin-catalog-backend@1.30.0
+ - @backstage/plugin-permission-node@0.8.7
+ - @backstage/plugin-events-backend@0.4.1
+ - @backstage/plugin-app-backend@0.4.4
+ - @backstage/plugin-auth-node@0.5.6
+ - @backstage/plugin-notifications-backend@0.5.1
+ - @backstage/plugin-auth-backend@0.24.2
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.4
+ - @backstage/backend-plugin-api@1.1.1
+ - @backstage/catalog-model@1.7.3
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.4
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.4
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4
+ - @backstage/plugin-kubernetes-backend@0.19.2
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.4
+ - @backstage/plugin-permission-common@0.8.4
+ - @backstage/plugin-scaffolder-backend-module-notifications@0.1.6
+ - @backstage/plugin-search-backend@1.8.1
+ - @backstage/plugin-search-backend-module-explore@0.2.7
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5
+ - @backstage/plugin-search-backend-node@1.3.7
+
+## 0.0.34-next.2
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-defaults@0.7.0-next.1
+ - @backstage/backend-plugin-api@1.1.1-next.1
+ - @backstage/catalog-model@1.7.3-next.0
+ - @backstage/plugin-app-backend@0.4.4-next.1
+ - @backstage/plugin-auth-backend@0.24.2-next.1
+ - @backstage/plugin-auth-node@0.5.6-next.1
+ - @backstage/plugin-catalog-backend@1.30.0-next.1
+ - @backstage/plugin-catalog-backend-module-openapi@0.2.6-next.1
+ - @backstage/plugin-devtools-backend@0.5.1-next.1
+ - @backstage/plugin-events-backend@0.4.1-next.1
+ - @backstage/plugin-kubernetes-backend@0.19.2-next.1
+ - @backstage/plugin-permission-common@0.8.4-next.0
+ - @backstage/plugin-proxy-backend@0.5.10-next.1
+ - @backstage/plugin-scaffolder-backend@1.29.0-next.2
+ - @backstage/plugin-search-backend@1.8.1-next.1
+ - @backstage/plugin-signals-backend@0.3.0-next.2
+ - @backstage/plugin-auth-backend-module-github-provider@0.2.4-next.1
+ - @backstage/plugin-notifications-backend@0.5.1-next.1
+ - @backstage/plugin-permission-backend@0.5.53-next.1
+ - @backstage/plugin-permission-node@0.8.7-next.1
+ - @backstage/plugin-search-backend-node@1.3.7-next.1
+ - @backstage/plugin-techdocs-backend@1.11.5-next.2
+ - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.4-next.1
+ - @backstage/plugin-auth-backend-module-guest-provider@0.2.4-next.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4-next.1
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4-next.1
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.4-next.1
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.5-next.2
+ - @backstage/plugin-scaffolder-backend-module-notifications@0.1.6-next.1
+ - @backstage/plugin-search-backend-module-catalog@0.3.0-next.1
+ - @backstage/plugin-search-backend-module-explore@0.2.7-next.1
+ - @backstage/plugin-search-backend-module-techdocs@0.3.5-next.1
+
+## 0.0.34-next.1
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-backend-module-github@0.5.5-next.1
+ - @backstage/plugin-signals-backend@0.3.0-next.1
+ - @backstage/plugin-techdocs-backend@1.11.5-next.1
+ - @backstage/plugin-scaffolder-backend@1.29.0-next.1
+ - @backstage/plugin-notifications-backend@0.5.1-next.0
+
## 0.0.34-next.0
### Patch Changes
diff --git a/packages/backend/package.json b/packages/backend/package.json
index efcc7ab4b0..0cf4567667 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -1,6 +1,6 @@
{
"name": "example-backend",
- "version": "0.0.34-next.0",
+ "version": "0.0.35-next.0",
"backstage": {
"role": "backend"
},
diff --git a/packages/canon/.storybook/main.ts b/packages/canon/.storybook/main.ts
index cf7921268e..8bf24a7e23 100644
--- a/packages/canon/.storybook/main.ts
+++ b/packages/canon/.storybook/main.ts
@@ -9,11 +9,7 @@ function getAbsolutePath(value: string): any {
return dirname(require.resolve(join(value, 'package.json')));
}
const config: StorybookConfig = {
- stories: [
- '../docs/**/*.mdx',
- '../src/components/**/*.mdx',
- '../src/components/**/*.stories.@(js|jsx|mjs|ts|tsx)',
- ],
+ stories: ['../src/components/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
staticDirs: ['../static'],
addons: [
getAbsolutePath('@storybook/addon-webpack5-compiler-swc'),
diff --git a/packages/canon/.storybook/preview.tsx b/packages/canon/.storybook/preview.tsx
index 1ac53acd86..fbc319ccea 100644
--- a/packages/canon/.storybook/preview.tsx
+++ b/packages/canon/.storybook/preview.tsx
@@ -2,9 +2,6 @@ import React from 'react';
import type { Preview, ReactRenderer } from '@storybook/react';
import { withThemeByDataAttribute } from '@storybook/addon-themes';
-// Storybook specific styles
-import '../docs/components/styles.css';
-
// Canon specific styles
import '../src/css/core.css';
import '../src/css/components.css';
@@ -32,43 +29,43 @@ const preview: Preview = {
},
viewport: {
viewports: {
- xs: {
- name: 'XSmall',
+ initial: {
+ name: 'Initial',
styles: {
width: '320px',
height: '100%',
},
},
- small: {
- name: 'Small',
+ xs: {
+ name: 'Extra Small',
styles: {
width: '640px',
height: '100%',
},
},
- medium: {
- name: 'Medium',
+ sm: {
+ name: 'Small',
styles: {
width: '768px',
height: '100%',
},
},
- large: {
- name: 'Large',
+ md: {
+ name: 'Medium',
styles: {
width: '1024px',
height: '100%',
},
},
- xlarge: {
- name: 'XLarge',
+ lg: {
+ name: 'Large',
styles: {
width: '1280px',
height: '100%',
},
},
- '2xl': {
- name: '2XL',
+ xl: {
+ name: 'Extra Large',
styles: {
width: '1536px',
height: '100%',
@@ -88,12 +85,11 @@ const preview: Preview = {
defaultTheme: 'Light',
}),
Story => {
- document.body.style.backgroundColor = 'var(--canon-background)';
+ document.body.style.backgroundColor = 'var(--canon-bg)';
const docsStoryElements = document.getElementsByClassName('docs-story');
Array.from(docsStoryElements).forEach(element => {
- (element as HTMLElement).style.backgroundColor =
- 'var(--canon-background)';
+ (element as HTMLElement).style.backgroundColor = 'var(--canon-bg)';
});
return (
diff --git a/packages/canon/.storybook/themes/backstage.css b/packages/canon/.storybook/themes/backstage.css
index 5777f303b6..92884fa4e7 100644
--- a/packages/canon/.storybook/themes/backstage.css
+++ b/packages/canon/.storybook/themes/backstage.css
@@ -1,18 +1,8 @@
-[data-theme='backstage-light'] {
- /* Colors */
- --canon-accent: #2e77d0;
- --canon-background: #f8f8f8;
- --canon-surface-1: #fff;
- --canon-surface-2: #f4f4f4;
-
- /* Text colors */
- --canon-text-primary: #000;
- --canon-text-primary-on-accent: #fff;
- --canon-text-secondary: #646464;
-
+[data-theme-name='legacy'][data-theme='light'],
+[data-theme-name='legacy'][data-theme='dark'] {
--canon-font-regular: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;
- .cn-button {
+ .canon-Button {
border-radius: 60px;
font-weight: 400;
text-transform: uppercase;
@@ -30,7 +20,7 @@
box-shadow: none;
}
- &.cn-button-primary {
+ &.canon-Button--variant-primary {
color: #fff;
background-color: rgb(21, 58, 102);
box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2),
@@ -43,7 +33,7 @@
}
}
- &.cn-button-secondary {
+ &.canon-Button--variant-secondary {
background-color: transparent;
border: 1px solid rgba(31, 84, 147, 0.5);
color: #1f5493;
@@ -54,7 +44,7 @@
}
}
- &.cn-button-tertiary {
+ &.canon-Button--variant-tertiary {
background-color: transparent;
border: none;
color: #1f5493;
@@ -62,15 +52,37 @@
}
}
-[data-theme='backstage-dark'] {
+[data-theme-name='legacy'][data-theme='light'] {
/* Colors */
- --canon-accent: #2e77d0;
- --canon-background: #000;
- --canon-surface-1: #121212;
- --canon-surface-2: #1a1a1a;
+ --canon-bg-accent: #2e77d0;
+ --canon-bg: #f8f8f8;
+ --canon-bg-elevated: #fff;
+ --canon-bg: #f4f4f4;
+
+ /* Text colors */
+ --canon-text-primary: #000;
+ --canon-fg-accent: #fff;
+ --canon-text-secondary: #646464;
+}
+
+[data-theme-name='legacy'][data-theme='dark'] {
+ /* Colors */
+ --canon-bg-accent: #fff;
+ --canon-bg: #000;
+ --canon-bg-elevated: #121212;
+ --canon-bg: #1a1a1a;
+
+ /* Borders */
+ --canon-border: rgba(255, 255, 255, 0.2);
+ --canon-border-warning: #f50000;
+ --canon-border-danger: #f87503;
+ --canon-border-focus: #25d262;
+
+ /* States - Add more states */
+ --canon-fg-danger: #f50000;
/* Text colors */
--canon-text-primary: #fff;
- --canon-text-primary-on-accent: #000;
+ --canon-fg-accent: #000;
--canon-text-secondary: #b3b3b3;
}
diff --git a/packages/canon/CHANGELOG.md b/packages/canon/CHANGELOG.md
new file mode 100644
index 0000000000..ea2b912e5d
--- /dev/null
+++ b/packages/canon/CHANGELOG.md
@@ -0,0 +1,7 @@
+# @backstage/canon
+
+## 0.1.0-next.0
+
+### Minor Changes
+
+- 65f4acc: This is the first alpha release for Canon. As part of this release we are introducing 5 layout components and 7 components. All theming is done through CSS variables.
diff --git a/packages/canon/README.md b/packages/canon/README.md
index a8bf36d7be..0783d01736 100644
--- a/packages/canon/README.md
+++ b/packages/canon/README.md
@@ -1,6 +1,6 @@
# @backstage/canon
-_This package was created through the Backstage CLI_.
+Canon is a UI component library for Backstage.
## Installation
@@ -10,3 +10,9 @@ Install the package via Yarn:
cd # if within a monorepo
yarn add @backstage/canon
```
+
+## Documentation
+
+- [Canon Documentation](https://canon.backstage.io)
+- [Backstage Readme](https://github.com/backstage/backstage/blob/master/README.md)
+- [Backstage Documentation](https://backstage.io/docs)
diff --git a/packages/canon/docs/Home.mdx b/packages/canon/docs/Home.mdx
deleted file mode 100644
index 5b85ab15ad..0000000000
--- a/packages/canon/docs/Home.mdx
+++ /dev/null
@@ -1,91 +0,0 @@
-import { Unstyled } from '@storybook/blocks';
-import {
- Columns,
- Text,
- ComponentStatus,
- Banner,
- Title,
- Roadmap,
-} from './components';
-import { list } from './components/Roadmap/list';
-
-
-
-
-
-
- Welcome to the Canon, the new design library for Backstage plugins. This
- project is still under active development but we will make sure to document
- the API as we go. We are aiming to improve the general UI of Backstage and
- plugins across Backstage. This new library will take time to build but we are
- building it incrementally with not conflict with the existing theming system.
-
-
-
- This library is still under heavy construction. Please be aware that the API
- will change until we reach a stable release.
-
-
-
- Component Status
-
-
- We are still in the process of documenting the API and building the
- components. You can use the statuses below to see what is ready and what is
- coming soon. If there is a component missing that you need, please let us know
- by opening an issue on GitHub.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Roadmap
-
-
-
-
-
diff --git a/packages/canon/docs/Iconography.mdx b/packages/canon/docs/Iconography.mdx
deleted file mode 100644
index 83d181af12..0000000000
--- a/packages/canon/docs/Iconography.mdx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { Unstyled, Source, Meta } from '@storybook/blocks';
-import { Title, Text, IconLibrary } from './components';
-
-
-
-
-
-Iconography
-
-
- All our default icons are provided by [Remix Icon](https://remixicon.com/). We
- don't import all icons to reduce the bundle size but we cherry pick a nice
- selection for you to use in your application. The list of names is set down
- below. To use an icon, you can use the `Icon` component and pass the name of
- the icon you want to use.
-
-
-`} language="tsx" dark />
-
-
-
-
diff --git a/packages/canon/docs/Layout.mdx b/packages/canon/docs/Layout.mdx
deleted file mode 100644
index 9145f71aed..0000000000
--- a/packages/canon/docs/Layout.mdx
+++ /dev/null
@@ -1,54 +0,0 @@
-import { Unstyled, Source, Meta } from '@storybook/blocks';
-import { Title, Text, LayoutComponents } from './components';
-import * as Table from './components/Table';
-
-
-
-
-
-Layout
-
- Canon is made for extensibility. We built this library to make it easy for any
- Backstage plugin creator to be able to build their ideas at speed ensuring
- consistency across the rest of your ecosystem. Each component is designed to
- be editable to match your need but sometimes you want to have more control
- over the layout of your page. To help you with that, we created a set of
- layout components that you can use to build your own layouts. All of these
- components are built to extend on our theming system, making it easy for you
- to build your own layouts. Sometimes these components are not enough so we
- created a set of helpers to be used with any CSS-in-JS library.
-
-
-Layout Components
-
-
- We built a couple of layout components to help you build responsive elements
- that will be consistent with the rest of your Backstage instance. These
- components are opinionated and use TypeScript to ensure that the props you
- provide are the ones coming from the theme.
-
-
-
- Hello World
-
- Project 1
- Project 2
-
-`}
- language="tsx"
- dark
-/>
-
-
-
-Layout Helpers
-
-
- Sometimes you want to use global tokens dynamically outside of React
- components. To help you with that we would like to provide a set of helpers
- that you can use in your code. These helpers are not available just yet but we
- are working on it.
-
-
-
diff --git a/packages/canon/docs/Typography.mdx b/packages/canon/docs/Typography.mdx
deleted file mode 100644
index 802b9881be..0000000000
--- a/packages/canon/docs/Typography.mdx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { Unstyled, Meta, Canvas } from '@storybook/blocks';
-import {
- Columns,
- Text,
- ComponentStatus,
- Banner,
- Title,
- Roadmap,
-} from './components';
-import { list } from './components/Roadmap/list';
-import * as HeadingStories from '../src/components/Heading/Heading.stories';
-import * as TextStories from '../src/components/Text/Text.stories';
-
-
-
-
-
-Typography
-
- Canon offers a suite of typography components designed to seamlessly align
- with the rest of your Backstage instance. While you can customize their
- appearance to match your brand, the underlying API remains consistent and
- unchanged. Each component is built on a responsive structure, allowing you to
- define different typography values for various breakpoints.
-
-
-Heading
-
- Headings are used to structure the content of your page. They are used to
- create a hierarchy of information and to make the content more readable. The
- best way to use add these headings to your page is to import the [Heading
- component](?path=/docs/components-heading--docs).
-
-
-
-
-Text
-
- Canon provides four distinct text variants, each offering different font sizes
- carefully designed to cover the majority of use cases. These variants are
- versatile and can be paired with regular and bold of font weights. You can use
- the [Text component](?path=/docs/components-text--docs) to add text to your
- page.
-
-
-
-
-
diff --git a/packages/canon/docs/components/Banner/styles.css b/packages/canon/docs/components/Banner/styles.css
deleted file mode 100644
index d20e14ce0b..0000000000
--- a/packages/canon/docs/components/Banner/styles.css
+++ /dev/null
@@ -1,37 +0,0 @@
-.banner {
- display: flex;
- align-items: center;
- font-size: 16px;
- line-height: 28px;
- padding: 16px;
- border-radius: 6px;
- margin-bottom: 16px;
- border: 1px solid #e0e0e0;
-
- & > p {
- margin: 0;
- }
-
- &.info {
- background-color: #f2f2f2;
- border-color: #cdcdcd;
- color: #888888;
- }
-
- &.warning {
- background-color: #fff2b9;
- border-color: #ffd000;
- color: #d79927;
- }
-
- & .icon {
- width: 32px;
- height: 32px;
- background-color: rgba(215, 153, 39, 0.2);
- border-radius: 6px;
- margin-right: 16px;
- display: flex;
- align-items: center;
- justify-content: center;
- }
-}
diff --git a/packages/canon/docs/components/ComponentStatus/ComponentStatus.tsx b/packages/canon/docs/components/ComponentStatus/ComponentStatus.tsx
deleted file mode 100644
index 0159e27b32..0000000000
--- a/packages/canon/docs/components/ComponentStatus/ComponentStatus.tsx
+++ /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 React from 'react';
-
-export const ComponentStatus = ({
- name,
- status = 'notStarted',
- style,
- link,
-}: {
- name: string;
- status: 'notStarted' | 'inProgress' | 'alpha' | 'beta' | 'stable';
- style?: React.CSSProperties;
- link?: string;
-}) => {
- return (
-
- {link ? (
-
- {name}
-
- ) : (
-
{name}
- )}
-
- {status === 'notStarted' && 'Not Started'}
- {status === 'inProgress' && 'In Progress'}
- {status === 'alpha' && 'Alpha'}
- {status === 'beta' && 'Beta'}
- {status === 'stable' && 'Stable'}
-
-
- );
-};
diff --git a/packages/canon/docs/components/ComponentStatus/styles.css b/packages/canon/docs/components/ComponentStatus/styles.css
deleted file mode 100644
index 6ef02ccf3f..0000000000
--- a/packages/canon/docs/components/ComponentStatus/styles.css
+++ /dev/null
@@ -1,71 +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.
- */
-
-.component-status {
- display: flex;
- justify-content: space-between;
-
- & .title {
- color: #3b59ff;
- font-size: 16px;
- font-weight: 400;
- text-decoration: none;
- }
-
- & .pill {
- display: inline-flex;
- align-items: center;
- color: #000;
- border-radius: 40px;
- padding: 0px 8px;
- height: 24px;
- font-size: 12px;
- font-weight: 600;
- border-style: solid;
- border-width: 1px;
- margin-left: 8px;
-
- &.notStarted {
- background-color: #f2f2f2;
- border-color: #cdcdcd;
- color: #888888;
- }
-
- &.inProgress {
- background-color: #fff2b9;
- border-color: #ffd000;
- color: #d79927;
- }
-
- &.alpha {
- background-color: #d7f9d7;
- border-color: #4ed14a;
- color: #3a9837;
- }
-
- &.beta {
- background-color: #d7f9d7;
- border-color: #4ed14a;
- color: #3a9837;
- }
-
- &.stable {
- background-color: #d7f9d7;
- border-color: #4ed14a;
- color: #3a9837;
- }
- }
-}
diff --git a/packages/canon/docs/components/LayoutComponents/LayoutComponents.tsx b/packages/canon/docs/components/LayoutComponents/LayoutComponents.tsx
deleted file mode 100644
index 56f389a389..0000000000
--- a/packages/canon/docs/components/LayoutComponents/LayoutComponents.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2024 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React from 'react';
-import { BoxSvg } from './svgs/box';
-import { StackSvg } from './svgs/stack';
-import { GridSvg } from './svgs/grid';
-import { InlineSvg } from './svgs/inline';
-import { ContainerSvg } from './svgs/container';
-
-export const LayoutComponents = () => {
- return (
-
-
-
-
-
-
Box
-
The most basic layout component
-
-
-
-
-
-
Stack
-
Arrange your components vertically
-
-
-
-
-
-
Grid
-
Arrange your components in a grid
-
-
-
-
-
-
Inline
-
Arrange your components in a row
-
-
-
-
-
-
Container
-
A container for your components
-
-
- );
-};
diff --git a/packages/canon/docs/components/PropsTable/PropsTable.tsx b/packages/canon/docs/components/PropsTable/PropsTable.tsx
deleted file mode 100644
index a3dc9e271c..0000000000
--- a/packages/canon/docs/components/PropsTable/PropsTable.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2024 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React from 'react';
-import * as Table from '..';
-import { Chip } from '..';
-
-// Modify the PropsTable component to accept a generic type
-export const PropsTable = >({
- data,
-}: {
- data: T;
-}) => {
- return (
-
-
-
- Prop
- Type
- Responsive
-
-
-
- {Object.keys(data).map(n => (
-
-
- {n}
-
-
- {Array.isArray(data[n].type) ? (
- data[n].type.map((t: any) => {t})
- ) : (
- {data[n].type}
- )}
-
-
- {data[n].responsive ? 'Yes' : 'No'}
-
-
- ))}
-
-
- );
-};
diff --git a/packages/canon/docs/components/PropsTable/getProps.ts b/packages/canon/docs/components/PropsTable/getProps.ts
deleted file mode 100644
index 5773eaeb27..0000000000
--- a/packages/canon/docs/components/PropsTable/getProps.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2024 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export function getProps(styles: Record) {
- return Object.keys(styles).reduce(
- (acc: Record, n) => {
- const style = styles[n];
-
- let values: string[] = [];
-
- if (style.values) {
- // If values exist, use them
- values = Object.keys(style.values);
- } else if (style.mappings && style.mappings.length > 0) {
- // If mappings exist, use the first mapping's values
- const firstMapping = style.mappings[0];
- values = Object.keys(styles[firstMapping].values);
- } else {
- // Default to an empty array if neither values nor mappings exist
- values = [];
- }
-
- acc[n] = {
- type: values,
- responsive: true,
- };
- return acc;
- },
- {} as Record,
- );
-}
diff --git a/packages/canon/docs/components/Table/styles.css b/packages/canon/docs/components/Table/styles.css
deleted file mode 100644
index ed56774a85..0000000000
--- a/packages/canon/docs/components/Table/styles.css
+++ /dev/null
@@ -1,72 +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.
- */
-
-.sb-table-wrapper {
- border: 1px solid #e7e7e7;
- border-radius: 4px;
- overflow: hidden;
-
- & .sb-table {
- width: 100%;
- margin: 0 !important;
- padding: 0 !important;
- border-spacing: 0px;
- border-collapse: collapse;
- }
-
- & .sb-table-cell {
- padding: 12px 16px !important;
- border: none !important;
- text-align: left;
- background-color: white !important;
- font-size: 16px;
-
- & p {
- margin: 0;
- }
- }
-
- & .sb-table-header-cell {
- background-color: #f5f5f5 !important;
- border-bottom: 1px solid #e7e7e7 !important;
- font-weight: 500;
- font-size: 14px;
- }
-
- & .sb-table-row {
- border: none;
- border-bottom: 1px solid #e7e7e7;
- &:last-child {
- border-bottom: none;
- }
- }
-
- & .sb-table-chip {
- display: inline-block;
- font-size: 14px !important;
- border: 1px solid #e7e7e7;
- border-radius: 6px;
- padding: 0px 6px;
- height: 24px;
- }
-
- & .sb-table-type {
- display: flex;
- flex-wrap: wrap;
- flex-direction: row;
- gap: 8px;
- }
-}
diff --git a/packages/canon/docs/components/Title/Title.tsx b/packages/canon/docs/components/Title/Title.tsx
deleted file mode 100644
index 59fefad8f9..0000000000
--- a/packages/canon/docs/components/Title/Title.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2024 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React from 'react';
-
-export const Title = ({
- children,
- style,
- type = 'h1',
-}: {
- children: React.ReactNode;
- style?: React.CSSProperties;
- type?: 'h1' | 'h2' | 'h3';
-}) => {
- let Component = 'h1';
- if (type === 'h1') Component = 'h1';
- if (type === 'h2') Component = 'h2';
- if (type === 'h3') Component = 'h3';
-
- return React.createElement(Component, {
- className: `sb-title ${type}`,
- style,
- children,
- });
-};
diff --git a/packages/canon/docs/components/index.ts b/packages/canon/docs/components/index.ts
deleted file mode 100644
index 0e5ff2e325..0000000000
--- a/packages/canon/docs/components/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2024 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export * from './Banner';
-export * from './Chip';
-export * from './Columns';
-export * from './ComponentStatus';
-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
deleted file mode 100644
index 706b1626b3..0000000000
--- a/packages/canon/docs/components/styles.css
+++ /dev/null
@@ -1,15 +0,0 @@
-.sbdocs-content {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,
- Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
-}
-
-@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 23c40300f1..2ac1189ea3 100644
--- a/packages/canon/package.json
+++ b/packages/canon/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/canon",
- "version": "0.0.0",
+ "version": "0.1.0-next.0",
"backstage": {
"role": "web-library"
},
@@ -9,11 +9,10 @@
"main": "dist/index.esm.js",
"types": "dist/index.d.ts"
},
- "private": true,
"keywords": [
"backstage"
],
- "homepage": "https://backstage.io",
+ "homepage": "https://canon.backstage.io",
"repository": {
"type": "git",
"url": "https://github.com/backstage/backstage",
@@ -27,7 +26,9 @@
"dist"
],
"scripts": {
- "build": "backstage-cli package build",
+ "build": "yarn build:app && yarn build:css",
+ "build:app": "backstage-cli package build",
+ "build:css": "node scripts/build-css.mjs",
"build-storybook": "storybook build",
"clean": "backstage-cli package clean",
"lint": "backstage-cli package lint",
@@ -37,31 +38,35 @@
"test": "backstage-cli package test"
},
"dependencies": {
- "@base-ui-components/react": "^1.0.0-alpha.4",
- "@remixicon/react": "^4.5.0"
+ "@base-ui-components/react": "^1.0.0-alpha.5",
+ "@remixicon/react": "^4.5.0",
+ "clsx": "^2.1.1"
},
"devDependencies": {
"@backstage/cli": "workspace:^",
"@chromatic-com/storybook": "^3.2.2",
- "@storybook/addon-essentials": "^8.4.7",
- "@storybook/addon-interactions": "^8.4.7",
+ "@storybook/addon-essentials": "^8.5.0",
+ "@storybook/addon-interactions": "^8.5.0",
"@storybook/addon-styling-webpack": "^1.0.1",
- "@storybook/addon-themes": "^8.4.7",
- "@storybook/addon-webpack5-compiler-swc": "^1.0.5",
- "@storybook/blocks": "^8.4.7",
- "@storybook/react": "^8.4.7",
- "@storybook/react-webpack5": "^8.4.7",
- "@storybook/test": "^8.4.7",
+ "@storybook/addon-themes": "^8.5.0",
+ "@storybook/addon-webpack5-compiler-swc": "^2.0.0",
+ "@storybook/blocks": "^8.5.0",
+ "@storybook/react": "^8.5.0",
+ "@storybook/react-webpack5": "^8.5.0",
+ "@storybook/test": "^8.5.0",
"@testing-library/jest-dom": "^6.0.0",
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
+ "chalk": "^5.4.1",
"eslint-plugin-storybook": "^0.11.1",
+ "glob": "^11.0.1",
"globals": "^15.11.0",
+ "lightningcss": "^1.29.1",
"mini-css-extract-plugin": "^2.9.2",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
- "storybook": "^8.4.7"
+ "storybook": "^8.5.0"
},
"peerDependencies": {
"@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0",
diff --git a/packages/canon/report.api.md b/packages/canon/report.api.md
index e725d0ac8b..8899f6ad45 100644
--- a/packages/canon/report.api.md
+++ b/packages/canon/report.api.md
@@ -5,9 +5,13 @@
```ts
///
+import type { CSSProperties } from 'react';
+import { Field as Field_2 } from '@base-ui-components/react/field';
import { ForwardRefExoticComponent } from 'react';
+import { Input as Input_2 } from '@base-ui-components/react/input';
import { default as React_2 } from 'react';
import * as React_3 from 'react';
+import { ReactNode } from 'react';
import { RefAttributes } from 'react';
// @public (undocumented)
@@ -64,7 +68,7 @@ export interface BoxProps extends UtilityProps {
}
// @public (undocumented)
-export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
+export type Breakpoint = 'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
// @public (undocumented)
export const Button: React_2.ForwardRefExoticComponent<
@@ -76,6 +80,8 @@ export interface ButtonProps {
// (undocumented)
children: React.ReactNode;
// (undocumented)
+ className?: string;
+ // (undocumented)
disabled?: boolean;
// (undocumented)
iconEnd?: IconNames;
@@ -84,6 +90,8 @@ export interface ButtonProps {
// (undocumented)
size?: 'small' | 'medium' | Partial>;
// (undocumented)
+ style?: React.CSSProperties;
+ // (undocumented)
variant?:
| 'primary'
| 'secondary'
@@ -91,6 +99,23 @@ export interface ButtonProps {
| Partial>;
}
+// @public (undocumented)
+export interface CanonContextProps {
+ // (undocumented)
+ icons: IconMap;
+}
+
+// @public (undocumented)
+export const CanonProvider: (props: CanonProviderProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export interface CanonProviderProps {
+ // (undocumented)
+ children?: ReactNode;
+ // (undocumented)
+ overrides?: Partial>;
+}
+
// @public (undocumented)
export const Checkbox: React_2.ForwardRefExoticComponent<
CheckboxProps & React_2.RefAttributes
@@ -153,6 +178,36 @@ export interface ContainerProps {
// @public (undocumented)
export type Display = 'none' | 'flex' | 'block' | 'inline';
+// @public (undocumented)
+export const Field: {
+ Root: React_2.ForwardRefExoticComponent<
+ Omit, 'ref'> &
+ React_2.RefAttributes
+ >;
+ Label: React_2.ForwardRefExoticComponent<
+ Omit, 'ref'> &
+ React_2.RefAttributes
+ >;
+ Description: React_2.ForwardRefExoticComponent<
+ Omit<
+ Field_2.Description.Props & React_2.RefAttributes,
+ 'ref'
+ > &
+ React_2.RefAttributes
+ >;
+ Error: React_2.ForwardRefExoticComponent<
+ Omit, 'ref'> &
+ React_2.RefAttributes
+ >;
+ Validity: ({
+ children,
+ className,
+ ...props
+ }: Field_2.Validity.Props & {
+ className?: string | undefined;
+ }) => React_2.JSX.Element;
+};
+
// @public (undocumented)
export type FlexDirection = 'row' | 'column';
@@ -200,6 +255,37 @@ export interface GridProps extends SpaceProps {
style?: React.CSSProperties;
}
+// @public (undocumented)
+export const Heading: React_2.ForwardRefExoticComponent<
+ HeadingProps & React_2.RefAttributes
+>;
+
+// @public (undocumented)
+export interface HeadingProps {
+ // (undocumented)
+ as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
+ // (undocumented)
+ children: React.ReactNode;
+ // (undocumented)
+ className?: string;
+ // (undocumented)
+ style?: React.CSSProperties;
+ // (undocumented)
+ variant?:
+ | 'display'
+ | 'title1'
+ | 'title2'
+ | 'title3'
+ | 'title4'
+ | 'title5'
+ | Partial<
+ Record<
+ Breakpoint,
+ 'display' | 'title1' | 'title2' | 'title3' | 'title4' | 'title5'
+ >
+ >;
+}
+
// @public (undocumented)
export const Icon: (props: IconProps) => React_2.JSX.Element;
@@ -222,16 +308,24 @@ export type IconNames =
| 'chevronRight'
| 'chevronUp'
| 'cloud'
+ | 'externalLink'
| 'heart'
+ | 'moon'
| 'plus'
+ | 'sun'
| 'trash';
// @public (undocumented)
export type IconProps = {
name: IconNames;
size?: number;
+ className?: string;
+ style?: React.CSSProperties;
};
+// @public (undocumented)
+export const icons: IconMap;
+
// @public (undocumented)
export const Inline: ForwardRefExoticComponent<
InlineProps & RefAttributes
@@ -263,6 +357,17 @@ export interface InlineProps extends SpaceProps {
style?: React.CSSProperties;
}
+// @public (undocumented)
+export const Input: React_2.ForwardRefExoticComponent<
+ InputProps & React_2.RefAttributes
+>;
+
+// @public (undocumented)
+export interface InputProps extends Omit {
+ // (undocumented)
+ size?: 'sm' | 'md';
+}
+
// @public (undocumented)
export type JustifyContent =
| 'stretch'
@@ -374,6 +479,34 @@ export const TableRow: React_3.ForwardRefExoticComponent<
React_3.RefAttributes
>;
+// @public (undocumented)
+const Text_2: React_2.ForwardRefExoticComponent<
+ TextProps & React_2.RefAttributes
+>;
+export { Text_2 as Text };
+
+// @public (undocumented)
+export interface TextProps {
+ // (undocumented)
+ children: ReactNode;
+ // (undocumented)
+ className?: string;
+ // (undocumented)
+ style?: CSSProperties;
+ // (undocumented)
+ variant?:
+ | 'subtitle'
+ | 'body'
+ | 'caption'
+ | 'label'
+ | Partial>;
+ // (undocumented)
+ weight?: 'regular' | 'bold' | Partial>;
+}
+
+// @public (undocumented)
+export const useCanon: () => CanonContextProps;
+
// @public (undocumented)
export interface UtilityProps extends SpaceProps {
// (undocumented)
diff --git a/packages/canon/scripts/build-css.mjs b/packages/canon/scripts/build-css.mjs
new file mode 100644
index 0000000000..f0ca17c73e
--- /dev/null
+++ b/packages/canon/scripts/build-css.mjs
@@ -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.
+ */
+
+/* eslint-disable no-restricted-imports */
+import { transform, bundle } from 'lightningcss';
+import fs from 'fs';
+import path from 'path';
+import chalk from 'chalk';
+import { glob } from 'glob';
+/* eslint-enable no-restricted-imports */
+
+// Check if core.css and components.css exist
+const cssDir = 'src/css';
+const distDir = 'dist/css';
+const componentsDir = 'src/components';
+
+// Core files
+const cssFiles = [
+ { path: `${cssDir}/core.css`, newName: 'core.css' },
+ { path: `${cssDir}/components.css`, newName: 'components.css' },
+];
+
+// Components files
+const componentsFiles = glob
+ .sync('**/*.css', { cwd: componentsDir })
+ .map(file => {
+ const folderName = file.split('/')[0].toLocaleLowerCase('en-US');
+ return { path: `${componentsDir}/${file}`, newName: `${folderName}.css` };
+ });
+
+// Combine core and components files
+cssFiles.push(...componentsFiles);
+
+// Check if files exist
+cssFiles.forEach(file => {
+ if (!fs.existsSync(file.path)) {
+ console.error(`${file.originalName} does not exist`);
+ process.exit(1);
+ }
+});
+
+// Ensure the dist/css directory exists
+if (!fs.existsSync(distDir)) {
+ fs.mkdirSync(distDir, { recursive: true });
+}
+
+// Bundle and transform files
+cssFiles.forEach(file => {
+ let { code: bundleCode } = bundle({
+ filename: file.path,
+ });
+
+ let { code, map } = transform({
+ filename: `${distDir}/${file.newName}`,
+ code: bundleCode,
+ minify: true,
+ sourceMap: true,
+ });
+
+ fs.writeFileSync(`${distDir}/${file.newName}`, code);
+ fs.writeFileSync(`${distDir}/${file.newName}.map`, map);
+
+ console.log(chalk.blue('CSS bundled: ') + file.newName);
+});
+
+console.log(chalk.green('CSS files bundled successfully!'));
diff --git a/packages/canon/src/components/Box/Box.stories.tsx b/packages/canon/src/components/Box/Box.stories.tsx
index bd4e597fa0..bf4b8ae5de 100644
--- a/packages/canon/src/components/Box/Box.stories.tsx
+++ b/packages/canon/src/components/Box/Box.stories.tsx
@@ -40,22 +40,28 @@ const meta = {
export default meta;
type Story = StoryObj;
-export const Basic: Story = {
+export const Default: Story = {
args: {
style: {
- background: '#1f47ff',
- color: 'white',
- padding: '4px 8px',
+ width: '64px',
+ height: '64px',
+ background: '#eaf2fd',
borderRadius: '4px',
+ border: '1px solid #2563eb',
+ color: '#2563eb',
+ backgroundImage:
+ 'url("data:image/svg+xml,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%20fill%3D%22%232563eb%22%20fill-opacity%3D%220.3%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M5%200h1L0%206V5zM6%205v1H5z%22/%3E%3C/g%3E%3C/svg%3E")',
},
- children: 'Basic Box',
},
};
export const Display: Story = {
args: {
style: {
- ...Basic.args?.style,
+ ...Default.args?.style,
+ width: 'auto',
+ height: 'auto',
+ padding: '8px',
},
},
render: args => (
@@ -84,7 +90,10 @@ export const Display: Story = {
export const FlexDirection: Story = {
args: {
style: {
- ...Basic.args?.style,
+ ...Default.args?.style,
+ width: 'auto',
+ height: 'auto',
+ padding: '8px',
},
display: 'flex',
gap: 'xs',
@@ -110,8 +119,10 @@ export const FlexDirection: Story = {
export const JustifyContent: Story = {
args: {
style: {
- ...Basic.args?.style,
+ ...Default.args?.style,
width: '200px',
+ height: 'auto',
+ padding: '8px',
},
display: 'flex',
gap: 'xs',
@@ -153,9 +164,10 @@ export const JustifyContent: Story = {
export const AlignItems: Story = {
args: {
style: {
- ...Basic.args?.style,
+ ...Default.args?.style,
width: '200px',
height: '100px',
+ padding: '8px',
},
display: 'flex',
gap: 'xs',
@@ -289,8 +301,10 @@ export const Margin: Story = {
export const FlexWrap: Story = {
args: {
style: {
- ...Basic.args?.style,
+ ...Default.args?.style,
width: '200px',
+ height: 'auto',
+ padding: '8px',
},
display: 'flex',
gap: 'xs',
@@ -328,11 +342,14 @@ export const FlexWrap: Story = {
export const BorderRadius: Story = {
args: {
style: {
- background: '#1f47ff',
- color: 'white',
- padding: '4px 8px',
width: '64px',
height: '64px',
+ background: '#eaf2fd',
+ border: '1px solid #2563eb',
+ color: '#2563eb',
+ backgroundImage:
+ 'url("data:image/svg+xml,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%20fill%3D%22%232563eb%22%20fill-opacity%3D%220.3%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M5%200h1L0%206V5zM6%205v1H5z%22/%3E%3C/g%3E%3C/svg%3E")',
+ padding: '4px 8px',
},
display: 'flex',
alignItems: 'center',
@@ -365,7 +382,7 @@ export const BorderRadius: Story = {
export const Border: Story = {
args: {
style: {
- background: 'var(--canon-surface-1)',
+ background: 'var(--canon-bg-elevated)',
color: 'var(--canon-text-primary)',
padding: '4px 8px',
width: '80px',
diff --git a/packages/canon/src/components/Box/Box.tsx b/packages/canon/src/components/Box/Box.tsx
index 020f2b6fbb..6b673abddd 100644
--- a/packages/canon/src/components/Box/Box.tsx
+++ b/packages/canon/src/components/Box/Box.tsx
@@ -17,6 +17,7 @@
import { createElement, forwardRef } from 'react';
import { BoxProps } from './types';
import { getClassNames } from '../../utils/getClassNames';
+import clsx from 'clsx';
/** @public */
export const Box = forwardRef((props, ref) => {
@@ -26,9 +27,7 @@ export const Box = forwardRef((props, ref) => {
const utilityClassNames = getClassNames(restProps);
// Combine the base class name, the sprinkles class name, and any additional class names
- const classNames = ['canon-box', utilityClassNames, className]
- .filter(Boolean)
- .join(' ');
+ const classNames = clsx('canon-Box', utilityClassNames, className);
return createElement(as, {
ref,
diff --git a/packages/canon/src/components/Box/Docs.mdx b/packages/canon/src/components/Box/Docs.mdx
deleted file mode 100644
index ee30e17305..0000000000
--- a/packages/canon/src/components/Box/Docs.mdx
+++ /dev/null
@@ -1,112 +0,0 @@
-import { Meta, Unstyled, Source, Canvas } from '@storybook/blocks';
-import * as BoxStories from './Box.stories';
-import { Title, Text } from '../../../docs/components';
-import { PropsTable } from '../../../docs/components';
-import { spacePropsList } from '../../../docs/spaceProps';
-
-
-
-
-
-Box
-
- Box is the lowest-level component in Canon. We use it internally to build all
- of our components. It provides a consistent API for styling and layout.
-
-
-Usage
-Hello World!
-`} language="tsx" dark />
-
-API reference
-
-Box
-
- This is the Box component, our lowest-level component. Here are all the
- available properties.
-
-
-
-
-
- Padding and margin are used to create space around your component using our
- predefined spacing tokens. We would recommend to use padding over margin to
- avoid collapsing margins but both are available.
-
-
-
-
-
-
-Examples
-Here are some examples of how you can use the Box component.
-
-Simple example
-A simple example of how to use the Box component.
-Hello World`}
- language="tsx"
- dark
-/>
-
-Responsive
-
- Most of the values can be defined per breakpoint, making it easy to create
- responsive designs.
-
-Hello World`}
- language="tsx"
- dark
-/>
-
-
diff --git a/packages/canon/src/components/Box/styles.css b/packages/canon/src/components/Box/styles.css
index a90ce578cd..c36afdbdfc 100644
--- a/packages/canon/src/components/Box/styles.css
+++ b/packages/canon/src/components/Box/styles.css
@@ -1,4 +1,4 @@
-.canon-box {
- font-family: 'var(--canon-font-regular)';
- color: 'var(--canon-text-primary)';
+.canon-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 c921efa6f2..8661dc927d 100644
--- a/packages/canon/src/components/Button/Button.stories.tsx
+++ b/packages/canon/src/components/Button/Button.stories.tsx
@@ -19,13 +19,12 @@ import type { Meta, StoryObj } from '@storybook/react';
import { Button } from './Button';
import { Inline } from '../Inline';
import { Stack } from '../Stack';
+import { Text } from '../Text';
+import { ButtonProps } from './types';
const meta = {
title: 'Components/Button',
component: Button,
- parameters: {
- layout: 'centered',
- },
argTypes: {
size: {
control: 'select',
@@ -40,12 +39,6 @@ const meta = {
export default meta;
type Story = StoryObj;
-export const Primary: Story = {
- args: {
- children: 'Primary button',
- },
-};
-
export const Variants: Story = {
args: {
children: 'Button',
@@ -59,9 +52,15 @@ export const Variants: Story = {
},
render: () => (
-
-
-
+
+
+
),
};
@@ -115,7 +114,7 @@ export const Responsive: Story = {
args: {
children: 'Button',
variant: {
- xs: 'primary',
+ initial: 'primary',
sm: 'secondary',
md: 'tertiary',
},
@@ -125,3 +124,47 @@ export const Responsive: Story = {
},
},
};
+
+const variants: string[] = ['primary', 'secondary', 'tertiary'];
+
+export const Playground: Story = {
+ args: {
+ children: 'Button',
+ },
+ render: () => (
+
+ {variants.map(variant => (
+
+ {variant}
+ {['small', 'medium'].map(size => (
+
+
+
+
+
+ ))}
+
+ ))}
+
+ ),
+};
diff --git a/packages/canon/src/components/Button/Button.tsx b/packages/canon/src/components/Button/Button.tsx
index e4166e5c79..c44d81dc15 100644
--- a/packages/canon/src/components/Button/Button.tsx
+++ b/packages/canon/src/components/Button/Button.tsx
@@ -14,10 +14,14 @@
* limitations under the License.
*/
+'use client';
+
import React, { forwardRef } from 'react';
import { Icon } from '../Icon';
-import { ButtonProps } from './types';
-import { useCanon } from '../../contexts/canon';
+import clsx from 'clsx';
+import { useResponsiveValue } from '../../hooks/useResponsiveValue';
+
+import type { ButtonProps } from './types';
/** @public */
export const Button = forwardRef(
@@ -29,29 +33,32 @@ export const Button = forwardRef(
iconStart,
iconEnd,
children,
+ className,
+ style,
+ ...rest
} = props;
- const { getResponsiveValue } = useCanon();
-
// Get the responsive value for the variant
- const responsiveSize = getResponsiveValue(size);
- const responsiveVariant = getResponsiveValue(variant);
+ const responsiveSize = useResponsiveValue(size);
+ const responsiveVariant = useResponsiveValue(variant);
return (
-`} language="tsx" dark />
-
-
- API reference
-
-
-
-
-Examples
-
-Variants
-Here's a view when buttons have different variants.
-
-
-
-
-
-
-
-`}
- language="tsx"
- dark
-/>
-
-Sizes
-Here's a view when buttons have different sizes.
-
-
-
-
-
-
-`}
- language="tsx"
- dark
-/>
-
-With Icons
-Here's a view when buttons have icons.
-
-
-
-
-
-
-
-`}
- language="tsx"
- dark
-/>
-
-Full width
-Here's a view when buttons are full width.
-
-
-
-
-
-
-
-`}
- language="tsx"
- dark
-/>
-
-Disabled
-Here's a view when buttons are disabled.
-
-
-
-Button`} language="tsx" dark />
-
-Responsive
-Here's a view when buttons are responsive.
-
-
-
-
- Button
-`}
- language="tsx"
- dark
-/>
-
-
diff --git a/packages/canon/src/components/Button/styles.css b/packages/canon/src/components/Button/styles.css
index 52fcb57a18..3456f8aa1a 100644
--- a/packages/canon/src/components/Button/styles.css
+++ b/packages/canon/src/components/Button/styles.css
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-.cn-button {
+.canon-Button {
all: unset;
display: inline-flex;
align-items: center;
@@ -22,35 +22,35 @@
user-select: none;
font-family: var(--canon-font-regular);
font-weight: var(--canon-font-weight-bold);
- font-size: var(--canon-font-size-body);
+ font-size: var(--canon-font-size-3);
padding: 0;
transition: all 150ms ease;
cursor: pointer;
- border-radius: 8px;
+ border-radius: var(--canon-radius-2);
}
-.cn-button-primary {
- background-color: var(--canon-accent);
- color: var(--canon-text-primary-on-accent);
+.canon-Button--variant-primary {
+ background-color: var(--canon-bg-accent);
+ color: var(--canon-fg-accent);
&:hover {
background-color: transparent;
- box-shadow: inset 0 0 0 1px var(--canon-outline-focus);
+ box-shadow: inset 0 0 0 1px var(--canon-border-focus);
color: var(--canon-text-primary);
}
}
-.cn-button-secondary {
+.canon-Button--variant-secondary {
background-color: transparent;
- box-shadow: inset 0 0 0 1px var(--canon-outline);
+ box-shadow: inset 0 0 0 1px var(--canon-border);
color: var(--canon-text-primary);
&:hover {
- box-shadow: inset 0 0 0 1px var(--canon-outline-hover);
+ box-shadow: inset 0 0 0 1px var(--canon-border-hover);
}
}
-.cn-button-tertiary {
+.canon-Button--variant-tertiary {
background-color: transparent;
color: var(--canon-text-primary);
@@ -59,25 +59,25 @@
}
}
-.cn-button-small {
+.canon-Button--size-small {
padding-left: 6px;
padding-right: 6px;
height: 32px;
}
-.cn-button-medium {
+.canon-Button--size-medium {
padding-left: 8px;
padding-right: 8px;
height: 40px;
}
-.cn-button-content {
+.canon-Button--content {
display: flex;
align-items: center;
- gap: var(--canon-spacing-xs);
+ gap: var(--canon-space-3);
font-weight: var(--canon-font-weight-bold);
}
-.cn-button-content-icon-both {
+.canon-Button--icon-start-end {
flex: 1;
}
diff --git a/packages/canon/src/components/Button/types.ts b/packages/canon/src/components/Button/types.ts
index df5caa0f9f..3e2adc84fc 100644
--- a/packages/canon/src/components/Button/types.ts
+++ b/packages/canon/src/components/Button/types.ts
@@ -28,7 +28,9 @@ export interface ButtonProps {
| 'tertiary'
| Partial>;
children: React.ReactNode;
+ className?: string;
disabled?: boolean;
iconStart?: IconNames;
iconEnd?: IconNames;
+ style?: React.CSSProperties;
}
diff --git a/packages/canon/src/components/Checkbox/Checkbox.stories.tsx b/packages/canon/src/components/Checkbox/Checkbox.stories.tsx
index ffd874ffe7..574783578c 100644
--- a/packages/canon/src/components/Checkbox/Checkbox.stories.tsx
+++ b/packages/canon/src/components/Checkbox/Checkbox.stories.tsx
@@ -14,8 +14,12 @@
* limitations under the License.
*/
+import React from 'react';
import type { Meta, StoryObj } from '@storybook/react';
import { Checkbox } from './Checkbox';
+import { Inline } from '../Inline';
+import { Stack } from '../Stack';
+import { Text } from '../Text';
const meta = {
title: 'Components/Checkbox',
@@ -28,8 +32,33 @@ const meta = {
export default meta;
type Story = StoryObj;
-export const Primary: Story = {
+export const Default: Story = {
args: {
label: 'Accept terms and conditions',
},
};
+
+export const AllVariants: Story = {
+ render: () => (
+
+
+
+
+
+
+ ),
+};
+
+export const Playground: Story = {
+ render: () => (
+
+ All variants
+
+
+
+
+
+
+
+ ),
+};
diff --git a/packages/canon/src/components/Checkbox/Checkbox.tsx b/packages/canon/src/components/Checkbox/Checkbox.tsx
index a23ccc01ce..634dc7044c 100644
--- a/packages/canon/src/components/Checkbox/Checkbox.tsx
+++ b/packages/canon/src/components/Checkbox/Checkbox.tsx
@@ -18,6 +18,7 @@ import React from 'react';
import { Checkbox as CheckboxPrimitive } from '@base-ui-components/react/checkbox';
import { Icon } from '@backstage/canon';
import type { CheckboxProps } from './types';
+import clsx from 'clsx';
/** @public */
export const Checkbox = React.forwardRef(
@@ -37,7 +38,7 @@ export const Checkbox = React.forwardRef(
const checkboxElement = (
(
value={value}
style={style}
>
-
+
);
return label ? (
-