diff --git a/.changeset/forty-singers-look.md b/.changeset/forty-singers-look.md
new file mode 100644
index 0000000000..1b3919e214
--- /dev/null
+++ b/.changeset/forty-singers-look.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-app-api': patch
+---
+
+Fix a bug in `FlatRoutes` that prevented outlets from working with the root route, as well as matching root routes too broadly.
diff --git a/.changeset/spotty-pandas-deny.md b/.changeset/spotty-pandas-deny.md
new file mode 100644
index 0000000000..c3da6afe2b
--- /dev/null
+++ b/.changeset/spotty-pandas-deny.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder-backend': patch
+---
+
+- Move out the `cookiecutter` templating to its own module that is depended on by the `scaffolder-backend` plugin. No breaking change yet, but we will drop first class support for `cookiecutter` in the future and it will become an opt-in feature.
diff --git a/.changeset/wicked-emus-deny.md b/.changeset/wicked-emus-deny.md
new file mode 100644
index 0000000000..ff6788dbb2
--- /dev/null
+++ b/.changeset/wicked-emus-deny.md
@@ -0,0 +1,8 @@
+---
+'@backstage/create-app': patch
+'@backstage/plugin-scaffolder-backend': patch
+---
+
+Moved sample software templates to the [backstage/software-templates](https://github.com/backstage/software-templates) repository. If you previously referenced the sample templates straight from `scaffolder-backend` plugin in the main [backstage/backstage](https://github.com/backstage/backstage) repository in your `app-config.yaml`, these references will need to be updated.
+
+See https://github.com/backstage/software-templates
diff --git a/docs/features/software-catalog/index.md b/docs/features/software-catalog/index.md
index a502c2aee5..f5296f38e1 100644
--- a/docs/features/software-catalog/index.md
+++ b/docs/features/software-catalog/index.md
@@ -8,12 +8,11 @@ description: The Backstage Software Catalog
## What is a Software Catalog?
-The Backstage Software Catalog — actually, a software catalog, since it includes
-more than just services — is a centralized system that keeps track of ownership
-and metadata for all the software in your ecosystem (services, websites,
-libraries, data pipelines, etc). The catalog is built around the concept of
-[metadata YAML files](descriptor-format.md) stored together with the code, which
-are then harvested and visualized in Backstage.
+The Backstage Software Catalog is a centralized system that keeps track of
+ownership and metadata for all the software in your ecosystem (services,
+websites, libraries, data pipelines, etc). The catalog is built around the
+concept of [metadata YAML files](descriptor-format.md) stored together with the
+code, which are then harvested and visualized in Backstage.

diff --git a/packages/app/package.json b/packages/app/package.json
index 69c4c9475b..9d18064717 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -43,10 +43,10 @@
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
"@octokit/rest": "^18.5.3",
- "@roadiehq/backstage-plugin-buildkite": "^1.0.5",
- "@roadiehq/backstage-plugin-github-insights": "^1.1.16",
- "@roadiehq/backstage-plugin-github-pull-requests": "^1.0.9",
- "@roadiehq/backstage-plugin-travis-ci": "^1.0.5",
+ "@roadiehq/backstage-plugin-buildkite": "^1.0.6",
+ "@roadiehq/backstage-plugin-github-insights": "^1.1.20",
+ "@roadiehq/backstage-plugin-github-pull-requests": "^1.0.10",
+ "@roadiehq/backstage-plugin-travis-ci": "^1.0.8",
"history": "^5.0.0",
"prop-types": "^15.7.2",
"react": "^16.12.0",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 81d7316dfb..725149a823 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -53,8 +53,8 @@
"@types/start-server-webpack-plugin": "^2.2.0",
"@types/webpack-env": "^1.15.2",
"@types/webpack-node-externals": "^2.5.0",
- "@typescript-eslint/eslint-plugin": "^v4.27.0",
- "@typescript-eslint/parser": "^v4.27.0",
+ "@typescript-eslint/eslint-plugin": "^v4.28.3",
+ "@typescript-eslint/parser": "^v4.28.3",
"@yarnpkg/lockfile": "^1.1.0",
"babel-plugin-dynamic-import-node": "^2.3.3",
"bfj": "^7.0.2",
diff --git a/packages/core-app-api/src/routing/FlatRoutes.test.tsx b/packages/core-app-api/src/routing/FlatRoutes.test.tsx
index a73534a272..d5201a6f57 100644
--- a/packages/core-app-api/src/routing/FlatRoutes.test.tsx
+++ b/packages/core-app-api/src/routing/FlatRoutes.test.tsx
@@ -100,7 +100,6 @@ describe('FlatRoutes', () => {
return <>Outlet: {useOutlet()}>;
};
- // The '/*' suffixes here are intentional and will be ignored by FlatRoutes
const routes = (
<>
}>
@@ -112,11 +111,15 @@ describe('FlatRoutes', () => {
}>
b
+ }>
+ c
+
>
);
const renderRoute = makeRouteRenderer({routes});
expect(renderRoute('/a').getByText('Outlet: a')).toBeInTheDocument();
expect(renderRoute('/a/b').getByText('Outlet: a-b')).toBeInTheDocument();
expect(renderRoute('/b').getByText('Outlet: b')).toBeInTheDocument();
+ expect(renderRoute('/').getByText('Outlet: c')).toBeInTheDocument();
});
});
diff --git a/packages/core-app-api/src/routing/FlatRoutes.tsx b/packages/core-app-api/src/routing/FlatRoutes.tsx
index 6ba82203fd..315ec91cdb 100644
--- a/packages/core-app-api/src/routing/FlatRoutes.tsx
+++ b/packages/core-app-api/src/routing/FlatRoutes.tsx
@@ -49,8 +49,10 @@ export const FlatRoutes = (props: FlatRoutesProps): JSX.Element | null => {
element: child,
children: child.props.children
? [
+ // These are the children of each route, which we all add in under a catch-all
+ // subroute in order to make them available to `useOutlet`
{
- path: '/*',
+ path: path === '/' ? '/' : '/*', // The root path must require an exact match
element: child.props.children,
},
]
diff --git a/packages/create-app/templates/default-app/app-config.yaml.hbs b/packages/create-app/templates/default-app/app-config.yaml.hbs
index 9a04f38c14..81e4c3a739 100644
--- a/packages/create-app/templates/default-app/app-config.yaml.hbs
+++ b/packages/create-app/templates/default-app/app-config.yaml.hbs
@@ -100,11 +100,11 @@ catalog:
# Backstage example templates
- type: url
- target: https://github.com/backstage/backstage/blob/master/plugins/scaffolder-backend/sample-templates/react-ssr-template/template.yaml
+ target: https://github.com/backstage/software-templates/blob/master/scaffolder-templates/react-ssr-template/template.yaml
rules:
- allow: [Template]
- type: url
- target: https://github.com/backstage/backstage/blob/master/plugins/scaffolder-backend/sample-templates/springboot-grpc-template/template.yaml
+ target: https://github.com/backstage/software-templates/blob/master/scaffolder-templates/springboot-grpc-template/template.yaml
rules:
- allow: [Template]
- type: url
@@ -112,6 +112,6 @@ catalog:
rules:
- allow: [Template]
- type: url
- target: https://github.com/backstage/backstage/blob/master/plugins/scaffolder-backend/sample-templates/docs-template/template.yaml
+ target: https://github.com/backstage/software-templates/blob/master/scaffolder-templates/docs-template/template.yaml
rules:
- allow: [Template]
diff --git a/plugins/scaffolder-backend-module-cookiecutter/.eslintrc.js b/plugins/scaffolder-backend-module-cookiecutter/.eslintrc.js
new file mode 100644
index 0000000000..16a033dbc6
--- /dev/null
+++ b/plugins/scaffolder-backend-module-cookiecutter/.eslintrc.js
@@ -0,0 +1,3 @@
+module.exports = {
+ extends: [require.resolve('@backstage/cli/config/eslint.backend')],
+};
diff --git a/plugins/scaffolder-backend-module-cookiecutter/README.md b/plugins/scaffolder-backend-module-cookiecutter/README.md
new file mode 100644
index 0000000000..77ae93c5f3
--- /dev/null
+++ b/plugins/scaffolder-backend-module-cookiecutter/README.md
@@ -0,0 +1,162 @@
+# scaffolder-backend-module-cookiecutter
+
+Welcome to the `fetch:cookiecutter` action for the `scaffolder-backend`.
+
+## Getting started
+
+You need to configure the action in your backend:
+
+## From your Backstage root directory
+
+```
+cd packages/backend
+yarn add @backstage/plugin-scaffolder-backend-module-cookiecutter
+```
+
+Configure the action:
+(you can check the [docs](https://backstage.io/docs/features/software-templates/writing-custom-actions#registering-custom-actions) to see all options):
+
+```typescript
+// packages/backend/src/plugins/scaffolder.ts
+
+const actions = [
+ createFetchCookiecutterAction({
+ integrations,
+ reader,
+ containerRunner,
+ }),
+ ...createBuiltInActions({
+ ...
+ })
+];
+
+return await createRouter({
+ containerRunner,
+ logger,
+ config,
+ database,
+ catalogClient,
+ reader,
+ actions,
+});
+```
+
+After that you can use the action in your template:
+
+```yaml
+apiVersion: backstage.io/v1beta2
+kind: Template
+metadata:
+ name: cookiecutter-demo
+ title: Cookiecutter Test
+ description: Cookiecutter example
+spec:
+ owner: backstage/techdocs-core
+ type: service
+
+ parameters:
+ - title: Fill in some steps
+ required:
+ - name
+ - owner
+ properties:
+ name:
+ title: Name
+ type: string
+ description: Unique name of the component
+ ui:autofocus: true
+ ui:options:
+ rows: 5
+ owner:
+ title: Owner
+ type: string
+ description: Owner of the component
+ ui:field: OwnerPicker
+ ui:options:
+ allowedKinds:
+ - Group
+ system:
+ title: System
+ type: string
+ description: System of the component
+ ui:field: EntityPicker
+ ui:options:
+ allowedKinds:
+ - System
+ defaultKind: System
+
+ - title: Choose a location
+ required:
+ - repoUrl
+ - dryRun
+ properties:
+ repoUrl:
+ title: Repository Location
+ type: string
+ ui:field: RepoUrlPicker
+ ui:options:
+ allowedHosts:
+ - github.com
+ dryRun:
+ title: Only perform a dry run, don't publish anything
+ type: boolean
+ default: false
+
+ steps:
+ - id: fetch-base
+ name: Fetch Base
+ action: fetch:cookiecutter
+ input:
+ url: ./template
+ values:
+ name: '{{ parameters.name }}'
+ owner: '{{ parameters.owner }}'
+ system: '{{ parameters.system }}'
+ destination: '{{ parseRepoUrl parameters.repoUrl }}'
+
+ - id: publish
+ if: '{{ not parameters.dryRun }}'
+ name: Publish
+ action: publish:github
+ input:
+ allowedHosts: ['github.com']
+ description: 'This is {{ parameters.name }}'
+ repoUrl: '{{ parameters.repoUrl }}'
+
+ - id: register
+ if: '{{ not parameters.dryRun }}'
+ name: Register
+ action: catalog:register
+ input:
+ repoContentsUrl: '{{ steps.publish.output.repoContentsUrl }}'
+ catalogInfoPath: '/catalog-info.yaml'
+
+ - name: Results
+ if: '{{ parameters.dryRun }}'
+ action: debug:log
+ input:
+ listWorkspace: true
+
+ output:
+ links:
+ - title: Repository
+ url: '{{ steps.publish.output.remoteUrl }}'
+ - title: Open in catalog
+ icon: 'catalog'
+ entityRef: '{{ steps.register.output.entityRef }}'
+```
+
+You can also visit the `/create/actions` route in your Backstage application to find out more about the parameters this action accepts when it's installed to configure how you like.
+
+### Environment setup
+
+The environment needs to have either `cookiecutter` installed and be available in the `PATH` or access to a `docker` daemon so it can spin up a docker container with `cookiecutter` available.
+
+If you are running Backstage from a Docker container and you want to avoid calling a container inside a container, you can set up `cookiecutter` in your own image, this will use the local installation instead.
+
+You can do so by including the following lines in the last step of your Dockerfile:
+
+```dockerfile
+RUN apt-get update && apt-get install -y python3 python3-pip
+RUN pip3 install cookiecutter
+```
diff --git a/plugins/scaffolder-backend-module-cookiecutter/api-report.md b/plugins/scaffolder-backend-module-cookiecutter/api-report.md
new file mode 100644
index 0000000000..8e46667fce
--- /dev/null
+++ b/plugins/scaffolder-backend-module-cookiecutter/api-report.md
@@ -0,0 +1,23 @@
+## API Report File for "@backstage/plugin-scaffolder-backend-module-cookiecutter"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+///
+
+import { ContainerRunner } from '@backstage/backend-common';
+import { ScmIntegrations } from '@backstage/integration';
+import { TemplateAction } from '@backstage/plugin-scaffolder-backend';
+import { UrlReader } from '@backstage/backend-common';
+
+// Warning: (ae-missing-release-tag) "createFetchCookiecutterAction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
+//
+// @public (undocumented)
+export function createFetchCookiecutterAction(options: {
+ reader: UrlReader;
+ integrations: ScmIntegrations;
+ containerRunner: ContainerRunner;
+}): TemplateAction;
+
+// (No @packageDocumentation comment for this package)
+```
diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json
new file mode 100644
index 0000000000..f321d6b45c
--- /dev/null
+++ b/plugins/scaffolder-backend-module-cookiecutter/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter",
+ "version": "0.1.0",
+ "main": "src/index.ts",
+ "types": "src/index.ts",
+ "license": "Apache-2.0",
+ "publishConfig": {
+ "access": "public",
+ "main": "dist/index.cjs.js",
+ "types": "dist/index.d.ts"
+ },
+ "scripts": {
+ "start": "backstage-cli backend:dev",
+ "build": "backstage-cli backend:build",
+ "lint": "backstage-cli lint",
+ "test": "backstage-cli test",
+ "prepack": "backstage-cli prepack",
+ "postpack": "backstage-cli postpack",
+ "clean": "backstage-cli clean"
+ },
+ "dependencies": {
+ "@backstage/backend-common": "^0.8.6",
+ "@backstage/errors": "^0.1.1",
+ "@backstage/integration": "^0.5.7",
+ "@backstage/plugin-scaffolder-backend": "^0.14.0",
+ "@backstage/config": "^0.1.5",
+ "command-exists": "^1.2.9",
+ "fs-extra": "10.0.0",
+ "winston": "^3.2.1",
+ "cross-fetch": "^3.0.6",
+ "yn": "^4.0.0"
+ },
+ "devDependencies": {
+ "@backstage/cli": "^0.7.3",
+ "@types/fs-extra": "^9.0.1",
+ "@types/mock-fs": "^4.13.0",
+ "@types/jest": "^26.0.7",
+ "@types/command-exists": "^1.2.0",
+ "mock-fs": "^4.13.0",
+ "msw": "^0.29.0"
+ },
+ "files": [
+ "dist"
+ ]
+}
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/cookiecutter.test.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts
similarity index 96%
rename from plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/cookiecutter.test.ts
rename to plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts
index 86f953a6a5..bc3fe3eca2 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/cookiecutter.test.ts
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts
@@ -17,9 +17,12 @@ const runCommand = jest.fn();
const commandExists = jest.fn();
const fetchContents = jest.fn();
-jest.mock('./helpers', () => ({ fetchContents }));
+jest.mock('@backstage/plugin-scaffolder-backend', () => ({
+ ...jest.requireActual('@backstage/plugin-scaffolder-backend'),
+ fetchContents,
+ runCommand,
+}));
jest.mock('command-exists', () => commandExists);
-jest.mock('../helpers', () => ({ runCommand }));
import {
getVoidLogger,
@@ -33,7 +36,7 @@ import os from 'os';
import { PassThrough } from 'stream';
import { createFetchCookiecutterAction } from './cookiecutter';
import { join } from 'path';
-import { ActionContext } from '../../types';
+import type { ActionContext } from '@backstage/plugin-scaffolder-backend';
describe('fetch:cookiecutter', () => {
const integrations = ScmIntegrations.fromConfig(
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/cookiecutter.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts
similarity index 94%
rename from plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/cookiecutter.ts
rename to plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts
index 048b2bba64..1f6fbdb7d8 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/cookiecutter.ts
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts
@@ -26,9 +26,11 @@ import commandExists from 'command-exists';
import fs from 'fs-extra';
import path, { resolve as resolvePath } from 'path';
import { Writable } from 'stream';
-import { runCommand } from '../helpers';
-import { createTemplateAction } from '../../createTemplateAction';
-import { fetchContents } from './helpers';
+import {
+ runCommand,
+ createTemplateAction,
+ fetchContents,
+} from '@backstage/plugin-scaffolder-backend';
export class CookiecutterRunner {
private readonly containerRunner: ContainerRunner;
@@ -136,7 +138,7 @@ export function createFetchCookiecutterAction(options: {
}>({
id: 'fetch:cookiecutter',
description:
- "Downloads a template from the given URL into the workspace, and runs cookiecutter on it. This action is deprecated in favor of 'fetch:template'. See https://backstage.io/docs/features/software-templates/builtin-actions#migrating-from-fetch-cookiecutter-to-fetch-template for more details.",
+ 'Downloads a template from the given URL into the workspace, and runs cookiecutter on it.',
schema: {
input: {
type: 'object',
diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/index.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/index.ts
new file mode 100644
index 0000000000..bbe5a16a04
--- /dev/null
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/index.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2021 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export { createFetchCookiecutterAction } from './cookiecutter';
diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/index.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/index.ts
new file mode 100644
index 0000000000..1b47db9e03
--- /dev/null
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/index.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2021 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export * from './fetch';
diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/index.ts b/plugins/scaffolder-backend-module-cookiecutter/src/index.ts
new file mode 100644
index 0000000000..4f06b14a86
--- /dev/null
+++ b/plugins/scaffolder-backend-module-cookiecutter/src/index.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2021 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export * from './actions';
diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md
index f29274cc24..0e7a25534c 100644
--- a/plugins/scaffolder-backend/api-report.md
+++ b/plugins/scaffolder-backend/api-report.md
@@ -8,6 +8,7 @@
import { CatalogApi } from '@backstage/catalog-client';
import { Config } from '@backstage/config';
import { ContainerRunner } from '@backstage/backend-common';
+import { createFetchCookiecutterAction } from '@backstage/plugin-scaffolder-backend-module-cookiecutter';
import { createPullRequest } from 'octokit-plugin-create-pull-request';
import express from 'express';
import { JsonObject } from '@backstage/config';
@@ -78,14 +79,7 @@ export function createCatalogWriteAction(): TemplateAction;
// @public
export function createDebugLogAction(): TemplateAction;
-// Warning: (ae-missing-release-tag) "createFetchCookiecutterAction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export function createFetchCookiecutterAction(options: {
- reader: UrlReader;
- integrations: ScmIntegrations;
- containerRunner: ContainerRunner;
-}): TemplateAction;
+export { createFetchCookiecutterAction };
// Warning: (ae-missing-release-tag) "createFetchPlainAction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json
index 8f10c9fa53..e44a22403c 100644
--- a/plugins/scaffolder-backend/package.json
+++ b/plugins/scaffolder-backend/package.json
@@ -35,6 +35,7 @@
"@backstage/config": "^0.1.5",
"@backstage/errors": "^0.1.1",
"@backstage/integration": "^0.5.8",
+ "@backstage/plugin-scaffolder-backend-module-cookiecutter": "^0.1.0",
"@gitbeaker/core": "^30.2.0",
"@gitbeaker/node": "^30.2.0",
"@octokit/rest": "^18.5.3",
diff --git a/plugins/scaffolder-backend/sample-templates/all-templates.yaml b/plugins/scaffolder-backend/sample-templates/all-templates.yaml
index a5bcd864b1..2d5adb8e3b 100644
--- a/plugins/scaffolder-backend/sample-templates/all-templates.yaml
+++ b/plugins/scaffolder-backend/sample-templates/all-templates.yaml
@@ -5,5 +5,10 @@ metadata:
description: A collection of all Backstage example templates
spec:
targets:
- - ./local-templates.yaml
- ./remote-templates.yaml
+
+# For local development of a template, you can reference your local templates here.
+# Examples:
+#
+# - ./local-template/template.yaml
+# - ../all-templates/local/template.yaml
diff --git a/plugins/scaffolder-backend/sample-templates/local-templates.yaml b/plugins/scaffolder-backend/sample-templates/local-templates.yaml
deleted file mode 100644
index 3b3acbae7e..0000000000
--- a/plugins/scaffolder-backend/sample-templates/local-templates.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-apiVersion: backstage.io/v1alpha1
-kind: Location
-metadata:
- name: example-templates-local
- description: A collection of locally available Backstage example templates
-spec:
- targets:
- - ./docs-template/template.yaml
- - ./react-ssr-template/template.yaml
- - ./create-react-app/template.yaml
- - ./springboot-grpc-template/template.yaml
- - ./v1beta2-demo/template.yaml
- - ./pull-request/template.yaml
diff --git a/plugins/scaffolder-backend/sample-templates/remote-templates.yaml b/plugins/scaffolder-backend/sample-templates/remote-templates.yaml
index 7846a0994e..81787b4297 100644
--- a/plugins/scaffolder-backend/sample-templates/remote-templates.yaml
+++ b/plugins/scaffolder-backend/sample-templates/remote-templates.yaml
@@ -7,3 +7,9 @@ spec:
type: url
targets:
- https://github.com/spotify/cookiecutter-golang/blob/master/template.yaml
+ - https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/template.yaml
+ - https://github.com/backstage/software-templates/blob/main/scaffolder-templates/docs-template/template.yaml
+ - https://github.com/backstage/software-templates/blob/main/scaffolder-templates/pull-request/template.yaml
+ - https://github.com/backstage/software-templates/blob/main/scaffolder-templates/react-ssr-template/template.yaml
+ - https://github.com/backstage/software-templates/blob/main/scaffolder-templates/springboot-grpc-template/template.yaml
+ - https://github.com/backstage/software-templates/blob/main/scaffolder-templates/v1beta2-demo/template.yaml
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts
index 6541625035..ae5a7d0697 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts
@@ -24,11 +24,8 @@ import {
} from './catalog';
import { createDebugLogAction } from './debug';
-import {
- createFetchCookiecutterAction,
- createFetchPlainAction,
- createFetchTemplateAction,
-} from './fetch';
+import { createFetchPlainAction, createFetchTemplateAction } from './fetch';
+import { createFetchCookiecutterAction } from '@backstage/plugin-scaffolder-backend-module-cookiecutter';
import {
createFilesystemDeleteAction,
createFilesystemRenameAction,
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts
index fea32df39c..c9a16c274e 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts
@@ -15,6 +15,5 @@
*/
export { createFetchPlainAction } from './plain';
-export { createFetchCookiecutterAction } from './cookiecutter';
export { createFetchTemplateAction } from './template';
export { fetchContents } from './helpers';
diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts
index 849b056ac9..2a583f369a 100644
--- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts
+++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts
@@ -20,4 +20,6 @@ export * from './debug';
export * from './fetch';
export * from './filesystem';
export * from './publish';
+
+export { createFetchCookiecutterAction } from '@backstage/plugin-scaffolder-backend-module-cookiecutter';
export { runCommand } from './helpers';
diff --git a/yarn.lock b/yarn.lock
index 248347ba8f..6f919c3caa 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2404,20 +2404,6 @@
prop-types "^15.6.2"
scheduler "^0.19.0"
-"@humanwhocodes/config-array@^0.5.0":
- version "0.5.0"
- resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
- integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
- dependencies:
- "@humanwhocodes/object-schema" "^1.2.0"
- debug "^4.1.1"
- minimatch "^3.0.4"
-
-"@humanwhocodes/object-schema@^1.2.0":
- version "1.2.0"
- resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf"
- integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==
-
"@iarna/toml@^2.2.5":
version "2.2.5"
resolved "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c"
@@ -3582,7 +3568,7 @@
call-me-maybe "^1.0.1"
glob-to-regexp "^0.3.0"
-"@mswjs/cookies@^0.1.4", "@mswjs/cookies@^0.1.5":
+"@mswjs/cookies@^0.1.5":
version "0.1.6"
resolved "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.1.6.tgz#176f77034ab6d7373ae5c94bcbac36fee8869249"
integrity sha512-A53XD5TOfwhpqAmwKdPtg1dva5wrng2gH5xMvklzbd9WLTSVU953eCRa8rtrrm6G7Cy60BOGsBRN89YQK0mlKA==
@@ -3601,16 +3587,6 @@
strict-event-emitter "^0.2.0"
xmldom "^0.6.0"
-"@mswjs/interceptors@^0.8.0":
- version "0.8.1"
- resolved "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.8.1.tgz#8ef43a8b7b25c7b9a2bac67b3702167e25e5fc07"
- integrity sha512-OI9FYmtURESZG3QDNz4Yt3osy3HY4T3FjlRw+AG4QS1UDdTSZ0tuPFAkp23nGR9ojmbSSj4gSMjf5+R8Oi/qtQ==
- dependencies:
- "@open-draft/until" "^1.0.3"
- debug "^4.3.0"
- headers-utils "^3.0.2"
- strict-event-emitter "^0.2.0"
-
"@n1ru4l/push-pull-async-iterable-iterator@^2.0.1":
version "2.1.2"
resolved "https://registry.npmjs.org/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-2.1.2.tgz#e486bf86c4c29e78601694a26f31c2dec0c08d9b"
@@ -4020,10 +3996,10 @@
resolved "https://registry.npmjs.org/@rjsf/material-ui/-/material-ui-3.0.0.tgz#69ece2cb549f0e860b5f89898db90edcc95b15ba"
integrity sha512-T2B8QnrDQphbFNxDz7baAa0zTd5TXJmO9soHBPTKKdniRbMEOQ19AJBbZkA3ED2XZa/xrUY/6XjERQLpNACddw==
-"@roadiehq/backstage-plugin-buildkite@^1.0.5":
- version "1.0.5"
- resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-buildkite/-/backstage-plugin-buildkite-1.0.5.tgz#8f321e6190a9fcfe8a38677b3b4d2b4aefad2392"
- integrity sha512-bxKBl3KBgrxHVWo1RB6r03ekkt9dGjHsT0b13sxDxccHZvSME4MPN+J/Z+C/pNMrfD1nEKar5G74j6B5ZvKKVQ==
+"@roadiehq/backstage-plugin-buildkite@^1.0.6":
+ version "1.0.6"
+ resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-buildkite/-/backstage-plugin-buildkite-1.0.6.tgz#f0ca863d206437d8b14e059a0d04fa37553de5f7"
+ integrity sha512-poC1yaDnH2Gteim8U3SdvVT1jkk2MtMv7YlCq0QwK08RTKUc5PFO6MaDaz95cJ+lndSjYWYn/yii8UmuqrJMUw==
dependencies:
"@backstage/catalog-model" "^0.9.0"
"@backstage/core-app-api" "^0.1.3"
@@ -4043,10 +4019,10 @@
react-router-dom "6.0.0-beta.0"
react-use "^17.2.4"
-"@roadiehq/backstage-plugin-github-insights@^1.1.16":
- version "1.1.19"
- resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-github-insights/-/backstage-plugin-github-insights-1.1.19.tgz#bb16ba014b7b9a474347b0178fc9757b8723e346"
- integrity sha512-LM8sSvIXZIciBIPt/7TLCGOmXHmAsAkSzvFJdTeEa54lsHk29FabMgY3cOKuoq04GMq/zJHoGJudFT1g26rX8g==
+"@roadiehq/backstage-plugin-github-insights@^1.1.20":
+ version "1.1.20"
+ resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-github-insights/-/backstage-plugin-github-insights-1.1.20.tgz#5e58124b4da2a60c0d4e6563cd94cdd7702fa341"
+ integrity sha512-bhYe9o1MpIGxSqXa2HK1E8P/uzTL7zJvUleLTp9C5q4CmPCroNTE/Ce8Apzlrb9o9baSQEhQLoPqe0xs+chS7A==
dependencies:
"@backstage/catalog-model" "^0.9.0"
"@backstage/core-app-api" "^0.1.3"
@@ -4066,10 +4042,10 @@
react-router "^6.0.0-beta.0"
react-use "^17.2.4"
-"@roadiehq/backstage-plugin-github-pull-requests@^1.0.9":
- version "1.0.9"
- resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-github-pull-requests/-/backstage-plugin-github-pull-requests-1.0.9.tgz#b34af093aa5cc803a1133b582dea28912ef39e5a"
- integrity sha512-3hCUfFFHGxr8WIicPBXW2rVuriH5rlXpRvU1OSvuvWJiEmqkFj/F8wYrB59ahH5Q8vdQg5jCgih0sbPuPZOojw==
+"@roadiehq/backstage-plugin-github-pull-requests@^1.0.10":
+ version "1.0.10"
+ resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-github-pull-requests/-/backstage-plugin-github-pull-requests-1.0.10.tgz#8c921393d25a4d498c196fcab7d6138c5e2998ba"
+ integrity sha512-8mIhWpxIDZBUrfK72+Pc6g8e/nNo+IA0wbDqWbGO53gw8J2dWSFIU06IRpatN672pzkqrrfzt1qhQujzQslRkg==
dependencies:
"@backstage/catalog-model" "^0.9.0"
"@backstage/core-app-api" "^0.1.3"
@@ -4089,6 +4065,30 @@
react-router "6.0.0-beta.0"
react-use "^17.2.4"
+"@roadiehq/backstage-plugin-travis-ci@^1.0.8":
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-travis-ci/-/backstage-plugin-travis-ci-1.0.8.tgz#33c51ed676191190ba3e2d00e5e9f75b6612b767"
+ integrity sha512-9iLUnjpF4aCyaD1+0B8OBI3k0nSAzWWqnOSM/4NUwoFDuqhKLlMeN+/HM9L38pp6x1wcwks8sMZh8GufFYl2nw==
+ dependencies:
+ "@backstage/catalog-model" "^0.9.0"
+ "@backstage/core-app-api" "^0.1.3"
+ "@backstage/core-components" "^0.1.3"
+ "@backstage/core-plugin-api" "^0.1.3"
+ "@backstage/plugin-catalog-react" "^0.3.0"
+ "@backstage/theme" "^0.2.6"
+ "@material-ui/core" "^4.11.3"
+ "@material-ui/icons" "^4.11.2"
+ "@material-ui/lab" "4.0.0-alpha.57"
+ cross-fetch "^3.1.3"
+ date-fns "^2.18.0"
+ history "^5.0.0"
+ moment "^2.29.1"
+ react "^16.13.1"
+ react-dom "^16.13.1"
+ react-router "6.0.0-beta.0"
+ react-router-dom "6.0.0-beta.0"
+ react-use "^17.2.4"
+
"@rollup/plugin-commonjs@^17.1.0":
version "17.1.0"
resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz#757ec88737dffa8aa913eb392fade2e45aef2a2d"
@@ -5257,21 +5257,6 @@
lodash "^4.17.15"
redent "^3.0.0"
-"@testing-library/jest-dom@^5.12.0":
- version "5.14.1"
- resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.14.1.tgz#8501e16f1e55a55d675fe73eecee32cdaddb9766"
- integrity sha512-dfB7HVIgTNCxH22M1+KU6viG5of2ldoA5ly8Ar8xkezKHKXjRvznCdbMbqjYGgO2xjRbwnR+rR8MLUIqF3kKbQ==
- dependencies:
- "@babel/runtime" "^7.9.2"
- "@types/testing-library__jest-dom" "^5.9.1"
- aria-query "^4.2.2"
- chalk "^3.0.0"
- css "^3.0.0"
- css.escape "^1.5.1"
- dom-accessibility-api "^0.5.6"
- lodash "^4.17.15"
- redent "^3.0.0"
-
"@testing-library/react-hooks@^3.3.0", "@testing-library/react-hooks@^3.4.2":
version "3.4.2"
resolved "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-3.4.2.tgz#8deb94f7684e0d896edd84a4c90e5b79a0810bc2"
@@ -5288,14 +5273,6 @@
"@babel/runtime" "^7.12.5"
"@testing-library/dom" "^7.28.1"
-"@testing-library/react@^11.2.6":
- version "11.2.7"
- resolved "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz#b29e2e95c6765c815786c0bc1d5aed9cb2bf7818"
- integrity sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==
- dependencies:
- "@babel/runtime" "^7.12.5"
- "@testing-library/dom" "^7.28.1"
-
"@testing-library/user-event@^13.1.8":
version "13.1.8"
resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.1.8.tgz#9cbf342b88d837ee188f9f9f4df6d1beaaf179c2"
@@ -6727,7 +6704,7 @@
resolved "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.2.tgz#808c9fa7e4517274ed555fa158f2de4b4f468e71"
integrity sha512-HrCIVMLjE1MOozVoD86622S7aunluLb2PJdPfb3nYiEtohm8mIB/vyv0Fd37AdeMFrTUQXEunw78YloMA3Qilg==
-"@typescript-eslint/eslint-plugin@^4.15.1":
+"@typescript-eslint/eslint-plugin@^v4.28.3":
version "4.28.3"
resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.3.tgz#36cdcd9ca6f9e5cb49b9f61b970b1976708d084b"
integrity sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg==
@@ -6740,33 +6717,7 @@
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/eslint-plugin@^v4.27.0":
- version "4.27.0"
- resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.27.0.tgz#0b7fc974e8bc9b2b5eb98ed51427b0be529b4ad0"
- integrity sha512-DsLqxeUfLVNp3AO7PC3JyaddmEHTtI9qTSAs+RB6ja27QvIM0TA8Cizn1qcS6vOu+WDLFJzkwkgweiyFhssDdQ==
- dependencies:
- "@typescript-eslint/experimental-utils" "4.27.0"
- "@typescript-eslint/scope-manager" "4.27.0"
- debug "^4.3.1"
- functional-red-black-tree "^1.0.1"
- lodash "^4.17.21"
- regexpp "^3.1.0"
- semver "^7.3.5"
- tsutils "^3.21.0"
-
-"@typescript-eslint/experimental-utils@4.27.0", "@typescript-eslint/experimental-utils@^4.0.1":
- version "4.27.0"
- resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.27.0.tgz#78192a616472d199f084eab8f10f962c0757cd1c"
- integrity sha512-n5NlbnmzT2MXlyT+Y0Jf0gsmAQzCnQSWXKy4RGSXVStjDvS5we9IWbh7qRVKdGcxT0WYlgcCYUK/HRg7xFhvjQ==
- dependencies:
- "@types/json-schema" "^7.0.7"
- "@typescript-eslint/scope-manager" "4.27.0"
- "@typescript-eslint/types" "4.27.0"
- "@typescript-eslint/typescript-estree" "4.27.0"
- eslint-scope "^5.1.1"
- eslint-utils "^3.0.0"
-
-"@typescript-eslint/experimental-utils@4.28.3":
+"@typescript-eslint/experimental-utils@4.28.3", "@typescript-eslint/experimental-utils@^4.0.1":
version "4.28.3"
resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.3.tgz#976f8c1191b37105fd06658ed57ddfee4be361ca"
integrity sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw==
@@ -6778,24 +6729,16 @@
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
-"@typescript-eslint/parser@^v4.27.0":
- version "4.27.0"
- resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.27.0.tgz#85447e573364bce4c46c7f64abaa4985aadf5a94"
- integrity sha512-XpbxL+M+gClmJcJ5kHnUpBGmlGdgNvy6cehgR6ufyxkEJMGP25tZKCaKyC0W/JVpuhU3VU1RBn7SYUPKSMqQvQ==
+"@typescript-eslint/parser@^v4.28.3":
+ version "4.28.3"
+ resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.3.tgz#95f1d475c08268edffdcb2779993c488b6434b44"
+ integrity sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ==
dependencies:
- "@typescript-eslint/scope-manager" "4.27.0"
- "@typescript-eslint/types" "4.27.0"
- "@typescript-eslint/typescript-estree" "4.27.0"
+ "@typescript-eslint/scope-manager" "4.28.3"
+ "@typescript-eslint/types" "4.28.3"
+ "@typescript-eslint/typescript-estree" "4.28.3"
debug "^4.3.1"
-"@typescript-eslint/scope-manager@4.27.0":
- version "4.27.0"
- resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.27.0.tgz#b0b1de2b35aaf7f532e89c8e81d0fa298cae327d"
- integrity sha512-DY73jK6SEH6UDdzc6maF19AHQJBFVRf6fgAXHPXCGEmpqD4vYgPEzqpFz1lf/daSbOcMpPPj9tyXXDPW2XReAw==
- dependencies:
- "@typescript-eslint/types" "4.27.0"
- "@typescript-eslint/visitor-keys" "4.27.0"
-
"@typescript-eslint/scope-manager@4.28.3":
version "4.28.3"
resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz#c32ad4491b3726db1ba34030b59ea922c214e371"
@@ -6804,29 +6747,11 @@
"@typescript-eslint/types" "4.28.3"
"@typescript-eslint/visitor-keys" "4.28.3"
-"@typescript-eslint/types@4.27.0":
- version "4.27.0"
- resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8"
- integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA==
-
"@typescript-eslint/types@4.28.3":
version "4.28.3"
resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.3.tgz#8fffd436a3bada422c2c1da56060a0566a9506c7"
integrity sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA==
-"@typescript-eslint/typescript-estree@4.27.0":
- version "4.27.0"
- resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.27.0.tgz#189a7b9f1d0717d5cccdcc17247692dedf7a09da"
- integrity sha512-KH03GUsUj41sRLLEy2JHstnezgpS5VNhrJouRdmh6yNdQ+yl8w5LrSwBkExM+jWwCJa7Ct2c8yl8NdtNRyQO6g==
- dependencies:
- "@typescript-eslint/types" "4.27.0"
- "@typescript-eslint/visitor-keys" "4.27.0"
- debug "^4.3.1"
- globby "^11.0.3"
- is-glob "^4.0.1"
- semver "^7.3.5"
- tsutils "^3.21.0"
-
"@typescript-eslint/typescript-estree@4.28.3":
version "4.28.3"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz#253d7088100b2a38aefe3c8dd7bd1f8232ec46fb"
@@ -6840,14 +6765,6 @@
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/visitor-keys@4.27.0":
- version "4.27.0"
- resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81"
- integrity sha512-es0GRYNZp0ieckZ938cEANfEhsfHrzuLrePukLKtY3/KPXcq1Xd555Mno9/GOgXhKzn0QfkDLVgqWO3dGY80bg==
- dependencies:
- "@typescript-eslint/types" "4.27.0"
- eslint-visitor-keys "^2.0.0"
-
"@typescript-eslint/visitor-keys@4.28.3":
version "4.28.3"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz#26ac91e84b23529968361045829da80a4e5251c4"
@@ -7677,7 +7594,7 @@ array-ify@^1.0.0:
resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
-array-includes@^3.0.3, array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3:
+array-includes@^3.0.3, array-includes@^3.1.1, array-includes@^3.1.2:
version "3.1.3"
resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==
@@ -11410,11 +11327,6 @@ dom-accessibility-api@^0.5.4:
resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166"
integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ==
-dom-accessibility-api@^0.5.6:
- version "0.5.6"
- resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.6.tgz#3f5d43b52c7a3bd68b5fb63fa47b4e4c1fdf65a9"
- integrity sha512-DplGLZd8L1lN64jlT27N9TVSESFR5STaEJvX+thCby7fuCHonfPpAlodYc3vuUYbDuDec5w8AMP7oCM5TWFsqw==
-
dom-converter@^0.2:
version "0.2.0"
resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
@@ -11894,28 +11806,6 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-
string.prototype.trimstart "^1.0.4"
unbox-primitive "^1.0.0"
-es-abstract@^1.18.2:
- version "1.18.3"
- resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0"
- integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==
- dependencies:
- call-bind "^1.0.2"
- es-to-primitive "^1.2.1"
- function-bind "^1.1.1"
- get-intrinsic "^1.1.1"
- has "^1.0.3"
- has-symbols "^1.0.2"
- is-callable "^1.2.3"
- is-negative-zero "^2.0.1"
- is-regex "^1.1.3"
- is-string "^1.0.6"
- object-inspect "^1.10.3"
- object-keys "^1.1.1"
- object.assign "^4.1.2"
- string.prototype.trimend "^1.0.4"
- string.prototype.trimstart "^1.0.4"
- unbox-primitive "^1.0.1"
-
es-array-method-boxes-properly@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
@@ -12121,7 +12011,7 @@ eslint-plugin-import@^2.20.2:
resolve "^1.17.0"
tsconfig-paths "^3.9.0"
-eslint-plugin-jest@^24.1.0, eslint-plugin-jest@^24.3.6:
+eslint-plugin-jest@^24.1.0:
version "24.3.6"
resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz#5f0ca019183c3188c5ad3af8e80b41de6c8e9173"
integrity sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg==
@@ -12189,24 +12079,6 @@ eslint-plugin-react@^7.12.4:
resolve "^1.18.1"
string.prototype.matchall "^4.0.2"
-eslint-plugin-react@^7.20.5:
- version "7.24.0"
- resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4"
- integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==
- dependencies:
- array-includes "^3.1.3"
- array.prototype.flatmap "^1.2.4"
- doctrine "^2.1.0"
- has "^1.0.3"
- jsx-ast-utils "^2.4.1 || ^3.0.0"
- minimatch "^3.0.4"
- object.entries "^1.1.4"
- object.fromentries "^2.0.4"
- object.values "^1.1.4"
- prop-types "^15.7.2"
- resolve "^2.0.0-next.3"
- string.prototype.matchall "^4.0.5"
-
eslint-scope@^4.0.3:
version "4.0.3"
resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
@@ -12292,52 +12164,6 @@ eslint@^7.1.0:
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
-eslint@^7.6.0:
- version "7.30.0"
- resolved "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8"
- integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==
- dependencies:
- "@babel/code-frame" "7.12.11"
- "@eslint/eslintrc" "^0.4.2"
- "@humanwhocodes/config-array" "^0.5.0"
- ajv "^6.10.0"
- chalk "^4.0.0"
- cross-spawn "^7.0.2"
- debug "^4.0.1"
- doctrine "^3.0.0"
- enquirer "^2.3.5"
- escape-string-regexp "^4.0.0"
- eslint-scope "^5.1.1"
- eslint-utils "^2.1.0"
- eslint-visitor-keys "^2.0.0"
- espree "^7.3.1"
- esquery "^1.4.0"
- esutils "^2.0.2"
- fast-deep-equal "^3.1.3"
- file-entry-cache "^6.0.1"
- functional-red-black-tree "^1.0.1"
- glob-parent "^5.1.2"
- globals "^13.6.0"
- ignore "^4.0.6"
- import-fresh "^3.0.0"
- imurmurhash "^0.1.4"
- is-glob "^4.0.0"
- js-yaml "^3.13.1"
- json-stable-stringify-without-jsonify "^1.0.1"
- levn "^0.4.1"
- lodash.merge "^4.6.2"
- minimatch "^3.0.4"
- natural-compare "^1.4.0"
- optionator "^0.9.1"
- progress "^2.0.0"
- regexpp "^3.1.0"
- semver "^7.2.1"
- strip-ansi "^6.0.0"
- strip-json-comments "^3.1.0"
- table "^6.0.9"
- text-table "^0.2.0"
- v8-compile-cache "^2.0.3"
-
esm@^3.2.25:
version "3.2.25"
resolved "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
@@ -13565,7 +13391,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5:
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
@@ -14308,7 +14134,7 @@ has-ansi@^2.0.0:
dependencies:
ansi-regex "^2.0.0"
-has-bigints@^1.0.0, has-bigints@^1.0.1:
+has-bigints@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
@@ -15150,15 +14976,6 @@ internal-slot@^1.0.2:
has "^1.0.3"
side-channel "^1.0.2"
-internal-slot@^1.0.3:
- version "1.0.3"
- resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
- integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
- dependencies:
- get-intrinsic "^1.1.0"
- has "^1.0.3"
- side-channel "^1.0.4"
-
interpret@^1.0.0:
version "1.2.0"
resolved "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
@@ -15660,14 +15477,6 @@ is-regex@^1.0.4, is-regex@^1.1.2:
call-bind "^1.0.2"
has-symbols "^1.0.1"
-is-regex@^1.1.3:
- version "1.1.3"
- resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
- integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
- dependencies:
- call-bind "^1.0.2"
- has-symbols "^1.0.2"
-
is-regexp@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
@@ -15722,11 +15531,6 @@ is-string@^1.0.4, is-string@^1.0.5:
resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
-is-string@^1.0.6:
- version "1.0.6"
- resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"
- integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==
-
is-subdir@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/is-subdir/-/is-subdir-1.1.1.tgz#423e66902f9c5f159b9cc4826c820df083059538"
@@ -18685,30 +18489,6 @@ msal@^1.0.2:
dependencies:
tslib "^1.9.3"
-msw@^0.28.2:
- version "0.28.2"
- resolved "https://registry.npmjs.org/msw/-/msw-0.28.2.tgz#5179df2c2f8c65e31b2043b8ec9cbe245ad0bd48"
- integrity sha512-WHfRd+Zwfy8yNPAx4PDJ0PnaEqUw5QOjWbCk5MmgpHMl51R3FJ2yIC694RdqR1bInqoaV94wW9Irv9eSyh65lQ==
- dependencies:
- "@mswjs/cookies" "^0.1.4"
- "@mswjs/interceptors" "^0.8.0"
- "@open-draft/until" "^1.0.3"
- "@types/cookie" "^0.4.0"
- "@types/inquirer" "^7.3.1"
- "@types/js-levenshtein" "^1.1.0"
- chalk "^4.1.0"
- chokidar "^3.4.2"
- cookie "^0.4.1"
- graphql "^15.4.0"
- headers-utils "^3.0.2"
- inquirer "^7.3.3"
- js-levenshtein "^1.1.6"
- node-fetch "^2.6.1"
- node-match-path "^0.6.1"
- statuses "^2.0.0"
- strict-event-emitter "^0.2.0"
- yargs "^16.2.0"
-
msw@^0.29.0:
version "0.29.0"
resolved "https://registry.npmjs.org/msw/-/msw-0.29.0.tgz#7242d575cb01db0c925241587df1fc2b79230d78"
@@ -19038,7 +18818,7 @@ node-libs-browser@^2.2.1:
util "^0.11.0"
vm-browserify "^1.0.1"
-node-match-path@^0.6.1, node-match-path@^0.6.3:
+node-match-path@^0.6.3:
version "0.6.3"
resolved "https://registry.npmjs.org/node-match-path/-/node-match-path-0.6.3.tgz#55dd8443d547f066937a0752dce462ea7dc27551"
integrity sha512-fB1reOHKLRZCJMAka28hIxCwQLxGmd7WewOCBDYKpyA1KXi68A7vaGgdZAPhY2E6SXoYt3KqYCCvXLJ+O0Fu/Q==
@@ -19382,11 +19162,6 @@ object-hash@^2.0.1, object-hash@^2.1.1:
resolved "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
-object-inspect@^1.10.3:
- version "1.11.0"
- resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"
- integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==
-
object-inspect@^1.9.0:
version "1.9.0"
resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
@@ -19433,15 +19208,6 @@ object.entries@^1.1.0, object.entries@^1.1.2:
es-abstract "^1.17.5"
has "^1.0.3"
-object.entries@^1.1.4:
- version "1.1.4"
- resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd"
- integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.18.2"
-
"object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
@@ -19452,16 +19218,6 @@ object.entries@^1.1.4:
function-bind "^1.1.1"
has "^1.0.3"
-object.fromentries@^2.0.4:
- version "2.0.4"
- resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8"
- integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.18.0-next.2"
- has "^1.0.3"
-
object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
@@ -19487,15 +19243,6 @@ object.values@^1.1.0, object.values@^1.1.1:
function-bind "^1.1.1"
has "^1.0.3"
-object.values@^1.1.4:
- version "1.1.4"
- resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30"
- integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.18.2"
-
objectorarray@^1.0.4:
version "1.0.4"
resolved "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.4.tgz#d69b2f0ff7dc2701903d308bb85882f4ddb49483"
@@ -22450,14 +22197,6 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0:
define-properties "^1.1.3"
es-abstract "^1.17.0-next.1"
-regexp.prototype.flags@^1.3.1:
- version "1.3.1"
- resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
- integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
-
regexpp@^3.1.0:
version "3.1.0"
resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
@@ -22757,14 +22496,6 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14
is-core-module "^2.2.0"
path-parse "^1.0.6"
-resolve@^2.0.0-next.3:
- version "2.0.0-next.3"
- resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
- integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
- dependencies:
- is-core-module "^2.2.0"
- path-parse "^1.0.6"
-
resolve@~1.17.0:
version "1.17.0"
resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
@@ -24165,20 +23896,6 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
regexp.prototype.flags "^1.3.0"
side-channel "^1.0.2"
-string.prototype.matchall@^4.0.5:
- version "4.0.5"
- resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da"
- integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.18.2"
- get-intrinsic "^1.1.1"
- has-symbols "^1.0.2"
- internal-slot "^1.0.3"
- regexp.prototype.flags "^1.3.1"
- side-channel "^1.0.4"
-
string.prototype.padend@^3.0.0:
version "3.1.0"
resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3"
@@ -25493,16 +25210,6 @@ unbox-primitive@^1.0.0:
has-symbols "^1.0.0"
which-boxed-primitive "^1.0.1"
-unbox-primitive@^1.0.1:
- version "1.0.1"
- resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
- integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
- dependencies:
- function-bind "^1.1.1"
- has-bigints "^1.0.1"
- has-symbols "^1.0.2"
- which-boxed-primitive "^1.0.2"
-
unc-path-regex@^0.1.2:
version "0.1.2"
resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
@@ -26348,7 +26055,7 @@ whatwg-url@^8.0.0, whatwg-url@^8.4.0:
tr46 "^2.0.2"
webidl-conversions "^6.1.0"
-which-boxed-primitive@^1.0.1, which-boxed-primitive@^1.0.2:
+which-boxed-primitive@^1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==