@backstage/plugin-scaffolder 1.23.1-next.0 → 1.24.0-next.2

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 CHANGED
@@ -1,5 +1,52 @@
1
1
  # @backstage/plugin-scaffolder
2
2
 
3
+ ## 1.24.0-next.2
4
+
5
+ ### Minor Changes
6
+
7
+ - 3fca643: Added field extension `RepoBranchPicker` that supports autocompletion for Bitbucket
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+ - @backstage/plugin-scaffolder-react@1.11.0-next.2
13
+ - @backstage/frontend-plugin-api@0.7.0-next.2
14
+ - @backstage/core-compat-api@0.2.8-next.2
15
+ - @backstage/plugin-catalog-react@1.12.3-next.2
16
+ - @backstage/plugin-catalog-common@1.0.26-next.1
17
+ - @backstage/plugin-permission-react@0.4.25-next.1
18
+ - @backstage/plugin-scaffolder-common@1.5.5-next.1
19
+ - @backstage/integration@1.14.0-next.0
20
+ - @backstage/catalog-client@1.6.5
21
+ - @backstage/catalog-model@1.5.0
22
+ - @backstage/core-components@0.14.10-next.0
23
+ - @backstage/core-plugin-api@1.9.3
24
+ - @backstage/errors@1.2.4
25
+ - @backstage/integration-react@1.1.30-next.0
26
+ - @backstage/types@1.1.1
27
+
28
+ ## 1.23.1-next.1
29
+
30
+ ### Patch Changes
31
+
32
+ - 896a22d: Fix helper text margin for scaffolder EntityNamePicker and EntityTagsPicker when using outlined text field
33
+ - Updated dependencies
34
+ - @backstage/plugin-catalog-react@1.12.3-next.1
35
+ - @backstage/frontend-plugin-api@0.6.8-next.1
36
+ - @backstage/core-compat-api@0.2.8-next.1
37
+ - @backstage/plugin-scaffolder-react@1.11.0-next.1
38
+ - @backstage/integration@1.14.0-next.0
39
+ - @backstage/plugin-catalog-common@1.0.26-next.0
40
+ - @backstage/plugin-permission-react@0.4.25-next.0
41
+ - @backstage/plugin-scaffolder-common@1.5.5-next.0
42
+ - @backstage/catalog-client@1.6.5
43
+ - @backstage/catalog-model@1.5.0
44
+ - @backstage/core-components@0.14.10-next.0
45
+ - @backstage/core-plugin-api@1.9.3
46
+ - @backstage/errors@1.2.4
47
+ - @backstage/integration-react@1.1.30-next.0
48
+ - @backstage/types@1.1.1
49
+
3
50
  ## 1.23.1-next.0
4
51
 
5
52
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder__alpha",
3
- "version": "1.23.1-next.0",
3
+ "version": "1.24.0-next.2",
4
4
  "main": "../dist/alpha.esm.js",
5
5
  "module": "../dist/alpha.esm.js",
6
6
  "types": "../dist/alpha.d.ts"
package/dist/alpha.d.ts CHANGED
@@ -66,12 +66,12 @@ declare const _default: _backstage_frontend_plugin_api.BackstagePlugin<{
66
66
  listTasks: _backstage_frontend_plugin_api.SubRouteRef<undefined>;
67
67
  edit: _backstage_frontend_plugin_api.SubRouteRef<undefined>;
68
68
  }, {
69
- registerComponent: _backstage_frontend_plugin_api.ExternalRouteRef<undefined, true>;
69
+ registerComponent: _backstage_frontend_plugin_api.ExternalRouteRef<undefined>;
70
70
  viewTechDoc: _backstage_frontend_plugin_api.ExternalRouteRef<{
71
71
  name: string;
72
72
  kind: string;
73
73
  namespace: string;
74
- }, true>;
74
+ }>;
75
75
  }>;
76
76
 
77
77
  export { type FormProps, type TemplateListPageProps, type TemplateWizardPageProps, _default as default };
@@ -25,7 +25,8 @@ const EntityNamePicker = (props) => {
25
25
  onChange: ({ target: { value } }) => onChange(value),
26
26
  margin: "normal",
27
27
  error: rawErrors?.length > 0 && !formData,
28
- inputProps: { autoFocus }
28
+ inputProps: { autoFocus },
29
+ FormHelperTextProps: { margin: "dense", style: { marginLeft: 0 } }
29
30
  }
30
31
  );
31
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EntityNamePicker.esm.js","sources":["../../../../src/components/fields/EntityNamePicker/EntityNamePicker.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 React from 'react';\nimport { EntityNamePickerProps } from './schema';\nimport TextField from '@material-ui/core/TextField';\n\nexport { EntityNamePickerSchema } from './schema';\n\n/**\n * EntityName Picker\n */\nexport const EntityNamePicker = (props: EntityNamePickerProps) => {\n const {\n onChange,\n required,\n schema: { title = 'Name', description = 'Unique name of the component' },\n rawErrors,\n formData,\n uiSchema: { 'ui:autofocus': autoFocus },\n idSchema,\n placeholder,\n } = props;\n\n return (\n <TextField\n id={idSchema?.$id}\n label={title}\n placeholder={placeholder}\n helperText={description}\n required={required}\n value={formData ?? ''}\n onChange={({ target: { value } }) => onChange(value)}\n margin=\"normal\"\n error={rawErrors?.length > 0 && !formData}\n inputProps={{ autoFocus }}\n />\n );\n};\n"],"names":[],"mappings":";;;;AAwBa,MAAA,gBAAA,GAAmB,CAAC,KAAiC,KAAA;AAChE,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAQ,EAAA,EAAE,KAAQ,GAAA,MAAA,EAAQ,cAAc,8BAA+B,EAAA;AAAA,IACvE,SAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,EAAU,EAAE,cAAA,EAAgB,SAAU,EAAA;AAAA,IACtC,QAAA;AAAA,IACA,WAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,IAAI,QAAU,EAAA,GAAA;AAAA,MACd,KAAO,EAAA,KAAA;AAAA,MACP,WAAA;AAAA,MACA,UAAY,EAAA,WAAA;AAAA,MACZ,QAAA;AAAA,MACA,OAAO,QAAY,IAAA,EAAA;AAAA,MACnB,QAAA,EAAU,CAAC,EAAE,MAAA,EAAQ,EAAE,KAAM,EAAA,EAAQ,KAAA,QAAA,CAAS,KAAK,CAAA;AAAA,MACnD,MAAO,EAAA,QAAA;AAAA,MACP,KAAO,EAAA,SAAA,EAAW,MAAS,GAAA,CAAA,IAAK,CAAC,QAAA;AAAA,MACjC,UAAA,EAAY,EAAE,SAAU,EAAA;AAAA,KAAA;AAAA,GAC1B,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"EntityNamePicker.esm.js","sources":["../../../../src/components/fields/EntityNamePicker/EntityNamePicker.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 React from 'react';\nimport { EntityNamePickerProps } from './schema';\nimport TextField from '@material-ui/core/TextField';\n\nexport { EntityNamePickerSchema } from './schema';\n\n/**\n * EntityName Picker\n */\nexport const EntityNamePicker = (props: EntityNamePickerProps) => {\n const {\n onChange,\n required,\n schema: { title = 'Name', description = 'Unique name of the component' },\n rawErrors,\n formData,\n uiSchema: { 'ui:autofocus': autoFocus },\n idSchema,\n placeholder,\n } = props;\n\n return (\n <TextField\n id={idSchema?.$id}\n label={title}\n placeholder={placeholder}\n helperText={description}\n required={required}\n value={formData ?? ''}\n onChange={({ target: { value } }) => onChange(value)}\n margin=\"normal\"\n error={rawErrors?.length > 0 && !formData}\n inputProps={{ autoFocus }}\n FormHelperTextProps={{ margin: 'dense', style: { marginLeft: 0 } }}\n />\n );\n};\n"],"names":[],"mappings":";;;;AAwBa,MAAA,gBAAA,GAAmB,CAAC,KAAiC,KAAA;AAChE,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAQ,EAAA,EAAE,KAAQ,GAAA,MAAA,EAAQ,cAAc,8BAA+B,EAAA;AAAA,IACvE,SAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,EAAU,EAAE,cAAA,EAAgB,SAAU,EAAA;AAAA,IACtC,QAAA;AAAA,IACA,WAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,IAAI,QAAU,EAAA,GAAA;AAAA,MACd,KAAO,EAAA,KAAA;AAAA,MACP,WAAA;AAAA,MACA,UAAY,EAAA,WAAA;AAAA,MACZ,QAAA;AAAA,MACA,OAAO,QAAY,IAAA,EAAA;AAAA,MACnB,QAAA,EAAU,CAAC,EAAE,MAAA,EAAQ,EAAE,KAAM,EAAA,EAAQ,KAAA,QAAA,CAAS,KAAK,CAAA;AAAA,MACnD,MAAO,EAAA,QAAA;AAAA,MACP,KAAO,EAAA,SAAA,EAAW,MAAS,GAAA,CAAA,IAAK,CAAC,QAAA;AAAA,MACjC,UAAA,EAAY,EAAE,SAAU,EAAA;AAAA,MACxB,mBAAA,EAAqB,EAAE,MAAQ,EAAA,OAAA,EAAS,OAAO,EAAE,UAAA,EAAY,GAAI,EAAA;AAAA,KAAA;AAAA,GACnE,CAAA;AAEJ;;;;"}
@@ -72,7 +72,8 @@ const EntityTagsPicker = (props) => {
72
72
  label: "Tags",
73
73
  onChange: (e) => setInputValue(e.target.value),
74
74
  error: inputError,
75
- helperText: helperText ?? "Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters"
75
+ helperText: helperText ?? "Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters",
76
+ FormHelperTextProps: { margin: "dense", style: { marginLeft: 0 } }
76
77
  }
77
78
  )
78
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EntityTagsPicker.esm.js","sources":["../../../../src/components/fields/EntityTagsPicker/EntityTagsPicker.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 React, { useState } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport useEffectOnce from 'react-use/esm/useEffectOnce';\nimport { GetEntityFacetsRequest } from '@backstage/catalog-client';\nimport { makeValidator } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport FormControl from '@material-ui/core/FormControl';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { EntityTagsPickerProps } from './schema';\n\nexport { EntityTagsPickerSchema } from './schema';\n\n/**\n * The underlying component that is rendered in the form for the `EntityTagsPicker`\n * field extension.\n *\n * @public\n */\nexport const EntityTagsPicker = (props: EntityTagsPickerProps) => {\n const { formData, onChange, uiSchema } = props;\n const catalogApi = useApi(catalogApiRef);\n const [tagOptions, setTagOptions] = useState<string[]>([]);\n const [inputValue, setInputValue] = useState('');\n const [inputError, setInputError] = useState(false);\n const tagValidator = makeValidator().isValidTag;\n const kinds = uiSchema['ui:options']?.kinds;\n const showCounts = uiSchema['ui:options']?.showCounts;\n const helperText = uiSchema['ui:options']?.helperText;\n\n const { loading, value: existingTags } = useAsync(async () => {\n const facet = 'metadata.tags';\n const tagsRequest: GetEntityFacetsRequest = { facets: [facet] };\n if (kinds) {\n tagsRequest.filter = { kind: kinds };\n }\n\n const { facets } = await catalogApi.getEntityFacets(tagsRequest);\n\n const tagFacets = Object.fromEntries(\n facets[facet].map(({ value, count }) => [value, count]),\n );\n\n setTagOptions(\n Object.keys(tagFacets).sort((a, b) =>\n showCounts ? tagFacets[b] - tagFacets[a] : a.localeCompare(b),\n ),\n );\n\n return tagFacets;\n });\n\n const setTags = (_: React.ChangeEvent<{}>, values: string[] | null) => {\n // Reset error state in case all tags were removed\n let hasError = false;\n let addDuplicate = false;\n const currentTags = formData || [];\n\n // If adding a new tag\n if (values?.length && currentTags.length < values.length) {\n const newTag = (values[values.length - 1] = values[values.length - 1]\n .toLocaleLowerCase('en-US')\n .trim());\n hasError = !tagValidator(newTag);\n addDuplicate = currentTags.indexOf(newTag) !== -1;\n }\n\n setInputError(hasError);\n setInputValue(!hasError ? '' : inputValue);\n if (!hasError && !addDuplicate) {\n onChange(values || []);\n }\n };\n\n // Initialize field to always return an array\n useEffectOnce(() => onChange(formData || []));\n\n return (\n <FormControl margin=\"normal\">\n <Autocomplete\n multiple\n freeSolo\n filterSelectedOptions\n onChange={setTags}\n value={formData || []}\n inputValue={inputValue}\n loading={loading}\n options={tagOptions}\n ChipProps={{ size: 'small' }}\n renderOption={option =>\n showCounts ? `${option} (${existingTags?.[option]})` : option\n }\n renderInput={params => (\n <TextField\n {...params}\n label=\"Tags\"\n onChange={e => setInputValue(e.target.value)}\n error={inputError}\n helperText={\n helperText ??\n \"Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters\"\n }\n />\n )}\n />\n </FormControl>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityTagsPicker.esm.js","sources":["../../../../src/components/fields/EntityTagsPicker/EntityTagsPicker.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 React, { useState } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport useEffectOnce from 'react-use/esm/useEffectOnce';\nimport { GetEntityFacetsRequest } from '@backstage/catalog-client';\nimport { makeValidator } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport FormControl from '@material-ui/core/FormControl';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { EntityTagsPickerProps } from './schema';\n\nexport { EntityTagsPickerSchema } from './schema';\n\n/**\n * The underlying component that is rendered in the form for the `EntityTagsPicker`\n * field extension.\n *\n * @public\n */\nexport const EntityTagsPicker = (props: EntityTagsPickerProps) => {\n const { formData, onChange, uiSchema } = props;\n const catalogApi = useApi(catalogApiRef);\n const [tagOptions, setTagOptions] = useState<string[]>([]);\n const [inputValue, setInputValue] = useState('');\n const [inputError, setInputError] = useState(false);\n const tagValidator = makeValidator().isValidTag;\n const kinds = uiSchema['ui:options']?.kinds;\n const showCounts = uiSchema['ui:options']?.showCounts;\n const helperText = uiSchema['ui:options']?.helperText;\n\n const { loading, value: existingTags } = useAsync(async () => {\n const facet = 'metadata.tags';\n const tagsRequest: GetEntityFacetsRequest = { facets: [facet] };\n if (kinds) {\n tagsRequest.filter = { kind: kinds };\n }\n\n const { facets } = await catalogApi.getEntityFacets(tagsRequest);\n\n const tagFacets = Object.fromEntries(\n facets[facet].map(({ value, count }) => [value, count]),\n );\n\n setTagOptions(\n Object.keys(tagFacets).sort((a, b) =>\n showCounts ? tagFacets[b] - tagFacets[a] : a.localeCompare(b),\n ),\n );\n\n return tagFacets;\n });\n\n const setTags = (_: React.ChangeEvent<{}>, values: string[] | null) => {\n // Reset error state in case all tags were removed\n let hasError = false;\n let addDuplicate = false;\n const currentTags = formData || [];\n\n // If adding a new tag\n if (values?.length && currentTags.length < values.length) {\n const newTag = (values[values.length - 1] = values[values.length - 1]\n .toLocaleLowerCase('en-US')\n .trim());\n hasError = !tagValidator(newTag);\n addDuplicate = currentTags.indexOf(newTag) !== -1;\n }\n\n setInputError(hasError);\n setInputValue(!hasError ? '' : inputValue);\n if (!hasError && !addDuplicate) {\n onChange(values || []);\n }\n };\n\n // Initialize field to always return an array\n useEffectOnce(() => onChange(formData || []));\n\n return (\n <FormControl margin=\"normal\">\n <Autocomplete\n multiple\n freeSolo\n filterSelectedOptions\n onChange={setTags}\n value={formData || []}\n inputValue={inputValue}\n loading={loading}\n options={tagOptions}\n ChipProps={{ size: 'small' }}\n renderOption={option =>\n showCounts ? `${option} (${existingTags?.[option]})` : option\n }\n renderInput={params => (\n <TextField\n {...params}\n label=\"Tags\"\n onChange={e => setInputValue(e.target.value)}\n error={inputError}\n helperText={\n helperText ??\n \"Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters\"\n }\n FormHelperTextProps={{ margin: 'dense', style: { marginLeft: 0 } }}\n />\n )}\n />\n </FormControl>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';
2
+ import FormControl from '@material-ui/core/FormControl';
3
+ import React, { useState, useCallback } from 'react';
4
+ import TextField from '@material-ui/core/TextField';
5
+ import Autocomplete from '@material-ui/lab/Autocomplete';
6
+ import useDebounce from 'react-use/esm/useDebounce';
7
+ import { useApi } from '@backstage/core-plugin-api';
8
+ import FormHelperText from '@material-ui/core/FormHelperText';
9
+
10
+ const BitbucketRepoBranchPicker = ({
11
+ onChange,
12
+ state,
13
+ rawErrors,
14
+ accessToken,
15
+ required
16
+ }) => {
17
+ const { host, workspace, repository, branch } = state;
18
+ const [availableBranches, setAvailableBranches] = useState([]);
19
+ const scaffolderApi = useApi(scaffolderApiRef);
20
+ const updateAvailableBranches = useCallback(() => {
21
+ if (!scaffolderApi.autocomplete || !workspace || !repository || !accessToken || host !== "bitbucket.org") {
22
+ setAvailableBranches([]);
23
+ return;
24
+ }
25
+ scaffolderApi.autocomplete({
26
+ token: accessToken,
27
+ resource: "branches",
28
+ context: { workspace, repository },
29
+ provider: "bitbucket-cloud"
30
+ }).then(({ results }) => {
31
+ setAvailableBranches(results.map((r) => r.title));
32
+ }).catch(() => {
33
+ setAvailableBranches([]);
34
+ });
35
+ }, [host, workspace, repository, accessToken, scaffolderApi]);
36
+ useDebounce(updateAvailableBranches, 500, [updateAvailableBranches]);
37
+ return /* @__PURE__ */ React.createElement(
38
+ FormControl,
39
+ {
40
+ margin: "normal",
41
+ required,
42
+ error: rawErrors?.length > 0 && !branch
43
+ },
44
+ /* @__PURE__ */ React.createElement(
45
+ Autocomplete,
46
+ {
47
+ value: branch,
48
+ onChange: (_, newValue) => {
49
+ onChange({ branch: newValue || "" });
50
+ },
51
+ options: availableBranches,
52
+ renderInput: (params) => /* @__PURE__ */ React.createElement(TextField, { ...params, label: "Branch", required }),
53
+ freeSolo: true,
54
+ autoSelect: true
55
+ }
56
+ ),
57
+ /* @__PURE__ */ React.createElement(FormHelperText, null, "The branch of the repository")
58
+ );
59
+ };
60
+
61
+ export { BitbucketRepoBranchPicker };
62
+ //# sourceMappingURL=BitbucketRepoBranchPicker.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitbucketRepoBranchPicker.esm.js","sources":["../../../../src/components/fields/RepoBranchPicker/BitbucketRepoBranchPicker.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 { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';\nimport FormControl from '@material-ui/core/FormControl';\nimport React, { useCallback, useState } from 'react';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport useDebounce from 'react-use/esm/useDebounce';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { BaseRepoBranchPickerProps } from './types';\nimport FormHelperText from '@material-ui/core/FormHelperText';\n\n/**\n * The underlying component that is rendered in the form for the `BitbucketRepoBranchPicker`\n * field extension.\n *\n * @public\n *\n */\nexport const BitbucketRepoBranchPicker = ({\n onChange,\n state,\n rawErrors,\n accessToken,\n required,\n}: BaseRepoBranchPickerProps<{\n accessToken?: string;\n}>) => {\n const { host, workspace, repository, branch } = state;\n\n const [availableBranches, setAvailableBranches] = useState<string[]>([]);\n\n const scaffolderApi = useApi(scaffolderApiRef);\n\n const updateAvailableBranches = useCallback(() => {\n if (\n !scaffolderApi.autocomplete ||\n !workspace ||\n !repository ||\n !accessToken ||\n host !== 'bitbucket.org'\n ) {\n setAvailableBranches([]);\n return;\n }\n\n scaffolderApi\n .autocomplete({\n token: accessToken,\n resource: 'branches',\n context: { workspace, repository },\n provider: 'bitbucket-cloud',\n })\n .then(({ results }) => {\n setAvailableBranches(results.map(r => r.title));\n })\n .catch(() => {\n setAvailableBranches([]);\n });\n }, [host, workspace, repository, accessToken, scaffolderApi]);\n\n useDebounce(updateAvailableBranches, 500, [updateAvailableBranches]);\n\n return (\n <FormControl\n margin=\"normal\"\n required={required}\n error={rawErrors?.length > 0 && !branch}\n >\n <Autocomplete\n value={branch}\n onChange={(_, newValue) => {\n onChange({ branch: newValue || '' });\n }}\n options={availableBranches}\n renderInput={params => (\n <TextField {...params} label=\"Branch\" required={required} />\n )}\n freeSolo\n autoSelect\n />\n <FormHelperText>The branch of the repository</FormHelperText>\n </FormControl>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAiCO,MAAM,4BAA4B,CAAC;AAAA,EACxC,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AACF,CAEO,KAAA;AACL,EAAA,MAAM,EAAE,IAAA,EAAM,SAAW,EAAA,UAAA,EAAY,QAAW,GAAA,KAAA,CAAA;AAEhD,EAAA,MAAM,CAAC,iBAAmB,EAAA,oBAAoB,CAAI,GAAA,QAAA,CAAmB,EAAE,CAAA,CAAA;AAEvE,EAAM,MAAA,aAAA,GAAgB,OAAO,gBAAgB,CAAA,CAAA;AAE7C,EAAM,MAAA,uBAAA,GAA0B,YAAY,MAAM;AAChD,IACE,IAAA,CAAC,aAAc,CAAA,YAAA,IACf,CAAC,SAAA,IACD,CAAC,UACD,IAAA,CAAC,WACD,IAAA,IAAA,KAAS,eACT,EAAA;AACA,MAAA,oBAAA,CAAqB,EAAE,CAAA,CAAA;AACvB,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,aAAA,CACG,YAAa,CAAA;AAAA,MACZ,KAAO,EAAA,WAAA;AAAA,MACP,QAAU,EAAA,UAAA;AAAA,MACV,OAAA,EAAS,EAAE,SAAA,EAAW,UAAW,EAAA;AAAA,MACjC,QAAU,EAAA,iBAAA;AAAA,KACX,CACA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAc,KAAA;AACrB,MAAA,oBAAA,CAAqB,OAAQ,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,CAAA,CAAE,KAAK,CAAC,CAAA,CAAA;AAAA,KAC/C,CACA,CAAA,KAAA,CAAM,MAAM;AACX,MAAA,oBAAA,CAAqB,EAAE,CAAA,CAAA;AAAA,KACxB,CAAA,CAAA;AAAA,KACF,CAAC,IAAA,EAAM,WAAW,UAAY,EAAA,WAAA,EAAa,aAAa,CAAC,CAAA,CAAA;AAE5D,EAAA,WAAA,CAAY,uBAAyB,EAAA,GAAA,EAAK,CAAC,uBAAuB,CAAC,CAAA,CAAA;AAEnE,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,QAAA;AAAA,MACP,QAAA;AAAA,MACA,KAAO,EAAA,SAAA,EAAW,MAAS,GAAA,CAAA,IAAK,CAAC,MAAA;AAAA,KAAA;AAAA,oBAEjC,KAAA,CAAA,aAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA,MAAA;AAAA,QACP,QAAA,EAAU,CAAC,CAAA,EAAG,QAAa,KAAA;AACzB,UAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,QAAY,IAAA,EAAA,EAAI,CAAA,CAAA;AAAA,SACrC;AAAA,QACA,OAAS,EAAA,iBAAA;AAAA,QACT,WAAA,EAAa,4BACV,KAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAW,GAAG,MAAQ,EAAA,KAAA,EAAM,UAAS,QAAoB,EAAA,CAAA;AAAA,QAE5D,QAAQ,EAAA,IAAA;AAAA,QACR,UAAU,EAAA,IAAA;AAAA,OAAA;AAAA,KACZ;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,sBAAe,8BAA4B,CAAA;AAAA,GAC9C,CAAA;AAEJ;;;;"}
@@ -0,0 +1,35 @@
1
+ import FormControl from '@material-ui/core/FormControl';
2
+ import React from 'react';
3
+ import FormHelperText from '@material-ui/core/FormHelperText';
4
+ import Input from '@material-ui/core/Input';
5
+ import InputLabel from '@material-ui/core/InputLabel';
6
+
7
+ const DefaultRepoBranchPicker = ({
8
+ onChange,
9
+ state,
10
+ rawErrors,
11
+ required
12
+ }) => {
13
+ const { branch } = state;
14
+ return /* @__PURE__ */ React.createElement(
15
+ FormControl,
16
+ {
17
+ margin: "normal",
18
+ required,
19
+ error: rawErrors?.length > 0 && !branch
20
+ },
21
+ /* @__PURE__ */ React.createElement(InputLabel, { htmlFor: "branchInput" }, "Branch"),
22
+ /* @__PURE__ */ React.createElement(
23
+ Input,
24
+ {
25
+ id: "branchInput",
26
+ onChange: (e) => onChange({ branch: e.target.value }),
27
+ value: branch
28
+ }
29
+ ),
30
+ /* @__PURE__ */ React.createElement(FormHelperText, null, "The branch of the repository")
31
+ );
32
+ };
33
+
34
+ export { DefaultRepoBranchPicker };
35
+ //# sourceMappingURL=DefaultRepoBranchPicker.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultRepoBranchPicker.esm.js","sources":["../../../../src/components/fields/RepoBranchPicker/DefaultRepoBranchPicker.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 FormControl from '@material-ui/core/FormControl';\nimport React from 'react';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\n\nimport { BaseRepoBranchPickerProps } from './types';\n\n/**\n * The underlying component that is rendered in the form for the `DefaultRepoBranchPicker`\n * field extension.\n *\n * @public\n *\n */\nexport const DefaultRepoBranchPicker = ({\n onChange,\n state,\n rawErrors,\n required,\n}: BaseRepoBranchPickerProps) => {\n const { branch } = state;\n\n return (\n <FormControl\n margin=\"normal\"\n required={required}\n error={rawErrors?.length > 0 && !branch}\n >\n <InputLabel htmlFor=\"branchInput\">Branch</InputLabel>\n <Input\n id=\"branchInput\"\n onChange={e => onChange({ branch: e.target.value })}\n value={branch}\n />\n <FormHelperText>The branch of the repository</FormHelperText>\n </FormControl>\n );\n};\n"],"names":[],"mappings":";;;;;;AA+BO,MAAM,0BAA0B,CAAC;AAAA,EACtC,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AACF,CAAiC,KAAA;AAC/B,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AAEnB,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,QAAA;AAAA,MACP,QAAA;AAAA,MACA,KAAO,EAAA,SAAA,EAAW,MAAS,GAAA,CAAA,IAAK,CAAC,MAAA;AAAA,KAAA;AAAA,oBAEhC,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,aAAA,EAAA,EAAc,QAAM,CAAA;AAAA,oBACxC,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAG,EAAA,aAAA;AAAA,QACH,QAAA,EAAU,OAAK,QAAS,CAAA,EAAE,QAAQ,CAAE,CAAA,MAAA,CAAO,OAAO,CAAA;AAAA,QAClD,KAAO,EAAA,MAAA;AAAA,OAAA;AAAA,KACT;AAAA,oBACA,KAAA,CAAA,aAAA,CAAC,sBAAe,8BAA4B,CAAA;AAAA,GAC9C,CAAA;AAEJ;;;;"}
@@ -0,0 +1,103 @@
1
+ import { useApi } from '@backstage/core-plugin-api';
2
+ import { scmIntegrationsApiRef, scmAuthApiRef } from '@backstage/integration-react';
3
+ import React, { useState, useEffect, useCallback } from 'react';
4
+ import useDebounce from 'react-use/esm/useDebounce';
5
+ import { useTemplateSecrets } from '@backstage/plugin-scaffolder-react';
6
+ import Box from '@material-ui/core/Box';
7
+ import Divider from '@material-ui/core/Divider';
8
+ import Typography from '@material-ui/core/Typography';
9
+ import { BitbucketRepoBranchPicker } from './BitbucketRepoBranchPicker.esm.js';
10
+ import { DefaultRepoBranchPicker } from './DefaultRepoBranchPicker.esm.js';
11
+
12
+ const RepoBranchPicker = (props) => {
13
+ const {
14
+ uiSchema,
15
+ onChange,
16
+ rawErrors,
17
+ formData,
18
+ schema,
19
+ formContext,
20
+ required
21
+ } = props;
22
+ const {
23
+ formData: { repoUrl }
24
+ } = formContext;
25
+ const [state, setState] = useState({
26
+ branch: formData || ""
27
+ });
28
+ const { host, branch } = state;
29
+ const integrationApi = useApi(scmIntegrationsApiRef);
30
+ const scmAuthApi = useApi(scmAuthApiRef);
31
+ const { secrets, setSecrets } = useTemplateSecrets();
32
+ useDebounce(
33
+ async () => {
34
+ const { requestUserCredentials } = uiSchema?.["ui:options"] ?? {};
35
+ if (!requestUserCredentials || !host) {
36
+ return;
37
+ }
38
+ if (secrets[requestUserCredentials.secretsKey]) {
39
+ return;
40
+ }
41
+ const { token } = await scmAuthApi.getCredentials({
42
+ url: `https://${host}`,
43
+ additionalScope: {
44
+ repoWrite: true,
45
+ customScopes: requestUserCredentials.additionalScopes
46
+ }
47
+ });
48
+ setSecrets({ [requestUserCredentials.secretsKey]: token });
49
+ },
50
+ 500,
51
+ [host, uiSchema]
52
+ );
53
+ useEffect(() => {
54
+ if (repoUrl) {
55
+ const url = new URL(`https://${repoUrl}`);
56
+ setState((prevState) => ({
57
+ ...prevState,
58
+ host: url.host,
59
+ workspace: url.searchParams.get("workspace") || "",
60
+ repository: url.searchParams.get("repo") || ""
61
+ }));
62
+ }
63
+ }, [repoUrl]);
64
+ useEffect(() => {
65
+ onChange(branch);
66
+ }, [branch, onChange]);
67
+ const updateLocalState = useCallback(
68
+ (newState) => {
69
+ setState((prevState) => ({ ...prevState, ...newState }));
70
+ },
71
+ [setState]
72
+ );
73
+ const hostType = (host && integrationApi.byHost(host)?.type) ?? null;
74
+ const renderRepoBranchPicker = () => {
75
+ switch (hostType) {
76
+ case "bitbucket":
77
+ return /* @__PURE__ */ React.createElement(
78
+ BitbucketRepoBranchPicker,
79
+ {
80
+ onChange: updateLocalState,
81
+ state,
82
+ rawErrors,
83
+ accessToken: uiSchema?.["ui:options"]?.requestUserCredentials?.secretsKey && secrets[uiSchema["ui:options"].requestUserCredentials.secretsKey],
84
+ required
85
+ }
86
+ );
87
+ default:
88
+ return /* @__PURE__ */ React.createElement(
89
+ DefaultRepoBranchPicker,
90
+ {
91
+ onChange: updateLocalState,
92
+ state,
93
+ rawErrors,
94
+ required
95
+ }
96
+ );
97
+ }
98
+ };
99
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, schema.title && /* @__PURE__ */ React.createElement(Box, { my: 1 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5" }, schema.title), /* @__PURE__ */ React.createElement(Divider, null)), schema.description && /* @__PURE__ */ React.createElement(Typography, { variant: "body1" }, schema.description), renderRepoBranchPicker());
100
+ };
101
+
102
+ export { RepoBranchPicker };
103
+ //# sourceMappingURL=RepoBranchPicker.esm.js.map
@@ -0,0 +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 React, { 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';\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 {\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 }));\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 renderRepoBranchPicker = () => {\n switch (hostType) {\n case 'bitbucket':\n return (\n <BitbucketRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n accessToken={\n uiSchema?.['ui:options']?.requestUserCredentials?.secretsKey &&\n secrets[uiSchema['ui:options'].requestUserCredentials.secretsKey]\n }\n required={required}\n />\n );\n default:\n return (\n <DefaultRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n required={required}\n />\n );\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 {schema.description && (\n <Typography variant=\"body1\">{schema.description}</Typography>\n )}\n {renderRepoBranchPicker()}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { makeFieldSchemaFromZod } from '../utils.esm.js';
3
+
4
+ const RepoBranchPickerFieldSchema = makeFieldSchemaFromZod(
5
+ z.string(),
6
+ z.object({
7
+ requestUserCredentials: z.object({
8
+ secretsKey: z.string().describe(
9
+ "Key used within the template secrets context to store the credential"
10
+ ),
11
+ additionalScopes: z.object({
12
+ gitea: z.array(z.string()).optional().describe("Additional Gitea scopes to request"),
13
+ gerrit: z.array(z.string()).optional().describe("Additional Gerrit scopes to request"),
14
+ github: z.array(z.string()).optional().describe("Additional GitHub scopes to request"),
15
+ gitlab: z.array(z.string()).optional().describe("Additional GitLab scopes to request"),
16
+ bitbucket: z.array(z.string()).optional().describe("Additional BitBucket scopes to request"),
17
+ azure: z.array(z.string()).optional().describe("Additional Azure scopes to request")
18
+ }).optional().describe("Additional permission scopes to request")
19
+ }).optional().describe(
20
+ "If defined will request user credentials to auth against the given SCM platform"
21
+ )
22
+ })
23
+ );
24
+ const RepoBranchPickerSchema = RepoBranchPickerFieldSchema.schema;
25
+
26
+ export { RepoBranchPickerFieldSchema, RepoBranchPickerSchema };
27
+ //# sourceMappingURL=schema.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.esm.js","sources":["../../../../src/components/fields/RepoBranchPicker/schema.ts"],"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 */\nimport { z } from 'zod';\nimport { makeFieldSchemaFromZod } from '../utils';\n\n/**\n * @public\n */\nexport const RepoBranchPickerFieldSchema = makeFieldSchemaFromZod(\n z.string(),\n z.object({\n requestUserCredentials: z\n .object({\n secretsKey: z\n .string()\n .describe(\n 'Key used within the template secrets context to store the credential',\n ),\n additionalScopes: z\n .object({\n gitea: z\n .array(z.string())\n .optional()\n .describe('Additional Gitea scopes to request'),\n gerrit: z\n .array(z.string())\n .optional()\n .describe('Additional Gerrit scopes to request'),\n github: z\n .array(z.string())\n .optional()\n .describe('Additional GitHub scopes to request'),\n gitlab: z\n .array(z.string())\n .optional()\n .describe('Additional GitLab scopes to request'),\n bitbucket: z\n .array(z.string())\n .optional()\n .describe('Additional BitBucket scopes to request'),\n azure: z\n .array(z.string())\n .optional()\n .describe('Additional Azure scopes to request'),\n })\n .optional()\n .describe('Additional permission scopes to request'),\n })\n .optional()\n .describe(\n 'If defined will request user credentials to auth against the given SCM platform',\n ),\n }),\n);\n\n/**\n * The input props that can be specified under `ui:options` for the\n * `RepoBranchPicker` field extension.\n *\n * @public\n */\nexport type RepoBranchPickerUiOptions =\n typeof RepoBranchPickerFieldSchema.uiOptionsType;\n\nexport type RepoBranchPickerProps = typeof RepoBranchPickerFieldSchema.type;\n\n// This has been duplicated from /plugins/scaffolder/src/components/fields/RepoUrlPicker/schema.ts\n// NOTE: There is a bug with this failing validation in the custom field explorer due\n// to https://github.com/rjsf-team/react-jsonschema-form/issues/675 even if\n// requestUserCredentials is not defined\nexport const RepoBranchPickerSchema = RepoBranchPickerFieldSchema.schema;\n"],"names":[],"mappings":";;;AAqBO,MAAM,2BAA8B,GAAA,sBAAA;AAAA,EACzC,EAAE,MAAO,EAAA;AAAA,EACT,EAAE,MAAO,CAAA;AAAA,IACP,sBAAA,EAAwB,EACrB,MAAO,CAAA;AAAA,MACN,UAAA,EAAY,CACT,CAAA,MAAA,EACA,CAAA,QAAA;AAAA,QACC,sEAAA;AAAA,OACF;AAAA,MACF,gBAAA,EAAkB,EACf,MAAO,CAAA;AAAA,QACN,KAAA,EAAO,CACJ,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oCAAoC,CAAA;AAAA,QAChD,MAAA,EAAQ,CACL,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,qCAAqC,CAAA;AAAA,QACjD,MAAA,EAAQ,CACL,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,qCAAqC,CAAA;AAAA,QACjD,MAAA,EAAQ,CACL,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,qCAAqC,CAAA;AAAA,QACjD,SAAA,EAAW,CACR,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,wCAAwC,CAAA;AAAA,QACpD,KAAA,EAAO,CACJ,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oCAAoC,CAAA;AAAA,OACjD,CAAA,CACA,QAAS,EAAA,CACT,SAAS,yCAAyC,CAAA;AAAA,KACtD,CACA,CAAA,QAAA,EACA,CAAA,QAAA;AAAA,MACC,iFAAA;AAAA,KACF;AAAA,GACH,CAAA;AACH,EAAA;AAiBO,MAAM,yBAAyB,2BAA4B,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.esm.js","sources":["../../../../src/components/fields/RepoUrlPicker/schema.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 { z } from 'zod';\nimport { makeFieldSchemaFromZod } from '../utils';\n\n/**\n * @public\n */\nexport const RepoUrlPickerFieldSchema = makeFieldSchemaFromZod(\n z.string(),\n z.object({\n allowedHosts: z\n .array(z.string())\n .optional()\n .describe('List of allowed SCM platform hosts'),\n allowedOrganizations: z\n .array(z.string())\n .optional()\n .describe('List of allowed organizations in the given SCM platform'),\n allowedOwners: z\n .array(z.string())\n .optional()\n .describe('List of allowed owners in the given SCM platform'),\n allowedProjects: z\n .array(z.string())\n .optional()\n .describe('List of allowed projects in the given SCM platform'),\n allowedRepos: z\n .array(z.string())\n .optional()\n .describe('List of allowed repos in the given SCM platform'),\n requestUserCredentials: z\n .object({\n secretsKey: z\n .string()\n .describe(\n 'Key used within the template secrets context to store the credential',\n ),\n additionalScopes: z\n .object({\n gitea: z\n .array(z.string())\n .optional()\n .describe('Additional Gitea scopes to request'),\n gerrit: z\n .array(z.string())\n .optional()\n .describe('Additional Gerrit scopes to request'),\n github: z\n .array(z.string())\n .optional()\n .describe('Additional GitHub scopes to request'),\n gitlab: z\n .array(z.string())\n .optional()\n .describe('Additional GitLab scopes to request'),\n bitbucket: z\n .array(z.string())\n .optional()\n .describe('Additional BitBucket scopes to request'),\n azure: z\n .array(z.string())\n .optional()\n .describe('Additional Azure scopes to request'),\n })\n .optional()\n .describe('Additional permission scopes to request'),\n })\n .optional()\n .describe(\n 'If defined will request user credentials to auth against the given SCM platform',\n ),\n }),\n);\n\n/**\n * The input props that can be specified under `ui:options` for the\n * `RepoUrlPicker` field extension.\n *\n * @public\n */\nexport type RepoUrlPickerUiOptions =\n typeof RepoUrlPickerFieldSchema.uiOptionsType;\n\nexport type RepoUrlPickerProps = typeof RepoUrlPickerFieldSchema.type;\n\n// NOTE: There is a bug with this failing validation in the custom field explorer due\n// to https://github.com/rjsf-team/react-jsonschema-form/issues/675 even if\n// requestUserCredentials is not defined\nexport const RepoUrlPickerSchema = RepoUrlPickerFieldSchema.schema;\n"],"names":[],"mappings":";;;AAqBO,MAAM,wBAA2B,GAAA,sBAAA;AAAA,EACtC,EAAE,MAAO,EAAA;AAAA,EACT,EAAE,MAAO,CAAA;AAAA,IACP,YAAA,EAAc,CACX,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oCAAoC,CAAA;AAAA,IAChD,oBAAA,EAAsB,CACnB,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,yDAAyD,CAAA;AAAA,IACrE,aAAA,EAAe,CACZ,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,kDAAkD,CAAA;AAAA,IAC9D,eAAA,EAAiB,CACd,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oDAAoD,CAAA;AAAA,IAChE,YAAA,EAAc,CACX,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,iDAAiD,CAAA;AAAA,IAC7D,sBAAA,EAAwB,EACrB,MAAO,CAAA;AAAA,MACN,UAAA,EAAY,CACT,CAAA,MAAA,EACA,CAAA,QAAA;AAAA,QACC,sEAAA;AAAA,OACF;AAAA,MACF,gBAAA,EAAkB,EACf,MAAO,CAAA;AAAA,QACN,KAAA,EAAO,CACJ,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oCAAoC,CAAA;AAAA,QAChD,MAAA,EAAQ,CACL,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,qCAAqC,CAAA;AAAA,QACjD,MAAA,EAAQ,CACL,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,qCAAqC,CAAA;AAAA,QACjD,MAAA,EAAQ,CACL,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,qCAAqC,CAAA;AAAA,QACjD,SAAA,EAAW,CACR,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,wCAAwC,CAAA;AAAA,QACpD,KAAA,EAAO,CACJ,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oCAAoC,CAAA;AAAA,OACjD,CAAA,CACA,QAAS,EAAA,CACT,SAAS,yCAAyC,CAAA;AAAA,KACtD,CACA,CAAA,QAAA,EACA,CAAA,QAAA;AAAA,MACC,iFAAA;AAAA,KACF;AAAA,GACH,CAAA;AACH,EAAA;AAgBO,MAAM,sBAAsB,wBAAyB,CAAA;;;;"}
1
+ {"version":3,"file":"schema.esm.js","sources":["../../../../src/components/fields/RepoUrlPicker/schema.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 { z } from 'zod';\nimport { makeFieldSchemaFromZod } from '../utils';\n\n/**\n * @public\n */\nexport const RepoUrlPickerFieldSchema = makeFieldSchemaFromZod(\n z.string(),\n z.object({\n allowedHosts: z\n .array(z.string())\n .optional()\n .describe('List of allowed SCM platform hosts'),\n allowedOrganizations: z\n .array(z.string())\n .optional()\n .describe('List of allowed organizations in the given SCM platform'),\n allowedOwners: z\n .array(z.string())\n .optional()\n .describe('List of allowed owners in the given SCM platform'),\n allowedProjects: z\n .array(z.string())\n .optional()\n .describe('List of allowed projects in the given SCM platform'),\n allowedRepos: z\n .array(z.string())\n .optional()\n .describe('List of allowed repos in the given SCM platform'),\n requestUserCredentials: z\n .object({\n secretsKey: z\n .string()\n .describe(\n 'Key used within the template secrets context to store the credential',\n ),\n additionalScopes: z\n .object({\n gitea: z\n .array(z.string())\n .optional()\n .describe('Additional Gitea scopes to request'),\n gerrit: z\n .array(z.string())\n .optional()\n .describe('Additional Gerrit scopes to request'),\n github: z\n .array(z.string())\n .optional()\n .describe('Additional GitHub scopes to request'),\n gitlab: z\n .array(z.string())\n .optional()\n .describe('Additional GitLab scopes to request'),\n bitbucket: z\n .array(z.string())\n .optional()\n .describe('Additional BitBucket scopes to request'),\n azure: z\n .array(z.string())\n .optional()\n .describe('Additional Azure scopes to request'),\n })\n .optional()\n .describe('Additional permission scopes to request'),\n })\n .optional()\n .describe(\n 'If defined will request user credentials to auth against the given SCM platform',\n ),\n }),\n);\n\n/**\n * The input props that can be specified under `ui:options` for the\n * `RepoUrlPicker` field extension.\n *\n * @public\n */\nexport type RepoUrlPickerUiOptions =\n typeof RepoUrlPickerFieldSchema.uiOptionsType;\n\nexport type RepoUrlPickerProps = typeof RepoUrlPickerFieldSchema.type;\n\n// This has been duplicated to /plugins/scaffolder/src/components/fields/RepoBranchPicker/schema.ts\n// NOTE: There is a bug with this failing validation in the custom field explorer due\n// to https://github.com/rjsf-team/react-jsonschema-form/issues/675 even if\n// requestUserCredentials is not defined\nexport const RepoUrlPickerSchema = RepoUrlPickerFieldSchema.schema;\n"],"names":[],"mappings":";;;AAqBO,MAAM,wBAA2B,GAAA,sBAAA;AAAA,EACtC,EAAE,MAAO,EAAA;AAAA,EACT,EAAE,MAAO,CAAA;AAAA,IACP,YAAA,EAAc,CACX,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oCAAoC,CAAA;AAAA,IAChD,oBAAA,EAAsB,CACnB,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,yDAAyD,CAAA;AAAA,IACrE,aAAA,EAAe,CACZ,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,kDAAkD,CAAA;AAAA,IAC9D,eAAA,EAAiB,CACd,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oDAAoD,CAAA;AAAA,IAChE,YAAA,EAAc,CACX,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,iDAAiD,CAAA;AAAA,IAC7D,sBAAA,EAAwB,EACrB,MAAO,CAAA;AAAA,MACN,UAAA,EAAY,CACT,CAAA,MAAA,EACA,CAAA,QAAA;AAAA,QACC,sEAAA;AAAA,OACF;AAAA,MACF,gBAAA,EAAkB,EACf,MAAO,CAAA;AAAA,QACN,KAAA,EAAO,CACJ,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oCAAoC,CAAA;AAAA,QAChD,MAAA,EAAQ,CACL,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,qCAAqC,CAAA;AAAA,QACjD,MAAA,EAAQ,CACL,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,qCAAqC,CAAA;AAAA,QACjD,MAAA,EAAQ,CACL,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,qCAAqC,CAAA;AAAA,QACjD,SAAA,EAAW,CACR,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,wCAAwC,CAAA;AAAA,QACpD,KAAA,EAAO,CACJ,CAAA,KAAA,CAAM,CAAE,CAAA,MAAA,EAAQ,CAChB,CAAA,QAAA,EACA,CAAA,QAAA,CAAS,oCAAoC,CAAA;AAAA,OACjD,CAAA,CACA,QAAS,EAAA,CACT,SAAS,yCAAyC,CAAA;AAAA,KACtD,CACA,CAAA,QAAA,EACA,CAAA,QAAA;AAAA,MACC,iFAAA;AAAA,KACF;AAAA,GACH,CAAA;AACH,EAAA;AAiBO,MAAM,sBAAsB,wBAAyB,CAAA;;;;"}
@@ -9,6 +9,8 @@ import { OwnedEntityPicker } from '../components/fields/OwnedEntityPicker/OwnedE
9
9
  import { MyGroupsPicker } from '../components/fields/MyGroupsPicker/MyGroupsPicker.esm.js';
10
10
  import { SecretInput } from '../components/fields/SecretInput/SecretInput.esm.js';
11
11
  import { MultiEntityPicker, validateMultiEntityPickerValidation } from '../components/fields/MultiEntityPicker/MultiEntityPicker.esm.js';
12
+ import { RepoBranchPicker } from '../components/fields/RepoBranchPicker/RepoBranchPicker.esm.js';
13
+ import { RepoBranchPickerSchema } from '../components/fields/RepoBranchPicker/schema.esm.js';
12
14
  import { EntityPickerSchema } from '../components/fields/EntityPicker/schema.esm.js';
13
15
  import { EntityNamePickerSchema } from '../components/fields/EntityNamePicker/schema.esm.js';
14
16
  import { EntityTagsPickerSchema } from '../components/fields/EntityTagsPicker/schema.esm.js';
@@ -65,6 +67,11 @@ const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [
65
67
  name: "MultiEntityPicker",
66
68
  schema: MultiEntityPickerSchema,
67
69
  validation: validateMultiEntityPickerValidation
70
+ },
71
+ {
72
+ component: RepoBranchPicker,
73
+ name: "RepoBranchPicker",
74
+ schema: RepoBranchPickerSchema
68
75
  }
69
76
  ];
70
77
 
@@ -1 +1 @@
1
- {"version":3,"file":"default.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 {\n EntityPicker,\n EntityPickerSchema,\n} from '../components/fields/EntityPicker/EntityPicker';\nimport {\n EntityNamePicker,\n EntityNamePickerSchema,\n} from '../components/fields/EntityNamePicker/EntityNamePicker';\nimport { entityNamePickerValidation } from '../components/fields/EntityNamePicker/validation';\nimport {\n EntityTagsPicker,\n EntityTagsPickerSchema,\n} from '../components/fields/EntityTagsPicker/EntityTagsPicker';\nimport {\n OwnerPicker,\n OwnerPickerSchema,\n} from '../components/fields/OwnerPicker/OwnerPicker';\nimport {\n RepoUrlPicker,\n RepoUrlPickerSchema,\n} from '../components/fields/RepoUrlPicker/RepoUrlPicker';\nimport { repoPickerValidation } from '../components/fields/RepoUrlPicker/validation';\nimport {\n OwnedEntityPicker,\n OwnedEntityPickerSchema,\n} from '../components/fields/OwnedEntityPicker/OwnedEntityPicker';\nimport {\n MyGroupsPicker,\n MyGroupsPickerSchema,\n} from '../components/fields/MyGroupsPicker/MyGroupsPicker';\n\nimport { SecretInput } from '../components/fields/SecretInput';\nimport {\n MultiEntityPicker,\n MultiEntityPickerSchema,\n validateMultiEntityPickerValidation,\n} from '../components/fields/MultiEntityPicker/MultiEntityPicker';\n\nexport const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [\n {\n component: EntityPicker,\n name: 'EntityPicker',\n schema: EntityPickerSchema,\n },\n {\n component: EntityNamePicker,\n name: 'EntityNamePicker',\n validation: entityNamePickerValidation,\n schema: EntityNamePickerSchema,\n },\n {\n component: EntityTagsPicker,\n name: 'EntityTagsPicker',\n schema: EntityTagsPickerSchema,\n },\n {\n component: RepoUrlPicker,\n name: 'RepoUrlPicker',\n validation: repoPickerValidation,\n schema: RepoUrlPickerSchema,\n },\n {\n component: OwnerPicker,\n name: 'OwnerPicker',\n schema: OwnerPickerSchema,\n },\n {\n component: OwnedEntityPicker,\n name: 'OwnedEntityPicker',\n schema: OwnedEntityPickerSchema,\n },\n {\n component: MyGroupsPicker,\n name: 'MyGroupsPicker',\n schema: MyGroupsPickerSchema,\n },\n {\n component: SecretInput,\n name: 'Secret',\n },\n {\n component: MultiEntityPicker,\n name: 'MultiEntityPicker',\n schema: MultiEntityPickerSchema,\n validation: validateMultiEntityPickerValidation,\n },\n];\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAqDO,MAAM,mCAAsC,GAAA;AAAA,EACjD;AAAA,IACE,SAAW,EAAA,YAAA;AAAA,IACX,IAAM,EAAA,cAAA;AAAA,IACN,MAAQ,EAAA,kBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,gBAAA;AAAA,IACX,IAAM,EAAA,kBAAA;AAAA,IACN,UAAY,EAAA,0BAAA;AAAA,IACZ,MAAQ,EAAA,sBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,gBAAA;AAAA,IACX,IAAM,EAAA,kBAAA;AAAA,IACN,MAAQ,EAAA,sBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,aAAA;AAAA,IACX,IAAM,EAAA,eAAA;AAAA,IACN,UAAY,EAAA,oBAAA;AAAA,IACZ,MAAQ,EAAA,mBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,WAAA;AAAA,IACX,IAAM,EAAA,aAAA;AAAA,IACN,MAAQ,EAAA,iBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,iBAAA;AAAA,IACX,IAAM,EAAA,mBAAA;AAAA,IACN,MAAQ,EAAA,uBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,cAAA;AAAA,IACX,IAAM,EAAA,gBAAA;AAAA,IACN,MAAQ,EAAA,oBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,WAAA;AAAA,IACX,IAAM,EAAA,QAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,SAAW,EAAA,iBAAA;AAAA,IACX,IAAM,EAAA,mBAAA;AAAA,IACN,MAAQ,EAAA,uBAAA;AAAA,IACR,UAAY,EAAA,mCAAA;AAAA,GACd;AACF;;;;"}
1
+ {"version":3,"file":"default.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 {\n EntityPicker,\n EntityPickerSchema,\n} from '../components/fields/EntityPicker/EntityPicker';\nimport {\n EntityNamePicker,\n EntityNamePickerSchema,\n} from '../components/fields/EntityNamePicker/EntityNamePicker';\nimport { entityNamePickerValidation } from '../components/fields/EntityNamePicker/validation';\nimport {\n EntityTagsPicker,\n EntityTagsPickerSchema,\n} from '../components/fields/EntityTagsPicker/EntityTagsPicker';\nimport {\n OwnerPicker,\n OwnerPickerSchema,\n} from '../components/fields/OwnerPicker/OwnerPicker';\nimport {\n RepoUrlPicker,\n RepoUrlPickerSchema,\n} from '../components/fields/RepoUrlPicker/RepoUrlPicker';\nimport { repoPickerValidation } from '../components/fields/RepoUrlPicker/validation';\nimport {\n OwnedEntityPicker,\n OwnedEntityPickerSchema,\n} from '../components/fields/OwnedEntityPicker/OwnedEntityPicker';\nimport {\n MyGroupsPicker,\n MyGroupsPickerSchema,\n} from '../components/fields/MyGroupsPicker/MyGroupsPicker';\n\nimport { SecretInput } from '../components/fields/SecretInput';\nimport {\n MultiEntityPicker,\n MultiEntityPickerSchema,\n validateMultiEntityPickerValidation,\n} from '../components/fields/MultiEntityPicker/MultiEntityPicker';\nimport { RepoBranchPicker } from '../components/fields/RepoBranchPicker/RepoBranchPicker';\nimport { RepoBranchPickerSchema } from '../components/fields/RepoBranchPicker/schema';\n\nexport const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [\n {\n component: EntityPicker,\n name: 'EntityPicker',\n schema: EntityPickerSchema,\n },\n {\n component: EntityNamePicker,\n name: 'EntityNamePicker',\n validation: entityNamePickerValidation,\n schema: EntityNamePickerSchema,\n },\n {\n component: EntityTagsPicker,\n name: 'EntityTagsPicker',\n schema: EntityTagsPickerSchema,\n },\n {\n component: RepoUrlPicker,\n name: 'RepoUrlPicker',\n validation: repoPickerValidation,\n schema: RepoUrlPickerSchema,\n },\n {\n component: OwnerPicker,\n name: 'OwnerPicker',\n schema: OwnerPickerSchema,\n },\n {\n component: OwnedEntityPicker,\n name: 'OwnedEntityPicker',\n schema: OwnedEntityPickerSchema,\n },\n {\n component: MyGroupsPicker,\n name: 'MyGroupsPicker',\n schema: MyGroupsPickerSchema,\n },\n {\n component: SecretInput,\n name: 'Secret',\n },\n {\n component: MultiEntityPicker,\n name: 'MultiEntityPicker',\n schema: MultiEntityPickerSchema,\n validation: validateMultiEntityPickerValidation,\n },\n {\n component: RepoBranchPicker,\n name: 'RepoBranchPicker',\n schema: RepoBranchPickerSchema,\n },\n];\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuDO,MAAM,mCAAsC,GAAA;AAAA,EACjD;AAAA,IACE,SAAW,EAAA,YAAA;AAAA,IACX,IAAM,EAAA,cAAA;AAAA,IACN,MAAQ,EAAA,kBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,gBAAA;AAAA,IACX,IAAM,EAAA,kBAAA;AAAA,IACN,UAAY,EAAA,0BAAA;AAAA,IACZ,MAAQ,EAAA,sBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,gBAAA;AAAA,IACX,IAAM,EAAA,kBAAA;AAAA,IACN,MAAQ,EAAA,sBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,aAAA;AAAA,IACX,IAAM,EAAA,eAAA;AAAA,IACN,UAAY,EAAA,oBAAA;AAAA,IACZ,MAAQ,EAAA,mBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,WAAA;AAAA,IACX,IAAM,EAAA,aAAA;AAAA,IACN,MAAQ,EAAA,iBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,iBAAA;AAAA,IACX,IAAM,EAAA,mBAAA;AAAA,IACN,MAAQ,EAAA,uBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,cAAA;AAAA,IACX,IAAM,EAAA,gBAAA;AAAA,IACN,MAAQ,EAAA,oBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,WAAA;AAAA,IACX,IAAM,EAAA,QAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,SAAW,EAAA,iBAAA;AAAA,IACX,IAAM,EAAA,mBAAA;AAAA,IACN,MAAQ,EAAA,uBAAA;AAAA,IACR,UAAY,EAAA,mCAAA;AAAA,GACd;AAAA,EACA;AAAA,IACE,SAAW,EAAA,gBAAA;AAAA,IACX,IAAM,EAAA,kBAAA;AAAA,IACN,MAAQ,EAAA,sBAAA;AAAA,GACV;AACF;;;;"}
package/dist/index.d.ts CHANGED
@@ -230,6 +230,24 @@ declare const EntityTagsPickerFieldExtension: _backstage_plugin_scaffolder_react
230
230
  showCounts?: boolean | undefined;
231
231
  kinds?: string[] | undefined;
232
232
  }>;
233
+ /**
234
+ * A field extension to select a branch from a repository.
235
+ *
236
+ * @public
237
+ */
238
+ declare const RepoBranchPickerFieldExtension: _backstage_plugin_scaffolder_react.FieldExtensionComponent<string, {
239
+ requestUserCredentials?: {
240
+ secretsKey: string;
241
+ additionalScopes?: {
242
+ azure?: string[] | undefined;
243
+ github?: string[] | undefined;
244
+ gitlab?: string[] | undefined;
245
+ bitbucket?: string[] | undefined;
246
+ gerrit?: string[] | undefined;
247
+ gitea?: string[] | undefined;
248
+ } | undefined;
249
+ } | undefined;
250
+ }>;
233
251
 
234
252
  /**
235
253
  * @public
@@ -567,4 +585,4 @@ type TaskPageProps = {
567
585
  loadingText?: string;
568
586
  };
569
587
 
570
- export { type CustomFieldExtensionSchema, type CustomFieldValidator, EntityNamePickerFieldExtension, EntityPickerFieldExtension, EntityPickerFieldSchema, type EntityPickerUiOptions, EntityTagsPickerFieldExtension, EntityTagsPickerFieldSchema, type EntityTagsPickerUiOptions, type FieldExtensionComponent, type FieldExtensionComponentProps, type FieldExtensionOptions, type FieldSchema, type LayoutOptions, type LayoutTemplate, type ListActionsResponse, type LogEvent, MultiEntityPickerFieldExtension, MyGroupsPickerFieldExtension, MyGroupsPickerFieldSchema, MyGroupsPickerSchema, type MyGroupsPickerUiOptions, OwnedEntityPickerFieldExtension, OwnedEntityPickerFieldSchema, type OwnedEntityPickerUiOptions, OwnerPickerFieldExtension, OwnerPickerFieldSchema, type OwnerPickerUiOptions, RepoUrlPickerFieldExtension, RepoUrlPickerFieldSchema, type RepoUrlPickerUiOptions, type RouterProps, type ScaffolderApi, ScaffolderClient, type ScaffolderDryRunOptions, type ScaffolderDryRunResponse, ScaffolderFieldExtensions, type ScaffolderGetIntegrationsListOptions, type ScaffolderGetIntegrationsListResponse, ScaffolderLayouts, type ScaffolderOutputlink, ScaffolderPage, type ScaffolderScaffoldOptions, type ScaffolderScaffoldResponse, type ScaffolderStreamLogsOptions, type ScaffolderTask, type ScaffolderTaskOutput, type ScaffolderTaskStatus, type ScaffolderUseTemplateSecrets, OngoingTask as TaskPage, type TaskPageProps, type TemplateParameterSchema, TemplateTypePicker, createScaffolderFieldExtension, createScaffolderLayout, makeFieldSchemaFromZod, repoPickerValidation, rootRouteRef, scaffolderApiRef, scaffolderPlugin, useTemplateSecrets };
588
+ export { type CustomFieldExtensionSchema, type CustomFieldValidator, EntityNamePickerFieldExtension, EntityPickerFieldExtension, EntityPickerFieldSchema, type EntityPickerUiOptions, EntityTagsPickerFieldExtension, EntityTagsPickerFieldSchema, type EntityTagsPickerUiOptions, type FieldExtensionComponent, type FieldExtensionComponentProps, type FieldExtensionOptions, type FieldSchema, type LayoutOptions, type LayoutTemplate, type ListActionsResponse, type LogEvent, MultiEntityPickerFieldExtension, MyGroupsPickerFieldExtension, MyGroupsPickerFieldSchema, MyGroupsPickerSchema, type MyGroupsPickerUiOptions, OwnedEntityPickerFieldExtension, OwnedEntityPickerFieldSchema, type OwnedEntityPickerUiOptions, OwnerPickerFieldExtension, OwnerPickerFieldSchema, type OwnerPickerUiOptions, RepoBranchPickerFieldExtension, RepoUrlPickerFieldExtension, RepoUrlPickerFieldSchema, type RepoUrlPickerUiOptions, type RouterProps, type ScaffolderApi, ScaffolderClient, type ScaffolderDryRunOptions, type ScaffolderDryRunResponse, ScaffolderFieldExtensions, type ScaffolderGetIntegrationsListOptions, type ScaffolderGetIntegrationsListResponse, ScaffolderLayouts, type ScaffolderOutputlink, ScaffolderPage, type ScaffolderScaffoldOptions, type ScaffolderScaffoldResponse, type ScaffolderStreamLogsOptions, type ScaffolderTask, type ScaffolderTaskOutput, type ScaffolderTaskStatus, type ScaffolderUseTemplateSecrets, OngoingTask as TaskPage, type TaskPageProps, type TemplateParameterSchema, TemplateTypePicker, createScaffolderFieldExtension, createScaffolderLayout, makeFieldSchemaFromZod, repoPickerValidation, rootRouteRef, scaffolderApiRef, scaffolderPlugin, useTemplateSecrets };
package/dist/index.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export { ScaffolderClient } from './api.esm.js';
2
- export { EntityNamePickerFieldExtension, EntityPickerFieldExtension, EntityTagsPickerFieldExtension, MultiEntityPickerFieldExtension, MyGroupsPickerFieldExtension, OwnedEntityPickerFieldExtension, OwnerPickerFieldExtension, RepoUrlPickerFieldExtension, ScaffolderPage, scaffolderPlugin } from './plugin.esm.js';
2
+ export { EntityNamePickerFieldExtension, EntityPickerFieldExtension, EntityTagsPickerFieldExtension, MultiEntityPickerFieldExtension, MyGroupsPickerFieldExtension, OwnedEntityPickerFieldExtension, OwnerPickerFieldExtension, RepoBranchPickerFieldExtension, RepoUrlPickerFieldExtension, ScaffolderPage, scaffolderPlugin } from './plugin.esm.js';
3
3
  export { EntityPickerFieldSchema } from './components/fields/EntityPicker/schema.esm.js';
4
4
  export { OwnerPickerFieldSchema } from './components/fields/OwnerPicker/schema.esm.js';
5
5
  export { RepoUrlPickerFieldSchema } from './components/fields/RepoUrlPicker/schema.esm.js';
@@ -14,6 +14,8 @@ import { OwnedEntityPicker } from './components/fields/OwnedEntityPicker/OwnedEn
14
14
  import { EntityTagsPicker } from './components/fields/EntityTagsPicker/EntityTagsPicker.esm.js';
15
15
  import { rootRouteRef, selectedTemplateRouteRef, scaffolderTaskRouteRef, actionsRouteRef, scaffolderListTaskRouteRef, editRouteRef, registerComponentRouteRef, viewTechDocRouteRef } from './routes.esm.js';
16
16
  import { MyGroupsPicker } from './components/fields/MyGroupsPicker/MyGroupsPicker.esm.js';
17
+ import { RepoBranchPicker } from './components/fields/RepoBranchPicker/RepoBranchPicker.esm.js';
18
+ import { RepoBranchPickerSchema } from './components/fields/RepoBranchPicker/schema.esm.js';
17
19
  import { EntityPickerSchema } from './components/fields/EntityPicker/schema.esm.js';
18
20
  import { EntityNamePickerSchema } from './components/fields/EntityNamePicker/schema.esm.js';
19
21
  import { MultiEntityPickerSchema } from './components/fields/MultiEntityPicker/schema.esm.js';
@@ -120,6 +122,13 @@ const EntityTagsPickerFieldExtension = scaffolderPlugin.provide(
120
122
  schema: EntityTagsPickerSchema
121
123
  })
122
124
  );
125
+ const RepoBranchPickerFieldExtension = scaffolderPlugin.provide(
126
+ createScaffolderFieldExtension({
127
+ component: RepoBranchPicker,
128
+ name: "RepoBranchPicker",
129
+ schema: RepoBranchPickerSchema
130
+ })
131
+ );
123
132
 
124
- export { EntityNamePickerFieldExtension, EntityPickerFieldExtension, EntityTagsPickerFieldExtension, MultiEntityPickerFieldExtension, MyGroupsPickerFieldExtension, OwnedEntityPickerFieldExtension, OwnerPickerFieldExtension, RepoUrlPickerFieldExtension, ScaffolderPage, scaffolderPlugin };
133
+ export { EntityNamePickerFieldExtension, EntityPickerFieldExtension, EntityTagsPickerFieldExtension, MultiEntityPickerFieldExtension, MyGroupsPickerFieldExtension, OwnedEntityPickerFieldExtension, OwnerPickerFieldExtension, RepoBranchPickerFieldExtension, RepoUrlPickerFieldExtension, ScaffolderPage, scaffolderPlugin };
125
134
  //# sourceMappingURL=plugin.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.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 */\n\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport {\n createScaffolderFieldExtension,\n scaffolderApiRef,\n} from '@backstage/plugin-scaffolder-react';\nimport { ScaffolderClient } from './api';\nimport {\n EntityPicker,\n EntityPickerSchema,\n} from './components/fields/EntityPicker/EntityPicker';\nimport { entityNamePickerValidation } from './components/fields/EntityNamePicker';\nimport {\n EntityNamePicker,\n EntityNamePickerSchema,\n} from './components/fields/EntityNamePicker/EntityNamePicker';\nimport {\n OwnerPicker,\n OwnerPickerSchema,\n} from './components/fields/OwnerPicker/OwnerPicker';\nimport {\n MultiEntityPicker,\n MultiEntityPickerSchema,\n validateMultiEntityPickerValidation,\n} from './components/fields/MultiEntityPicker/MultiEntityPicker';\nimport { repoPickerValidation } from './components/fields/RepoUrlPicker';\nimport {\n RepoUrlPicker,\n RepoUrlPickerSchema,\n} from './components/fields/RepoUrlPicker/RepoUrlPicker';\nimport {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n OwnedEntityPicker,\n OwnedEntityPickerSchema,\n} from './components/fields/OwnedEntityPicker/OwnedEntityPicker';\nimport {\n EntityTagsPicker,\n EntityTagsPickerSchema,\n} from './components/fields/EntityTagsPicker/EntityTagsPicker';\nimport {\n registerComponentRouteRef,\n rootRouteRef,\n viewTechDocRouteRef,\n selectedTemplateRouteRef,\n scaffolderTaskRouteRef,\n scaffolderListTaskRouteRef,\n actionsRouteRef,\n editRouteRef,\n} from './routes';\nimport {\n MyGroupsPicker,\n MyGroupsPickerSchema,\n} from './components/fields/MyGroupsPicker/MyGroupsPicker';\n\n/**\n * The main plugin export for the scaffolder.\n * @public\n */\nexport const scaffolderPlugin = createPlugin({\n id: 'scaffolder',\n apis: [\n createApiFactory({\n api: scaffolderApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n scmIntegrationsApi: scmIntegrationsApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) =>\n new ScaffolderClient({\n discoveryApi,\n scmIntegrationsApi,\n fetchApi,\n identityApi,\n }),\n }),\n ],\n routes: {\n root: rootRouteRef,\n selectedTemplate: selectedTemplateRouteRef,\n ongoingTask: scaffolderTaskRouteRef,\n actions: actionsRouteRef,\n listTasks: scaffolderListTaskRouteRef,\n edit: editRouteRef,\n },\n externalRoutes: {\n registerComponent: registerComponentRouteRef,\n viewTechDoc: viewTechDocRouteRef,\n },\n});\n\n/**\n * A field extension for selecting an Entity that exists in the Catalog.\n *\n * @public\n */\nexport const EntityPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: EntityPicker,\n name: 'EntityPicker',\n schema: EntityPickerSchema,\n }),\n);\n\n/**\n * The field extension for selecting a name for a new Entity in the Catalog.\n *\n * @public\n */\nexport const EntityNamePickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: EntityNamePicker,\n name: 'EntityNamePicker',\n validation: entityNamePickerValidation,\n schema: EntityNamePickerSchema,\n }),\n);\n\n/**\n * A field extension for selecting multiple entities that exists in the Catalog.\n *\n * @public\n */\nexport const MultiEntityPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: MultiEntityPicker,\n name: 'MultiEntityPicker',\n schema: MultiEntityPickerSchema,\n validation: validateMultiEntityPickerValidation,\n }),\n);\n\n/**\n * The field extension which provides the ability to select a RepositoryUrl.\n * Currently, this is an encoded URL that looks something like the following `github.com?repo=myRepoName&owner=backstage`.\n *\n * @public\n */\nexport const RepoUrlPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: RepoUrlPicker,\n name: 'RepoUrlPicker',\n validation: repoPickerValidation,\n schema: RepoUrlPickerSchema,\n }),\n);\n\n/**\n * A field extension for picking users and groups out of the Catalog.\n *\n * @public\n */\nexport const OwnerPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: OwnerPicker,\n name: 'OwnerPicker',\n schema: OwnerPickerSchema,\n }),\n);\n\n/**\n * A field extension for picking groups a user belongs to out of the catalog.\n *\n * @public\n */\nexport const MyGroupsPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: MyGroupsPicker,\n name: 'MyGroupsPicker',\n schema: MyGroupsPickerSchema,\n }),\n);\n\n/**\n * The Router and main entrypoint to the Scaffolder plugin.\n *\n * @public\n */\nexport const ScaffolderPage = scaffolderPlugin.provide(\n createRoutableExtension({\n name: 'ScaffolderPage',\n component: () => import('./components/Router').then(m => m.Router),\n mountPoint: rootRouteRef,\n }),\n);\n\n/**\n * A field extension to show all the Entities that are owned by the current logged-in User for use in templates.\n *\n * @public\n */\nexport const OwnedEntityPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: OwnedEntityPicker,\n name: 'OwnedEntityPicker',\n schema: OwnedEntityPickerSchema,\n }),\n);\n\n/**\n * EntityTagsPickerFieldExtension\n * @public\n */\nexport const EntityTagsPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: EntityTagsPicker,\n name: 'EntityTagsPicker',\n schema: EntityTagsPickerSchema,\n }),\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAgFO,MAAM,mBAAmB,YAAa,CAAA;AAAA,EAC3C,EAAI,EAAA,YAAA;AAAA,EACJ,IAAM,EAAA;AAAA,IACJ,gBAAiB,CAAA;AAAA,MACf,GAAK,EAAA,gBAAA;AAAA,MACL,IAAM,EAAA;AAAA,QACJ,YAAc,EAAA,eAAA;AAAA,QACd,kBAAoB,EAAA,qBAAA;AAAA,QACpB,QAAU,EAAA,WAAA;AAAA,QACV,WAAa,EAAA,cAAA;AAAA,OACf;AAAA,MACA,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,oBAAoB,QAAU,EAAA,WAAA,EACtD,KAAA,IAAI,gBAAiB,CAAA;AAAA,QACnB,YAAA;AAAA,QACA,kBAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,OACD,CAAA;AAAA,KACJ,CAAA;AAAA,GACH;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,YAAA;AAAA,IACN,gBAAkB,EAAA,wBAAA;AAAA,IAClB,WAAa,EAAA,sBAAA;AAAA,IACb,OAAS,EAAA,eAAA;AAAA,IACT,SAAW,EAAA,0BAAA;AAAA,IACX,IAAM,EAAA,YAAA;AAAA,GACR;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,iBAAmB,EAAA,yBAAA;AAAA,IACnB,WAAa,EAAA,mBAAA;AAAA,GACf;AACF,CAAC,EAAA;AAOM,MAAM,6BAA6B,gBAAiB,CAAA,OAAA;AAAA,EACzD,8BAA+B,CAAA;AAAA,IAC7B,SAAW,EAAA,YAAA;AAAA,IACX,IAAM,EAAA,cAAA;AAAA,IACN,MAAQ,EAAA,kBAAA;AAAA,GACT,CAAA;AACH,EAAA;AAOO,MAAM,iCAAiC,gBAAiB,CAAA,OAAA;AAAA,EAC7D,8BAA+B,CAAA;AAAA,IAC7B,SAAW,EAAA,gBAAA;AAAA,IACX,IAAM,EAAA,kBAAA;AAAA,IACN,UAAY,EAAA,0BAAA;AAAA,IACZ,MAAQ,EAAA,sBAAA;AAAA,GACT,CAAA;AACH,EAAA;AAOO,MAAM,kCAAkC,gBAAiB,CAAA,OAAA;AAAA,EAC9D,8BAA+B,CAAA;AAAA,IAC7B,SAAW,EAAA,iBAAA;AAAA,IACX,IAAM,EAAA,mBAAA;AAAA,IACN,MAAQ,EAAA,uBAAA;AAAA,IACR,UAAY,EAAA,mCAAA;AAAA,GACb,CAAA;AACH,EAAA;AAQO,MAAM,8BAA8B,gBAAiB,CAAA,OAAA;AAAA,EAC1D,8BAA+B,CAAA;AAAA,IAC7B,SAAW,EAAA,aAAA;AAAA,IACX,IAAM,EAAA,eAAA;AAAA,IACN,UAAY,EAAA,oBAAA;AAAA,IACZ,MAAQ,EAAA,mBAAA;AAAA,GACT,CAAA;AACH,EAAA;AAOO,MAAM,4BAA4B,gBAAiB,CAAA,OAAA;AAAA,EACxD,8BAA+B,CAAA;AAAA,IAC7B,SAAW,EAAA,WAAA;AAAA,IACX,IAAM,EAAA,aAAA;AAAA,IACN,MAAQ,EAAA,iBAAA;AAAA,GACT,CAAA;AACH,EAAA;AAOO,MAAM,+BAA+B,gBAAiB,CAAA,OAAA;AAAA,EAC3D,8BAA+B,CAAA;AAAA,IAC7B,SAAW,EAAA,cAAA;AAAA,IACX,IAAM,EAAA,gBAAA;AAAA,IACN,MAAQ,EAAA,oBAAA;AAAA,GACT,CAAA;AACH,EAAA;AAOO,MAAM,iBAAiB,gBAAiB,CAAA,OAAA;AAAA,EAC7C,uBAAwB,CAAA;AAAA,IACtB,IAAM,EAAA,gBAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAO,kCAAqB,EAAE,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,MAAM,CAAA;AAAA,IACjE,UAAY,EAAA,YAAA;AAAA,GACb,CAAA;AACH,EAAA;AAOO,MAAM,kCAAkC,gBAAiB,CAAA,OAAA;AAAA,EAC9D,8BAA+B,CAAA;AAAA,IAC7B,SAAW,EAAA,iBAAA;AAAA,IACX,IAAM,EAAA,mBAAA;AAAA,IACN,MAAQ,EAAA,uBAAA;AAAA,GACT,CAAA;AACH,EAAA;AAMO,MAAM,iCAAiC,gBAAiB,CAAA,OAAA;AAAA,EAC7D,8BAA+B,CAAA;AAAA,IAC7B,SAAW,EAAA,gBAAA;AAAA,IACX,IAAM,EAAA,kBAAA;AAAA,IACN,MAAQ,EAAA,sBAAA;AAAA,GACT,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.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 */\n\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport {\n createScaffolderFieldExtension,\n scaffolderApiRef,\n} from '@backstage/plugin-scaffolder-react';\nimport { ScaffolderClient } from './api';\nimport {\n EntityPicker,\n EntityPickerSchema,\n} from './components/fields/EntityPicker/EntityPicker';\nimport { entityNamePickerValidation } from './components/fields/EntityNamePicker';\nimport {\n EntityNamePicker,\n EntityNamePickerSchema,\n} from './components/fields/EntityNamePicker/EntityNamePicker';\nimport {\n OwnerPicker,\n OwnerPickerSchema,\n} from './components/fields/OwnerPicker/OwnerPicker';\nimport {\n MultiEntityPicker,\n MultiEntityPickerSchema,\n validateMultiEntityPickerValidation,\n} from './components/fields/MultiEntityPicker/MultiEntityPicker';\nimport { repoPickerValidation } from './components/fields/RepoUrlPicker';\nimport {\n RepoUrlPicker,\n RepoUrlPickerSchema,\n} from './components/fields/RepoUrlPicker/RepoUrlPicker';\nimport {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n OwnedEntityPicker,\n OwnedEntityPickerSchema,\n} from './components/fields/OwnedEntityPicker/OwnedEntityPicker';\nimport {\n EntityTagsPicker,\n EntityTagsPickerSchema,\n} from './components/fields/EntityTagsPicker/EntityTagsPicker';\nimport {\n registerComponentRouteRef,\n rootRouteRef,\n viewTechDocRouteRef,\n selectedTemplateRouteRef,\n scaffolderTaskRouteRef,\n scaffolderListTaskRouteRef,\n actionsRouteRef,\n editRouteRef,\n} from './routes';\nimport {\n MyGroupsPicker,\n MyGroupsPickerSchema,\n} from './components/fields/MyGroupsPicker/MyGroupsPicker';\nimport { RepoBranchPicker } from './components/fields/RepoBranchPicker/RepoBranchPicker';\nimport { RepoBranchPickerSchema } from './components/fields/RepoBranchPicker/schema';\n\n/**\n * The main plugin export for the scaffolder.\n * @public\n */\nexport const scaffolderPlugin = createPlugin({\n id: 'scaffolder',\n apis: [\n createApiFactory({\n api: scaffolderApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n scmIntegrationsApi: scmIntegrationsApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) =>\n new ScaffolderClient({\n discoveryApi,\n scmIntegrationsApi,\n fetchApi,\n identityApi,\n }),\n }),\n ],\n routes: {\n root: rootRouteRef,\n selectedTemplate: selectedTemplateRouteRef,\n ongoingTask: scaffolderTaskRouteRef,\n actions: actionsRouteRef,\n listTasks: scaffolderListTaskRouteRef,\n edit: editRouteRef,\n },\n externalRoutes: {\n registerComponent: registerComponentRouteRef,\n viewTechDoc: viewTechDocRouteRef,\n },\n});\n\n/**\n * A field extension for selecting an Entity that exists in the Catalog.\n *\n * @public\n */\nexport const EntityPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: EntityPicker,\n name: 'EntityPicker',\n schema: EntityPickerSchema,\n }),\n);\n\n/**\n * The field extension for selecting a name for a new Entity in the Catalog.\n *\n * @public\n */\nexport const EntityNamePickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: EntityNamePicker,\n name: 'EntityNamePicker',\n validation: entityNamePickerValidation,\n schema: EntityNamePickerSchema,\n }),\n);\n\n/**\n * A field extension for selecting multiple entities that exists in the Catalog.\n *\n * @public\n */\nexport const MultiEntityPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: MultiEntityPicker,\n name: 'MultiEntityPicker',\n schema: MultiEntityPickerSchema,\n validation: validateMultiEntityPickerValidation,\n }),\n);\n\n/**\n * The field extension which provides the ability to select a RepositoryUrl.\n * Currently, this is an encoded URL that looks something like the following `github.com?repo=myRepoName&owner=backstage`.\n *\n * @public\n */\nexport const RepoUrlPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: RepoUrlPicker,\n name: 'RepoUrlPicker',\n validation: repoPickerValidation,\n schema: RepoUrlPickerSchema,\n }),\n);\n\n/**\n * A field extension for picking users and groups out of the Catalog.\n *\n * @public\n */\nexport const OwnerPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: OwnerPicker,\n name: 'OwnerPicker',\n schema: OwnerPickerSchema,\n }),\n);\n\n/**\n * A field extension for picking groups a user belongs to out of the catalog.\n *\n * @public\n */\nexport const MyGroupsPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: MyGroupsPicker,\n name: 'MyGroupsPicker',\n schema: MyGroupsPickerSchema,\n }),\n);\n\n/**\n * The Router and main entrypoint to the Scaffolder plugin.\n *\n * @public\n */\nexport const ScaffolderPage = scaffolderPlugin.provide(\n createRoutableExtension({\n name: 'ScaffolderPage',\n component: () => import('./components/Router').then(m => m.Router),\n mountPoint: rootRouteRef,\n }),\n);\n\n/**\n * A field extension to show all the Entities that are owned by the current logged-in User for use in templates.\n *\n * @public\n */\nexport const OwnedEntityPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: OwnedEntityPicker,\n name: 'OwnedEntityPicker',\n schema: OwnedEntityPickerSchema,\n }),\n);\n\n/**\n * EntityTagsPickerFieldExtension\n * @public\n */\nexport const EntityTagsPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: EntityTagsPicker,\n name: 'EntityTagsPicker',\n schema: EntityTagsPickerSchema,\n }),\n);\n\n/**\n * A field extension to select a branch from a repository.\n *\n * @public\n */\nexport const RepoBranchPickerFieldExtension = scaffolderPlugin.provide(\n createScaffolderFieldExtension({\n component: RepoBranchPicker,\n name: 'RepoBranchPicker',\n schema: RepoBranchPickerSchema,\n }),\n);\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder",
3
- "version": "1.23.1-next.0",
3
+ "version": "1.24.0-next.2",
4
4
  "description": "The Backstage plugin that helps you create new things",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -59,18 +59,18 @@
59
59
  "dependencies": {
60
60
  "@backstage/catalog-client": "^1.6.5",
61
61
  "@backstage/catalog-model": "^1.5.0",
62
- "@backstage/core-compat-api": "^0.2.8-next.0",
62
+ "@backstage/core-compat-api": "^0.2.8-next.2",
63
63
  "@backstage/core-components": "^0.14.10-next.0",
64
64
  "@backstage/core-plugin-api": "^1.9.3",
65
65
  "@backstage/errors": "^1.2.4",
66
- "@backstage/frontend-plugin-api": "^0.6.8-next.0",
66
+ "@backstage/frontend-plugin-api": "^0.7.0-next.2",
67
67
  "@backstage/integration": "^1.14.0-next.0",
68
68
  "@backstage/integration-react": "^1.1.30-next.0",
69
- "@backstage/plugin-catalog-common": "^1.0.25",
70
- "@backstage/plugin-catalog-react": "^1.12.3-next.0",
71
- "@backstage/plugin-permission-react": "^0.4.24",
72
- "@backstage/plugin-scaffolder-common": "^1.5.4",
73
- "@backstage/plugin-scaffolder-react": "^1.11.0-next.0",
69
+ "@backstage/plugin-catalog-common": "^1.0.26-next.1",
70
+ "@backstage/plugin-catalog-react": "^1.12.3-next.2",
71
+ "@backstage/plugin-permission-react": "^0.4.25-next.1",
72
+ "@backstage/plugin-scaffolder-common": "^1.5.5-next.1",
73
+ "@backstage/plugin-scaffolder-react": "^1.11.0-next.2",
74
74
  "@backstage/types": "^1.1.1",
75
75
  "@codemirror/language": "^6.0.0",
76
76
  "@codemirror/legacy-modes": "^6.1.0",
@@ -104,12 +104,12 @@
104
104
  "zod-to-json-schema": "^3.20.4"
105
105
  },
106
106
  "devDependencies": {
107
- "@backstage/cli": "^0.27.0-next.0",
108
- "@backstage/core-app-api": "^1.14.1-next.0",
109
- "@backstage/dev-utils": "^1.0.36-next.0",
110
- "@backstage/plugin-catalog": "^1.21.2-next.0",
111
- "@backstage/plugin-permission-common": "^0.8.0",
112
- "@backstage/test-utils": "^1.5.9-next.0",
107
+ "@backstage/cli": "^0.27.0-next.3",
108
+ "@backstage/core-app-api": "^1.14.2-next.0",
109
+ "@backstage/dev-utils": "^1.0.37-next.2",
110
+ "@backstage/plugin-catalog": "^1.22.0-next.2",
111
+ "@backstage/plugin-permission-common": "^0.8.1-next.1",
112
+ "@backstage/test-utils": "^1.5.10-next.2",
113
113
  "@testing-library/dom": "^10.0.0",
114
114
  "@testing-library/jest-dom": "^6.0.0",
115
115
  "@testing-library/react": "^15.0.0",