@backstage/cli 0.28.0-next.2 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/dist/commands/build/buildFrontend.cjs.js +3 -2
- package/dist/commands/build/command.cjs.js +5 -2
- package/dist/commands/repo/lint.cjs.js +18 -6
- package/dist/commands/repo/test.cjs.js +8 -5
- package/dist/lib/bundler/bundle.cjs.js +5 -4
- package/dist/lib/bundler/config.cjs.js +59 -37
- package/dist/lib/bundler/hasReactDomClient.cjs.js +5 -1
- package/dist/lib/bundler/optimization.cjs.js +10 -6
- package/dist/lib/bundler/server.cjs.js +47 -7
- package/dist/lib/bundler/transforms.cjs.js +7 -6
- package/dist/lib/version.cjs.js +30 -22
- package/dist/packages/backend-defaults/package.json.cjs.js +1 -1
- package/dist/packages/backend-plugin-api/package.json.cjs.js +1 -1
- package/dist/packages/backend-test-utils/package.json.cjs.js +1 -1
- package/dist/packages/catalog-client/package.json.cjs.js +6 -0
- package/dist/packages/cli/package.json.cjs.js +14 -2
- package/dist/packages/core-app-api/package.json.cjs.js +1 -1
- package/dist/packages/core-components/package.json.cjs.js +1 -1
- package/dist/packages/core-plugin-api/package.json.cjs.js +1 -1
- package/dist/packages/dev-utils/package.json.cjs.js +1 -1
- package/dist/packages/errors/package.json.cjs.js +6 -0
- package/dist/packages/test-utils/package.json.cjs.js +1 -1
- package/dist/packages/theme/package.json.cjs.js +1 -1
- package/dist/plugins/auth-backend/package.json.cjs.js +1 -1
- package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +1 -1
- package/dist/plugins/catalog-node/package.json.cjs.js +6 -0
- package/dist/plugins/scaffolder-node/package.json.cjs.js +1 -1
- package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +6 -0
- package/package.json +52 -24
- package/templates/default-backend-plugin/README.md.hbs +22 -8
- package/templates/default-backend-plugin/dev/index.ts.hbs +60 -0
- package/templates/default-backend-plugin/package.json.hbs +5 -5
- package/templates/default-backend-plugin/src/index.ts.hbs +0 -1
- package/templates/default-backend-plugin/src/plugin.test.ts.hbs +85 -0
- package/templates/default-backend-plugin/src/plugin.ts.hbs +16 -14
- package/templates/default-backend-plugin/src/router.test.ts +67 -0
- package/templates/default-backend-plugin/src/router.ts +51 -0
- package/templates/default-backend-plugin/src/services/TodoListService/createTodoListService.ts +100 -0
- package/templates/default-backend-plugin/src/services/TodoListService/index.ts +1 -0
- package/templates/default-backend-plugin/src/services/TodoListService/types.ts +27 -0
- package/templates/scaffolder-module/package.json.hbs +3 -1
- package/templates/scaffolder-module/src/actions/example.test.ts +24 -0
- package/templates/scaffolder-module/src/actions/{example/example.ts → example.ts} +7 -3
- package/templates/scaffolder-module/src/index.ts.hbs +1 -1
- package/templates/scaffolder-module/src/{actions/example/module.ts → module.ts} +3 -3
- package/templates/default-backend-plugin/dev/index.ts +0 -9
- package/templates/default-backend-plugin/src/service/router.test.ts +0 -30
- package/templates/default-backend-plugin/src/service/router.ts +0 -28
- package/templates/scaffolder-module/src/actions/example/example.test.ts +0 -32
- package/templates/scaffolder-module/src/actions/example/index.ts +0 -7
- package/templates/scaffolder-module/src/actions/index.ts +0 -1
package/dist/lib/version.cjs.js
CHANGED
|
@@ -5,17 +5,21 @@ var semver = require('semver');
|
|
|
5
5
|
var paths = require('./paths.cjs.js');
|
|
6
6
|
var _package$1 = require('../packages/backend-plugin-api/package.json.cjs.js');
|
|
7
7
|
var _package$2 = require('../packages/backend-test-utils/package.json.cjs.js');
|
|
8
|
-
var _package$3 = require('../packages/
|
|
9
|
-
var _package$4 = require('../packages/
|
|
10
|
-
var _package$5 = require('../packages/
|
|
11
|
-
var _package$6 = require('../packages/core-
|
|
12
|
-
var _package$7 = require('../packages/core-
|
|
13
|
-
var _package$8 = require('../packages/
|
|
14
|
-
var _package$9 = require('../packages/
|
|
15
|
-
var _package$
|
|
16
|
-
var _package$
|
|
17
|
-
var _package$d = require('../plugins/
|
|
18
|
-
var _package$
|
|
8
|
+
var _package$3 = require('../packages/catalog-client/package.json.cjs.js');
|
|
9
|
+
var _package$4 = require('../packages/cli/package.json.cjs.js');
|
|
10
|
+
var _package$5 = require('../packages/config/package.json.cjs.js');
|
|
11
|
+
var _package$6 = require('../packages/core-app-api/package.json.cjs.js');
|
|
12
|
+
var _package$7 = require('../packages/core-components/package.json.cjs.js');
|
|
13
|
+
var _package$8 = require('../packages/core-plugin-api/package.json.cjs.js');
|
|
14
|
+
var _package$9 = require('../packages/dev-utils/package.json.cjs.js');
|
|
15
|
+
var _package$a = require('../packages/errors/package.json.cjs.js');
|
|
16
|
+
var _package$b = require('../packages/test-utils/package.json.cjs.js');
|
|
17
|
+
var _package$d = require('../plugins/scaffolder-node/package.json.cjs.js');
|
|
18
|
+
var _package$e = require('../plugins/scaffolder-node-test-utils/package.json.cjs.js');
|
|
19
|
+
var _package$f = require('../plugins/auth-backend/package.json.cjs.js');
|
|
20
|
+
var _package$g = require('../plugins/auth-backend-module-guest-provider/package.json.cjs.js');
|
|
21
|
+
var _package$h = require('../plugins/catalog-node/package.json.cjs.js');
|
|
22
|
+
var _package$c = require('../packages/theme/package.json.cjs.js');
|
|
19
23
|
var _package = require('../packages/backend-defaults/package.json.cjs.js');
|
|
20
24
|
|
|
21
25
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
@@ -27,17 +31,21 @@ const packageVersions = {
|
|
|
27
31
|
"@backstage/backend-defaults": _package.version,
|
|
28
32
|
"@backstage/backend-plugin-api": _package$1.version,
|
|
29
33
|
"@backstage/backend-test-utils": _package$2.version,
|
|
30
|
-
"@backstage/
|
|
31
|
-
"@backstage/
|
|
32
|
-
"@backstage/
|
|
33
|
-
"@backstage/core-
|
|
34
|
-
"@backstage/core-
|
|
35
|
-
"@backstage/
|
|
36
|
-
"@backstage/
|
|
37
|
-
"@backstage/
|
|
38
|
-
"@backstage/
|
|
39
|
-
"@backstage/
|
|
40
|
-
"@backstage/plugin-
|
|
34
|
+
"@backstage/catalog-client": _package$3.version,
|
|
35
|
+
"@backstage/cli": _package$4.version,
|
|
36
|
+
"@backstage/config": _package$5.version,
|
|
37
|
+
"@backstage/core-app-api": _package$6.version,
|
|
38
|
+
"@backstage/core-components": _package$7.version,
|
|
39
|
+
"@backstage/core-plugin-api": _package$8.version,
|
|
40
|
+
"@backstage/dev-utils": _package$9.version,
|
|
41
|
+
"@backstage/errors": _package$a.version,
|
|
42
|
+
"@backstage/test-utils": _package$b.version,
|
|
43
|
+
"@backstage/theme": _package$c.version,
|
|
44
|
+
"@backstage/plugin-scaffolder-node": _package$d.version,
|
|
45
|
+
"@backstage/plugin-scaffolder-node-test-utils": _package$e.version,
|
|
46
|
+
"@backstage/plugin-auth-backend": _package$f.version,
|
|
47
|
+
"@backstage/plugin-auth-backend-module-guest-provider": _package$g.version,
|
|
48
|
+
"@backstage/plugin-catalog-node": _package$h.version
|
|
41
49
|
};
|
|
42
50
|
function findVersion() {
|
|
43
51
|
const pkgContent = fs__default.default.readFileSync(paths.paths.resolveOwn("package.json"), "utf8");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var version = "0.28.0
|
|
3
|
+
var version = "0.28.0";
|
|
4
4
|
var dependencies = {
|
|
5
5
|
"@backstage/catalog-model": "workspace:^",
|
|
6
6
|
"@backstage/cli-common": "workspace:^",
|
|
@@ -50,7 +50,7 @@ var dependencies = {
|
|
|
50
50
|
"cross-spawn": "^7.0.3",
|
|
51
51
|
"css-loader": "^6.5.1",
|
|
52
52
|
"ctrlc-windows": "^2.1.0",
|
|
53
|
-
esbuild: "^0.
|
|
53
|
+
esbuild: "^0.24.0",
|
|
54
54
|
"esbuild-loader": "^4.0.0",
|
|
55
55
|
eslint: "^8.6.0",
|
|
56
56
|
"eslint-config-prettier": "^9.0.0",
|
|
@@ -69,6 +69,7 @@ var dependencies = {
|
|
|
69
69
|
"git-url-parse": "^15.0.0",
|
|
70
70
|
glob: "^7.1.7",
|
|
71
71
|
"global-agent": "^3.0.0",
|
|
72
|
+
globby: "^11.1.0",
|
|
72
73
|
handlebars: "^4.7.3",
|
|
73
74
|
"html-webpack-plugin": "^5.3.1",
|
|
74
75
|
inquirer: "^8.2.0",
|
|
@@ -122,13 +123,23 @@ var devDependencies = {
|
|
|
122
123
|
"@backstage/backend-common": "^0.25.0",
|
|
123
124
|
"@backstage/backend-plugin-api": "workspace:^",
|
|
124
125
|
"@backstage/backend-test-utils": "workspace:^",
|
|
126
|
+
"@backstage/catalog-client": "workspace:^",
|
|
125
127
|
"@backstage/config": "workspace:^",
|
|
126
128
|
"@backstage/core-app-api": "workspace:^",
|
|
127
129
|
"@backstage/core-components": "workspace:^",
|
|
128
130
|
"@backstage/core-plugin-api": "workspace:^",
|
|
129
131
|
"@backstage/dev-utils": "workspace:^",
|
|
132
|
+
"@backstage/errors": "workspace:^",
|
|
133
|
+
"@backstage/plugin-auth-backend": "workspace:^",
|
|
134
|
+
"@backstage/plugin-auth-backend-module-guest-provider": "workspace:^",
|
|
135
|
+
"@backstage/plugin-catalog-node": "workspace:^",
|
|
136
|
+
"@backstage/plugin-scaffolder-node": "workspace:^",
|
|
137
|
+
"@backstage/plugin-scaffolder-node-test-utils": "workspace:^",
|
|
130
138
|
"@backstage/test-utils": "workspace:^",
|
|
131
139
|
"@backstage/theme": "workspace:^",
|
|
140
|
+
"@rspack/core": "^1.0.10",
|
|
141
|
+
"@rspack/dev-server": "^1.0.9",
|
|
142
|
+
"@rspack/plugin-react-refresh": "^1.0.0",
|
|
132
143
|
"@types/cross-spawn": "^6.0.2",
|
|
133
144
|
"@types/ejs": "^3.1.3",
|
|
134
145
|
"@types/express": "^4.17.6",
|
|
@@ -143,6 +154,7 @@ var devDependencies = {
|
|
|
143
154
|
"@types/svgo": "^2.6.2",
|
|
144
155
|
"@types/tar": "^6.1.1",
|
|
145
156
|
"@types/terser-webpack-plugin": "^5.0.4",
|
|
157
|
+
"@types/webpack-sources": "^3.2.3",
|
|
146
158
|
"@types/yarnpkg__lockfile": "^1.1.4",
|
|
147
159
|
"@vitejs/plugin-react": "^4.3.1",
|
|
148
160
|
del: "^7.0.0",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/cli",
|
|
3
|
-
"version": "0.28.0
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"description": "CLI for developing Backstage plugins and apps",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "cli"
|
|
@@ -42,16 +42,16 @@
|
|
|
42
42
|
"watch": "./src"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@backstage/catalog-model": "1.7.0",
|
|
46
|
-
"@backstage/cli-common": "0.1.14",
|
|
47
|
-
"@backstage/cli-node": "0.2.9
|
|
48
|
-
"@backstage/config": "1.2.0",
|
|
49
|
-
"@backstage/config-loader": "1.9.1",
|
|
50
|
-
"@backstage/errors": "1.2.4",
|
|
51
|
-
"@backstage/eslint-plugin": "0.1.10
|
|
52
|
-
"@backstage/integration": "1.15.1
|
|
53
|
-
"@backstage/release-manifests": "0.0.11",
|
|
54
|
-
"@backstage/types": "1.1.1",
|
|
45
|
+
"@backstage/catalog-model": "^1.7.0",
|
|
46
|
+
"@backstage/cli-common": "^0.1.14",
|
|
47
|
+
"@backstage/cli-node": "^0.2.9",
|
|
48
|
+
"@backstage/config": "^1.2.0",
|
|
49
|
+
"@backstage/config-loader": "^1.9.1",
|
|
50
|
+
"@backstage/errors": "^1.2.4",
|
|
51
|
+
"@backstage/eslint-plugin": "^0.1.10",
|
|
52
|
+
"@backstage/integration": "^1.15.1",
|
|
53
|
+
"@backstage/release-manifests": "^0.0.11",
|
|
54
|
+
"@backstage/types": "^1.1.1",
|
|
55
55
|
"@manypkg/get-packages": "^1.1.3",
|
|
56
56
|
"@module-federation/enhanced": "^0.6.0",
|
|
57
57
|
"@octokit/graphql": "^5.0.0",
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"cross-spawn": "^7.0.3",
|
|
91
91
|
"css-loader": "^6.5.1",
|
|
92
92
|
"ctrlc-windows": "^2.1.0",
|
|
93
|
-
"esbuild": "^0.
|
|
93
|
+
"esbuild": "^0.24.0",
|
|
94
94
|
"esbuild-loader": "^4.0.0",
|
|
95
95
|
"eslint": "^8.6.0",
|
|
96
96
|
"eslint-config-prettier": "^9.0.0",
|
|
@@ -109,6 +109,7 @@
|
|
|
109
109
|
"git-url-parse": "^15.0.0",
|
|
110
110
|
"glob": "^7.1.7",
|
|
111
111
|
"global-agent": "^3.0.0",
|
|
112
|
+
"globby": "^11.1.0",
|
|
112
113
|
"handlebars": "^4.7.3",
|
|
113
114
|
"html-webpack-plugin": "^5.3.1",
|
|
114
115
|
"inquirer": "^8.2.0",
|
|
@@ -160,15 +161,25 @@
|
|
|
160
161
|
},
|
|
161
162
|
"devDependencies": {
|
|
162
163
|
"@backstage/backend-common": "^0.25.0",
|
|
163
|
-
"@backstage/backend-plugin-api": "1.0.1
|
|
164
|
-
"@backstage/backend-test-utils": "1.0.1
|
|
165
|
-
"@backstage/
|
|
166
|
-
"@backstage/
|
|
167
|
-
"@backstage/core-
|
|
168
|
-
"@backstage/core-
|
|
169
|
-
"@backstage/
|
|
170
|
-
"@backstage/
|
|
171
|
-
"@backstage/
|
|
164
|
+
"@backstage/backend-plugin-api": "^1.0.1",
|
|
165
|
+
"@backstage/backend-test-utils": "^1.0.1",
|
|
166
|
+
"@backstage/catalog-client": "^1.7.1",
|
|
167
|
+
"@backstage/config": "^1.2.0",
|
|
168
|
+
"@backstage/core-app-api": "^1.15.1",
|
|
169
|
+
"@backstage/core-components": "^0.15.1",
|
|
170
|
+
"@backstage/core-plugin-api": "^1.10.0",
|
|
171
|
+
"@backstage/dev-utils": "^1.1.2",
|
|
172
|
+
"@backstage/errors": "^1.2.4",
|
|
173
|
+
"@backstage/plugin-auth-backend": "^0.23.1",
|
|
174
|
+
"@backstage/plugin-auth-backend-module-guest-provider": "^0.2.1",
|
|
175
|
+
"@backstage/plugin-catalog-node": "^1.13.1",
|
|
176
|
+
"@backstage/plugin-scaffolder-node": "^0.5.0",
|
|
177
|
+
"@backstage/plugin-scaffolder-node-test-utils": "^0.1.13",
|
|
178
|
+
"@backstage/test-utils": "^1.7.0",
|
|
179
|
+
"@backstage/theme": "^0.6.0",
|
|
180
|
+
"@rspack/core": "^1.0.10",
|
|
181
|
+
"@rspack/dev-server": "^1.0.9",
|
|
182
|
+
"@rspack/plugin-react-refresh": "^1.0.0",
|
|
172
183
|
"@types/cross-spawn": "^6.0.2",
|
|
173
184
|
"@types/ejs": "^3.1.3",
|
|
174
185
|
"@types/express": "^4.17.6",
|
|
@@ -183,6 +194,7 @@
|
|
|
183
194
|
"@types/svgo": "^2.6.2",
|
|
184
195
|
"@types/tar": "^6.1.1",
|
|
185
196
|
"@types/terser-webpack-plugin": "^5.0.4",
|
|
197
|
+
"@types/webpack-sources": "^3.2.3",
|
|
186
198
|
"@types/yarnpkg__lockfile": "^1.1.4",
|
|
187
199
|
"@vitejs/plugin-react": "^4.3.1",
|
|
188
200
|
"del": "^7.0.0",
|
|
@@ -193,12 +205,28 @@
|
|
|
193
205
|
"vite-plugin-node-polyfills": "^0.22.0"
|
|
194
206
|
},
|
|
195
207
|
"peerDependencies": {
|
|
196
|
-
"@
|
|
197
|
-
"
|
|
198
|
-
"
|
|
208
|
+
"@modyfi/vite-plugin-yaml": "^1.1.0",
|
|
209
|
+
"@rspack/core": "^1.0.10",
|
|
210
|
+
"@rspack/dev-server": "^1.0.9",
|
|
211
|
+
"@rspack/plugin-react-refresh": "^1.0.0",
|
|
212
|
+
"@vitejs/plugin-react": "^4.0.4",
|
|
213
|
+
"vite": "^4.4.9",
|
|
214
|
+
"vite-plugin-html": "^3.2.0",
|
|
199
215
|
"vite-plugin-node-polyfills": "^0.22.0"
|
|
200
216
|
},
|
|
201
217
|
"peerDependenciesMeta": {
|
|
218
|
+
"@modyfi/vite-plugin-yaml": {
|
|
219
|
+
"optional": true
|
|
220
|
+
},
|
|
221
|
+
"@rspack/core": {
|
|
222
|
+
"optional": true
|
|
223
|
+
},
|
|
224
|
+
"@rspack/dev-server": {
|
|
225
|
+
"optional": true
|
|
226
|
+
},
|
|
227
|
+
"@rspack/plugin-react-refresh": {
|
|
228
|
+
"optional": true
|
|
229
|
+
},
|
|
202
230
|
"@vitejs/plugin-react": {
|
|
203
231
|
"optional": true
|
|
204
232
|
},
|
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
# {{id}}
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This plugin backend was templated using the Backstage CLI. You should replace this text with a description of your plugin backend.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
This plugin is installed via the `{{name}}` package. To install it to your backend package, run the following command:
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
```bash
|
|
10
|
+
# From your root directory
|
|
11
|
+
yarn --cwd packages/backend add {{name}}
|
|
12
|
+
```
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
Then add the plugin to your backend in `packages/backend/src/index.ts`:
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
const backend = createBackend();
|
|
18
|
+
// ...
|
|
19
|
+
backend.add(import('{{name}}'));
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Development
|
|
23
|
+
|
|
24
|
+
This plugin backend can be started in a standalone mode from directly in this
|
|
25
|
+
package with `yarn start`. It is a limited setup that is most convenient when
|
|
26
|
+
developing the plugin backend itself.
|
|
27
|
+
|
|
28
|
+
If you want to run the entire project, including the frontend, run `yarn dev` from the root directory.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createBackend } from '@backstage/backend-defaults';
|
|
2
|
+
import { mockServices } from '@backstage/backend-test-utils';
|
|
3
|
+
import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils';
|
|
4
|
+
|
|
5
|
+
// TEMPLATE NOTE:
|
|
6
|
+
// This is the development setup for your plugin that wires up a
|
|
7
|
+
// minimal backend that can use both real and mocked plugins and services.
|
|
8
|
+
//
|
|
9
|
+
// Start up the backend by running `yarn start` in the package directory.
|
|
10
|
+
// Once it's up and running, try out the following requests:
|
|
11
|
+
//
|
|
12
|
+
// Create a new todo item, standalone or for the sample component:
|
|
13
|
+
//
|
|
14
|
+
// curl http://localhost:7007/api/{{id}}/todos -H 'Content-Type: application/json' -d '{"title": "My Todo"}'
|
|
15
|
+
// curl http://localhost:7007/api/{{id}}/todos -H 'Content-Type: application/json' -d '{"title": "My Todo", "entityRef": "component:default/sample"}'
|
|
16
|
+
//
|
|
17
|
+
// List TODOs:
|
|
18
|
+
//
|
|
19
|
+
// curl http://localhost:7007/api/{{id}}/todos
|
|
20
|
+
//
|
|
21
|
+
// Explicitly make an unauthenticated request, or with service auth:
|
|
22
|
+
//
|
|
23
|
+
// curl http://localhost:7007/api/{{id}}/todos -H 'Authorization: Bearer mock-none-token'
|
|
24
|
+
// curl http://localhost:7007/api/{{id}}/todos -H 'Authorization: Bearer mock-service-token'
|
|
25
|
+
|
|
26
|
+
const backend = createBackend();
|
|
27
|
+
|
|
28
|
+
// TEMPLATE NOTE:
|
|
29
|
+
// Mocking the auth and httpAuth service allows you to call your plugin API without
|
|
30
|
+
// having to authenticate.
|
|
31
|
+
//
|
|
32
|
+
// If you want to use real auth, you can install the following instead:
|
|
33
|
+
// backend.add(import('@backstage/plugin-auth-backend'));
|
|
34
|
+
// backend.add(import('@backstage/plugin-auth-backend-module-guest-provider'));
|
|
35
|
+
backend.add(mockServices.auth.factory());
|
|
36
|
+
backend.add(mockServices.httpAuth.factory());
|
|
37
|
+
|
|
38
|
+
// TEMPLATE NOTE:
|
|
39
|
+
// Rather than using a real catalog you can use a mock with a fixed set of entities.
|
|
40
|
+
backend.add(
|
|
41
|
+
catalogServiceMock.factory({
|
|
42
|
+
entities: [
|
|
43
|
+
{
|
|
44
|
+
apiVersion: 'backstage.io/v1alpha1',
|
|
45
|
+
kind: 'Component',
|
|
46
|
+
metadata: {
|
|
47
|
+
name: 'sample',
|
|
48
|
+
title: 'Sample Component',
|
|
49
|
+
},
|
|
50
|
+
spec: {
|
|
51
|
+
type: 'service',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
backend.add(import('../src'));
|
|
59
|
+
|
|
60
|
+
backend.start();
|
|
@@ -30,19 +30,19 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@backstage/backend-defaults": "{{versionQuery '@backstage/backend-defaults'}}",
|
|
32
32
|
"@backstage/backend-plugin-api": "{{versionQuery '@backstage/backend-plugin-api'}}",
|
|
33
|
+
"@backstage/catalog-client": "{{versionQuery '@backstage/catalog-client'}}",
|
|
34
|
+
"@backstage/errors": "{{versionQuery '@backstage/errors'}}",
|
|
35
|
+
"@backstage/plugin-catalog-node": "{{versionQuery '@backstage/plugin-catalog-node'}}",
|
|
33
36
|
"express": "{{versionQuery 'express' '4.17.1'}}",
|
|
34
37
|
"express-promise-router": "{{versionQuery 'express-promise-router' '4.1.0'}}",
|
|
35
|
-
"
|
|
38
|
+
"zod": "{{versionQuery 'zod' '3.22.4'}}"
|
|
36
39
|
},
|
|
37
40
|
"devDependencies": {
|
|
38
41
|
"@backstage/backend-test-utils": "{{versionQuery '@backstage/backend-test-utils'}}",
|
|
39
42
|
"@backstage/cli": "{{versionQuery '@backstage/cli'}}",
|
|
40
|
-
"@backstage/plugin-auth-backend": "{{versionQuery '@backstage/plugin-auth-backend'}}",
|
|
41
|
-
"@backstage/plugin-auth-backend-module-guest-provider": "{{versionQuery '@backstage/plugin-auth-backend-module-guest-provider'}}",
|
|
42
43
|
"@types/express": "{{versionQuery '@types/express' '4.17.6'}}",
|
|
43
44
|
"@types/supertest": "{{versionQuery '@types/supertest' '2.0.12'}}",
|
|
44
|
-
"supertest": "{{versionQuery 'supertest' '6.2.4'}}"
|
|
45
|
-
"msw": "{{versionQuery 'msw' '2.3.1'}}"
|
|
45
|
+
"supertest": "{{versionQuery 'supertest' '6.2.4'}}"
|
|
46
46
|
},
|
|
47
47
|
"files": [
|
|
48
48
|
"dist"
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import {
|
|
2
|
+
mockCredentials,
|
|
3
|
+
startTestBackend,
|
|
4
|
+
} from '@backstage/backend-test-utils';
|
|
5
|
+
import { {{pluginVar}} } from './plugin';
|
|
6
|
+
import request from 'supertest';
|
|
7
|
+
import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils';
|
|
8
|
+
|
|
9
|
+
// TEMPLATE NOTE:
|
|
10
|
+
// Plugin tests are integration tests for your plugin, ensuring that all pieces
|
|
11
|
+
// work together end-to-end. You can still mock injected backend services
|
|
12
|
+
// however, just like anyone who installs your plugin might replace the
|
|
13
|
+
// services with their own implementations.
|
|
14
|
+
describe('plugin', () => {
|
|
15
|
+
it('should create and read TODO items', async () => {
|
|
16
|
+
const { server } = await startTestBackend({
|
|
17
|
+
features: [{{pluginVar}}],
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
await request(server).get('/api/{{id}}/todos').expect(200, {
|
|
21
|
+
items: [],
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const createRes = await request(server)
|
|
25
|
+
.post('/api/{{id}}/todos')
|
|
26
|
+
.send({ title: 'My Todo' });
|
|
27
|
+
|
|
28
|
+
expect(createRes.status).toBe(201);
|
|
29
|
+
expect(createRes.body).toEqual({
|
|
30
|
+
id: expect.any(String),
|
|
31
|
+
title: 'My Todo',
|
|
32
|
+
createdBy: mockCredentials.user().principal.userEntityRef,
|
|
33
|
+
createdAt: expect.any(String),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const createdTodoItem = createRes.body;
|
|
37
|
+
|
|
38
|
+
await request(server)
|
|
39
|
+
.get('/api/{{id}}/todos')
|
|
40
|
+
.expect(200, {
|
|
41
|
+
items: [createdTodoItem],
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
await request(server)
|
|
45
|
+
.get(`/api/{{id}}/todos/${createdTodoItem.id}`)
|
|
46
|
+
.expect(200, createdTodoItem);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('should create TODO item with catalog information', async () => {
|
|
50
|
+
const { server } = await startTestBackend({
|
|
51
|
+
features: [
|
|
52
|
+
{{pluginVar}},
|
|
53
|
+
catalogServiceMock.factory({
|
|
54
|
+
entities: [
|
|
55
|
+
{
|
|
56
|
+
apiVersion: 'backstage.io/v1alpha1',
|
|
57
|
+
kind: 'Component',
|
|
58
|
+
metadata: {
|
|
59
|
+
name: 'my-component',
|
|
60
|
+
namespace: 'default',
|
|
61
|
+
title: 'My Component',
|
|
62
|
+
},
|
|
63
|
+
spec: {
|
|
64
|
+
type: 'service',
|
|
65
|
+
owner: 'me',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
}),
|
|
70
|
+
],
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
const createRes = await request(server)
|
|
74
|
+
.post('/api/{{id}}/todos')
|
|
75
|
+
.send({ title: 'My Todo', entityRef: 'component:default/my-component' });
|
|
76
|
+
|
|
77
|
+
expect(createRes.status).toBe(201);
|
|
78
|
+
expect(createRes.body).toEqual({
|
|
79
|
+
id: expect.any(String),
|
|
80
|
+
title: '[My Component] My Todo',
|
|
81
|
+
createdBy: mockCredentials.user().principal.userEntityRef,
|
|
82
|
+
createdAt: expect.any(String),
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
});
|