@backstage/plugin-scaffolder 1.38.0-next.1 → 1.38.1-next.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.
- package/CHANGELOG.md +42 -0
- package/dist/components/RenderSchema/RenderSchema.esm.js.map +1 -1
- package/dist/components/TemplatingExtensionsPage/functionArgs.esm.js.map +1 -1
- package/dist/components/fields/Autocomplete/Autocomplete.esm.js.map +1 -1
- package/dist/components/fields/RepoBranchPicker/RepoBranchPicker.esm.js +2 -0
- package/dist/components/fields/RepoBranchPicker/RepoBranchPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/RepoUrlPicker.esm.js +1 -1
- package/dist/components/fields/RepoUrlPicker/RepoUrlPicker.esm.js.map +1 -1
- package/dist/components/fields/utils.esm.js.map +1 -1
- package/dist/plugins/scaffolder/package.json.esm.js +1 -2
- package/dist/plugins/scaffolder/package.json.esm.js.map +1 -1
- package/package.json +21 -22
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# @backstage/plugin-scaffolder
|
|
2
2
|
|
|
3
|
+
## 1.38.1-next.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- c32e636: Fixed an issue where Bitbucket Cloud and Bitbucket Server hosts would not render the correct repository and branch picker fields in the Scaffolder.
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @backstage/plugin-catalog-react@3.2.0-next.0
|
|
10
|
+
- @backstage/ui@0.17.0-next.0
|
|
11
|
+
- @backstage/filter-predicates@0.1.4-next.0
|
|
12
|
+
- @backstage/plugin-scaffolder-react@2.0.2-next.0
|
|
13
|
+
- @backstage/frontend-plugin-api@0.17.3-next.0
|
|
14
|
+
- @backstage/catalog-client@1.16.1-next.0
|
|
15
|
+
- @backstage/core-components@0.18.12-next.0
|
|
16
|
+
- @backstage/core-plugin-api@1.12.8-next.0
|
|
17
|
+
- @backstage/integration-react@1.2.20-next.0
|
|
18
|
+
- @backstage/plugin-permission-react@0.5.3-next.0
|
|
19
|
+
- @backstage/plugin-techdocs-react@1.3.13-next.0
|
|
20
|
+
|
|
21
|
+
## 1.38.0
|
|
22
|
+
|
|
23
|
+
### Minor Changes
|
|
24
|
+
|
|
25
|
+
- 3e5acb5: Extended the `RepoOwnerPicker` implementation with a custom variant for GitLab.
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- e0889a3: chore(deps): bump `qs` from 6.15.1 to 6.15.2
|
|
30
|
+
- 02c4e8a: Removed unused `json-schema` runtime dependency. The package was only used for TypeScript types from `@types/json-schema`; affected imports have been converted to `import type` to allow safe removal.
|
|
31
|
+
- Updated dependencies
|
|
32
|
+
- @backstage/catalog-client@1.16.0
|
|
33
|
+
- @backstage/plugin-catalog-react@3.1.0
|
|
34
|
+
- @backstage/core-components@0.18.11
|
|
35
|
+
- @backstage/plugin-scaffolder-react@2.0.1
|
|
36
|
+
- @backstage/integration@2.0.3
|
|
37
|
+
- @backstage/frontend-plugin-api@0.17.2
|
|
38
|
+
- @backstage/ui@0.16.0
|
|
39
|
+
- @backstage/plugin-scaffolder-common@2.2.1
|
|
40
|
+
- @backstage/core-plugin-api@1.12.7
|
|
41
|
+
- @backstage/integration-react@1.2.19
|
|
42
|
+
- @backstage/plugin-permission-react@0.5.2
|
|
43
|
+
- @backstage/plugin-techdocs-react@1.3.12
|
|
44
|
+
|
|
3
45
|
## 1.38.0-next.1
|
|
4
46
|
|
|
5
47
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderSchema.esm.js","sources":["../../../src/components/RenderSchema/RenderSchema.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 { MarkdownContent } from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n Button,\n Cell,\n CellText,\n ColumnConfig,\n Flex,\n Table,\n Text,\n Tooltip,\n TooltipTrigger,\n} from '@backstage/ui';\nimport {\n JSONSchema7,\n JSONSchema7Definition,\n JSONSchema7Type,\n} from 'json-schema';\nimport { FC } from 'react';\nimport { scaffolderTranslationRef } from '../../translation';\nimport { SchemaRenderContext, SchemaRenderStrategy } from './types';\n\nconst compositeSchemaProperties = ['allOf', 'anyOf', 'not', 'oneOf'] as const;\n\ntype subSchemasType = {\n [K in (typeof compositeSchemaProperties)[number]]?: JSONSchema7Definition[];\n};\n\nconst getTypes = (schema: JSONSchema7) => {\n if (!schema.type) {\n if (\n Object.getOwnPropertyNames(schema).some(p =>\n compositeSchemaProperties.includes(p as any),\n )\n ) {\n return undefined;\n }\n return ['unknown'];\n }\n if (schema.type !== 'array') {\n return [schema.type].flat();\n }\n return [\n `${schema.type}(${\n (schema.items as JSONSchema7 | undefined)?.type ?? 'unknown'\n })`,\n ];\n};\n\nconst getSubschemas = (schema: JSONSchema7Definition): subSchemasType => {\n if (typeof schema === 'boolean') {\n return {};\n }\n const base: Omit<JSONSchema7, keyof subSchemasType> = {};\n\n const subschemas: subSchemasType = {};\n\n for (const [key, value] of Object.entries(schema) as [\n keyof JSONSchema7,\n any,\n ][]) {\n if (compositeSchemaProperties.includes(key as keyof subSchemasType)) {\n let v;\n if (Array.isArray(value)) {\n if (!value.length) {\n continue;\n }\n v = value;\n } else if (value) {\n v = [value];\n } else {\n continue;\n }\n subschemas[key as keyof subSchemasType] = v as any;\n } else {\n base[key as Exclude<keyof JSONSchema7, keyof subSchemasType>] = value;\n }\n }\n if (!(base?.type === 'object' || 'properties' in base)) {\n return subschemas;\n }\n return Object.fromEntries(\n Object.entries(subschemas).map(([key, sub]) => {\n const mergedSubschema = sub.map(alt => {\n if (typeof alt !== 'boolean' && alt.required) {\n const properties: JSONSchema7['properties'] = {};\n if (schema.properties) {\n for (const k of alt.required) {\n if (k in schema.properties) {\n properties[k] = schema.properties[k];\n }\n }\n }\n Object.assign(properties, alt.properties);\n return {\n ...base,\n ...alt,\n properties,\n };\n }\n return alt;\n });\n return [key, mergedSubschema];\n }),\n );\n};\n\ninterface SchemaTableItem {\n id: string;\n schema: JSONSchema7Definition;\n propKey?: string;\n required?: boolean;\n}\n\nconst generateId = (\n item: { propKey?: string },\n context: SchemaRenderContext,\n) => {\n return item.propKey\n ? `${context.parentId}.${item.propKey}`\n : context.parentId;\n};\n\nconst enumFrom = (schema: JSONSchema7) => {\n if (schema.type === 'array') {\n if (schema.items && typeof schema.items !== 'boolean') {\n if (Array.isArray(schema.items)) {\n const itemsWithEnum = schema.items\n .filter(e => typeof e === 'object' && 'enum' in e)\n .map(e => e as JSONSchema7);\n if (itemsWithEnum.length) {\n return itemsWithEnum[0].enum;\n }\n } else {\n return schema.items?.enum;\n }\n }\n return undefined;\n }\n return schema.enum;\n};\n\nconst inspectSchema = (\n schema: JSONSchema7Definition,\n): {\n canSubschema: boolean;\n hasEnum: boolean;\n} => {\n if (typeof schema === 'boolean') {\n return { canSubschema: false, hasEnum: false };\n }\n return {\n canSubschema:\n Object.getOwnPropertyNames(schema).some(p =>\n compositeSchemaProperties.includes(p as any),\n ) || getTypes(schema)!.some(t => t.includes('object')),\n hasEnum: !!enumFrom(schema),\n };\n};\n\nexport const RenderEnum: FC<{\n e: JSONSchema7Type[];\n [key: string]: any;\n}> = ({ e, ...props }: { e: JSONSchema7Type[] }) => {\n return (\n <ul {...props} style={{ listStyle: 'none', padding: 0, margin: 0 }}>\n {e.map((v, i) => {\n const text = JSON.stringify(v);\n const isComplex = v !== null && ['object', 'array'].includes(typeof v);\n return (\n <li key={i} style={{ padding: '2px 0' }}>\n <Flex gap=\"2\" align=\"center\">\n <Text\n as=\"span\"\n variant=\"body-small\"\n data-testid={`enum_el${i}`}\n style={{ fontFamily: 'monospace' }}\n >\n {text}\n </Text>\n {isComplex && (\n <TooltipTrigger>\n <Button\n data-testid={`wrap-text_${i}`}\n variant=\"tertiary\"\n size=\"small\"\n aria-label=\"Show formatted value\"\n >\n ↵\n </Button>\n <Tooltip>\n <Text\n as=\"span\"\n data-testid={`pretty_${i}`}\n style={{\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n }}\n >\n {JSON.stringify(v, undefined, 2)}\n </Text>\n </Tooltip>\n </TooltipTrigger>\n )}\n </Flex>\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport const RenderSchema = ({\n strategy,\n context,\n schema,\n}: {\n strategy: SchemaRenderStrategy;\n context: SchemaRenderContext;\n schema?: JSONSchema7Definition;\n}) => {\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const columnConfig: ColumnConfig<SchemaTableItem>[] =\n strategy === 'root'\n ? [\n {\n id: 'value',\n label: t('renderSchema.tableCell.value'),\n isRowHeader: true,\n defaultWidth: '3fr',\n cell: item => <ValueCell item={item} context={context} />,\n },\n ]\n : [\n {\n id: 'name',\n label: t('renderSchema.tableCell.name'),\n isRowHeader: true,\n defaultWidth: 300,\n cell: item => {\n const name = item.propKey ?? '';\n return (\n <Cell>\n <Text\n as=\"span\"\n variant=\"body-medium\"\n style={{ fontFamily: 'monospace' }}\n >\n {item.required ? `${name} *` : name}\n </Text>\n </Cell>\n );\n },\n },\n {\n id: 'value',\n label: t('renderSchema.tableCell.value'),\n defaultWidth: '1fr',\n cell: item => <ValueCell item={item} context={context} />,\n },\n ];\n\n const result = (() => {\n if (typeof schema === 'object') {\n const subschemas = getSubschemas(schema);\n let data: SchemaTableItem[] | undefined;\n if (strategy === 'root') {\n if ('type' in schema || !Object.keys(subschemas).length) {\n data = [{ id: `root-row_${context.parentId}`, schema }];\n }\n } else if (schema.properties) {\n data = Object.entries(schema.properties).map(([key, v]) => ({\n id: `${strategy}-row_${context.parentId}.${key}`,\n schema: v,\n propKey: key,\n required: schema.required?.includes(key),\n }));\n } else if (!Object.keys(subschemas).length) {\n return undefined;\n }\n const [isExpanded, setIsExpanded] = context.expanded;\n\n return (\n <Flex direction=\"column\" gap=\"2\">\n {data && (\n <div data-testid={`${strategy}_${context.parentId}`}>\n <Table\n columnConfig={columnConfig}\n data={data}\n pagination={{ type: 'none' }}\n />\n </div>\n )}\n {(Object.keys(subschemas) as Array<keyof subSchemasType>).map(sk => {\n const subId = `${context.parentId}_${sk}`;\n const isSubOpen = isExpanded[subId];\n return (\n <Flex key={sk} direction=\"column\" gap=\"2\">\n <Button\n data-testid={`expand_${subId}`}\n variant=\"tertiary\"\n size=\"small\"\n onPress={() =>\n setIsExpanded(prevState => ({\n ...prevState,\n [subId]: !prevState[subId],\n }))\n }\n style={{ alignSelf: 'flex-start' }}\n >\n {isSubOpen ? '▴' : '▾'} {sk}\n </Button>\n {isSubOpen &&\n subschemas[sk]!.map((sub, index) => (\n <RenderSchema\n key={index}\n strategy={\n typeof sub !== 'boolean' && 'properties' in sub\n ? strategy\n : 'root'\n }\n context={{\n ...context,\n parentId: `${context.parentId}_${sk}${index}`,\n }}\n schema={sub}\n />\n ))}\n </Flex>\n );\n })}\n </Flex>\n );\n }\n return undefined;\n })();\n return result ?? <Text as=\"p\">{t('renderSchema.undefined')}</Text>;\n};\n\nfunction RenderExpansion({\n item,\n context,\n}: {\n item: SchemaTableItem;\n context: SchemaRenderContext;\n}) {\n const id = generateId(item, context);\n const info = inspectSchema(item.schema);\n const hasDetails =\n typeof item.schema !== 'boolean' && (info.canSubschema || info.hasEnum);\n const s =\n typeof item.schema !== 'boolean' ? (item.schema as JSONSchema7) : undefined;\n const [isExpanded] = context.expanded;\n const isOpen = hasDetails && s && (!getTypes(s) || isExpanded[id]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div data-testid={`expansion_${id}`} style={{ paddingLeft: 16 }}>\n {info.canSubschema && (\n <RenderSchema\n strategy=\"properties\"\n context={{\n ...context,\n parentId: id,\n parent: context,\n }}\n schema={\n s!.type === 'array' ? (s!.items as JSONSchema7 | undefined) : s\n }\n />\n )}\n {info.hasEnum && (\n <>\n <Text as=\"h4\" variant=\"title-small\" weight=\"bold\">\n Valid values:\n </Text>\n <RenderEnum data-testid={`enum_${id}`} e={enumFrom(s!)!} />\n </>\n )}\n </div>\n );\n}\n\nfunction ValueCell({\n item,\n context,\n}: {\n item: SchemaTableItem;\n context: SchemaRenderContext;\n}) {\n if (typeof item.schema === 'boolean') {\n return <CellText title={item.schema ? 'any' : 'none'} />;\n }\n const types = getTypes(item.schema);\n const [isExpanded, setIsExpanded] = context.expanded;\n const id = generateId(item, context);\n const info = inspectSchema(item.schema);\n const { title, description } = item.schema;\n return (\n <Cell>\n <Flex direction=\"column\" gap=\"1\">\n <Flex gap=\"1\" align=\"center\">\n {types?.map((type, index) =>\n (info.canSubschema || info.hasEnum) && index === 0 ? (\n <Button\n key={type}\n data-testid={`expand_${id}`}\n variant=\"tertiary\"\n size=\"small\"\n onPress={() =>\n setIsExpanded(prevState => ({\n ...prevState,\n [id]: !prevState[id],\n }))\n }\n >\n {isExpanded[id] ? '▴' : '▾'} {type}\n </Button>\n ) : (\n <Text\n key={type}\n as=\"span\"\n variant=\"body-small\"\n color=\"secondary\"\n style={{\n fontFamily: 'monospace',\n background: 'var(--bui-bg-neutral-2)',\n padding: '1px 6px',\n borderRadius: 4,\n }}\n >\n {type}\n </Text>\n ),\n )}\n </Flex>\n {title && <MarkdownContent content={title} />}\n {description && <MarkdownContent content={description} />}\n <RenderExpansion item={item} context={context} />\n </Flex>\n </Cell>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RenderSchema.esm.js","sources":["../../../src/components/RenderSchema/RenderSchema.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 { MarkdownContent } from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n Button,\n Cell,\n CellText,\n ColumnConfig,\n Flex,\n Table,\n Text,\n Tooltip,\n TooltipTrigger,\n} from '@backstage/ui';\nimport type {\n JSONSchema7,\n JSONSchema7Definition,\n JSONSchema7Type,\n} from 'json-schema';\nimport { FC } from 'react';\nimport { scaffolderTranslationRef } from '../../translation';\nimport { SchemaRenderContext, SchemaRenderStrategy } from './types';\n\nconst compositeSchemaProperties = ['allOf', 'anyOf', 'not', 'oneOf'] as const;\n\ntype subSchemasType = {\n [K in (typeof compositeSchemaProperties)[number]]?: JSONSchema7Definition[];\n};\n\nconst getTypes = (schema: JSONSchema7) => {\n if (!schema.type) {\n if (\n Object.getOwnPropertyNames(schema).some(p =>\n compositeSchemaProperties.includes(p as any),\n )\n ) {\n return undefined;\n }\n return ['unknown'];\n }\n if (schema.type !== 'array') {\n return [schema.type].flat();\n }\n return [\n `${schema.type}(${\n (schema.items as JSONSchema7 | undefined)?.type ?? 'unknown'\n })`,\n ];\n};\n\nconst getSubschemas = (schema: JSONSchema7Definition): subSchemasType => {\n if (typeof schema === 'boolean') {\n return {};\n }\n const base: Omit<JSONSchema7, keyof subSchemasType> = {};\n\n const subschemas: subSchemasType = {};\n\n for (const [key, value] of Object.entries(schema) as [\n keyof JSONSchema7,\n any,\n ][]) {\n if (compositeSchemaProperties.includes(key as keyof subSchemasType)) {\n let v;\n if (Array.isArray(value)) {\n if (!value.length) {\n continue;\n }\n v = value;\n } else if (value) {\n v = [value];\n } else {\n continue;\n }\n subschemas[key as keyof subSchemasType] = v as any;\n } else {\n base[key as Exclude<keyof JSONSchema7, keyof subSchemasType>] = value;\n }\n }\n if (!(base?.type === 'object' || 'properties' in base)) {\n return subschemas;\n }\n return Object.fromEntries(\n Object.entries(subschemas).map(([key, sub]) => {\n const mergedSubschema = sub.map(alt => {\n if (typeof alt !== 'boolean' && alt.required) {\n const properties: JSONSchema7['properties'] = {};\n if (schema.properties) {\n for (const k of alt.required) {\n if (k in schema.properties) {\n properties[k] = schema.properties[k];\n }\n }\n }\n Object.assign(properties, alt.properties);\n return {\n ...base,\n ...alt,\n properties,\n };\n }\n return alt;\n });\n return [key, mergedSubschema];\n }),\n );\n};\n\ninterface SchemaTableItem {\n id: string;\n schema: JSONSchema7Definition;\n propKey?: string;\n required?: boolean;\n}\n\nconst generateId = (\n item: { propKey?: string },\n context: SchemaRenderContext,\n) => {\n return item.propKey\n ? `${context.parentId}.${item.propKey}`\n : context.parentId;\n};\n\nconst enumFrom = (schema: JSONSchema7) => {\n if (schema.type === 'array') {\n if (schema.items && typeof schema.items !== 'boolean') {\n if (Array.isArray(schema.items)) {\n const itemsWithEnum = schema.items\n .filter(e => typeof e === 'object' && 'enum' in e)\n .map(e => e as JSONSchema7);\n if (itemsWithEnum.length) {\n return itemsWithEnum[0].enum;\n }\n } else {\n return schema.items?.enum;\n }\n }\n return undefined;\n }\n return schema.enum;\n};\n\nconst inspectSchema = (\n schema: JSONSchema7Definition,\n): {\n canSubschema: boolean;\n hasEnum: boolean;\n} => {\n if (typeof schema === 'boolean') {\n return { canSubschema: false, hasEnum: false };\n }\n return {\n canSubschema:\n Object.getOwnPropertyNames(schema).some(p =>\n compositeSchemaProperties.includes(p as any),\n ) || getTypes(schema)!.some(t => t.includes('object')),\n hasEnum: !!enumFrom(schema),\n };\n};\n\nexport const RenderEnum: FC<{\n e: JSONSchema7Type[];\n [key: string]: any;\n}> = ({ e, ...props }: { e: JSONSchema7Type[] }) => {\n return (\n <ul {...props} style={{ listStyle: 'none', padding: 0, margin: 0 }}>\n {e.map((v, i) => {\n const text = JSON.stringify(v);\n const isComplex = v !== null && ['object', 'array'].includes(typeof v);\n return (\n <li key={i} style={{ padding: '2px 0' }}>\n <Flex gap=\"2\" align=\"center\">\n <Text\n as=\"span\"\n variant=\"body-small\"\n data-testid={`enum_el${i}`}\n style={{ fontFamily: 'monospace' }}\n >\n {text}\n </Text>\n {isComplex && (\n <TooltipTrigger>\n <Button\n data-testid={`wrap-text_${i}`}\n variant=\"tertiary\"\n size=\"small\"\n aria-label=\"Show formatted value\"\n >\n ↵\n </Button>\n <Tooltip>\n <Text\n as=\"span\"\n data-testid={`pretty_${i}`}\n style={{\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n }}\n >\n {JSON.stringify(v, undefined, 2)}\n </Text>\n </Tooltip>\n </TooltipTrigger>\n )}\n </Flex>\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport const RenderSchema = ({\n strategy,\n context,\n schema,\n}: {\n strategy: SchemaRenderStrategy;\n context: SchemaRenderContext;\n schema?: JSONSchema7Definition;\n}) => {\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const columnConfig: ColumnConfig<SchemaTableItem>[] =\n strategy === 'root'\n ? [\n {\n id: 'value',\n label: t('renderSchema.tableCell.value'),\n isRowHeader: true,\n defaultWidth: '3fr',\n cell: item => <ValueCell item={item} context={context} />,\n },\n ]\n : [\n {\n id: 'name',\n label: t('renderSchema.tableCell.name'),\n isRowHeader: true,\n defaultWidth: 300,\n cell: item => {\n const name = item.propKey ?? '';\n return (\n <Cell>\n <Text\n as=\"span\"\n variant=\"body-medium\"\n style={{ fontFamily: 'monospace' }}\n >\n {item.required ? `${name} *` : name}\n </Text>\n </Cell>\n );\n },\n },\n {\n id: 'value',\n label: t('renderSchema.tableCell.value'),\n defaultWidth: '1fr',\n cell: item => <ValueCell item={item} context={context} />,\n },\n ];\n\n const result = (() => {\n if (typeof schema === 'object') {\n const subschemas = getSubschemas(schema);\n let data: SchemaTableItem[] | undefined;\n if (strategy === 'root') {\n if ('type' in schema || !Object.keys(subschemas).length) {\n data = [{ id: `root-row_${context.parentId}`, schema }];\n }\n } else if (schema.properties) {\n data = Object.entries(schema.properties).map(([key, v]) => ({\n id: `${strategy}-row_${context.parentId}.${key}`,\n schema: v,\n propKey: key,\n required: schema.required?.includes(key),\n }));\n } else if (!Object.keys(subschemas).length) {\n return undefined;\n }\n const [isExpanded, setIsExpanded] = context.expanded;\n\n return (\n <Flex direction=\"column\" gap=\"2\">\n {data && (\n <div data-testid={`${strategy}_${context.parentId}`}>\n <Table\n columnConfig={columnConfig}\n data={data}\n pagination={{ type: 'none' }}\n />\n </div>\n )}\n {(Object.keys(subschemas) as Array<keyof subSchemasType>).map(sk => {\n const subId = `${context.parentId}_${sk}`;\n const isSubOpen = isExpanded[subId];\n return (\n <Flex key={sk} direction=\"column\" gap=\"2\">\n <Button\n data-testid={`expand_${subId}`}\n variant=\"tertiary\"\n size=\"small\"\n onPress={() =>\n setIsExpanded(prevState => ({\n ...prevState,\n [subId]: !prevState[subId],\n }))\n }\n style={{ alignSelf: 'flex-start' }}\n >\n {isSubOpen ? '▴' : '▾'} {sk}\n </Button>\n {isSubOpen &&\n subschemas[sk]!.map((sub, index) => (\n <RenderSchema\n key={index}\n strategy={\n typeof sub !== 'boolean' && 'properties' in sub\n ? strategy\n : 'root'\n }\n context={{\n ...context,\n parentId: `${context.parentId}_${sk}${index}`,\n }}\n schema={sub}\n />\n ))}\n </Flex>\n );\n })}\n </Flex>\n );\n }\n return undefined;\n })();\n return result ?? <Text as=\"p\">{t('renderSchema.undefined')}</Text>;\n};\n\nfunction RenderExpansion({\n item,\n context,\n}: {\n item: SchemaTableItem;\n context: SchemaRenderContext;\n}) {\n const id = generateId(item, context);\n const info = inspectSchema(item.schema);\n const hasDetails =\n typeof item.schema !== 'boolean' && (info.canSubschema || info.hasEnum);\n const s =\n typeof item.schema !== 'boolean' ? (item.schema as JSONSchema7) : undefined;\n const [isExpanded] = context.expanded;\n const isOpen = hasDetails && s && (!getTypes(s) || isExpanded[id]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div data-testid={`expansion_${id}`} style={{ paddingLeft: 16 }}>\n {info.canSubschema && (\n <RenderSchema\n strategy=\"properties\"\n context={{\n ...context,\n parentId: id,\n parent: context,\n }}\n schema={\n s!.type === 'array' ? (s!.items as JSONSchema7 | undefined) : s\n }\n />\n )}\n {info.hasEnum && (\n <>\n <Text as=\"h4\" variant=\"title-small\" weight=\"bold\">\n Valid values:\n </Text>\n <RenderEnum data-testid={`enum_${id}`} e={enumFrom(s!)!} />\n </>\n )}\n </div>\n );\n}\n\nfunction ValueCell({\n item,\n context,\n}: {\n item: SchemaTableItem;\n context: SchemaRenderContext;\n}) {\n if (typeof item.schema === 'boolean') {\n return <CellText title={item.schema ? 'any' : 'none'} />;\n }\n const types = getTypes(item.schema);\n const [isExpanded, setIsExpanded] = context.expanded;\n const id = generateId(item, context);\n const info = inspectSchema(item.schema);\n const { title, description } = item.schema;\n return (\n <Cell>\n <Flex direction=\"column\" gap=\"1\">\n <Flex gap=\"1\" align=\"center\">\n {types?.map((type, index) =>\n (info.canSubschema || info.hasEnum) && index === 0 ? (\n <Button\n key={type}\n data-testid={`expand_${id}`}\n variant=\"tertiary\"\n size=\"small\"\n onPress={() =>\n setIsExpanded(prevState => ({\n ...prevState,\n [id]: !prevState[id],\n }))\n }\n >\n {isExpanded[id] ? '▴' : '▾'} {type}\n </Button>\n ) : (\n <Text\n key={type}\n as=\"span\"\n variant=\"body-small\"\n color=\"secondary\"\n style={{\n fontFamily: 'monospace',\n background: 'var(--bui-bg-neutral-2)',\n padding: '1px 6px',\n borderRadius: 4,\n }}\n >\n {type}\n </Text>\n ),\n )}\n </Flex>\n {title && <MarkdownContent content={title} />}\n {description && <MarkdownContent content={description} />}\n <RenderExpansion item={item} context={context} />\n </Flex>\n </Cell>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functionArgs.esm.js","sources":["../../../src/components/TemplatingExtensionsPage/functionArgs.ts"],"sourcesContent":["/*\n * Copyright 2025 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 { JSONSchema7, JSONSchema7Definition } from 'json-schema';\n\nfunction isSchema(d: JSONSchema7Definition): d is JSONSchema7 {\n return typeof d === 'object';\n}\n\nexport function inspectFunctionArgSchema(\n schema: JSONSchema7Definition,\n): [schema: JSONSchema7Definition, required: boolean] {\n const hasOnlyKey = (k: string) => (o: any) =>\n k in o && Object.keys(o).every(ok => ok.startsWith('$') || ok === k);\n\n if (\n isSchema(schema) &&\n hasOnlyKey('anyOf')(schema) &&\n schema.anyOf?.length === 2\n ) {\n const alt0 = schema.anyOf[0];\n if (isSchema(alt0) && hasOnlyKey('not')(alt0)) {\n const not = alt0.not!;\n if (isSchema(not) && !Object.keys(not).length) {\n return [schema.anyOf[1], false];\n }\n }\n }\n return [schema, true];\n}\n"],"names":[],"mappings":"AAiBA,SAAS,SAAS,CAAA,EAA4C;AAC5D,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA;AACtB;AAEO,SAAS,yBACd,MAAA,EACoD;AACpD,EAAA,MAAM,aAAa,CAAC,CAAA,KAAc,CAAC,CAAA,KACjC,CAAA,IAAK,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAM,CAAA,EAAA,KAAM,EAAA,CAAG,WAAW,GAAG,CAAA,IAAK,OAAO,CAAC,CAAA;AAErE,EAAA,IACE,QAAA,CAAS,MAAM,CAAA,IACf,UAAA,CAAW,OAAO,CAAA,CAAE,MAAM,CAAA,IAC1B,MAAA,CAAO,KAAA,EAAO,MAAA,KAAW,CAAA,EACzB;AACA,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAC3B,IAAA,IAAI,SAAS,IAAI,CAAA,IAAK,WAAW,KAAK,CAAA,CAAE,IAAI,CAAA,EAAG;AAC7C,MAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AACjB,MAAA,IAAI,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,OAAO,IAAA,CAAK,GAAG,EAAE,MAAA,EAAQ;AAC7C,QAAA,OAAO,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,KAAK,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,CAAC,QAAQ,IAAI,CAAA;AACtB;;;;"}
|
|
1
|
+
{"version":3,"file":"functionArgs.esm.js","sources":["../../../src/components/TemplatingExtensionsPage/functionArgs.ts"],"sourcesContent":["/*\n * Copyright 2025 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 type { JSONSchema7, JSONSchema7Definition } from 'json-schema';\n\nfunction isSchema(d: JSONSchema7Definition): d is JSONSchema7 {\n return typeof d === 'object';\n}\n\nexport function inspectFunctionArgSchema(\n schema: JSONSchema7Definition,\n): [schema: JSONSchema7Definition, required: boolean] {\n const hasOnlyKey = (k: string) => (o: any) =>\n k in o && Object.keys(o).every(ok => ok.startsWith('$') || ok === k);\n\n if (\n isSchema(schema) &&\n hasOnlyKey('anyOf')(schema) &&\n schema.anyOf?.length === 2\n ) {\n const alt0 = schema.anyOf[0];\n if (isSchema(alt0) && hasOnlyKey('not')(alt0)) {\n const not = alt0.not!;\n if (isSchema(not) && !Object.keys(not).length) {\n return [schema.anyOf[1], false];\n }\n }\n }\n return [schema, true];\n}\n"],"names":[],"mappings":"AAiBA,SAAS,SAAS,CAAA,EAA4C;AAC5D,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA;AACtB;AAEO,SAAS,yBACd,MAAA,EACoD;AACpD,EAAA,MAAM,aAAa,CAAC,CAAA,KAAc,CAAC,CAAA,KACjC,CAAA,IAAK,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAM,CAAA,EAAA,KAAM,EAAA,CAAG,WAAW,GAAG,CAAA,IAAK,OAAO,CAAC,CAAA;AAErE,EAAA,IACE,QAAA,CAAS,MAAM,CAAA,IACf,UAAA,CAAW,OAAO,CAAA,CAAE,MAAM,CAAA,IAC1B,MAAA,CAAO,KAAA,EAAO,MAAA,KAAW,CAAA,EACzB;AACA,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAC3B,IAAA,IAAI,SAAS,IAAI,CAAA,IAAK,WAAW,KAAK,CAAA,CAAE,IAAI,CAAA,EAAG;AAC7C,MAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AACjB,MAAA,IAAI,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,OAAO,IAAA,CAAK,GAAG,EAAE,MAAA,EAAQ;AAC7C,QAAA,OAAO,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,KAAK,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,CAAC,QAAQ,IAAI,CAAA;AACtB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Autocomplete.esm.js","sources":["../../../../src/components/fields/Autocomplete/Autocomplete.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 { forwardRef } from 'react';\nimport { Combobox } from '@backstage/ui';\nimport type { ComboboxProps } from '@backstage/ui';\n\nexport
|
|
1
|
+
{"version":3,"file":"Autocomplete.esm.js","sources":["../../../../src/components/fields/Autocomplete/Autocomplete.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 { forwardRef } from 'react';\nimport { Combobox } from '@backstage/ui';\nimport type { ComboboxProps, Option, OptionSection } from '@backstage/ui';\n\nexport type AutocompleteProps = Extract<\n ComboboxProps,\n {\n options?: ReadonlyArray<Option | OptionSection>;\n items?: never;\n children?: never;\n }\n> & {\n /**\n * Whether the autocomplete is currently loading options.\n * When true, displays a loading indicator in the dropdown.\n */\n isLoading?: boolean;\n};\n\n/**\n * Thin wrapper around the BUI `Combobox` that adds an `isLoading` indicator and\n * defaults to free-form text entry with focus-triggered menu.\n *\n * @public\n */\nexport const Autocomplete = forwardRef<HTMLDivElement, AutocompleteProps>(\n ({ isLoading, options, ...rest }, ref) => {\n const finalOptions = isLoading\n ? [{ value: '__loading__', label: 'Loading…', disabled: true }]\n : options;\n\n return (\n <Combobox\n ref={ref}\n allowsCustomValue\n menuTrigger=\"focus\"\n options={finalOptions}\n {...rest}\n />\n );\n },\n);\n\nAutocomplete.displayName = 'Autocomplete';\n"],"names":[],"mappings":";;;;AAyCO,MAAM,YAAA,GAAe,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,SAAS,GAAG,IAAA,IAAQ,GAAA,KAAQ;AACxC,IAAA,MAAM,YAAA,GAAe,SAAA,GACjB,CAAC,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,eAAA,EAAY,QAAA,EAAU,IAAA,EAAM,CAAA,GAC5D,OAAA;AAEJ,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,iBAAA,EAAiB,IAAA;AAAA,QACjB,WAAA,EAAY,OAAA;AAAA,QACZ,OAAA,EAAS,YAAA;AAAA,QACR,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RepoBranchPicker.esm.js","sources":["../../../../src/components/fields/RepoBranchPicker/RepoBranchPicker.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 { useApi } from '@backstage/core-plugin-api';\nimport {\n scmIntegrationsApiRef,\n scmAuthApiRef,\n} from '@backstage/integration-react';\nimport { useEffect, useState, useCallback } from 'react';\nimport useDebounce from 'react-use/esm/useDebounce';\nimport { useTemplateSecrets } from '@backstage/plugin-scaffolder-react';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport Typography from '@material-ui/core/Typography';\n\nimport { RepoBranchPickerProps } from './schema';\nimport { RepoBranchPickerState } from './types';\nimport { BitbucketRepoBranchPicker } from './BitbucketRepoBranchPicker';\nimport { DefaultRepoBranchPicker } from './DefaultRepoBranchPicker';\nimport { GitHubRepoBranchPicker } from './GitHubRepoBranchPicker';\nimport { MarkdownContent } from '@backstage/core-components';\nimport { useScaffolderTheme } from '@backstage/plugin-scaffolder-react/alpha';\nimport { Flex, Text } from '@backstage/ui';\n\n/**\n * The underlying component that is rendered in the form for the `RepoBranchPicker`\n * field extension.\n *\n * @public\n */\nexport const RepoBranchPicker = (props: RepoBranchPickerProps) => {\n const scaffolderTheme = useScaffolderTheme();\n const {\n uiSchema,\n onChange,\n rawErrors,\n formData,\n schema,\n formContext,\n required,\n } = props;\n const {\n formData: { repoUrl },\n } = formContext;\n\n const [state, setState] = useState<RepoBranchPickerState>({\n branch: formData || '',\n });\n const { host, branch } = state;\n\n const integrationApi = useApi(scmIntegrationsApiRef);\n const scmAuthApi = useApi(scmAuthApiRef);\n\n const { secrets, setSecrets } = useTemplateSecrets();\n\n useDebounce(\n async () => {\n const { requestUserCredentials } = uiSchema?.['ui:options'] ?? {};\n\n if (!requestUserCredentials || !host) {\n return;\n }\n\n // don't show login prompt if secret value is already in state\n if (secrets[requestUserCredentials.secretsKey]) {\n return;\n }\n\n // user has requested that we use the users credentials\n // so lets grab them using the scmAuthApi and pass through\n // any additional scopes from the ui:options\n const { token } = await scmAuthApi.getCredentials({\n url: `https://${host}`,\n additionalScope: {\n repoWrite: true,\n customScopes: requestUserCredentials.additionalScopes,\n },\n });\n\n // set the secret using the key provided in the ui:options for use\n // in the templating the manifest with ${{ secrets[secretsKey] }}\n setSecrets({ [requestUserCredentials.secretsKey]: token });\n },\n 500,\n [host, uiSchema],\n );\n\n useEffect(() => {\n if (repoUrl) {\n const url = new URL(`https://${repoUrl}`);\n\n setState(prevState => ({\n ...prevState,\n host: url.host,\n workspace: url.searchParams.get('workspace') || '',\n repository: url.searchParams.get('repo') || '',\n owner: url.searchParams.get('owner') || '',\n }));\n }\n }, [repoUrl]);\n\n useEffect(() => {\n onChange(branch);\n }, [branch, onChange]);\n\n const updateLocalState = useCallback(\n (newState: RepoBranchPickerState) => {\n setState(prevState => ({ ...prevState, ...newState }));\n },\n [setState],\n );\n\n const hostType = (host && integrationApi.byHost(host)?.type) ?? null;\n\n const accessToken =\n uiSchema?.['ui:options']?.requestUserCredentials?.secretsKey &&\n secrets[uiSchema['ui:options'].requestUserCredentials.secretsKey];\n const isDisabled = uiSchema?.['ui:disabled'] ?? false;\n\n const renderRepoBranchPicker = () => {\n switch (hostType) {\n case 'bitbucket':\n return (\n <BitbucketRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n accessToken={accessToken}\n isDisabled={isDisabled}\n required={required}\n />\n );\n case 'github':\n return (\n <GitHubRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n accessToken={accessToken}\n isDisabled={isDisabled}\n required={required}\n />\n );\n default:\n return (\n <DefaultRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n isDisabled={isDisabled}\n required={required}\n />\n );\n }\n };\n\n const description = uiSchema['ui:description'] ?? schema.description;\n\n if (scaffolderTheme === 'bui') {\n return (\n <Flex direction=\"column\" gap=\"4\">\n {schema.title && (\n <Text as=\"h5\" variant=\"title-small\" weight=\"bold\">\n {schema.title}\n </Text>\n )}\n {description && <MarkdownContent content={description} />}\n {renderRepoBranchPicker()}\n </Flex>\n );\n }\n\n return (\n <>\n {schema.title && (\n <Box my={1}>\n <Typography variant=\"h5\">{schema.title}</Typography>\n <Divider />\n </Box>\n )}\n {description && (\n <Typography variant=\"body1\">\n <MarkdownContent content={description} />\n </Typography>\n )}\n {renderRepoBranchPicker()}\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA2CO,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAiC;AAChE,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AACJ,EAAA,MAAM;AAAA,IACJ,QAAA,EAAU,EAAE,OAAA;AAAQ,GACtB,GAAI,WAAA;AAEJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAgC;AAAA,IACxD,QAAQ,QAAA,IAAY;AAAA,GACrB,CAAA;AACD,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAI,KAAA;AAEzB,EAAA,MAAM,cAAA,GAAiB,OAAO,qBAAqB,CAAA;AACnD,EAAA,MAAM,UAAA,GAAa,OAAO,aAAa,CAAA;AAEvC,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,kBAAA,EAAmB;AAEnD,EAAA,WAAA;AAAA,IACE,YAAY;AACV,MAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,QAAA,GAAW,YAAY,KAAK,EAAC;AAEhE,MAAA,IAAI,CAAC,sBAAA,IAA0B,CAAC,IAAA,EAAM;AACpC,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,CAAQ,sBAAA,CAAuB,UAAU,CAAA,EAAG;AAC9C,QAAA;AAAA,MACF;AAKA,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,WAAW,cAAA,CAAe;AAAA,QAChD,GAAA,EAAK,WAAW,IAAI,CAAA,CAAA;AAAA,QACpB,eAAA,EAAiB;AAAA,UACf,SAAA,EAAW,IAAA;AAAA,UACX,cAAc,sBAAA,CAAuB;AAAA;AACvC,OACD,CAAA;AAID,MAAA,UAAA,CAAW,EAAE,CAAC,sBAAA,CAAuB,UAAU,GAAG,OAAO,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,GAAA;AAAA,IACA,CAAC,MAAM,QAAQ;AAAA,GACjB;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,CAAA,QAAA,EAAW,OAAO,CAAA,CAAE,CAAA;AAExC,MAAA,QAAA,CAAS,CAAA,SAAA,MAAc;AAAA,QACrB,GAAG,SAAA;AAAA,QACH,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,SAAA,EAAW,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,IAAK,EAAA;AAAA,QAChD,UAAA,EAAY,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,MAAM,CAAA,IAAK,EAAA;AAAA,QAC5C,KAAA,EAAO,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA,IAAK;AAAA,OAC1C,CAAE,CAAA;AAAA,IACJ;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAErB,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,CAAC,QAAA,KAAoC;AACnC,MAAA,QAAA,CAAS,gBAAc,EAAE,GAAG,SAAA,EAAW,GAAG,UAAS,CAAE,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,YAAY,IAAA,IAAQ,cAAA,CAAe,MAAA,CAAO,IAAI,GAAG,IAAA,KAAS,IAAA;AAEhE,EAAA,MAAM,WAAA,GACJ,QAAA,GAAW,YAAY,CAAA,EAAG,sBAAA,EAAwB,UAAA,IAClD,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,CAAE,sBAAA,CAAuB,UAAU,CAAA;AAClE,EAAA,MAAM,UAAA,GAAa,QAAA,GAAW,aAAa,CAAA,IAAK,KAAA;AAEhD,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,WAAA;AACH,QAAA,uBACE,GAAA;AAAA,UAAC,yBAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,gBAAA;AAAA,YACV,KAAA;AAAA,YACA,SAAA;AAAA,YACA,WAAA;AAAA,YACA,UAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,MAEJ,KAAK,QAAA;AACH,QAAA,uBACE,GAAA;AAAA,UAAC,sBAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,gBAAA;AAAA,YACV,KAAA;AAAA,YACA,SAAA;AAAA,YACA,WAAA;AAAA,YACA,UAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,MAEJ;AACE,QAAA,uBACE,GAAA;AAAA,UAAC,uBAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,gBAAA;AAAA,YACV,KAAA;AAAA,YACA,SAAA;AAAA,YACA,UAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA;AAEN,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,gBAAgB,CAAA,IAAK,MAAA,CAAO,WAAA;AAEzD,EAAA,IAAI,oBAAoB,KAAA,EAAO;AAC7B,IAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,GAAA,EAC1B,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,oBACN,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,SAAQ,aAAA,EAAc,MAAA,EAAO,MAAA,EACxC,QAAA,EAAA,MAAA,CAAO,KAAA,EACV,CAAA;AAAA,MAED,WAAA,oBAAe,GAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,WAAA,EAAa,CAAA;AAAA,MACtD,sBAAA;AAAuB,KAAA,EAC1B,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,KAAA,oBACN,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EACP,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,0BACtC,OAAA,EAAA,EAAQ;AAAA,KAAA,EACX,CAAA;AAAA,IAED,WAAA,wBACE,UAAA,EAAA,EAAW,OAAA,EAAQ,SAClB,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,WAAA,EAAa,CAAA,EACzC,CAAA;AAAA,IAED,sBAAA;AAAuB,GAAA,EAC1B,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"RepoBranchPicker.esm.js","sources":["../../../../src/components/fields/RepoBranchPicker/RepoBranchPicker.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 { useApi } from '@backstage/core-plugin-api';\nimport {\n scmIntegrationsApiRef,\n scmAuthApiRef,\n} from '@backstage/integration-react';\nimport { useEffect, useState, useCallback } from 'react';\nimport useDebounce from 'react-use/esm/useDebounce';\nimport { useTemplateSecrets } from '@backstage/plugin-scaffolder-react';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport Typography from '@material-ui/core/Typography';\n\nimport { RepoBranchPickerProps } from './schema';\nimport { RepoBranchPickerState } from './types';\nimport { BitbucketRepoBranchPicker } from './BitbucketRepoBranchPicker';\nimport { DefaultRepoBranchPicker } from './DefaultRepoBranchPicker';\nimport { GitHubRepoBranchPicker } from './GitHubRepoBranchPicker';\nimport { MarkdownContent } from '@backstage/core-components';\nimport { useScaffolderTheme } from '@backstage/plugin-scaffolder-react/alpha';\nimport { Flex, Text } from '@backstage/ui';\n\n/**\n * The underlying component that is rendered in the form for the `RepoBranchPicker`\n * field extension.\n *\n * @public\n */\nexport const RepoBranchPicker = (props: RepoBranchPickerProps) => {\n const scaffolderTheme = useScaffolderTheme();\n const {\n uiSchema,\n onChange,\n rawErrors,\n formData,\n schema,\n formContext,\n required,\n } = props;\n const {\n formData: { repoUrl },\n } = formContext;\n\n const [state, setState] = useState<RepoBranchPickerState>({\n branch: formData || '',\n });\n const { host, branch } = state;\n\n const integrationApi = useApi(scmIntegrationsApiRef);\n const scmAuthApi = useApi(scmAuthApiRef);\n\n const { secrets, setSecrets } = useTemplateSecrets();\n\n useDebounce(\n async () => {\n const { requestUserCredentials } = uiSchema?.['ui:options'] ?? {};\n\n if (!requestUserCredentials || !host) {\n return;\n }\n\n // don't show login prompt if secret value is already in state\n if (secrets[requestUserCredentials.secretsKey]) {\n return;\n }\n\n // user has requested that we use the users credentials\n // so lets grab them using the scmAuthApi and pass through\n // any additional scopes from the ui:options\n const { token } = await scmAuthApi.getCredentials({\n url: `https://${host}`,\n additionalScope: {\n repoWrite: true,\n customScopes: requestUserCredentials.additionalScopes,\n },\n });\n\n // set the secret using the key provided in the ui:options for use\n // in the templating the manifest with ${{ secrets[secretsKey] }}\n setSecrets({ [requestUserCredentials.secretsKey]: token });\n },\n 500,\n [host, uiSchema],\n );\n\n useEffect(() => {\n if (repoUrl) {\n const url = new URL(`https://${repoUrl}`);\n\n setState(prevState => ({\n ...prevState,\n host: url.host,\n workspace: url.searchParams.get('workspace') || '',\n repository: url.searchParams.get('repo') || '',\n owner: url.searchParams.get('owner') || '',\n }));\n }\n }, [repoUrl]);\n\n useEffect(() => {\n onChange(branch);\n }, [branch, onChange]);\n\n const updateLocalState = useCallback(\n (newState: RepoBranchPickerState) => {\n setState(prevState => ({ ...prevState, ...newState }));\n },\n [setState],\n );\n\n const hostType = (host && integrationApi.byHost(host)?.type) ?? null;\n\n const accessToken =\n uiSchema?.['ui:options']?.requestUserCredentials?.secretsKey &&\n secrets[uiSchema['ui:options'].requestUserCredentials.secretsKey];\n const isDisabled = uiSchema?.['ui:disabled'] ?? false;\n\n const renderRepoBranchPicker = () => {\n switch (hostType) {\n case 'bitbucket':\n case 'bitbucketCloud':\n case 'bitbucketServer':\n return (\n <BitbucketRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n accessToken={accessToken}\n isDisabled={isDisabled}\n required={required}\n />\n );\n case 'github':\n return (\n <GitHubRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n accessToken={accessToken}\n isDisabled={isDisabled}\n required={required}\n />\n );\n default:\n return (\n <DefaultRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n isDisabled={isDisabled}\n required={required}\n />\n );\n }\n };\n\n const description = uiSchema['ui:description'] ?? schema.description;\n\n if (scaffolderTheme === 'bui') {\n return (\n <Flex direction=\"column\" gap=\"4\">\n {schema.title && (\n <Text as=\"h5\" variant=\"title-small\" weight=\"bold\">\n {schema.title}\n </Text>\n )}\n {description && <MarkdownContent content={description} />}\n {renderRepoBranchPicker()}\n </Flex>\n );\n }\n\n return (\n <>\n {schema.title && (\n <Box my={1}>\n <Typography variant=\"h5\">{schema.title}</Typography>\n <Divider />\n </Box>\n )}\n {description && (\n <Typography variant=\"body1\">\n <MarkdownContent content={description} />\n </Typography>\n )}\n {renderRepoBranchPicker()}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -165,7 +165,7 @@ const RepoUrlPicker = (props) => {
|
|
|
165
165
|
accessToken
|
|
166
166
|
}
|
|
167
167
|
),
|
|
168
|
-
hostType === "bitbucket" && /* @__PURE__ */ jsx(
|
|
168
|
+
(hostType === "bitbucket" || hostType === "bitbucketCloud" || hostType === "bitbucketServer") && /* @__PURE__ */ jsx(
|
|
169
169
|
BitbucketRepoPicker,
|
|
170
170
|
{
|
|
171
171
|
allowedOwners,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RepoUrlPicker.esm.js","sources":["../../../../src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx"],"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 { useApi } from '@backstage/core-plugin-api';\nimport {\n scmAuthApiRef,\n scmIntegrationsApiRef,\n} from '@backstage/integration-react';\nimport { useTemplateSecrets } from '@backstage/plugin-scaffolder-react';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport Typography from '@material-ui/core/Typography';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport useDebounce from 'react-use/esm/useDebounce';\nimport { AzureRepoPicker } from './AzureRepoPicker';\nimport { BitbucketRepoPicker } from './BitbucketRepoPicker';\nimport { GerritRepoPicker } from './GerritRepoPicker';\nimport { GiteaRepoPicker } from './GiteaRepoPicker';\nimport { GithubRepoPicker } from './GithubRepoPicker';\nimport { GitlabRepoPicker } from './GitlabRepoPicker';\nimport { RepoUrlPickerHost } from './RepoUrlPickerHost';\nimport { RepoUrlPickerRepoName } from './RepoUrlPickerRepoName';\nimport { RepoUrlPickerFieldSchema } from './schema';\nimport { RepoUrlPickerState } from './types';\nimport { parseRepoPickerUrl, serializeRepoPickerUrl } from './utils';\nimport { MarkdownContent } from '@backstage/core-components';\nimport { useScaffolderTheme } from '@backstage/plugin-scaffolder-react/alpha';\nimport { Flex, Text } from '@backstage/ui';\n\nexport { RepoUrlPickerSchema } from './schema';\n\n/**\n * The underlying component that is rendered in the form for the `RepoUrlPicker`\n * field extension.\n *\n * @public\n */\nexport const RepoUrlPicker = (\n props: typeof RepoUrlPickerFieldSchema.TProps,\n) => {\n const scaffolderTheme = useScaffolderTheme();\n const { uiSchema, onChange, rawErrors, formData, schema } = props;\n const [state, setState] = useState<RepoUrlPickerState>(\n parseRepoPickerUrl(formData),\n );\n const [credentialsHost, setCredentialsHost] = useState<string | undefined>(\n undefined,\n );\n const integrationApi = useApi(scmIntegrationsApiRef);\n const scmAuthApi = useApi(scmAuthApiRef);\n const { secrets, setSecrets } = useTemplateSecrets();\n const allowedHosts = useMemo(\n () => uiSchema?.['ui:options']?.allowedHosts ?? [],\n [uiSchema],\n );\n const allowedOrganizations = useMemo(\n () => uiSchema?.['ui:options']?.allowedOrganizations ?? [],\n [uiSchema],\n );\n const allowedOwners = useMemo(\n () => uiSchema?.['ui:options']?.allowedOwners ?? [],\n [uiSchema],\n );\n const allowedProjects = useMemo(\n () => uiSchema?.['ui:options']?.allowedProjects ?? [],\n [uiSchema],\n );\n const allowedRepos = useMemo(\n () => uiSchema?.['ui:options']?.allowedRepos ?? [],\n [uiSchema],\n );\n const isDisabled = useMemo(\n () => uiSchema?.['ui:disabled'] ?? false,\n [uiSchema],\n );\n const { owner, organization, project, repoName } = state;\n\n useEffect(() => {\n onChange(serializeRepoPickerUrl(state));\n }, [state, onChange]);\n\n /* we deal with calling the repo setting here instead of in each components for ease */\n useEffect(() => {\n if (allowedOrganizations.length > 0 && !organization) {\n setState(prevState => ({\n ...prevState,\n organization: allowedOrganizations[0],\n }));\n }\n }, [setState, allowedOrganizations, organization]);\n\n useEffect(() => {\n if (allowedOwners.length > 0 && !owner) {\n setState(prevState => ({\n ...prevState,\n owner: allowedOwners[0],\n }));\n }\n }, [setState, allowedOwners, owner]);\n\n useEffect(() => {\n if (allowedProjects.length > 0 && !project) {\n setState(prevState => ({\n ...prevState,\n project: allowedProjects[0],\n }));\n }\n }, [setState, allowedProjects, project]);\n\n useEffect(() => {\n if (allowedRepos.length > 0 && !repoName) {\n setState(prevState => ({ ...prevState, repoName: allowedRepos[0] }));\n }\n }, [setState, allowedRepos, repoName]);\n\n const updateLocalState = useCallback(\n (newState: RepoUrlPickerState) => {\n setState(prevState => ({ ...prevState, ...newState }));\n },\n [setState],\n );\n\n useDebounce(\n async () => {\n const { requestUserCredentials } = uiSchema?.['ui:options'] ?? {};\n\n if (!requestUserCredentials || !state.host) {\n return;\n }\n\n // don't show login prompt if secret value is already in state for selected host\n if (\n secrets[requestUserCredentials.secretsKey] &&\n credentialsHost === state.host\n ) {\n return;\n }\n\n // user has requested that we use the users credentials\n // so lets grab them using the scmAuthApi and pass through\n // any additional scopes from the ui:options\n const { token } = await scmAuthApi.getCredentials({\n url: `https://${state.host}`,\n additionalScope: {\n repoWrite: true,\n customScopes: requestUserCredentials.additionalScopes,\n },\n });\n\n // set the secret using the key provided in the ui:options for use\n // in the templating the manifest with ${{ secrets[secretsKey] }}\n setSecrets({ [requestUserCredentials.secretsKey]: token });\n setCredentialsHost(state.host);\n },\n 500,\n [state, uiSchema],\n );\n\n const hostType =\n (state.host && integrationApi.byHost(state.host)?.type) ?? null;\n\n const description = uiSchema['ui:description'] ?? schema.description;\n\n const accessToken =\n uiSchema?.['ui:options']?.requestUserCredentials?.secretsKey &&\n secrets[uiSchema['ui:options'].requestUserCredentials.secretsKey];\n\n const subComponents = (\n <>\n <RepoUrlPickerHost\n host={state.host}\n hosts={allowedHosts}\n onChange={host => setState(prevState => ({ ...prevState, host }))}\n rawErrors={rawErrors}\n isDisabled={isDisabled}\n />\n {hostType === 'github' && (\n <GithubRepoPicker\n allowedOwners={allowedOwners}\n onChange={updateLocalState}\n rawErrors={rawErrors}\n state={state}\n isDisabled={isDisabled}\n accessToken={accessToken}\n />\n )}\n {hostType === 'gitea' && (\n <GiteaRepoPicker\n allowedOwners={allowedOwners}\n allowedRepos={allowedRepos}\n rawErrors={rawErrors}\n state={state}\n isDisabled={isDisabled}\n onChange={updateLocalState}\n />\n )}\n {hostType === 'gitlab' && (\n <GitlabRepoPicker\n allowedOwners={allowedOwners}\n rawErrors={rawErrors}\n state={state}\n onChange={updateLocalState}\n isDisabled={isDisabled}\n accessToken={accessToken}\n />\n )}\n {hostType === 'bitbucket' && (\n <BitbucketRepoPicker\n allowedOwners={allowedOwners}\n allowedProjects={allowedProjects}\n rawErrors={rawErrors}\n state={state}\n onChange={updateLocalState}\n isDisabled={isDisabled}\n accessToken={accessToken}\n />\n )}\n {hostType === 'azure' && (\n <AzureRepoPicker\n allowedOrganizations={allowedOrganizations}\n allowedProject={allowedProjects}\n rawErrors={rawErrors}\n state={state}\n isDisabled={isDisabled}\n onChange={updateLocalState}\n />\n )}\n {hostType === 'gerrit' && (\n <GerritRepoPicker\n rawErrors={rawErrors}\n state={state}\n onChange={updateLocalState}\n isDisabled={isDisabled}\n />\n )}\n <RepoUrlPickerRepoName\n repoName={state.repoName}\n allowedRepos={allowedRepos}\n onChange={repo =>\n setState(prevState => ({\n ...prevState,\n repoName: repo.id || repo.name,\n }))\n }\n isDisabled={isDisabled}\n rawErrors={rawErrors}\n availableRepos={state.availableRepos}\n />\n </>\n );\n\n if (scaffolderTheme === 'bui') {\n return (\n <Flex direction=\"column\" gap=\"4\">\n {schema.title && (\n <Text as=\"h5\" variant=\"title-small\" weight=\"bold\">\n {schema.title}\n </Text>\n )}\n {description && <MarkdownContent content={description} />}\n {subComponents}\n </Flex>\n );\n }\n\n return (\n <>\n {schema.title && (\n <Box my={1}>\n <Typography variant=\"h5\">{schema.title}</Typography>\n <Divider />\n </Box>\n )}\n {description && (\n <Typography variant=\"body1\">\n <MarkdownContent content={description} />\n </Typography>\n )}\n {subComponents}\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiDO,MAAM,aAAA,GAAgB,CAC3B,KAAA,KACG;AACH,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,QAAO,GAAI,KAAA;AAC5D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA;AAAA,IACxB,mBAAmB,QAAQ;AAAA,GAC7B;AACA,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAA;AAAA,IAC5C;AAAA,GACF;AACA,EAAA,MAAM,cAAA,GAAiB,OAAO,qBAAqB,CAAA;AACnD,EAAA,MAAM,UAAA,GAAa,OAAO,aAAa,CAAA;AACvC,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,kBAAA,EAAmB;AACnD,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,MAAM,QAAA,GAAW,YAAY,CAAA,EAAG,gBAAgB,EAAC;AAAA,IACjD,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,oBAAA,GAAuB,OAAA;AAAA,IAC3B,MAAM,QAAA,GAAW,YAAY,CAAA,EAAG,wBAAwB,EAAC;AAAA,IACzD,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,aAAA,GAAgB,OAAA;AAAA,IACpB,MAAM,QAAA,GAAW,YAAY,CAAA,EAAG,iBAAiB,EAAC;AAAA,IAClD,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,eAAA,GAAkB,OAAA;AAAA,IACtB,MAAM,QAAA,GAAW,YAAY,CAAA,EAAG,mBAAmB,EAAC;AAAA,IACpD,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,MAAM,QAAA,GAAW,YAAY,CAAA,EAAG,gBAAgB,EAAC;AAAA,IACjD,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,UAAA,GAAa,OAAA;AAAA,IACjB,MAAM,QAAA,GAAW,aAAa,CAAA,IAAK,KAAA;AAAA,IACnC,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,EAAE,KAAA,EAAO,YAAA,EAAc,OAAA,EAAS,UAAS,GAAI,KAAA;AAEnD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAAA,EACxC,CAAA,EAAG,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AAGpB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,oBAAA,CAAqB,MAAA,GAAS,CAAA,IAAK,CAAC,YAAA,EAAc;AACpD,MAAA,QAAA,CAAS,CAAA,SAAA,MAAc;AAAA,QACrB,GAAG,SAAA;AAAA,QACH,YAAA,EAAc,qBAAqB,CAAC;AAAA,OACtC,CAAE,CAAA;AAAA,IACJ;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,oBAAA,EAAsB,YAAY,CAAC,CAAA;AAEjD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,CAAC,KAAA,EAAO;AACtC,MAAA,QAAA,CAAS,CAAA,SAAA,MAAc;AAAA,QACrB,GAAG,SAAA;AAAA,QACH,KAAA,EAAO,cAAc,CAAC;AAAA,OACxB,CAAE,CAAA;AAAA,IACJ;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,aAAA,EAAe,KAAK,CAAC,CAAA;AAEnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,eAAA,CAAgB,MAAA,GAAS,CAAA,IAAK,CAAC,OAAA,EAAS;AAC1C,MAAA,QAAA,CAAS,CAAA,SAAA,MAAc;AAAA,QACrB,GAAG,SAAA;AAAA,QACH,OAAA,EAAS,gBAAgB,CAAC;AAAA,OAC5B,CAAE,CAAA;AAAA,IACJ;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,eAAA,EAAiB,OAAO,CAAC,CAAA;AAEvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAA,CAAa,MAAA,GAAS,CAAA,IAAK,CAAC,QAAA,EAAU;AACxC,MAAA,QAAA,CAAS,CAAA,SAAA,MAAc,EAAE,GAAG,SAAA,EAAW,UAAU,YAAA,CAAa,CAAC,GAAE,CAAE,CAAA;AAAA,IACrE;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,YAAA,EAAc,QAAQ,CAAC,CAAA;AAErC,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,CAAC,QAAA,KAAiC;AAChC,MAAA,QAAA,CAAS,gBAAc,EAAE,GAAG,SAAA,EAAW,GAAG,UAAS,CAAE,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,WAAA;AAAA,IACE,YAAY;AACV,MAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,QAAA,GAAW,YAAY,KAAK,EAAC;AAEhE,MAAA,IAAI,CAAC,sBAAA,IAA0B,CAAC,KAAA,CAAM,IAAA,EAAM;AAC1C,QAAA;AAAA,MACF;AAGA,MAAA,IACE,QAAQ,sBAAA,CAAuB,UAAU,CAAA,IACzC,eAAA,KAAoB,MAAM,IAAA,EAC1B;AACA,QAAA;AAAA,MACF;AAKA,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,WAAW,cAAA,CAAe;AAAA,QAChD,GAAA,EAAK,CAAA,QAAA,EAAW,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,QAC1B,eAAA,EAAiB;AAAA,UACf,SAAA,EAAW,IAAA;AAAA,UACX,cAAc,sBAAA,CAAuB;AAAA;AACvC,OACD,CAAA;AAID,MAAA,UAAA,CAAW,EAAE,CAAC,sBAAA,CAAuB,UAAU,GAAG,OAAO,CAAA;AACzD,MAAA,kBAAA,CAAmB,MAAM,IAAI,CAAA;AAAA,IAC/B,CAAA;AAAA,IACA,GAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,QAAA,GAAA,CACH,MAAM,IAAA,IAAQ,cAAA,CAAe,OAAO,KAAA,CAAM,IAAI,GAAG,IAAA,KAAS,IAAA;AAE7D,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,gBAAgB,CAAA,IAAK,MAAA,CAAO,WAAA;AAEzD,EAAA,MAAM,WAAA,GACJ,QAAA,GAAW,YAAY,CAAA,EAAG,sBAAA,EAAwB,UAAA,IAClD,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,CAAE,sBAAA,CAAuB,UAAU,CAAA;AAElE,EAAA,MAAM,gCACJ,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO,YAAA;AAAA,QACP,QAAA,EAAU,UAAQ,QAAA,CAAS,CAAA,SAAA,MAAc,EAAE,GAAG,SAAA,EAAW,MAAK,CAAE,CAAA;AAAA,QAChE,SAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IACC,aAAa,QAAA,oBACZ,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,QAAA,EAAU,gBAAA;AAAA,QACV,SAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IAED,aAAa,OAAA,oBACZ,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,YAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,IAED,aAAa,QAAA,oBACZ,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,gBAAA;AAAA,QACV,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IAED,aAAa,WAAA,oBACZ,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,eAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,gBAAA;AAAA,QACV,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IAED,aAAa,OAAA,oBACZ,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,oBAAA;AAAA,QACA,cAAA,EAAgB,eAAA;AAAA,QAChB,SAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,IAED,aAAa,QAAA,oBACZ,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,gBAAA;AAAA,QACV;AAAA;AAAA,KACF;AAAA,oBAEF,GAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,YAAA;AAAA,QACA,QAAA,EAAU,CAAA,IAAA,KACR,QAAA,CAAS,CAAA,SAAA,MAAc;AAAA,UACrB,GAAG,SAAA;AAAA,UACH,QAAA,EAAU,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK;AAAA,SAC5B,CAAE,CAAA;AAAA,QAEJ,UAAA;AAAA,QACA,SAAA;AAAA,QACA,gBAAgB,KAAA,CAAM;AAAA;AAAA;AACxB,GAAA,EACF,CAAA;AAGF,EAAA,IAAI,oBAAoB,KAAA,EAAO;AAC7B,IAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,GAAA,EAC1B,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,KAAA,oBACN,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,SAAQ,aAAA,EAAc,MAAA,EAAO,MAAA,EACxC,QAAA,EAAA,MAAA,CAAO,KAAA,EACV,CAAA;AAAA,MAED,WAAA,oBAAe,GAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,WAAA,EAAa,CAAA;AAAA,MACtD;AAAA,KAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,KAAA,oBACN,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EACP,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,0BACtC,OAAA,EAAA,EAAQ;AAAA,KAAA,EACX,CAAA;AAAA,IAED,WAAA,wBACE,UAAA,EAAA,EAAW,OAAA,EAAQ,SAClB,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,WAAA,EAAa,CAAA,EACzC,CAAA;AAAA,IAED;AAAA,GAAA,EACH,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"RepoUrlPicker.esm.js","sources":["../../../../src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx"],"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 { useApi } from '@backstage/core-plugin-api';\nimport {\n scmAuthApiRef,\n scmIntegrationsApiRef,\n} from '@backstage/integration-react';\nimport { useTemplateSecrets } from '@backstage/plugin-scaffolder-react';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport Typography from '@material-ui/core/Typography';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport useDebounce from 'react-use/esm/useDebounce';\nimport { AzureRepoPicker } from './AzureRepoPicker';\nimport { BitbucketRepoPicker } from './BitbucketRepoPicker';\nimport { GerritRepoPicker } from './GerritRepoPicker';\nimport { GiteaRepoPicker } from './GiteaRepoPicker';\nimport { GithubRepoPicker } from './GithubRepoPicker';\nimport { GitlabRepoPicker } from './GitlabRepoPicker';\nimport { RepoUrlPickerHost } from './RepoUrlPickerHost';\nimport { RepoUrlPickerRepoName } from './RepoUrlPickerRepoName';\nimport { RepoUrlPickerFieldSchema } from './schema';\nimport { RepoUrlPickerState } from './types';\nimport { parseRepoPickerUrl, serializeRepoPickerUrl } from './utils';\nimport { MarkdownContent } from '@backstage/core-components';\nimport { useScaffolderTheme } from '@backstage/plugin-scaffolder-react/alpha';\nimport { Flex, Text } from '@backstage/ui';\n\nexport { RepoUrlPickerSchema } from './schema';\n\n/**\n * The underlying component that is rendered in the form for the `RepoUrlPicker`\n * field extension.\n *\n * @public\n */\nexport const RepoUrlPicker = (\n props: typeof RepoUrlPickerFieldSchema.TProps,\n) => {\n const scaffolderTheme = useScaffolderTheme();\n const { uiSchema, onChange, rawErrors, formData, schema } = props;\n const [state, setState] = useState<RepoUrlPickerState>(\n parseRepoPickerUrl(formData),\n );\n const [credentialsHost, setCredentialsHost] = useState<string | undefined>(\n undefined,\n );\n const integrationApi = useApi(scmIntegrationsApiRef);\n const scmAuthApi = useApi(scmAuthApiRef);\n const { secrets, setSecrets } = useTemplateSecrets();\n const allowedHosts = useMemo(\n () => uiSchema?.['ui:options']?.allowedHosts ?? [],\n [uiSchema],\n );\n const allowedOrganizations = useMemo(\n () => uiSchema?.['ui:options']?.allowedOrganizations ?? [],\n [uiSchema],\n );\n const allowedOwners = useMemo(\n () => uiSchema?.['ui:options']?.allowedOwners ?? [],\n [uiSchema],\n );\n const allowedProjects = useMemo(\n () => uiSchema?.['ui:options']?.allowedProjects ?? [],\n [uiSchema],\n );\n const allowedRepos = useMemo(\n () => uiSchema?.['ui:options']?.allowedRepos ?? [],\n [uiSchema],\n );\n const isDisabled = useMemo(\n () => uiSchema?.['ui:disabled'] ?? false,\n [uiSchema],\n );\n const { owner, organization, project, repoName } = state;\n\n useEffect(() => {\n onChange(serializeRepoPickerUrl(state));\n }, [state, onChange]);\n\n /* we deal with calling the repo setting here instead of in each components for ease */\n useEffect(() => {\n if (allowedOrganizations.length > 0 && !organization) {\n setState(prevState => ({\n ...prevState,\n organization: allowedOrganizations[0],\n }));\n }\n }, [setState, allowedOrganizations, organization]);\n\n useEffect(() => {\n if (allowedOwners.length > 0 && !owner) {\n setState(prevState => ({\n ...prevState,\n owner: allowedOwners[0],\n }));\n }\n }, [setState, allowedOwners, owner]);\n\n useEffect(() => {\n if (allowedProjects.length > 0 && !project) {\n setState(prevState => ({\n ...prevState,\n project: allowedProjects[0],\n }));\n }\n }, [setState, allowedProjects, project]);\n\n useEffect(() => {\n if (allowedRepos.length > 0 && !repoName) {\n setState(prevState => ({ ...prevState, repoName: allowedRepos[0] }));\n }\n }, [setState, allowedRepos, repoName]);\n\n const updateLocalState = useCallback(\n (newState: RepoUrlPickerState) => {\n setState(prevState => ({ ...prevState, ...newState }));\n },\n [setState],\n );\n\n useDebounce(\n async () => {\n const { requestUserCredentials } = uiSchema?.['ui:options'] ?? {};\n\n if (!requestUserCredentials || !state.host) {\n return;\n }\n\n // don't show login prompt if secret value is already in state for selected host\n if (\n secrets[requestUserCredentials.secretsKey] &&\n credentialsHost === state.host\n ) {\n return;\n }\n\n // user has requested that we use the users credentials\n // so lets grab them using the scmAuthApi and pass through\n // any additional scopes from the ui:options\n const { token } = await scmAuthApi.getCredentials({\n url: `https://${state.host}`,\n additionalScope: {\n repoWrite: true,\n customScopes: requestUserCredentials.additionalScopes,\n },\n });\n\n // set the secret using the key provided in the ui:options for use\n // in the templating the manifest with ${{ secrets[secretsKey] }}\n setSecrets({ [requestUserCredentials.secretsKey]: token });\n setCredentialsHost(state.host);\n },\n 500,\n [state, uiSchema],\n );\n\n const hostType =\n (state.host && integrationApi.byHost(state.host)?.type) ?? null;\n\n const description = uiSchema['ui:description'] ?? schema.description;\n\n const accessToken =\n uiSchema?.['ui:options']?.requestUserCredentials?.secretsKey &&\n secrets[uiSchema['ui:options'].requestUserCredentials.secretsKey];\n\n const subComponents = (\n <>\n <RepoUrlPickerHost\n host={state.host}\n hosts={allowedHosts}\n onChange={host => setState(prevState => ({ ...prevState, host }))}\n rawErrors={rawErrors}\n isDisabled={isDisabled}\n />\n {hostType === 'github' && (\n <GithubRepoPicker\n allowedOwners={allowedOwners}\n onChange={updateLocalState}\n rawErrors={rawErrors}\n state={state}\n isDisabled={isDisabled}\n accessToken={accessToken}\n />\n )}\n {hostType === 'gitea' && (\n <GiteaRepoPicker\n allowedOwners={allowedOwners}\n allowedRepos={allowedRepos}\n rawErrors={rawErrors}\n state={state}\n isDisabled={isDisabled}\n onChange={updateLocalState}\n />\n )}\n {hostType === 'gitlab' && (\n <GitlabRepoPicker\n allowedOwners={allowedOwners}\n rawErrors={rawErrors}\n state={state}\n onChange={updateLocalState}\n isDisabled={isDisabled}\n accessToken={accessToken}\n />\n )}\n {(hostType === 'bitbucket' ||\n hostType === 'bitbucketCloud' ||\n hostType === 'bitbucketServer') && (\n <BitbucketRepoPicker\n allowedOwners={allowedOwners}\n allowedProjects={allowedProjects}\n rawErrors={rawErrors}\n state={state}\n onChange={updateLocalState}\n isDisabled={isDisabled}\n accessToken={accessToken}\n />\n )}\n {hostType === 'azure' && (\n <AzureRepoPicker\n allowedOrganizations={allowedOrganizations}\n allowedProject={allowedProjects}\n rawErrors={rawErrors}\n state={state}\n isDisabled={isDisabled}\n onChange={updateLocalState}\n />\n )}\n {hostType === 'gerrit' && (\n <GerritRepoPicker\n rawErrors={rawErrors}\n state={state}\n onChange={updateLocalState}\n isDisabled={isDisabled}\n />\n )}\n <RepoUrlPickerRepoName\n repoName={state.repoName}\n allowedRepos={allowedRepos}\n onChange={repo =>\n setState(prevState => ({\n ...prevState,\n repoName: repo.id || repo.name,\n }))\n }\n isDisabled={isDisabled}\n rawErrors={rawErrors}\n availableRepos={state.availableRepos}\n />\n </>\n );\n\n if (scaffolderTheme === 'bui') {\n return (\n <Flex direction=\"column\" gap=\"4\">\n {schema.title && (\n <Text as=\"h5\" variant=\"title-small\" weight=\"bold\">\n {schema.title}\n </Text>\n )}\n {description && <MarkdownContent content={description} />}\n {subComponents}\n </Flex>\n );\n }\n\n return (\n <>\n {schema.title && (\n <Box my={1}>\n <Typography variant=\"h5\">{schema.title}</Typography>\n <Divider />\n </Box>\n )}\n {description && (\n <Typography variant=\"body1\">\n <MarkdownContent content={description} />\n </Typography>\n )}\n {subComponents}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.esm.js","sources":["../../../src/components/fields/utils.ts"],"sourcesContent":["/*\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 { JSONSchema7 } from 'json-schema';\nimport { z } from 'zod/v3';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport { FieldSchema as FieldSchemaType } from '@backstage/plugin-scaffolder-react';\n\n/**\n * @public\n * @deprecated - import from {@link @backstage/plugin-scaffolder-react#FieldSchema} instead\n */\nexport interface FieldSchema<T, P> extends FieldSchemaType<T, P> {}\n\n/**\n * @public\n * @deprecated use `makeFieldSchema` instead\n * Utility function to convert zod return and UI options schemas to a\n * CustomFieldExtensionSchema with FieldExtensionComponentProps type inference\n */\n\nexport function makeFieldSchemaFromZod<\n TReturnSchema extends z.ZodType,\n TUiOptionsSchema extends z.ZodType = z.ZodType<any, any, {}>,\n>(\n returnSchema: TReturnSchema,\n uiOptionsSchema?: TUiOptionsSchema,\n): FieldSchema<\n TReturnSchema extends z.ZodType<any, any, infer IReturn> ? IReturn : never,\n TUiOptionsSchema extends z.ZodType<any, any, infer IUiOptions>\n ? IUiOptions\n : never\n> {\n return {\n schema: {\n returnValue: zodToJsonSchema(returnSchema) as JSONSchema7,\n uiOptions: uiOptionsSchema\n ? (zodToJsonSchema(uiOptionsSchema) as JSONSchema7)\n : undefined,\n },\n type: null as any,\n uiOptionsType: null as any,\n TProps: undefined as any,\n TOutput: undefined as any,\n };\n}\n"],"names":[],"mappings":";;AAiCO,SAAS,sBAAA,CAId,cACA,eAAA,EAMA;AACA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ;AAAA,MACN,WAAA,EAAa,gBAAgB,YAAY,CAAA;AAAA,MACzC,SAAA,EAAW,eAAA,GACN,eAAA,CAAgB,eAAe,CAAA,GAChC;AAAA,KACN;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,aAAA,EAAe,IAAA;AAAA,IACf,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"utils.esm.js","sources":["../../../src/components/fields/utils.ts"],"sourcesContent":["/*\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 type { JSONSchema7 } from 'json-schema';\nimport { z } from 'zod/v3';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport { FieldSchema as FieldSchemaType } from '@backstage/plugin-scaffolder-react';\n\n/**\n * @public\n * @deprecated - import from {@link @backstage/plugin-scaffolder-react#FieldSchema} instead\n */\nexport interface FieldSchema<T, P> extends FieldSchemaType<T, P> {}\n\n/**\n * @public\n * @deprecated use `makeFieldSchema` instead\n * Utility function to convert zod return and UI options schemas to a\n * CustomFieldExtensionSchema with FieldExtensionComponentProps type inference\n */\n\nexport function makeFieldSchemaFromZod<\n TReturnSchema extends z.ZodType,\n TUiOptionsSchema extends z.ZodType = z.ZodType<any, any, {}>,\n>(\n returnSchema: TReturnSchema,\n uiOptionsSchema?: TUiOptionsSchema,\n): FieldSchema<\n TReturnSchema extends z.ZodType<any, any, infer IReturn> ? IReturn : never,\n TUiOptionsSchema extends z.ZodType<any, any, infer IUiOptions>\n ? IUiOptions\n : never\n> {\n return {\n schema: {\n returnValue: zodToJsonSchema(returnSchema) as JSONSchema7,\n uiOptions: uiOptionsSchema\n ? (zodToJsonSchema(uiOptionsSchema) as JSONSchema7)\n : undefined,\n },\n type: null as any,\n uiOptionsType: null as any,\n TProps: undefined as any,\n TOutput: undefined as any,\n };\n}\n"],"names":[],"mappings":";;AAiCO,SAAS,sBAAA,CAId,cACA,eAAA,EAMA;AACA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ;AAAA,MACN,WAAA,EAAa,gBAAgB,YAAY,CAAA;AAAA,MACzC,SAAA,EAAW,eAAA,GACN,eAAA,CAAgB,eAAe,CAAA,GAChC;AAAA,KACN;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,aAAA,EAAe,IAAA;AAAA,IACf,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AACF;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@backstage/plugin-scaffolder";
|
|
2
|
-
var version = "1.38.
|
|
2
|
+
var version = "1.38.1-next.0";
|
|
3
3
|
var description = "The Backstage plugin that helps you create new things";
|
|
4
4
|
var backstage = {
|
|
5
5
|
role: "frontend-plugin",
|
|
@@ -92,7 +92,6 @@ var dependencies = {
|
|
|
92
92
|
"git-url-parse": "^15.0.0",
|
|
93
93
|
"humanize-duration": "^3.25.1",
|
|
94
94
|
"idb-keyval": "5.1.5",
|
|
95
|
-
"json-schema": "^0.4.0",
|
|
96
95
|
"json-schema-library": "^9.0.0",
|
|
97
96
|
jszip: "^3.10.1",
|
|
98
97
|
lodash: "^4.17.21",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-scaffolder",
|
|
3
|
-
"version": "1.38.
|
|
3
|
+
"version": "1.38.1-next.0",
|
|
4
4
|
"description": "The Backstage plugin that helps you create new things",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "frontend-plugin",
|
|
@@ -70,24 +70,24 @@
|
|
|
70
70
|
"test": "backstage-cli package test"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@backstage/catalog-client": "1.16.
|
|
73
|
+
"@backstage/catalog-client": "1.16.1-next.0",
|
|
74
74
|
"@backstage/catalog-model": "1.9.0",
|
|
75
|
-
"@backstage/core-components": "0.18.
|
|
76
|
-
"@backstage/core-plugin-api": "1.12.
|
|
75
|
+
"@backstage/core-components": "0.18.12-next.0",
|
|
76
|
+
"@backstage/core-plugin-api": "1.12.8-next.0",
|
|
77
77
|
"@backstage/errors": "1.3.1",
|
|
78
|
-
"@backstage/filter-predicates": "0.1.
|
|
79
|
-
"@backstage/frontend-plugin-api": "0.17.
|
|
80
|
-
"@backstage/integration": "2.0.3
|
|
81
|
-
"@backstage/integration-react": "1.2.
|
|
78
|
+
"@backstage/filter-predicates": "0.1.4-next.0",
|
|
79
|
+
"@backstage/frontend-plugin-api": "0.17.3-next.0",
|
|
80
|
+
"@backstage/integration": "2.0.3",
|
|
81
|
+
"@backstage/integration-react": "1.2.20-next.0",
|
|
82
82
|
"@backstage/plugin-catalog-common": "1.1.10",
|
|
83
|
-
"@backstage/plugin-catalog-react": "3.0
|
|
84
|
-
"@backstage/plugin-permission-react": "0.5.
|
|
85
|
-
"@backstage/plugin-scaffolder-common": "2.2.1
|
|
86
|
-
"@backstage/plugin-scaffolder-react": "2.0.
|
|
83
|
+
"@backstage/plugin-catalog-react": "3.2.0-next.0",
|
|
84
|
+
"@backstage/plugin-permission-react": "0.5.3-next.0",
|
|
85
|
+
"@backstage/plugin-scaffolder-common": "2.2.1",
|
|
86
|
+
"@backstage/plugin-scaffolder-react": "2.0.2-next.0",
|
|
87
87
|
"@backstage/plugin-techdocs-common": "0.1.1",
|
|
88
|
-
"@backstage/plugin-techdocs-react": "1.3.
|
|
88
|
+
"@backstage/plugin-techdocs-react": "1.3.13-next.0",
|
|
89
89
|
"@backstage/types": "1.2.2",
|
|
90
|
-
"@backstage/ui": "0.
|
|
90
|
+
"@backstage/ui": "0.17.0-next.0",
|
|
91
91
|
"@codemirror/language": "^6.0.0",
|
|
92
92
|
"@codemirror/legacy-modes": "^6.1.0",
|
|
93
93
|
"@codemirror/view": "^6.0.0",
|
|
@@ -105,7 +105,6 @@
|
|
|
105
105
|
"git-url-parse": "^15.0.0",
|
|
106
106
|
"humanize-duration": "^3.25.1",
|
|
107
107
|
"idb-keyval": "5.1.5",
|
|
108
|
-
"json-schema": "^0.4.0",
|
|
109
108
|
"json-schema-library": "^9.0.0",
|
|
110
109
|
"jszip": "^3.10.1",
|
|
111
110
|
"lodash": "^4.17.21",
|
|
@@ -121,14 +120,14 @@
|
|
|
121
120
|
"zod-to-json-schema": "^3.25.1"
|
|
122
121
|
},
|
|
123
122
|
"devDependencies": {
|
|
124
|
-
"@backstage/cli": "0.36.
|
|
125
|
-
"@backstage/core-app-api": "1.20.
|
|
126
|
-
"@backstage/dev-utils": "1.1.
|
|
127
|
-
"@backstage/frontend-test-utils": "0.6.
|
|
128
|
-
"@backstage/plugin-catalog": "2.0.
|
|
123
|
+
"@backstage/cli": "0.36.4-next.0",
|
|
124
|
+
"@backstage/core-app-api": "1.20.3-next.0",
|
|
125
|
+
"@backstage/dev-utils": "1.1.25-next.0",
|
|
126
|
+
"@backstage/frontend-test-utils": "0.6.2-next.0",
|
|
127
|
+
"@backstage/plugin-catalog": "2.0.7-next.0",
|
|
129
128
|
"@backstage/plugin-permission-common": "0.9.9",
|
|
130
|
-
"@backstage/plugin-techdocs": "1.17.
|
|
131
|
-
"@backstage/test-utils": "1.7.
|
|
129
|
+
"@backstage/plugin-techdocs": "1.17.8-next.0",
|
|
130
|
+
"@backstage/test-utils": "1.7.20-next.0",
|
|
132
131
|
"@testing-library/dom": "^10.0.0",
|
|
133
132
|
"@testing-library/jest-dom": "^6.0.0",
|
|
134
133
|
"@testing-library/react": "^16.0.0",
|