@backstage/plugin-scaffolder 1.3.0-next.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Router-2a5afa3f.esm.js","sources":["../../src/components/TemplateCard/TemplateCard.tsx","../../src/components/TemplateList/TemplateList.tsx","../../src/components/ScaffolderPage/ScaffolderPageContextMenu.tsx","../../src/components/ScaffolderPage/ScaffolderPage.tsx","../../src/components/MultistepJsonForm/schema.ts","../../src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx","../../src/components/MultistepJsonForm/MultistepJsonForm.tsx","../../src/components/TemplatePage/createValidator.ts","../../src/components/TemplatePage/TemplatePage.tsx","../../src/components/ActionsPage/ActionsPage.tsx","../../src/lib/filesystem/WebFileSystemAccess.ts","../../src/components/TemplateEditorPage/TemplateEditorIntro.tsx","../../src/components/TemplateEditorPage/DirectoryEditorContext.tsx","../../src/components/TemplateEditorPage/DryRunContext.tsx","../../src/components/TemplateEditorPage/DryRunResults/DryRunResultsList.tsx","../../src/components/FileBrowser/FileBrowser.tsx","../../src/components/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.tsx","../../src/components/TemplateEditorPage/DryRunResults/DryRunResultsView.tsx","../../src/components/TemplateEditorPage/DryRunResults/DryRunResults.tsx","../../src/components/TemplateEditorPage/TemplateEditorBrowser.tsx","../../src/components/TemplateEditorPage/TemplateEditorForm.tsx","../../src/components/TemplateEditorPage/TemplateEditorTextArea.tsx","../../src/components/TemplateEditorPage/TemplateEditor.tsx","../../src/components/TemplateEditorPage/TemplateFormPreviewer.tsx","../../src/components/TemplateEditorPage/TemplateEditorPage.tsx","../../src/components/ListTasksPage/OwnerListPicker.tsx","../../src/components/ListTasksPage/columns/CreatedAtColumn.tsx","../../src/components/ListTasksPage/columns/OwnerEntityColumn.tsx","../../src/components/ListTasksPage/columns/TaskStatusColumn.tsx","../../src/components/ListTasksPage/columns/TemplateTitleColumn.tsx","../../src/components/ListTasksPage/ListTasksPage.tsx","../../src/components/Router.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Entity,\n parseEntityRef,\n RELATION_OWNED_BY,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport {\n ScmIntegrationIcon,\n scmIntegrationsApiRef,\n} from '@backstage/integration-react';\nimport {\n EntityRefLinks,\n FavoriteEntity,\n getEntityRelations,\n getEntitySourceLocation,\n} from '@backstage/plugin-catalog-react';\nimport { BackstageTheme } from '@backstage/theme';\nimport {\n Box,\n Card,\n CardActions,\n CardContent,\n CardMedia,\n Chip,\n IconButton,\n Link,\n makeStyles,\n Tooltip,\n Typography,\n useTheme,\n} from '@material-ui/core';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport React from 'react';\nimport { selectedTemplateRouteRef } from '../../routes';\n\nimport {\n Button,\n ItemCardHeader,\n MarkdownContent,\n} from '@backstage/core-components';\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\n\nconst useStyles = makeStyles(theme => ({\n cardHeader: {\n position: 'relative',\n },\n title: {\n backgroundImage: ({ backgroundImage }: any) => backgroundImage,\n },\n box: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n '-webkit-line-clamp': 10,\n '-webkit-box-orient': 'vertical',\n paddingBottom: '0.8em',\n },\n label: {\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n fontSize: '0.65rem',\n fontWeight: 'bold',\n letterSpacing: 0.5,\n lineHeight: 1,\n paddingBottom: '0.2rem',\n },\n leftButton: {\n marginRight: 'auto',\n },\n starButton: {\n position: 'absolute',\n top: theme.spacing(0.5),\n right: theme.spacing(0.5),\n padding: '0.25rem',\n color: '#fff',\n },\n}));\n\nconst useDeprecationStyles = makeStyles(theme => ({\n deprecationIcon: {\n position: 'absolute',\n top: theme.spacing(0.5),\n right: theme.spacing(3.5),\n padding: '0.25rem',\n },\n link: {\n color: theme.palette.warning.light,\n },\n}));\n\nexport type TemplateCardProps = {\n template: TemplateEntityV1beta3;\n deprecated?: boolean;\n};\n\ntype TemplateProps = {\n description: string;\n tags: string[];\n title: string;\n type: string;\n name: string;\n};\n\nconst getTemplateCardProps = (\n template: TemplateEntityV1beta3,\n): TemplateProps & { key: string } => {\n return {\n key: template.metadata.uid!,\n name: template.metadata.name,\n title: `${(template.metadata.title || template.metadata.name) ?? ''}`,\n type: template.spec.type ?? '',\n description: template.metadata.description ?? '-',\n tags: (template.metadata?.tags as string[]) ?? [],\n };\n};\n\nconst DeprecationWarning = () => {\n const styles = useDeprecationStyles();\n\n const Title = (\n <Typography style={{ padding: 10, maxWidth: 300 }}>\n This template uses a syntax that has been deprecated, and should be\n migrated to a newer syntax. Click for more info.\n </Typography>\n );\n\n return (\n <div className={styles.deprecationIcon}>\n <Tooltip title={Title}>\n <Link\n href=\"https://backstage.io/docs/features/software-templates/migrating-from-v1beta2-to-v1beta3\"\n className={styles.link}\n >\n <WarningIcon />\n </Link>\n </Tooltip>\n </div>\n );\n};\n\nexport const TemplateCard = ({ template, deprecated }: TemplateCardProps) => {\n const backstageTheme = useTheme<BackstageTheme>();\n const templateRoute = useRouteRef(selectedTemplateRouteRef);\n const templateProps = getTemplateCardProps(template);\n const ownedByRelations = getEntityRelations(\n template as Entity,\n RELATION_OWNED_BY,\n );\n const themeId = backstageTheme.getPageTheme({ themeId: templateProps.type })\n ? templateProps.type\n : 'other';\n const theme = backstageTheme.getPageTheme({ themeId });\n const classes = useStyles({ backgroundImage: theme.backgroundImage });\n const { name, namespace } = parseEntityRef(stringifyEntityRef(template));\n const href = templateRoute({ templateName: name, namespace });\n\n const scmIntegrationsApi = useApi(scmIntegrationsApiRef);\n const sourceLocation = getEntitySourceLocation(template, scmIntegrationsApi);\n\n return (\n <Card>\n <CardMedia className={classes.cardHeader}>\n <FavoriteEntity className={classes.starButton} entity={template} />\n {deprecated && <DeprecationWarning />}\n <ItemCardHeader\n title={templateProps.title}\n subtitle={templateProps.type}\n classes={{ root: classes.title }}\n />\n </CardMedia>\n <CardContent style={{ display: 'grid' }}>\n <Box className={classes.box}>\n <Typography variant=\"body2\" className={classes.label}>\n Description\n </Typography>\n <MarkdownContent content={templateProps.description} />\n </Box>\n <Box className={classes.box}>\n <Typography variant=\"body2\" className={classes.label}>\n Owner\n </Typography>\n <EntityRefLinks entityRefs={ownedByRelations} defaultKind=\"Group\" />\n </Box>\n <Box>\n <Typography variant=\"body2\" className={classes.label}>\n Tags\n </Typography>\n {templateProps.tags?.map(tag => (\n <Chip size=\"small\" label={tag} key={tag} />\n ))}\n </Box>\n </CardContent>\n <CardActions>\n {sourceLocation && (\n <IconButton\n className={classes.leftButton}\n href={sourceLocation.locationTargetUrl}\n >\n <ScmIntegrationIcon type={sourceLocation.integrationType} />\n </IconButton>\n )}\n <Button\n color=\"primary\"\n to={href}\n aria-label={`Choose ${templateProps.title}`}\n >\n Choose\n </Button>\n </CardActions>\n </Card>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { ComponentType } from 'react';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport {\n Content,\n ContentHeader,\n ItemCardGrid,\n Link,\n Progress,\n WarningPanel,\n} from '@backstage/core-components';\nimport { useEntityList } from '@backstage/plugin-catalog-react';\nimport { Typography } from '@material-ui/core';\nimport { TemplateCard } from '../TemplateCard';\n\n/**\n * @internal\n */\nexport type TemplateListProps = {\n TemplateCardComponent?:\n | ComponentType<{ template: TemplateEntityV1beta3 }>\n | undefined;\n group?: {\n title?: React.ReactNode;\n filter: (entity: Entity) => boolean;\n };\n};\n\n/**\n * @internal\n */\nexport const TemplateList = ({\n TemplateCardComponent,\n group,\n}: TemplateListProps) => {\n const { loading, error, entities } = useEntityList();\n const Card = TemplateCardComponent || TemplateCard;\n const maybeFilteredEntities = group\n ? entities.filter(e => group.filter(e))\n : entities;\n\n const titleComponent: React.ReactNode = (() => {\n if (group && group.title) {\n if (typeof group.title === 'string') {\n return <ContentHeader title={group.title} />;\n }\n return group.title;\n }\n\n return <ContentHeader title=\"Other Templates\" />;\n })();\n\n if (group && maybeFilteredEntities.length === 0) {\n return null;\n }\n return (\n <>\n {loading && <Progress />}\n\n {error && (\n <WarningPanel title=\"Oops! Something went wrong loading the templates\">\n {error.message}\n </WarningPanel>\n )}\n\n {!error && !loading && !entities.length && (\n <Typography variant=\"body2\">\n No templates found that match your filter. Learn more about{' '}\n <Link to=\"https://backstage.io/docs/features/software-templates/adding-templates\">\n adding templates\n </Link>\n .\n </Typography>\n )}\n\n <Content>\n {titleComponent}\n <ItemCardGrid>\n {maybeFilteredEntities &&\n maybeFilteredEntities?.length > 0 &&\n maybeFilteredEntities.map((template: Entity) => (\n <Card\n key={stringifyEntityRef(template)}\n template={template as TemplateEntityV1beta3}\n deprecated={template.apiVersion === 'backstage.io/v1beta2'}\n />\n ))}\n </ItemCardGrid>\n </Content>\n </>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Description from '@material-ui/icons/Description';\nimport Edit from '@material-ui/icons/Edit';\nimport List from '@material-ui/icons/List';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport React, { useState } from 'react';\nimport { useNavigate } from 'react-router';\nimport {\n actionsRouteRef,\n editRouteRef,\n scaffolderListTaskRouteRef,\n} from '../../routes';\n\nconst useStyles = makeStyles({\n button: {\n color: 'white',\n },\n});\n\nexport type ScaffolderPageContextMenuProps = {\n editor?: boolean;\n actions?: boolean;\n tasks?: boolean;\n};\n\nexport function ScaffolderPageContextMenu(\n props: ScaffolderPageContextMenuProps,\n) {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>();\n const editLink = useRouteRef(editRouteRef);\n const actionsLink = useRouteRef(actionsRouteRef);\n const tasksLink = useRouteRef(scaffolderListTaskRouteRef);\n\n const navigate = useNavigate();\n\n const showEditor = props.editor !== false;\n const showActions = props.actions !== false;\n const showTasks = props.tasks !== false;\n\n if (!showEditor && !showActions) {\n return null;\n }\n\n const onOpen = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const onClose = () => {\n setAnchorEl(undefined);\n };\n\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={onOpen}\n data-testid=\"menu-button\"\n color=\"inherit\"\n className={classes.button}\n >\n <MoreVert />\n </IconButton>\n <Popover\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <MenuList>\n {showEditor && (\n <MenuItem onClick={() => navigate(editLink())}>\n <ListItemIcon>\n <Edit fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary=\"Template Editor\" />\n </MenuItem>\n )}\n {showActions && (\n <MenuItem onClick={() => navigate(actionsLink())}>\n <ListItemIcon>\n <Description fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary=\"Installed Actions\" />\n </MenuItem>\n )}\n {showTasks && (\n <MenuItem onClick={() => navigate(tasksLink())}>\n <ListItemIcon>\n <List fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary=\"Task List\" />\n </MenuItem>\n )}\n </MenuList>\n </Popover>\n </>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Content,\n ContentHeader,\n CreateButton,\n Header,\n Page,\n SupportButton,\n} from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport {\n CatalogFilterLayout,\n EntityKindPicker,\n EntityListProvider,\n EntitySearchBar,\n EntityTagPicker,\n UserListPicker,\n} from '@backstage/plugin-catalog-react';\nimport React, { ComponentType } from 'react';\nimport { registerComponentRouteRef } from '../../routes';\nimport { TemplateList } from '../TemplateList';\nimport { TemplateTypePicker } from '../TemplateTypePicker';\nimport { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { ScaffolderPageContextMenu } from './ScaffolderPageContextMenu';\n\nexport type ScaffolderPageProps = {\n TemplateCardComponent?:\n | ComponentType<{ template: TemplateEntityV1beta3 }>\n | undefined;\n groups?: Array<{\n title?: React.ReactNode;\n filter: (entity: Entity) => boolean;\n }>;\n contextMenu?: {\n editor?: boolean;\n actions?: boolean;\n tasks?: boolean;\n };\n};\n\nexport const ScaffolderPageContents = ({\n TemplateCardComponent,\n groups,\n contextMenu,\n}: ScaffolderPageProps) => {\n const registerComponentLink = useRouteRef(registerComponentRouteRef);\n const otherTemplatesGroup = {\n title: groups ? 'Other Templates' : 'Templates',\n filter: (entity: Entity) => {\n const filtered = (groups ?? []).map(group => group.filter(entity));\n return !filtered.some(result => result === true);\n },\n };\n\n const { allowed } = usePermission({\n permission: catalogEntityCreatePermission,\n });\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride=\"Create a New Component\"\n title=\"Create a New Component\"\n subtitle=\"Create new software components using standard templates\"\n >\n <ScaffolderPageContextMenu {...contextMenu} />\n </Header>\n <Content>\n <ContentHeader title=\"Available Templates\">\n {allowed && (\n <CreateButton\n title=\"Register Existing Component\"\n to={registerComponentLink && registerComponentLink()}\n />\n )}\n <SupportButton>\n Create new software components using standard templates. Different\n templates create different kinds of components (services, websites,\n documentation, ...).\n </SupportButton>\n </ContentHeader>\n\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <EntitySearchBar />\n <EntityKindPicker initialFilter=\"template\" hidden />\n <UserListPicker\n initialFilter=\"all\"\n availableFilters={['all', 'starred']}\n />\n <TemplateTypePicker />\n <EntityTagPicker />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n {groups &&\n groups.map((group, index) => (\n <TemplateList\n key={index}\n TemplateCardComponent={TemplateCardComponent}\n group={group}\n />\n ))}\n <TemplateList\n key=\"other\"\n TemplateCardComponent={TemplateCardComponent}\n group={otherTemplatesGroup}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </Content>\n </Page>\n );\n};\n\nexport const ScaffolderPage = ({\n TemplateCardComponent,\n groups,\n}: ScaffolderPageProps) => (\n <EntityListProvider>\n <ScaffolderPageContents\n TemplateCardComponent={TemplateCardComponent}\n groups={groups}\n />\n </EntityListProvider>\n);\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { JsonObject } from '@backstage/types';\nimport { FormProps } from '@rjsf/core';\n\nfunction isObject(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction extractUiSchema(schema: JsonObject, uiSchema: JsonObject) {\n if (!isObject(schema)) {\n return;\n }\n\n const { properties, items, anyOf, oneOf, allOf, dependencies } = schema;\n\n for (const propName in schema) {\n if (!schema.hasOwnProperty(propName)) {\n continue;\n }\n\n if (propName.startsWith('ui:')) {\n uiSchema[propName] = schema[propName];\n delete schema[propName];\n }\n }\n\n if (isObject(properties)) {\n for (const propName in properties) {\n if (!properties.hasOwnProperty(propName)) {\n continue;\n }\n\n const schemaNode = properties[propName];\n if (!isObject(schemaNode)) {\n continue;\n }\n const innerUiSchema = {};\n uiSchema[propName] = innerUiSchema;\n extractUiSchema(schemaNode, innerUiSchema);\n }\n }\n\n if (isObject(items)) {\n const innerUiSchema = {};\n uiSchema.items = innerUiSchema;\n extractUiSchema(items, innerUiSchema);\n }\n\n if (Array.isArray(anyOf)) {\n for (const schemaNode of anyOf) {\n if (!isObject(schemaNode)) {\n continue;\n }\n extractUiSchema(schemaNode, uiSchema);\n }\n }\n\n if (Array.isArray(oneOf)) {\n for (const schemaNode of oneOf) {\n if (!isObject(schemaNode)) {\n continue;\n }\n extractUiSchema(schemaNode, uiSchema);\n }\n }\n\n if (Array.isArray(allOf)) {\n for (const schemaNode of allOf) {\n if (!isObject(schemaNode)) {\n continue;\n }\n extractUiSchema(schemaNode, uiSchema);\n }\n }\n\n if (isObject(dependencies)) {\n for (const depName of Object.keys(dependencies)) {\n const schemaNode = dependencies[depName];\n if (!isObject(schemaNode)) {\n continue;\n }\n extractUiSchema(schemaNode, uiSchema);\n }\n }\n}\n\nexport function transformSchemaToProps(inputSchema: JsonObject): {\n schema: FormProps<any>['schema'];\n uiSchema: FormProps<any>['uiSchema'];\n} {\n inputSchema.type = inputSchema.type || 'object';\n const schema = JSON.parse(JSON.stringify(inputSchema));\n delete schema.title; // Rendered separately\n const uiSchema = {};\n extractUiSchema(schema, uiSchema);\n return { schema, uiSchema };\n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { MarkdownContent } from '@backstage/core-components';\nimport { FieldProps } from '@rjsf/core';\n\nexport const DescriptionField = ({ description }: FieldProps) =>\n description && <MarkdownContent content={description} linkTarget=\"_blank\" />;\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { JsonObject } from '@backstage/types';\nimport {\n Box,\n Button,\n Paper,\n Step as StepUI,\n StepContent,\n StepLabel,\n Stepper,\n Typography,\n} from '@material-ui/core';\nimport {\n errorApiRef,\n useApi,\n featureFlagsApiRef,\n} from '@backstage/core-plugin-api';\nimport { FormProps, IChangeEvent, UiSchema, withTheme } from '@rjsf/core';\nimport { Theme as MuiTheme } from '@rjsf/material-ui';\nimport React, { useState } from 'react';\nimport { transformSchemaToProps } from './schema';\nimport { Content, StructuredMetadataTable } from '@backstage/core-components';\nimport cloneDeep from 'lodash/cloneDeep';\nimport * as fieldOverrides from './FieldOverrides';\n\nconst Form = withTheme(MuiTheme);\ntype Step = {\n schema: JsonObject;\n title: string;\n} & Partial<Omit<FormProps<any>, 'schema'>>;\n\ntype Props = {\n /**\n * Steps for the form, each contains title and form schema\n */\n steps: Step[];\n formData: Record<string, any>;\n onChange: (e: IChangeEvent) => void;\n onReset: () => void;\n onFinish?: () => Promise<void>;\n widgets?: FormProps<any>['widgets'];\n fields?: FormProps<any>['fields'];\n finishButtonLabel?: string;\n};\n\nexport function getUiSchemasFromSteps(steps: Step[]): UiSchema[] {\n const uiSchemas: Array<UiSchema> = [];\n steps.forEach(step => {\n const schemaProps = step.schema.properties as JsonObject;\n for (const key in schemaProps) {\n if (schemaProps.hasOwnProperty(key)) {\n const uiSchema = schemaProps[key] as UiSchema;\n uiSchema.name = key;\n uiSchemas.push(uiSchema);\n }\n }\n });\n return uiSchemas;\n}\n\nexport function getReviewData(formData: Record<string, any>, steps: Step[]) {\n const uiSchemas = getUiSchemasFromSteps(steps);\n const reviewData: Record<string, any> = {};\n for (const key in formData) {\n if (formData.hasOwnProperty(key)) {\n const uiSchema = uiSchemas.find(us => us.name === key);\n\n if (!uiSchema) {\n reviewData[key] = formData[key];\n continue;\n }\n\n if (uiSchema['ui:widget'] === 'password') {\n reviewData[key] = '******';\n continue;\n }\n\n if (!uiSchema['ui:backstage'] || !uiSchema['ui:backstage'].review) {\n reviewData[key] = formData[key];\n continue;\n }\n\n const review = uiSchema['ui:backstage'].review as JsonObject;\n if (review.mask) {\n reviewData[key] = review.mask;\n continue;\n }\n\n if (!review.show) {\n continue;\n }\n reviewData[key] = formData[key];\n }\n }\n\n return reviewData;\n}\n\nexport const MultistepJsonForm = (props: Props) => {\n const {\n formData,\n onChange,\n onReset,\n onFinish,\n fields,\n widgets,\n finishButtonLabel,\n } = props;\n const [activeStep, setActiveStep] = useState(0);\n const [disableButtons, setDisableButtons] = useState(false);\n const errorApi = useApi(errorApiRef);\n const featureFlagApi = useApi(featureFlagsApiRef);\n const featureFlagKey = 'backstage:featureFlag';\n const filterOutProperties = (step: Step): Step => {\n const filteredStep = cloneDeep(step);\n const removedPropertyKeys: Array<string> = [];\n if (filteredStep.schema.properties) {\n filteredStep.schema.properties = Object.fromEntries(\n Object.entries(filteredStep.schema.properties).filter(\n ([key, value]) => {\n if (value[featureFlagKey]) {\n if (featureFlagApi.isActive(value[featureFlagKey])) {\n return true;\n }\n removedPropertyKeys.push(key);\n return false;\n }\n return true;\n },\n ),\n );\n\n // remove the feature flag property key from required if they are not active\n filteredStep.schema.required = Array.isArray(filteredStep.schema.required)\n ? filteredStep.schema.required?.filter(\n r => !removedPropertyKeys.includes(r as string),\n )\n : filteredStep.schema.required;\n }\n return filteredStep;\n };\n\n const steps = props.steps\n .filter(step => {\n const featureFlag = step.schema[featureFlagKey];\n return (\n typeof featureFlag !== 'string' || featureFlagApi.isActive(featureFlag)\n );\n })\n .map(filterOutProperties);\n\n const handleReset = () => {\n setActiveStep(0);\n onReset();\n };\n const handleNext = () => {\n setActiveStep(Math.min(activeStep + 1, steps.length));\n };\n const handleBack = () => setActiveStep(Math.max(activeStep - 1, 0));\n const handleCreate = async () => {\n if (!onFinish) {\n return;\n }\n\n setDisableButtons(true);\n try {\n await onFinish();\n } catch (err) {\n errorApi.post(err);\n } finally {\n setDisableButtons(false);\n }\n };\n\n return (\n <>\n <Stepper activeStep={activeStep} orientation=\"vertical\">\n {steps.map(({ title, schema, ...formProps }, index) => {\n return (\n <StepUI key={title}>\n <StepLabel\n aria-label={`Step ${index + 1} ${title}`}\n aria-disabled=\"false\"\n tabIndex={0}\n >\n <Typography variant=\"h6\" component=\"h3\">\n {title}\n </Typography>\n </StepLabel>\n <StepContent key={title}>\n <Form\n showErrorList={false}\n fields={{ ...fieldOverrides, ...fields }}\n widgets={widgets}\n noHtml5Validate\n formData={formData}\n formContext={{ formData }}\n onChange={onChange}\n onSubmit={e => {\n if (e.errors.length === 0) handleNext();\n }}\n {...formProps}\n {...transformSchemaToProps(schema)}\n >\n <Button disabled={activeStep === 0} onClick={handleBack}>\n Back\n </Button>\n <Button variant=\"contained\" color=\"primary\" type=\"submit\">\n Next step\n </Button>\n </Form>\n </StepContent>\n </StepUI>\n );\n })}\n </Stepper>\n {activeStep === steps.length && (\n <Content>\n <Paper square elevation={0}>\n <Typography variant=\"h6\">Review and create</Typography>\n <StructuredMetadataTable\n dense\n metadata={getReviewData(formData, steps)}\n />\n <Box mb={4} />\n <Button onClick={handleBack} disabled={disableButtons}>\n Back\n </Button>\n <Button onClick={handleReset} disabled={disableButtons}>\n Reset\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={handleCreate}\n disabled={!onFinish || disableButtons}\n >\n {finishButtonLabel ?? 'Create'}\n </Button>\n </Paper>\n </Content>\n )}\n </>\n );\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CustomFieldValidator } from '../../extensions';\nimport { FormValidation } from '@rjsf/core';\nimport { JsonObject, JsonValue } from '@backstage/types';\nimport { ApiHolder } from '@backstage/core-plugin-api';\n\nfunction isObject(obj: unknown): obj is JsonObject {\n return typeof obj === 'object' && obj !== null && !Array.isArray(obj);\n}\n\nexport const createValidator = (\n rootSchema: JsonObject,\n validators: Record<string, undefined | CustomFieldValidator<unknown>>,\n context: {\n apiHolder: ApiHolder;\n },\n) => {\n function validate(\n schema: JsonObject,\n formData: JsonObject,\n errors: FormValidation,\n ) {\n const schemaProps = schema.properties;\n const customObject = schema.type === 'object' && schemaProps === undefined;\n\n if (!isObject(schemaProps) && !customObject) {\n return;\n }\n\n if (schemaProps) {\n for (const [key, propData] of Object.entries(formData)) {\n const propValidation = errors[key];\n\n if (isObject(propData)) {\n const propSchemaProps = schemaProps[key];\n if (isObject(propSchemaProps)) {\n validate(\n propSchemaProps,\n propData as JsonObject,\n propValidation as FormValidation,\n );\n }\n } else {\n const propSchema = schemaProps[key];\n const fieldName =\n isObject(propSchema) && (propSchema['ui:field'] as string);\n if (fieldName && typeof validators[fieldName] === 'function') {\n validators[fieldName]!(\n propData as JsonValue,\n propValidation,\n context,\n );\n }\n }\n }\n } else if (customObject) {\n const fieldName = schema['ui:field'] as string;\n if (fieldName && typeof validators[fieldName] === 'function') {\n validators[fieldName]!(formData, errors, context);\n }\n }\n }\n\n return (formData: JsonObject, errors: FormValidation) => {\n validate(rootSchema, formData, errors);\n return errors;\n };\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LinearProgress } from '@material-ui/core';\nimport { IChangeEvent } from '@rjsf/core';\nimport qs from 'qs';\nimport React, { useCallback, useContext, useState } from 'react';\nimport { Navigate, useNavigate } from 'react-router';\nimport { useParams } from 'react-router-dom';\nimport useAsync from 'react-use/lib/useAsync';\nimport { scaffolderApiRef } from '../../api';\nimport { FieldExtensionOptions } from '../../extensions';\nimport { SecretsContext } from '../secrets/SecretsContext';\nimport { rootRouteRef, scaffolderTaskRouteRef } from '../../routes';\nimport { MultistepJsonForm } from '../MultistepJsonForm';\nimport { createValidator } from './createValidator';\n\nimport { Content, Header, InfoCard, Page } from '@backstage/core-components';\nimport {\n errorApiRef,\n useApi,\n useApiHolder,\n useRouteRef,\n} from '@backstage/core-plugin-api';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nconst useTemplateParameterSchema = (templateRef: string) => {\n const scaffolderApi = useApi(scaffolderApiRef);\n const { value, loading, error } = useAsync(\n () => scaffolderApi.getTemplateParameterSchema(templateRef),\n [scaffolderApi, templateRef],\n );\n return { schema: value, loading, error };\n};\n\nexport const TemplatePage = ({\n customFieldExtensions = [],\n}: {\n customFieldExtensions?: FieldExtensionOptions<any, any>[];\n}) => {\n const apiHolder = useApiHolder();\n const secretsContext = useContext(SecretsContext);\n const errorApi = useApi(errorApiRef);\n const scaffolderApi = useApi(scaffolderApiRef);\n const { templateName, namespace } = useParams();\n const templateRef = stringifyEntityRef({\n name: templateName,\n kind: 'template',\n namespace,\n });\n const navigate = useNavigate();\n const scaffolderTaskRoute = useRouteRef(scaffolderTaskRouteRef);\n const rootRoute = useRouteRef(rootRouteRef);\n const { schema, loading, error } = useTemplateParameterSchema(templateRef);\n const [formState, setFormState] = useState<Record<string, any>>(() => {\n const query = qs.parse(window.location.search, {\n ignoreQueryPrefix: true,\n });\n\n try {\n return JSON.parse(query.formData as string);\n } catch (e) {\n return query.formData ?? {};\n }\n });\n const handleFormReset = () => setFormState({});\n const handleChange = useCallback(\n (e: IChangeEvent) => setFormState(e.formData),\n [setFormState],\n );\n\n const handleCreate = async () => {\n const { taskId } = await scaffolderApi.scaffold({\n templateRef,\n values: formState,\n secrets: secretsContext?.secrets,\n });\n\n const formParams = qs.stringify(\n { formData: formState },\n { addQueryPrefix: true },\n );\n const newUrl = `${window.location.pathname}${formParams}`;\n // We use direct history manipulation since useSearchParams and\n // useNavigate in react-router-dom cause unnecessary extra rerenders.\n // Also make sure to replace the state rather than pushing to avoid\n // extra back/forward slots.\n window.history?.replaceState(null, document.title, newUrl);\n\n navigate(scaffolderTaskRoute({ taskId }));\n };\n\n if (error) {\n errorApi.post(new Error(`Failed to load template, ${error}`));\n return <Navigate to={rootRoute()} />;\n }\n if (!loading && !schema) {\n errorApi.post(new Error('Template was not found.'));\n return <Navigate to={rootRoute()} />;\n }\n\n const customFieldComponents = Object.fromEntries(\n customFieldExtensions.map(({ name, component }) => [name, component]),\n );\n\n const customFieldValidators = Object.fromEntries(\n customFieldExtensions.map(({ name, validation }) => [name, validation]),\n );\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride=\"Create a New Component\"\n title=\"Create a New Component\"\n subtitle=\"Create new software components using standard templates\"\n />\n <Content>\n {loading && <LinearProgress data-testid=\"loading-progress\" />}\n {schema && (\n <InfoCard\n title={schema.title}\n noPadding\n titleTypographyProps={{ component: 'h2' }}\n >\n <MultistepJsonForm\n formData={formState}\n fields={customFieldComponents}\n onChange={handleChange}\n onReset={handleFormReset}\n onFinish={handleCreate}\n steps={schema.steps.map(step => {\n return {\n ...step,\n validate: createValidator(\n step.schema,\n customFieldValidators,\n { apiHolder },\n ),\n };\n })}\n />\n </InfoCard>\n )}\n </Content>\n </Page>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport { scaffolderApiRef } from '../../api';\nimport {\n Typography,\n Paper,\n Table,\n TableBody,\n Box,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n makeStyles,\n} from '@material-ui/core';\nimport { JSONSchema7, JSONSchema7Definition } from 'json-schema';\nimport classNames from 'classnames';\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport {\n Progress,\n Content,\n Header,\n Page,\n ErrorPage,\n} from '@backstage/core-components';\n\nconst useStyles = makeStyles(theme => ({\n code: {\n fontFamily: 'Menlo, monospace',\n padding: theme.spacing(1),\n backgroundColor:\n theme.palette.type === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300],\n display: 'inline-block',\n borderRadius: 5,\n border: `1px solid ${theme.palette.grey[500]}`,\n position: 'relative',\n },\n\n codeRequired: {\n '&::after': {\n position: 'absolute',\n content: '\"*\"',\n top: 0,\n right: theme.spacing(0.5),\n fontWeight: 'bolder',\n color: theme.palette.error.light,\n },\n },\n}));\n\nexport const ActionsPage = () => {\n const api = useApi(scaffolderApiRef);\n const classes = useStyles();\n const { loading, value, error } = useAsync(async () => {\n return api.listActions();\n });\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <ErrorPage\n statusMessage=\"Failed to load installed actions\"\n status=\"500\"\n />\n );\n }\n\n const formatRows = (input: JSONSchema7) => {\n const properties = input.properties;\n if (!properties) {\n return undefined;\n }\n\n return Object.entries(properties).map(entry => {\n const [key] = entry;\n const props = entry[1] as unknown as JSONSchema7;\n const codeClassname = classNames(classes.code, {\n [classes.codeRequired]: input.required?.includes(key),\n });\n\n return (\n <TableRow key={key}>\n <TableCell>\n <div className={codeClassname}>{key}</div>\n </TableCell>\n <TableCell>{props.title}</TableCell>\n <TableCell>{props.description}</TableCell>\n <TableCell>\n <span className={classes.code}>{props.type}</span>\n </TableCell>\n </TableRow>\n );\n });\n };\n\n const renderTable = (input: JSONSchema7) => {\n if (!input.properties) {\n return undefined;\n }\n return (\n <TableContainer component={Paper}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>Title</TableCell>\n <TableCell>Description</TableCell>\n <TableCell>Type</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{formatRows(input)}</TableBody>\n </Table>\n </TableContainer>\n );\n };\n\n const renderTables = (name: string, input?: JSONSchema7Definition[]) => {\n if (!input) {\n return undefined;\n }\n\n return (\n <>\n <Typography variant=\"h6\">{name}</Typography>\n {input.map((i, index) => (\n <div key={index}>{renderTable(i as unknown as JSONSchema7)}</div>\n ))}\n </>\n );\n };\n\n const items = value?.map(action => {\n if (action.id.startsWith('legacy:')) {\n return undefined;\n }\n\n const oneOf = renderTables('oneOf', action.schema?.input?.oneOf);\n return (\n <Box pb={4} key={action.id}>\n <Typography variant=\"h4\" className={classes.code}>\n {action.id}\n </Typography>\n <Typography>{action.description}</Typography>\n {action.schema?.input && (\n <Box pb={2}>\n <Typography variant=\"h5\">Input</Typography>\n {renderTable(action.schema.input)}\n {oneOf}\n </Box>\n )}\n {action.schema?.output && (\n <Box pb={2}>\n <Typography variant=\"h5\">Output</Typography>\n {renderTable(action.schema.output)}\n </Box>\n )}\n </Box>\n );\n });\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride=\"Create a New Component\"\n title=\"Installed actions\"\n subtitle=\"This is the collection of all installed actions\"\n />\n <Content>{items}</Content>\n </Page>\n );\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TemplateDirectoryAccess, TemplateFileAccess } from './types';\n\ntype WritableFileHandle = FileSystemFileHandle & {\n createWritable(): Promise<{\n write(data: string | Blob | BufferSource): Promise<void>;\n close(): Promise<void>;\n }>;\n};\n\n// A nicer type than the one from the TS lib\ninterface IterableDirectoryHandle extends FileSystemDirectoryHandle {\n values(): AsyncIterable<\n | ({ kind: 'file' } & WritableFileHandle)\n | ({ kind: 'directory' } & IterableDirectoryHandle)\n >;\n}\n\nconst showDirectoryPicker = (window as any).showDirectoryPicker as\n | (() => Promise<IterableDirectoryHandle>)\n | undefined;\n\nclass WebFileAccess implements TemplateFileAccess {\n constructor(\n readonly path: string,\n private readonly handle: WritableFileHandle,\n ) {}\n\n file(): Promise<File> {\n return this.handle.getFile();\n }\n\n async save(data: string | Blob | BufferSource): Promise<void> {\n const writable = await this.handle.createWritable();\n await writable.write(data);\n await writable.close();\n }\n}\n\nclass WebDirectoryAccess implements TemplateDirectoryAccess {\n constructor(private readonly handle: IterableDirectoryHandle) {}\n\n async listFiles(): Promise<TemplateFileAccess[]> {\n const content = [];\n for await (const entry of this.listDirectoryContents(this.handle)) {\n content.push(entry);\n }\n return content;\n }\n\n private async *listDirectoryContents(\n dirHandle: IterableDirectoryHandle,\n basePath: string[] = [],\n ): AsyncIterable<TemplateFileAccess> {\n for await (const handle of dirHandle.values()) {\n if (handle.kind === 'file') {\n yield new WebFileAccess([...basePath, handle.name].join('/'), handle);\n } else if (handle.kind === 'directory') {\n yield* this.listDirectoryContents(handle, [...basePath, handle.name]);\n }\n }\n }\n}\n\n/** @internal */\nexport class WebFileSystemAccess {\n static isSupported(): boolean {\n return Boolean(showDirectoryPicker);\n }\n\n static async requestDirectoryAccess(): Promise<TemplateDirectoryAccess> {\n if (!showDirectoryPicker) {\n throw new Error('File system access is not supported');\n }\n const handle = await showDirectoryPicker();\n return new WebDirectoryAccess(handle);\n }\n\n private constructor() {}\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardContent from '@material-ui/core/CardContent';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { WebFileSystemAccess } from '../../lib/filesystem';\n\nconst useStyles = makeStyles(theme => ({\n introText: {\n textAlign: 'center',\n marginTop: theme.spacing(2),\n },\n card: {\n position: 'relative',\n maxWidth: 340,\n marginTop: theme.spacing(4),\n margin: theme.spacing(0, 2),\n },\n infoIcon: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n },\n}));\n\ninterface EditorIntroProps {\n style?: JSX.IntrinsicElements['div']['style'];\n onSelect?: (option: 'local' | 'form') => void;\n}\n\nexport function TemplateEditorIntro(props: EditorIntroProps) {\n const classes = useStyles();\n const supportsLoad = WebFileSystemAccess.isSupported();\n\n const cardLoadLocal = (\n <Card className={classes.card} elevation={4}>\n <CardActionArea\n disabled={!supportsLoad}\n onClick={() => props.onSelect?.('local')}\n >\n <CardContent>\n <Typography\n variant=\"h5\"\n gutterBottom\n color={supportsLoad ? undefined : 'textSecondary'}\n style={{ display: 'flex', flexFlow: 'row nowrap' }}\n >\n Load Template Directory\n </Typography>\n <Typography\n variant=\"body1\"\n color={supportsLoad ? undefined : 'textSecondary'}\n >\n Load a local template directory, allowing you to both edit and try\n executing your own template.\n </Typography>\n </CardContent>\n </CardActionArea>\n {!supportsLoad && (\n <div className={classes.infoIcon}>\n <Tooltip\n placement=\"top\"\n title=\"Only supported in some Chromium-based browsers\"\n >\n <InfoOutlinedIcon />\n </Tooltip>\n </div>\n )}\n </Card>\n );\n\n const cardFormEditor = (\n <Card className={classes.card} elevation={4}>\n <CardActionArea onClick={() => props.onSelect?.('form')}>\n <CardContent>\n <Typography variant=\"h5\" gutterBottom>\n Edit Template Form\n </Typography>\n <Typography variant=\"body1\">\n Preview and edit a template form, either using a sample template or\n by loading a template from the catalog.\n </Typography>\n </CardContent>\n </CardActionArea>\n </Card>\n );\n\n return (\n <div style={props.style}>\n <Typography variant=\"h6\" className={classes.introText}>\n Get started by choosing one of the options below\n </Typography>\n <div\n style={{\n display: 'flex',\n flexFlow: 'row wrap',\n alignItems: 'flex-start',\n justifyContent: 'center',\n alignContent: 'flex-start',\n }}\n >\n {supportsLoad && cardLoadLocal}\n {cardFormEditor}\n {!supportsLoad && cardLoadLocal}\n </div>\n </div>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ErrorPanel, Progress } from '@backstage/core-components';\nimport { useAsync, useRerender } from '@react-hookz/web';\nimport React, { createContext, ReactNode, useContext, useEffect } from 'react';\nimport {\n TemplateDirectoryAccess,\n TemplateFileAccess,\n} from '../../lib/filesystem';\n\nconst MAX_SIZE = 1024 * 1024;\nconst MAX_SIZE_MESSAGE = 'This file is too large to be displayed';\n\ninterface DirectoryEditorFile {\n /** The path of the file relative to the root directory */\n path: string;\n /** The staged content of the file */\n content: string;\n /** Whether the staged content matches what is on disk */\n dirty: boolean;\n\n /** Update the staged content of the file without saving */\n updateContent(content: string): void;\n /** Save the staged content of the file to disk */\n save(): Promise<void>;\n /** Reload the staged content of the file from disk */\n reload(): Promise<void>;\n}\n\ninterface DirectoryEditor {\n /** A list of all files in the edited directory */\n files: Array<DirectoryEditorFile>;\n\n /** The currently selected file */\n selectedFile: DirectoryEditorFile | undefined;\n /** Switch the selected file */\n setSelectedFile(path: string | undefined): void;\n\n /** Save all files to disk */\n save(): Promise<void>;\n /** Reload all files from disk */\n reload(): Promise<void>;\n\n subscribe(listener: () => void): () => void;\n}\n\nclass DirectoryEditorFileManager implements DirectoryEditorFile {\n readonly #access: TemplateFileAccess;\n readonly #signalUpdate: () => void;\n\n #content?: string;\n #savedContent?: string;\n\n constructor(access: TemplateFileAccess, signalUpdate: () => void) {\n this.#access = access;\n this.#signalUpdate = signalUpdate;\n }\n\n get path() {\n return this.#access.path;\n }\n\n get content() {\n return this.#content ?? MAX_SIZE_MESSAGE;\n }\n\n updateContent(content: string): void {\n if (this.#content === undefined) {\n return;\n }\n this.#content = content;\n this.#signalUpdate();\n }\n\n get dirty() {\n return this.#content !== this.#savedContent;\n }\n\n async save(): Promise<void> {\n if (this.#content !== undefined) {\n await this.#access.save(this.#content);\n this.#savedContent = this.#content;\n this.#signalUpdate();\n }\n }\n\n async reload(): Promise<void> {\n const file = await this.#access.file();\n if (file.size > MAX_SIZE) {\n if (this.#content !== undefined) {\n this.#content = undefined;\n this.#savedContent = undefined;\n this.#signalUpdate();\n }\n return;\n }\n\n const content = await file.text();\n if (this.#content !== content) {\n this.#content = content;\n this.#savedContent = content;\n this.#signalUpdate();\n }\n }\n}\n\nclass DirectoryEditorManager implements DirectoryEditor {\n readonly #access: TemplateDirectoryAccess;\n readonly #listeners = new Set<() => void>();\n\n #files: DirectoryEditorFile[] = [];\n #selectedFile: DirectoryEditorFile | undefined;\n\n constructor(access: TemplateDirectoryAccess) {\n this.#access = access;\n }\n\n get files() {\n return this.#files;\n }\n\n get selectedFile() {\n return this.#selectedFile;\n }\n\n setSelectedFile = (path: string | undefined): void => {\n const prev = this.#selectedFile;\n const next = this.#files.find(file => file.path === path);\n if (prev !== next) {\n this.#selectedFile = next;\n this.#signalUpdate();\n }\n };\n\n get dirty() {\n return this.#files.some(file => file.dirty);\n }\n\n async save(): Promise<void> {\n await Promise.all(this.#files.map(file => file.save()));\n }\n\n async reload(): Promise<void> {\n const selectedPath = this.#selectedFile?.path;\n\n const files = await this.#access.listFiles();\n const fileManagers = await Promise.all(\n files.map(async file => {\n const manager = new DirectoryEditorFileManager(\n file,\n this.#signalUpdate,\n );\n await manager.reload();\n return manager;\n }),\n );\n this.#files.length = 0;\n this.#files.push(...fileManagers);\n\n this.setSelectedFile(selectedPath);\n this.#signalUpdate();\n }\n\n subscribe(listener: () => void): () => void {\n this.#listeners.add(listener);\n return () => {\n this.#listeners.delete(listener);\n };\n }\n\n #signalUpdate = () => {\n this.#listeners.forEach(listener => listener());\n };\n}\n\nconst DirectoryEditorContext = createContext<DirectoryEditor | undefined>(\n undefined,\n);\n\nexport function useDirectoryEditor(): DirectoryEditor {\n const value = useContext(DirectoryEditorContext);\n const rerender = useRerender();\n\n useEffect(() => value?.subscribe(rerender), [value, rerender]);\n\n if (!value) {\n throw new Error('must be used within a DirectoryEditorProvider');\n }\n return value;\n}\n\ninterface DirectoryEditorProviderProps {\n directory: TemplateDirectoryAccess;\n children?: ReactNode;\n}\n\nexport function DirectoryEditorProvider(props: DirectoryEditorProviderProps) {\n const { directory } = props;\n\n const [{ result, error }, { execute }] = useAsync(\n async (dir: TemplateDirectoryAccess) => {\n const manager = new DirectoryEditorManager(dir);\n await manager.reload();\n\n const firstYaml = manager.files.find(file => file.path.match(/\\.ya?ml$/));\n if (firstYaml) {\n manager.setSelectedFile(firstYaml.path);\n }\n\n return manager;\n },\n );\n\n useEffect(() => {\n execute(directory);\n }, [execute, directory]);\n\n if (error) {\n return <ErrorPanel error={error} />;\n } else if (!result) {\n return <Progress />;\n }\n\n return (\n <DirectoryEditorContext.Provider value={result}>\n {props.children}\n </DirectoryEditorContext.Provider>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport yaml from 'yaml';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { JsonObject } from '@backstage/types';\nimport React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { scaffolderApiRef } from '../../api';\nimport { ScaffolderDryRunResponse } from '../../types';\n\nconst MAX_CONTENT_SIZE = 256 * 1024;\nconst CHUNK_SIZE = 0x8000;\n\ninterface DryRunOptions {\n templateContent: string;\n values: JsonObject;\n files: Array<{ path: string; content: string }>;\n}\n\ninterface DryRunResult extends ScaffolderDryRunResponse {\n id: number;\n}\n\ninterface DryRun {\n results: DryRunResult[];\n selectedResult: DryRunResult | undefined;\n\n selectResult(id: number): void;\n deleteResult(id: number): void;\n execute(options: DryRunOptions): Promise<void>;\n}\n\nconst DryRunContext = createContext<DryRun | undefined>(undefined);\n\ninterface DryRunProviderProps {\n children: ReactNode;\n}\n\nexport function base64EncodeContent(content: string): string {\n if (content.length > MAX_CONTENT_SIZE) {\n return btoa('<file too large>');\n }\n\n try {\n return btoa(content);\n } catch {\n const decoder = new TextEncoder();\n const buffer = decoder.encode(content);\n\n const chunks = new Array<string>();\n for (let offset = 0; offset < buffer.length; offset += CHUNK_SIZE) {\n chunks.push(\n String.fromCharCode(...buffer.slice(offset, offset + CHUNK_SIZE)),\n );\n }\n return btoa(chunks.join(''));\n }\n}\n\nexport function DryRunProvider(props: DryRunProviderProps) {\n const scaffolderApi = useApi(scaffolderApiRef);\n\n const [state, setState] = useState<\n Pick<DryRun, 'results' | 'selectedResult'>\n >({\n results: [],\n selectedResult: undefined,\n });\n const idRef = useRef(1);\n\n const selectResult = useCallback((id: number) => {\n setState(prevState => {\n const result = prevState.results.find(r => r.id === id);\n if (result === prevState.selectedResult) {\n return prevState;\n }\n return {\n results: prevState.results,\n selectedResult: result,\n };\n });\n }, []);\n\n const deleteResult = useCallback((id: number) => {\n setState(prevState => {\n const index = prevState.results.findIndex(r => r.id === id);\n if (index === -1) {\n return prevState;\n }\n const newResults = prevState.results.slice();\n const [deleted] = newResults.splice(index, 1);\n return {\n results: newResults,\n selectedResult:\n prevState.selectedResult?.id === deleted.id\n ? newResults[0]\n : prevState.selectedResult,\n };\n });\n }, []);\n\n const execute = useCallback(\n async (options: DryRunOptions) => {\n if (!scaffolderApi.dryRun) {\n throw new Error('Scaffolder API does not support dry-run');\n }\n\n const parsed = yaml.parse(options.templateContent);\n\n const response = await scaffolderApi.dryRun({\n template: parsed,\n values: options.values,\n secrets: {},\n directoryContents: options.files.map(file => ({\n path: file.path,\n base64Content: base64EncodeContent(file.content),\n })),\n });\n\n const result = {\n ...response,\n id: idRef.current++,\n };\n\n setState(prevState => ({\n results: [...prevState.results, result],\n selectedResult: prevState.selectedResult ?? result,\n }));\n },\n [scaffolderApi],\n );\n\n const dryRun = useMemo(\n () => ({\n ...state,\n selectResult,\n deleteResult,\n execute,\n }),\n [state, selectResult, deleteResult, execute],\n );\n\n return (\n <DryRunContext.Provider value={dryRun}>\n {props.children}\n </DryRunContext.Provider>\n );\n}\n\nexport function useDryRun(): DryRun {\n const value = useContext(DryRunContext);\n if (!value) {\n throw new Error('must be used within a DryRunProvider');\n }\n return value;\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BackstageTheme } from '@backstage/theme';\nimport IconButton from '@material-ui/core/IconButton';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport CheckIcon from '@material-ui/icons/Check';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport React from 'react';\nimport { useDryRun } from '../DryRunContext';\n\nconst useStyles = makeStyles((theme: BackstageTheme) => ({\n root: {\n overflowY: 'auto',\n background: theme.palette.background.default,\n },\n iconSuccess: {\n minWidth: 0,\n marginRight: theme.spacing(1),\n color: theme.palette.status.ok,\n },\n iconFailure: {\n minWidth: 0,\n marginRight: theme.spacing(1),\n color: theme.palette.status.error,\n },\n}));\n\nexport function DryRunResultsList() {\n const classes = useStyles();\n const dryRun = useDryRun();\n\n return (\n <List className={classes.root} dense>\n {dryRun.results.map(result => {\n const failed = result.log.some(l => l.body.status === 'failed');\n return (\n <ListItem\n button\n key={result.id}\n selected={dryRun.selectedResult?.id === result.id}\n onClick={() => dryRun.selectResult(result.id)}\n >\n <ListItemIcon\n className={failed ? classes.iconFailure : classes.iconSuccess}\n >\n {failed ? <CancelIcon /> : <CheckIcon />}\n </ListItemIcon>\n <ListItemText primary={`Result ${result.id}`} />\n <ListItemSecondaryAction>\n <IconButton\n edge=\"end\"\n aria-label=\"delete\"\n onClick={() => dryRun.deleteResult(result.id)}\n >\n <DeleteIcon />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n );\n })}\n </List>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TreeView from '@material-ui/lab/TreeView';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport TreeItem from '@material-ui/lab/TreeItem';\n\nconst useStyles = makeStyles({\n root: {\n whiteSpace: 'nowrap',\n overflowY: 'auto',\n },\n});\n\nexport type FileEntry =\n | {\n type: 'file';\n name: string;\n path: string;\n }\n | {\n type: 'directory';\n name: string;\n path: string;\n children: FileEntry[];\n };\n\nexport function parseFileEntires(paths: string[]): FileEntry[] {\n const root: FileEntry = {\n type: 'directory',\n name: '',\n path: '',\n children: [],\n };\n\n for (const path of paths.slice().sort()) {\n const parts = path.split('/');\n\n let current = root;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (part === '') {\n throw new Error(`Invalid path part: ''`);\n }\n\n const entryPath = parts.slice(0, i + 1).join('/');\n\n const existing = current.children.find(child => child.name === part);\n if (existing?.type === 'file') {\n throw new Error(`Duplicate filename at '${entryPath}'`);\n } else if (existing) {\n current = existing;\n } else {\n if (i < parts.length - 1) {\n const newEntry: FileEntry = {\n type: 'directory',\n name: part,\n path: entryPath,\n children: [],\n };\n const firstFileIndex = current.children.findIndex(\n child => child.type === 'file',\n );\n current.children.splice(firstFileIndex, 0, newEntry);\n current = newEntry;\n } else {\n current.children.push({\n type: 'file',\n name: part,\n path: entryPath,\n });\n }\n }\n }\n }\n\n return root.children;\n}\n\nfunction FileTreeItem({ entry }: { entry: FileEntry }) {\n if (entry.type === 'file') {\n return <TreeItem nodeId={entry.path} label={entry.name} />;\n }\n\n return (\n <TreeItem nodeId={entry.path} label={entry.name}>\n {entry.children.map(child => (\n <FileTreeItem key={child.path} entry={child} />\n ))}\n </TreeItem>\n );\n}\n\ninterface FileBrowserProps {\n /** A list of all filepaths to show, directories are separated with a `/` */\n filePaths: string[];\n /** The currently selected file */\n selected?: string;\n /** Callback for when a file is selected */\n onSelect?(filePath: string): void;\n}\n\n/** A simple file browser that allows you to select individual files */\nexport function FileBrowser(props: FileBrowserProps) {\n const classes = useStyles();\n\n const fileTree = useMemo(\n () => parseFileEntires(props.filePaths),\n [props.filePaths],\n );\n\n return (\n <TreeView\n selected={props.selected}\n className={classes.root}\n defaultCollapseIcon={<ExpandMoreIcon />}\n defaultExpandIcon={<ChevronRightIcon />}\n onNodeSelect={(_e: unknown, nodeId: string) => {\n if (props.onSelect && props.filePaths.includes(nodeId)) {\n props.onSelect(nodeId);\n }\n }}\n >\n {fileTree.map(entry => (\n <FileTreeItem key={entry.path} entry={entry} />\n ))}\n </TreeView>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport Divider from '@material-ui/core/Divider';\nimport React, { Children, ReactNode } from 'react';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'grid',\n gridTemplateColumns: '280px auto 3fr',\n gridTemplateRows: '1fr',\n },\n child: {\n overflowY: 'auto',\n height: '100%',\n minHeight: 0,\n },\n firstChild: {\n background: theme.palette.background.paper,\n },\n}));\n\nexport function DryRunResultsSplitView(props: { children: ReactNode }) {\n const classes = useStyles();\n const childArray = Children.toArray(props.children);\n\n if (childArray.length !== 2) {\n throw new Error('must have exactly 2 children');\n }\n\n return (\n <div className={classes.root}>\n <div className={classNames(classes.child, classes.firstChild)}>\n {childArray[0]}\n </div>\n <Divider orientation=\"horizontal\" />\n <div className={classes.child}>{childArray[1]}</div>\n </div>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { LogViewer } from '@backstage/core-components';\nimport { StreamLanguage } from '@codemirror/language';\nimport { yaml as yamlSupport } from '@codemirror/legacy-modes/mode/yaml';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Tab from '@material-ui/core/Tab';\nimport Tabs from '@material-ui/core/Tabs';\nimport CodeMirror from '@uiw/react-codemirror';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { TaskStatusStepper } from '../../TaskPage/TaskPage';\nimport { TaskPageLinks } from '../../TaskPage/TaskPageLinks';\nimport { useDryRun } from '../DryRunContext';\nimport { FileBrowser } from '../../FileBrowser';\nimport { DryRunResultsSplitView } from './DryRunResultsSplitView';\n\nconst useStyles = makeStyles({\n root: {\n display: 'flex',\n flexFlow: 'column nowrap',\n },\n contentWrapper: {\n flex: 1,\n position: 'relative',\n },\n content: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n\n display: 'flex',\n '& > *': {\n flex: 1,\n },\n },\n codeMirror: {\n height: '100%',\n overflowY: 'auto',\n },\n});\n\nfunction FilesContent() {\n const classes = useStyles();\n const { selectedResult } = useDryRun();\n const [selectedPath, setSelectedPath] = useState<string>('');\n const selectedFile = selectedResult?.directoryContents.find(\n f => f.path === selectedPath,\n );\n\n useEffect(() => {\n if (selectedResult) {\n const [firstFile] = selectedResult.directoryContents;\n if (firstFile) {\n setSelectedPath(firstFile.path);\n } else {\n setSelectedPath('');\n }\n }\n return undefined;\n }, [selectedResult]);\n\n if (!selectedResult) {\n return null;\n }\n return (\n <DryRunResultsSplitView>\n <FileBrowser\n selected={selectedPath}\n onSelect={setSelectedPath}\n filePaths={selectedResult.directoryContents.map(file => file.path)}\n />\n <CodeMirror\n className={classes.codeMirror}\n theme=\"dark\"\n height=\"100%\"\n extensions={[StreamLanguage.define(yamlSupport)]}\n readOnly\n value={\n selectedFile?.base64Content ? atob(selectedFile.base64Content) : ''\n }\n />\n </DryRunResultsSplitView>\n );\n}\nfunction LogContent() {\n const { selectedResult } = useDryRun();\n const [currentStepId, setUserSelectedStepId] = useState<string>();\n\n const steps = useMemo(() => {\n if (!selectedResult) {\n return [];\n }\n return (\n selectedResult.steps.map(step => {\n const stepLog = selectedResult.log.filter(\n l => l.body.stepId === step.id,\n );\n return {\n id: step.id,\n name: step.name,\n logString: stepLog.map(l => l.body.message).join('\\n'),\n status: stepLog[stepLog.length - 1]?.body.status ?? 'completed',\n };\n }) ?? []\n );\n }, [selectedResult]);\n\n if (!selectedResult) {\n return null;\n }\n\n const selectedStep = steps.find(s => s.id === currentStepId) ?? steps[0];\n\n return (\n <DryRunResultsSplitView>\n <TaskStatusStepper\n steps={steps}\n currentStepId={selectedStep.id}\n onUserStepChange={setUserSelectedStepId}\n />\n <LogViewer text={selectedStep?.logString ?? ''} />\n </DryRunResultsSplitView>\n );\n}\n\nfunction OutputContent() {\n const classes = useStyles();\n const { selectedResult } = useDryRun();\n\n if (!selectedResult) {\n return null;\n }\n\n return (\n <DryRunResultsSplitView>\n <Box pt={2}>\n {selectedResult.output?.links?.length && (\n <TaskPageLinks output={selectedResult.output} />\n )}\n </Box>\n <CodeMirror\n className={classes.codeMirror}\n theme=\"dark\"\n height=\"100%\"\n extensions={[StreamLanguage.define(yamlSupport)]}\n readOnly\n value={JSON.stringify(selectedResult.output, null, 2)}\n />\n </DryRunResultsSplitView>\n );\n}\n\nexport function DryRunResultsView() {\n const classes = useStyles();\n const [selectedTab, setSelectedTab] = useState<'files' | 'log' | 'output'>(\n 'files',\n );\n\n return (\n <div className={classes.root}>\n <Tabs value={selectedTab} onChange={(_, v) => setSelectedTab(v)}>\n <Tab value=\"files\" label=\"Files\" />\n <Tab value=\"log\" label=\"Log\" />\n <Tab value=\"output\" label=\"Output\" />\n </Tabs>\n <Divider />\n\n <div className={classes.contentWrapper}>\n <div className={classes.content}>\n {selectedTab === 'files' && <FilesContent />}\n {selectedTab === 'log' && <LogContent />}\n {selectedTab === 'output' && <OutputContent />}\n </div>\n </div>\n </div>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BackstageTheme } from '@backstage/theme';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandLess';\nimport { usePrevious } from '@react-hookz/web';\nimport React, { useEffect, useState } from 'react';\nimport { useDryRun } from '../DryRunContext';\nimport { DryRunResultsList } from './DryRunResultsList';\nimport { DryRunResultsView } from './DryRunResultsView';\n\nconst useStyles = makeStyles((theme: BackstageTheme) => ({\n header: {\n height: 48,\n minHeight: 0,\n '&.Mui-expanded': {\n height: 48,\n minHeight: 0,\n },\n },\n content: {\n display: 'grid',\n background: theme.palette.background.default,\n gridTemplateColumns: '180px auto 1fr',\n gridTemplateRows: '1fr',\n padding: 0,\n height: 400,\n },\n}));\n\nexport function DryRunResults() {\n const classes = useStyles();\n const dryRun = useDryRun();\n const [expanded, setExpanded] = useState(false);\n const [hidden, setHidden] = useState(true);\n\n const resultsLength = dryRun.results.length;\n const prevResultsLength = usePrevious(resultsLength);\n useEffect(() => {\n if (prevResultsLength === 0 && resultsLength === 1) {\n setHidden(false);\n setExpanded(true);\n } else if (prevResultsLength === 1 && resultsLength === 0) {\n setExpanded(false);\n }\n }, [prevResultsLength, resultsLength]);\n\n return (\n <>\n <Accordion\n variant=\"outlined\"\n expanded={expanded}\n hidden={resultsLength === 0 && hidden}\n onChange={(_, exp) => setExpanded(exp)}\n onTransitionEnd={() => resultsLength === 0 && setHidden(true)}\n >\n <AccordionSummary\n className={classes.header}\n expandIcon={<ExpandMoreIcon />}\n >\n <Typography>Dry-run results</Typography>\n </AccordionSummary>\n <Divider orientation=\"horizontal\" />\n <AccordionDetails className={classes.content}>\n <DryRunResultsList />\n <Divider orientation=\"horizontal\" />\n <DryRunResultsView />\n </AccordionDetails>\n </Accordion>\n </>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Divider, IconButton, makeStyles, Tooltip } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport SaveIcon from '@material-ui/icons/Save';\nimport React from 'react';\nimport { FileBrowser } from '../FileBrowser';\nimport { useDirectoryEditor } from './DirectoryEditorContext';\n\nconst useStyles = makeStyles(theme => ({\n button: {\n padding: theme.spacing(1),\n },\n buttons: {\n display: 'flex',\n flexFlow: 'row nowrap',\n alignItems: 'center',\n justifyContent: 'flex-start',\n },\n buttonsGap: {\n flex: '1 1 auto',\n },\n buttonsDivider: {\n marginBottom: theme.spacing(1),\n },\n}));\n\n/** The local file browser for the template editor */\nexport function TemplateEditorBrowser(props: { onClose?: () => void }) {\n const classes = useStyles();\n const directoryEditor = useDirectoryEditor();\n const changedFiles = directoryEditor.files.filter(file => file.dirty);\n\n const handleClose = () => {\n if (!props.onClose) {\n return;\n }\n if (changedFiles.length > 0) {\n // eslint-disable-next-line no-alert\n const accepted = window.confirm(\n 'Are you sure? Unsaved changes will be lost',\n );\n if (!accepted) {\n return;\n }\n }\n props.onClose();\n };\n\n return (\n <>\n <div className={classes.buttons}>\n <Tooltip title=\"Save all files\">\n <IconButton\n className={classes.button}\n disabled={directoryEditor.files.every(file => !file.dirty)}\n onClick={() => directoryEditor.save()}\n >\n <SaveIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Reload directory\">\n <IconButton\n className={classes.button}\n onClick={() => directoryEditor.reload()}\n >\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n <div className={classes.buttonsGap} />\n <Tooltip title=\"Close directory\">\n <IconButton className={classes.button} onClick={handleClose}>\n <CloseIcon />\n </IconButton>\n </Tooltip>\n </div>\n <Divider className={classes.buttonsDivider} />\n <FileBrowser\n selected={directoryEditor.selectedFile?.path ?? ''}\n onSelect={directoryEditor.setSelectedFile}\n filePaths={directoryEditor.files.map(file => file.path)}\n />\n </>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useApiHolder } from '@backstage/core-plugin-api';\nimport { JsonObject, JsonValue } from '@backstage/types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport React, { Component, ReactNode, useMemo, useState } from 'react';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport yaml from 'yaml';\nimport { FieldExtensionOptions } from '../../extensions';\nimport { TemplateParameterSchema } from '../../types';\nimport { MultistepJsonForm } from '../MultistepJsonForm';\nimport { createValidator } from '../TemplatePage';\nimport { useDirectoryEditor } from './DirectoryEditorContext';\nimport { useDryRun } from './DryRunContext';\n\nconst useStyles = makeStyles({\n containerWrapper: {\n position: 'relative',\n width: '100%',\n height: '100%',\n },\n container: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n overflow: 'auto',\n },\n});\n\ninterface ErrorBoundaryProps {\n invalidator: unknown;\n setErrorText(errorText: string | undefined): void;\n children: ReactNode;\n}\n\ninterface ErrorBoundaryState {\n shouldRender: boolean;\n}\n\nclass ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state = {\n shouldRender: true,\n };\n\n componentDidUpdate(prevProps: { invalidator: unknown }) {\n if (prevProps.invalidator !== this.props.invalidator) {\n this.setState({ shouldRender: true });\n }\n }\n\n componentDidCatch(error: Error) {\n this.props.setErrorText(error.message);\n this.setState({ shouldRender: false });\n }\n\n render() {\n return this.state.shouldRender ? this.props.children : null;\n }\n}\n\ninterface TemplateEditorFormProps {\n content?: string;\n /** Setting this to true will cause the content to be parsed as if it is the template entity spec */\n contentIsSpec?: boolean;\n data: JsonObject;\n onUpdate: (data: JsonObject) => void;\n setErrorText: (errorText?: string) => void;\n\n onDryRun?: (data: JsonObject) => Promise<void>;\n fieldExtensions?: FieldExtensionOptions<any, any>[];\n}\n\nfunction isJsonObject(value: JsonValue | undefined): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Shows the a template form that is parsed from the provided content */\nexport function TemplateEditorForm(props: TemplateEditorFormProps) {\n const {\n content,\n contentIsSpec,\n data,\n onUpdate,\n onDryRun,\n setErrorText,\n fieldExtensions = [],\n } = props;\n const classes = useStyles();\n const apiHolder = useApiHolder();\n\n const [steps, setSteps] = useState<TemplateParameterSchema['steps']>();\n\n const fields = useMemo(() => {\n return Object.fromEntries(\n fieldExtensions.map(({ name, component }) => [name, component]),\n );\n }, [fieldExtensions]);\n\n useDebounce(\n () => {\n try {\n if (!content) {\n setSteps(undefined);\n return;\n }\n const parsed: JsonValue = yaml.parse(content);\n\n if (!isJsonObject(parsed)) {\n setSteps(undefined);\n return;\n }\n\n let rootObj = parsed;\n if (!contentIsSpec) {\n const isTemplate =\n String(parsed.kind).toLocaleLowerCase('en-US') === 'template';\n if (!isTemplate) {\n setSteps(undefined);\n return;\n }\n\n rootObj = isJsonObject(parsed.spec) ? parsed.spec : {};\n }\n\n const { parameters } = rootObj;\n if (!Array.isArray(parameters)) {\n setErrorText('Template parameters must be an array');\n setSteps(undefined);\n return;\n }\n\n const fieldValidators = Object.fromEntries(\n fieldExtensions.map(({ name, validation }) => [name, validation]),\n );\n\n setErrorText();\n setSteps(\n parameters.flatMap(param =>\n isJsonObject(param)\n ? [\n {\n title: String(param.title),\n schema: param,\n validate: createValidator(param, fieldValidators, {\n apiHolder,\n }),\n },\n ]\n : [],\n ),\n );\n } catch (e) {\n setErrorText(e.message);\n }\n },\n 250,\n [contentIsSpec, content, apiHolder],\n );\n\n if (!steps) {\n return null;\n }\n\n return (\n <div className={classes.containerWrapper}>\n <div className={classes.container}>\n <ErrorBoundary invalidator={steps} setErrorText={setErrorText}>\n <MultistepJsonForm\n steps={steps}\n fields={fields}\n formData={data}\n onChange={e => onUpdate(e.formData)}\n onReset={() => onUpdate({})}\n finishButtonLabel={onDryRun && 'Try It'}\n onFinish={onDryRun && (() => onDryRun(data))}\n />\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\n/** A version of the TemplateEditorForm that is connected to the DirectoryEditor and DryRun contexts */\nexport function TemplateEditorFormDirectoryEditorDryRun(\n props: Pick<TemplateEditorFormProps, 'setErrorText' | 'fieldExtensions'>,\n) {\n const { setErrorText, fieldExtensions = [] } = props;\n const dryRun = useDryRun();\n\n const directoryEditor = useDirectoryEditor();\n const { selectedFile } = directoryEditor;\n\n const [data, setData] = useState<JsonObject>({});\n\n const handleDryRun = async () => {\n if (!selectedFile) {\n return;\n }\n\n await dryRun.execute({\n templateContent: selectedFile.content,\n values: data,\n files: directoryEditor.files,\n });\n };\n\n const content =\n selectedFile && selectedFile.path.match(/\\.ya?ml$/)\n ? selectedFile.content\n : undefined;\n\n return (\n <TemplateEditorForm\n onDryRun={handleDryRun}\n fieldExtensions={fieldExtensions}\n setErrorText={setErrorText}\n content={content}\n data={data}\n onUpdate={setData}\n />\n );\n}\n\nTemplateEditorForm.DirectoryEditorDryRun =\n TemplateEditorFormDirectoryEditorDryRun;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { StreamLanguage } from '@codemirror/language';\nimport { yaml as yamlSupport } from '@codemirror/legacy-modes/mode/yaml';\nimport { showPanel } from '@codemirror/view';\nimport { IconButton, makeStyles, Paper, Tooltip } from '@material-ui/core';\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport SaveIcon from '@material-ui/icons/Save';\nimport { useKeyboardEvent } from '@react-hookz/web';\nimport CodeMirror from '@uiw/react-codemirror';\nimport React, { useMemo } from 'react';\nimport { useDirectoryEditor } from './DirectoryEditorContext';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n position: 'relative',\n width: '100%',\n height: '100%',\n },\n codeMirror: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n },\n errorPanel: {\n color: theme.palette.error.main,\n lineHeight: 2,\n margin: theme.spacing(0, 1),\n },\n floatingButtons: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(3),\n },\n floatingButton: {\n padding: theme.spacing(1),\n },\n}));\n\n/** A wrapper around CodeMirror with an error panel and extra actions available */\nexport function TemplateEditorTextArea(props: {\n content?: string;\n onUpdate?: (content: string) => void;\n errorText?: string;\n onSave?: () => void;\n onReload?: () => void;\n}) {\n const { errorText } = props;\n const classes = useStyles();\n\n const panelExtension = useMemo(() => {\n if (!errorText) {\n return showPanel.of(null);\n }\n\n const dom = document.createElement('div');\n dom.classList.add(classes.errorPanel);\n dom.textContent = errorText;\n return showPanel.of(() => ({ dom, bottom: true }));\n }, [classes, errorText]);\n\n useKeyboardEvent(\n e => e.key === 's' && (e.ctrlKey || e.metaKey),\n e => {\n e.preventDefault();\n if (props.onSave) {\n props.onSave();\n }\n },\n );\n\n return (\n <div className={classes.container}>\n <CodeMirror\n className={classes.codeMirror}\n theme=\"dark\"\n height=\"100%\"\n extensions={[StreamLanguage.define(yamlSupport), panelExtension]}\n value={props.content}\n onChange={props.onUpdate}\n />\n {(props.onSave || props.onReload) && (\n <div className={classes.floatingButtons}>\n <Paper>\n {props.onSave && (\n <Tooltip title=\"Save file\">\n <IconButton\n className={classes.floatingButton}\n onClick={() => props.onSave?.()}\n >\n <SaveIcon />\n </IconButton>\n </Tooltip>\n )}\n {props.onReload && (\n <Tooltip title=\"Reload file\">\n <IconButton\n className={classes.floatingButton}\n onClick={() => props.onReload?.()}\n >\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n )}\n </Paper>\n </div>\n )}\n </div>\n );\n}\n\n/** A version of the TemplateEditorTextArea that is connected to the DirectoryEditor context */\nexport function TemplateEditorDirectoryEditorTextArea(props: {\n errorText?: string;\n}) {\n const directoryEditor = useDirectoryEditor();\n\n const actions = directoryEditor.selectedFile?.dirty\n ? {\n onSave: () => directoryEditor.save(),\n onReload: () => directoryEditor.reload(),\n }\n : {\n onReload: () => directoryEditor.reload(),\n };\n\n return (\n <TemplateEditorTextArea\n errorText={props.errorText}\n content={directoryEditor.selectedFile?.content}\n onUpdate={content => directoryEditor.selectedFile?.updateContent(content)}\n {...actions}\n />\n );\n}\n\nTemplateEditorTextArea.DirectoryEditor = TemplateEditorDirectoryEditorTextArea;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { makeStyles } from '@material-ui/core';\nimport React, { useState } from 'react';\nimport { FieldExtensionOptions } from '../../extensions';\nimport { TemplateDirectoryAccess } from '../../lib/filesystem';\nimport { DirectoryEditorProvider } from './DirectoryEditorContext';\nimport { DryRunProvider } from './DryRunContext';\nimport { DryRunResults } from './DryRunResults';\nimport { TemplateEditorBrowser } from './TemplateEditorBrowser';\nimport { TemplateEditorForm } from './TemplateEditorForm';\nimport { TemplateEditorTextArea } from './TemplateEditorTextArea';\n\nconst useStyles = makeStyles({\n // Reset and fix sizing to make sure scrolling behaves correctly\n root: {\n gridArea: 'pageContent',\n\n display: 'grid',\n gridTemplateAreas: `\n \"browser editor preview\"\n \"results results results\"\n `,\n gridTemplateColumns: '1fr 3fr 2fr',\n gridTemplateRows: '1fr auto',\n },\n browser: {\n gridArea: 'browser',\n overflow: 'auto',\n },\n editor: {\n gridArea: 'editor',\n overflow: 'auto',\n },\n preview: {\n gridArea: 'preview',\n overflow: 'auto',\n },\n results: {\n gridArea: 'results',\n },\n});\n\nexport const TemplateEditor = (props: {\n directory: TemplateDirectoryAccess;\n fieldExtensions?: FieldExtensionOptions<any, any>[];\n onClose?: () => void;\n}) => {\n const classes = useStyles();\n\n const [errorText, setErrorText] = useState<string>();\n\n return (\n <DirectoryEditorProvider directory={props.directory}>\n <DryRunProvider>\n <main className={classes.root}>\n <section className={classes.browser}>\n <TemplateEditorBrowser onClose={props.onClose} />\n </section>\n <section className={classes.editor}>\n <TemplateEditorTextArea.DirectoryEditor errorText={errorText} />\n </section>\n <section className={classes.preview}>\n <TemplateEditorForm.DirectoryEditorDryRun\n setErrorText={setErrorText}\n fieldExtensions={props.fieldExtensions}\n />\n </section>\n <section className={classes.results}>\n <DryRunResults />\n </section>\n </main>\n </DryRunProvider>\n </DirectoryEditorProvider>\n );\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Entity } from '@backstage/catalog-model';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n catalogApiRef,\n humanizeEntityRef,\n} from '@backstage/plugin-catalog-react';\nimport {\n FormControl,\n IconButton,\n InputLabel,\n LinearProgress,\n makeStyles,\n MenuItem,\n Select,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport React, { useCallback, useState } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport yaml from 'yaml';\nimport { FieldExtensionOptions } from '../../extensions';\nimport { TemplateEditorForm } from './TemplateEditorForm';\nimport { TemplateEditorTextArea } from './TemplateEditorTextArea';\n\nconst EXAMPLE_TEMPLATE_PARAMS_YAML = `# Edit the template parameters below to see how they will render in the scaffolder form UI\nparameters:\n - title: Fill in some steps\n required:\n - name\n properties:\n name:\n title: Name\n type: string\n description: Unique name of the component\n owner:\n title: Owner\n type: string\n description: Owner of the component\n ui:field: OwnerPicker\n ui:options:\n allowedKinds:\n - Group\n - title: Choose a location\n required:\n - repoUrl\n properties:\n repoUrl:\n title: Repository Location\n type: string\n ui:field: RepoUrlPicker\n ui:options:\n allowedHosts:\n - github.com\nsteps:\n - id: fetch-base\n name: Fetch Base\n action: fetch:template\n input:\n url: ./template\n values:\n name: \\${{parameters.name}}\n`;\n\ntype TemplateOption = {\n label: string;\n value: Entity;\n};\n\nconst useStyles = makeStyles(theme => ({\n root: {\n gridArea: 'pageContent',\n display: 'grid',\n gridTemplateAreas: `\n \"controls controls\"\n \"textArea preview\"\n `,\n gridTemplateRows: 'auto 1fr',\n gridTemplateColumns: '1fr 1fr',\n },\n controls: {\n gridArea: 'controls',\n display: 'flex',\n flexFlow: 'row nowrap',\n alignItems: 'center',\n margin: theme.spacing(1),\n },\n textArea: {\n gridArea: 'textArea',\n },\n preview: {\n gridArea: 'preview',\n },\n}));\n\nexport const TemplateFormPreviewer = ({\n defaultPreviewTemplate = EXAMPLE_TEMPLATE_PARAMS_YAML,\n customFieldExtensions = [],\n onClose,\n}: {\n defaultPreviewTemplate?: string;\n customFieldExtensions?: FieldExtensionOptions<any, any>[];\n onClose?: () => void;\n}) => {\n const classes = useStyles();\n const alertApi = useApi(alertApiRef);\n const catalogApi = useApi(catalogApiRef);\n const [selectedTemplate, setSelectedTemplate] = useState('');\n const [errorText, setErrorText] = useState<string>();\n const [templateOptions, setTemplateOptions] = useState<TemplateOption[]>([]);\n const [templateYaml, setTemplateYaml] = useState(defaultPreviewTemplate);\n const [formState, setFormState] = useState({});\n\n const { loading } = useAsync(\n () =>\n catalogApi\n .getEntities({\n filter: { kind: 'template' },\n fields: [\n 'kind',\n 'metadata.namespace',\n 'metadata.name',\n 'metadata.title',\n 'spec.parameters',\n 'spec.steps',\n 'spec.output',\n ],\n })\n .then(({ items }) =>\n setTemplateOptions(\n items.map(template => ({\n label:\n template.metadata.title ??\n humanizeEntityRef(template, { defaultKind: 'template' }),\n value: template,\n })),\n ),\n )\n .catch(e =>\n alertApi.post({\n message: `Error loading exisiting templates: ${e.message}`,\n severity: 'error',\n }),\n ),\n [catalogApi],\n );\n\n const handleSelectChange = useCallback(\n selected => {\n setSelectedTemplate(selected);\n setTemplateYaml(yaml.stringify(selected.spec));\n },\n [setTemplateYaml],\n );\n\n return (\n <>\n {loading && <LinearProgress />}\n <main className={classes.root}>\n <div className={classes.controls}>\n <FormControl variant=\"outlined\" size=\"small\" fullWidth>\n <InputLabel id=\"select-template-label\">\n Load Existing Template\n </InputLabel>\n <Select\n value={selectedTemplate}\n label=\"Load Existing Template\"\n labelId=\"select-template-label\"\n onChange={e => handleSelectChange(e.target.value)}\n >\n {templateOptions.map((option, idx) => (\n <MenuItem key={idx} value={option.value as any}>\n {option.label}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <IconButton size=\"medium\" onClick={onClose}>\n <CloseIcon />\n </IconButton>\n </div>\n <div className={classes.textArea}>\n <TemplateEditorTextArea\n content={templateYaml}\n onUpdate={setTemplateYaml}\n errorText={errorText}\n />\n </div>\n <div className={classes.preview}>\n <TemplateEditorForm\n content={templateYaml}\n contentIsSpec\n fieldExtensions={customFieldExtensions}\n data={formState}\n onUpdate={setFormState}\n setErrorText={setErrorText}\n />\n </div>\n </main>\n </>\n );\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useState } from 'react';\nimport { Content, Header, Page } from '@backstage/core-components';\nimport {\n TemplateDirectoryAccess,\n WebFileSystemAccess,\n} from '../../lib/filesystem';\nimport { TemplateEditorIntro } from './TemplateEditorIntro';\nimport { TemplateEditor } from './TemplateEditor';\nimport { TemplateFormPreviewer } from './TemplateFormPreviewer';\nimport { FieldExtensionOptions } from '../../extensions';\n\ntype Selection =\n | {\n type: 'local';\n directory: TemplateDirectoryAccess;\n }\n | {\n type: 'form';\n };\n\ninterface TemplateEditorPageProps {\n defaultPreviewTemplate?: string;\n customFieldExtensions?: FieldExtensionOptions<any, any>[];\n}\n\nexport function TemplateEditorPage(props: TemplateEditorPageProps) {\n const [selection, setSelection] = useState<Selection>();\n\n let content: JSX.Element | null = null;\n if (selection?.type === 'local') {\n content = (\n <TemplateEditor\n directory={selection.directory}\n fieldExtensions={props.customFieldExtensions}\n onClose={() => setSelection(undefined)}\n />\n );\n } else if (selection?.type === 'form') {\n content = (\n <TemplateFormPreviewer\n defaultPreviewTemplate={props.defaultPreviewTemplate}\n customFieldExtensions={props.customFieldExtensions}\n onClose={() => setSelection(undefined)}\n />\n );\n } else {\n content = (\n <Content>\n <TemplateEditorIntro\n onSelect={option => {\n if (option === 'local') {\n WebFileSystemAccess.requestDirectoryAccess()\n .then(directory => setSelection({ type: 'local', directory }))\n .catch(() => {});\n } else if (option === 'form') {\n setSelection({ type: 'form' });\n }\n }}\n />\n </Content>\n );\n }\n\n return (\n <Page themeId=\"home\">\n <Header\n title=\"Template Editor\"\n subtitle=\"Edit, preview, and try out templates and template forms\"\n />\n {content}\n </Page>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { IconComponent } from '@backstage/core-plugin-api';\nimport {\n Card,\n List,\n ListItemIcon,\n ListItemText,\n makeStyles,\n MenuItem,\n Theme,\n Typography,\n} from '@material-ui/core';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport React, { Fragment } from 'react';\n\nimport AllIcon from '@material-ui/icons/FontDownload';\n\nconst useStyles = makeStyles<Theme>(\n theme => ({\n root: {\n backgroundColor: 'rgba(0, 0, 0, .11)',\n boxShadow: 'none',\n margin: theme.spacing(1, 0, 1, 0),\n },\n title: {\n margin: theme.spacing(1, 0, 0, 1),\n textTransform: 'uppercase',\n fontSize: 12,\n fontWeight: 'bold',\n },\n listIcon: {\n minWidth: 30,\n color: theme.palette.text.primary,\n },\n menuItem: {\n minHeight: theme.spacing(6),\n },\n groupWrapper: {\n margin: theme.spacing(1, 1, 2, 1),\n },\n }),\n {\n name: 'ScaffolderReactOwnerListPicker',\n },\n);\n\nexport type ButtonGroup = {\n name: string;\n items: {\n id: 'owned' | 'starred' | 'all';\n label: string;\n icon?: IconComponent;\n }[];\n};\n\nfunction getFilterGroups(): ButtonGroup[] {\n return [\n {\n name: 'Task Owner',\n items: [\n {\n id: 'owned',\n label: 'Owned',\n icon: SettingsIcon,\n },\n {\n id: 'all',\n label: 'All',\n icon: AllIcon,\n },\n ],\n },\n ];\n}\n\nexport const OwnerListPicker = (props: {\n filter: string;\n onSelectOwner: (id: 'owned' | 'all') => void;\n}) => {\n const { filter, onSelectOwner } = props;\n const classes = useStyles();\n\n const filterGroups = getFilterGroups();\n return (\n <Card className={classes.root}>\n {filterGroups.map(group => (\n <Fragment key={group.name}>\n <Typography variant=\"subtitle2\" className={classes.title}>\n {group.name}\n </Typography>\n <Card className={classes.groupWrapper}>\n <List disablePadding dense>\n {group.items.map(item => (\n <MenuItem\n key={item.id}\n button\n divider\n onClick={() => onSelectOwner(item.id as 'owned' | 'all')}\n selected={item.id === filter}\n className={classes.menuItem}\n data-testid={`owner-picker-${item.id}`}\n >\n {item.icon && (\n <ListItemIcon className={classes.listIcon}>\n <item.icon fontSize=\"small\" />\n </ListItemIcon>\n )}\n <ListItemText>\n <Typography variant=\"body1\">{item.label}</Typography>\n </ListItemText>\n </MenuItem>\n ))}\n </List>\n </Card>\n </Fragment>\n ))}\n </Card>\n );\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DateTime, Interval } from 'luxon';\nimport humanizeDuration from 'humanize-duration';\nimport React from 'react';\n\nexport const CreatedAtColumn = ({ createdAt }: { createdAt: string }) => {\n const createdAtTime = DateTime.fromISO(createdAt);\n const formatted = Interval.fromDateTimes(createdAtTime, DateTime.local())\n .toDuration()\n .valueOf();\n\n return <p>{humanizeDuration(formatted, { round: true })} ago</p>;\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useApi } from '@backstage/core-plugin-api';\nimport React from 'react';\n\nimport useAsync from 'react-use/lib/useAsync';\n\nimport { catalogApiRef, EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { parseEntityRef, UserEntity } from '@backstage/catalog-model';\n\nexport const OwnerEntityColumn = ({ entityRef }: { entityRef?: string }) => {\n const catalogApi = useApi(catalogApiRef);\n\n const { value, loading, error } = useAsync(\n () => catalogApi.getEntityByRef(entityRef || ''),\n [catalogApi, entityRef],\n );\n\n if (!entityRef) {\n return <p>Unknown</p>;\n }\n\n if (loading || error) {\n return null;\n }\n\n return (\n <EntityRefLink\n entityRef={parseEntityRef(entityRef)}\n title={\n (value as UserEntity)?.spec?.profile?.displayName ??\n value?.metadata.name\n }\n />\n );\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n StatusError,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\nimport React from 'react';\n\nexport const TaskStatusColumn = ({ status }: { status: string }) => {\n switch (status) {\n case 'processing':\n return <StatusPending>{status}</StatusPending>;\n case 'completed':\n return <StatusOK>{status}</StatusOK>;\n case 'error':\n default:\n return <StatusError>{status}</StatusError>;\n }\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useApi } from '@backstage/core-plugin-api';\nimport React from 'react';\nimport { scaffolderApiRef } from '../../../api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\n\nexport const TemplateTitleColumn = ({ entityRef }: { entityRef?: string }) => {\n const scaffolder = useApi(scaffolderApiRef);\n const { value, loading, error } = useAsync(\n () => scaffolder.getTemplateParameterSchema(entityRef || ''),\n [scaffolder, entityRef],\n );\n\n if (loading || error || !entityRef) {\n return null;\n }\n\n return (\n <EntityRefLink entityRef={parseEntityRef(entityRef)} title={value?.title} />\n );\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Content,\n EmptyState,\n ErrorPanel,\n Header,\n Lifecycle,\n Link,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { CatalogFilterLayout } from '@backstage/plugin-catalog-react';\nimport useAsync from 'react-use/lib/useAsync';\nimport MaterialTable from '@material-table/core';\nimport React, { useState } from 'react';\nimport { scaffolderApiRef } from '../../api';\nimport { rootRouteRef } from '../../routes';\nimport { OwnerListPicker } from './OwnerListPicker';\nimport {\n CreatedAtColumn,\n OwnerEntityColumn,\n TaskStatusColumn,\n TemplateTitleColumn,\n} from './columns';\n\nexport interface MyTaskPageProps {\n initiallySelectedFilter?: 'owned' | 'all';\n}\n\nconst ListTaskPageContent = (props: MyTaskPageProps) => {\n const { initiallySelectedFilter = 'owned' } = props;\n\n const scaffolderApi = useApi(scaffolderApiRef);\n const rootLink = useRouteRef(rootRouteRef);\n\n const [ownerFilter, setOwnerFilter] = useState(initiallySelectedFilter);\n const { value, loading, error } = useAsync(() => {\n if (scaffolderApi.listTasks) {\n return scaffolderApi.listTasks?.({ filterByOwnership: ownerFilter });\n }\n\n // eslint-disable-next-line no-console\n console.warn(\n 'listTasks is not implemented in the scaffolderApi, please make sure to implement this method.',\n );\n\n return Promise.resolve({ tasks: [] });\n }, [scaffolderApi, ownerFilter]);\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <>\n <ErrorPanel error={error} />\n <EmptyState\n missing=\"info\"\n title=\"No information to display\"\n description=\"There is no Tasks or there was an issue communicating with backend.\"\n />\n </>\n );\n }\n\n return (\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <OwnerListPicker\n filter={ownerFilter}\n onSelectOwner={id => setOwnerFilter(id)}\n />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <MaterialTable\n data={value?.tasks ?? []}\n title=\"Tasks\"\n columns={[\n {\n title: 'Task ID',\n field: 'id',\n render: row => (\n <Link to={`${rootLink()}/tasks/${row.id}`}>{row.id}</Link>\n ),\n },\n {\n title: 'Template',\n render: row => (\n <TemplateTitleColumn\n entityRef={row.spec.templateInfo?.entityRef}\n />\n ),\n },\n {\n title: 'Created',\n field: 'createdAt',\n render: row => <CreatedAtColumn createdAt={row.createdAt} />,\n },\n {\n title: 'Owner',\n field: 'createdBy',\n render: row => (\n <OwnerEntityColumn entityRef={row.spec?.user?.ref} />\n ),\n },\n {\n title: 'Status',\n field: 'status',\n render: row => <TaskStatusColumn status={row.status} />,\n },\n ]}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n );\n};\n\nexport const ListTasksPage = (props: MyTaskPageProps) => {\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride=\"Templates Tasks\"\n title={\n <>\n List template tasks <Lifecycle shorthand alpha />\n </>\n }\n subtitle=\"All tasks that have been started\"\n />\n <Content>\n <ListTaskPageContent {...props} />\n </Content>\n </Page>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { ComponentType, useEffect } from 'react';\nimport { Routes, Route, useOutlet, Navigate, useParams } from 'react-router';\nimport { Entity } from '@backstage/catalog-model';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { ScaffolderPage } from './ScaffolderPage';\nimport { TemplatePage } from './TemplatePage';\nimport { TaskPage } from './TaskPage';\nimport { ActionsPage } from './ActionsPage';\nimport { SecretsContextProvider } from './secrets/SecretsContext';\nimport { TemplateEditorPage } from './TemplateEditorPage';\n\nimport {\n FieldExtensionOptions,\n FIELD_EXTENSION_WRAPPER_KEY,\n FIELD_EXTENSION_KEY,\n DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS,\n} from '../extensions';\nimport { useElementFilter, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n actionsRouteRef,\n editRouteRef,\n legacySelectedTemplateRouteRef,\n scaffolderListTaskRouteRef,\n scaffolderTaskRouteRef,\n selectedTemplateRouteRef,\n} from '../routes';\nimport { ListTasksPage } from './ListTasksPage';\n\n/**\n * The props for the entrypoint `ScaffolderPage` component the plugin.\n * @public\n */\nexport type RouterProps = {\n components?: {\n TemplateCardComponent?:\n | ComponentType<{ template: TemplateEntityV1beta3 }>\n | undefined;\n TaskPageComponent?: ComponentType<{}>;\n };\n groups?: Array<{\n title?: React.ReactNode;\n filter: (entity: Entity) => boolean;\n }>;\n defaultPreviewTemplate?: string;\n /**\n * Options for the context menu on the scaffolder page.\n */\n contextMenu?: {\n /** Whether to show a link to the template editor */\n editor?: boolean;\n /** Whether to show a link to the actions documentation */\n actions?: boolean;\n };\n};\n\n/**\n * The main entrypoint `Router` for the `ScaffolderPlugin`.\n *\n * @public\n */\nexport const Router = (props: RouterProps) => {\n const { groups, components = {}, defaultPreviewTemplate } = props;\n\n const { TemplateCardComponent, TaskPageComponent } = components;\n\n const outlet = useOutlet();\n const TaskPageElement = TaskPageComponent ?? TaskPage;\n\n const customFieldExtensions = useElementFilter(outlet, elements =>\n elements\n .selectByComponentData({\n key: FIELD_EXTENSION_WRAPPER_KEY,\n })\n .findComponentData<FieldExtensionOptions>({\n key: FIELD_EXTENSION_KEY,\n }),\n );\n\n const fieldExtensions = [\n ...customFieldExtensions,\n ...DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS.filter(\n ({ name }) =>\n !customFieldExtensions.some(\n customFieldExtension => customFieldExtension.name === name,\n ),\n ),\n ];\n /**\n * This component can be deleted once the older routes have been deprecated.\n */\n const RedirectingComponent = () => {\n const { templateName } = useParams();\n const newLink = useRouteRef(selectedTemplateRouteRef);\n useEffect(\n () =>\n // eslint-disable-next-line no-console\n console.warn(\n 'The route /template/:templateName is deprecated, please use the new /template/:namespace/:templateName route instead',\n ),\n [],\n );\n return <Navigate to={newLink({ namespace: 'default', templateName })} />;\n };\n\n return (\n <Routes>\n <Route\n element={\n <ScaffolderPage\n groups={groups}\n TemplateCardComponent={TemplateCardComponent}\n contextMenu={props.contextMenu}\n />\n }\n />\n <Route path={legacySelectedTemplateRouteRef.path}>\n <RedirectingComponent />\n </Route>\n <Route\n path={selectedTemplateRouteRef.path}\n element={\n <SecretsContextProvider>\n <TemplatePage customFieldExtensions={fieldExtensions} />\n </SecretsContextProvider>\n }\n />\n <Route\n path={scaffolderListTaskRouteRef.path}\n element={<ListTasksPage />}\n />\n <Route path={scaffolderTaskRouteRef.path} element={<TaskPageElement />} />\n <Route path={actionsRouteRef.path} element={<ActionsPage />} />\n <Route\n path={editRouteRef.path}\n element={\n <SecretsContextProvider>\n <TemplateEditorPage\n defaultPreviewTemplate={defaultPreviewTemplate}\n customFieldExtensions={fieldExtensions}\n />\n </SecretsContextProvider>\n }\n />\n\n <Route path=\"preview\" element={<Navigate to=\"../edit\" />} />\n </Routes>\n );\n};\n"],"names":["useStyles","Link","makeStyles","IconButton","isObject","MuiTheme","StepUI","Button","Card","CardContent","Typography","Tooltip","useAsync","List","CancelIcon","CheckIcon","yamlSupport","Box","ExpandMoreIcon","Divider","MenuItem","ListItemIcon","ListItemText","useParams"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { E as EntityPicker, l as EntityNamePicker, m as entityNamePickerValidation, n as EntityTagsPicker, R as RepoUrlPicker, o as repoPickerValidation, O as OwnerPicker, p as OwnedEntityPicker } from './index-b64713a1.esm.js';
1
+ import { E as EntityPicker, m as EntityNamePicker, n as entityNamePickerValidation, o as EntityTagsPicker, R as RepoUrlPicker, p as repoPickerValidation, O as OwnerPicker, q as OwnedEntityPicker } from './index-6712a69a.esm.js';
2
2
 
3
3
  const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [
4
4
  {
@@ -30,4 +30,4 @@ const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [
30
30
  ];
31
31
 
32
32
  export { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS as D };
33
- //# sourceMappingURL=default-554cb9ad.esm.js.map
33
+ //# sourceMappingURL=default-6ab4a4ed.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-554cb9ad.esm.js","sources":["../../src/extensions/default.ts"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { EntityPicker } from '../components/fields/EntityPicker/EntityPicker';\nimport { EntityNamePicker } from '../components/fields/EntityNamePicker/EntityNamePicker';\nimport { entityNamePickerValidation } from '../components/fields/EntityNamePicker/validation';\nimport { EntityTagsPicker } from '../components/fields/EntityTagsPicker/EntityTagsPicker';\nimport { OwnerPicker } from '../components/fields/OwnerPicker/OwnerPicker';\nimport { RepoUrlPicker } from '../components/fields/RepoUrlPicker/RepoUrlPicker';\nimport { repoPickerValidation } from '../components/fields/RepoUrlPicker/validation';\nimport { OwnedEntityPicker } from '../components/fields/OwnedEntityPicker/OwnedEntityPicker';\n\nexport const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [\n {\n component: EntityPicker,\n name: 'EntityPicker',\n },\n {\n component: EntityNamePicker,\n name: 'EntityNamePicker',\n validation: entityNamePickerValidation,\n },\n {\n component: EntityTagsPicker,\n name: 'EntityTagsPicker',\n },\n {\n component: RepoUrlPicker,\n name: 'RepoUrlPicker',\n validation: repoPickerValidation,\n },\n {\n component: OwnerPicker,\n name: 'OwnerPicker',\n },\n {\n component: OwnedEntityPicker,\n name: 'OwnedEntityPicker',\n },\n];\n"],"names":[],"mappings":";;AAQY,MAAC,mCAAmC,GAAG;AACnD,EAAE;AACF,IAAI,SAAS,EAAE,YAAY;AAC3B,IAAI,IAAI,EAAE,cAAc;AACxB,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,UAAU,EAAE,0BAA0B;AAC1C,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,aAAa;AAC5B,IAAI,IAAI,EAAE,eAAe;AACzB,IAAI,UAAU,EAAE,oBAAoB;AACpC,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,WAAW;AAC1B,IAAI,IAAI,EAAE,aAAa;AACvB,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,iBAAiB;AAChC,IAAI,IAAI,EAAE,mBAAmB;AAC7B,GAAG;AACH;;;;"}
1
+ {"version":3,"file":"default-6ab4a4ed.esm.js","sources":["../../src/extensions/default.ts"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { EntityPicker } from '../components/fields/EntityPicker/EntityPicker';\nimport { EntityNamePicker } from '../components/fields/EntityNamePicker/EntityNamePicker';\nimport { entityNamePickerValidation } from '../components/fields/EntityNamePicker/validation';\nimport { EntityTagsPicker } from '../components/fields/EntityTagsPicker/EntityTagsPicker';\nimport { OwnerPicker } from '../components/fields/OwnerPicker/OwnerPicker';\nimport { RepoUrlPicker } from '../components/fields/RepoUrlPicker/RepoUrlPicker';\nimport { repoPickerValidation } from '../components/fields/RepoUrlPicker/validation';\nimport { OwnedEntityPicker } from '../components/fields/OwnedEntityPicker/OwnedEntityPicker';\n\nexport const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [\n {\n component: EntityPicker,\n name: 'EntityPicker',\n },\n {\n component: EntityNamePicker,\n name: 'EntityNamePicker',\n validation: entityNamePickerValidation,\n },\n {\n component: EntityTagsPicker,\n name: 'EntityTagsPicker',\n },\n {\n component: RepoUrlPicker,\n name: 'RepoUrlPicker',\n validation: repoPickerValidation,\n },\n {\n component: OwnerPicker,\n name: 'OwnerPicker',\n },\n {\n component: OwnedEntityPicker,\n name: 'OwnedEntityPicker',\n },\n];\n"],"names":[],"mappings":";;AAQY,MAAC,mCAAmC,GAAG;AACnD,EAAE;AACF,IAAI,SAAS,EAAE,YAAY;AAC3B,IAAI,IAAI,EAAE,cAAc;AACxB,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,UAAU,EAAE,0BAA0B;AAC1C,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,aAAa;AAC5B,IAAI,IAAI,EAAE,eAAe;AACzB,IAAI,UAAU,EAAE,oBAAoB;AACpC,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,WAAW;AAC1B,IAAI,IAAI,EAAE,aAAa;AACvB,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,iBAAiB;AAChC,IAAI,IAAI,EAAE,mBAAmB;AAC7B,GAAG;AACH;;;;"}