Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Fix dependency ordering in templated packages.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
added default project name for CI job compatibility
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Removed the unused dependency on `@sucrase/jest-plugin`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-app-api': patch
|
||||
---
|
||||
|
||||
Fix for the automatic rewriting of base URLs.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-airbrake': patch
|
||||
---
|
||||
|
||||
Remove the `object-hash` dependency
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
Internal refactor to remove deprecated symbols.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-app-api': patch
|
||||
---
|
||||
|
||||
Made `WebStorage` notify its subscribers when `localStorage` values change in other tabs/windows
|
||||
+175
-193
@@ -1360,13 +1360,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"accepts@npm:~1.3.7":
|
||||
version: 1.3.7
|
||||
resolution: "accepts@npm:1.3.7"
|
||||
"accepts@npm:~1.3.8":
|
||||
version: 1.3.8
|
||||
resolution: "accepts@npm:1.3.8"
|
||||
dependencies:
|
||||
mime-types: ~2.1.24
|
||||
negotiator: 0.6.2
|
||||
checksum: 27fc8060ffc69481ff6719cd3ee06387d2b88381cb0ce626f087781bbd02201a645a9febc8e7e7333558354b33b1d2f922ad13560be4ec1b7ba9e76fc1c1241d
|
||||
mime-types: ~2.1.34
|
||||
negotiator: 0.6.3
|
||||
checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1906,21 +1906,23 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"body-parser@npm:1.19.0":
|
||||
version: 1.19.0
|
||||
resolution: "body-parser@npm:1.19.0"
|
||||
"body-parser@npm:1.20.1":
|
||||
version: 1.20.1
|
||||
resolution: "body-parser@npm:1.20.1"
|
||||
dependencies:
|
||||
bytes: 3.1.0
|
||||
bytes: 3.1.2
|
||||
content-type: ~1.0.4
|
||||
debug: 2.6.9
|
||||
depd: ~1.1.2
|
||||
http-errors: 1.7.2
|
||||
depd: 2.0.0
|
||||
destroy: 1.2.0
|
||||
http-errors: 2.0.0
|
||||
iconv-lite: 0.4.24
|
||||
on-finished: ~2.3.0
|
||||
qs: 6.7.0
|
||||
raw-body: 2.4.0
|
||||
type-is: ~1.6.17
|
||||
checksum: 490231b4c89bbd43112762f7ba8e5342c174a6c9f64284a3b0fcabf63277e332f8316765596f1e5b15e4f3a6cf0422e005f4bb3149ed3a224bb025b7a36b9ac1
|
||||
on-finished: 2.4.1
|
||||
qs: 6.11.0
|
||||
raw-body: 2.5.1
|
||||
type-is: ~1.6.18
|
||||
unpipe: 1.0.0
|
||||
checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2063,10 +2065,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"bytes@npm:3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "bytes@npm:3.1.0"
|
||||
checksum: 7c3b21c5d9d44ed455460d5d36a31abc6fa2ce3807964ba60a4b03fd44454c8cf07bb0585af83bfde1c5cc2ea4bbe5897bc3d18cd15e0acf25a3615a35aba2df
|
||||
"bytes@npm:3.1.2":
|
||||
version: 3.1.2
|
||||
resolution: "bytes@npm:3.1.2"
|
||||
checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2566,12 +2568,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"content-disposition@npm:0.5.3, content-disposition@npm:^0.5.2":
|
||||
version: 0.5.3
|
||||
resolution: "content-disposition@npm:0.5.3"
|
||||
"content-disposition@npm:0.5.4, content-disposition@npm:^0.5.2":
|
||||
version: 0.5.4
|
||||
resolution: "content-disposition@npm:0.5.4"
|
||||
dependencies:
|
||||
safe-buffer: 5.1.2
|
||||
checksum: 95bf164c0b0b8199d3f44b7631e51b37f683c6a90b9baa4315bd3d405a6d1bc81b7346f0981046aa004331fb3d7a28b629514d01fc209a5251573fc7e4d33380
|
||||
safe-buffer: 5.2.1
|
||||
checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2605,10 +2607,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cookie@npm:0.4.0":
|
||||
version: 0.4.0
|
||||
resolution: "cookie@npm:0.4.0"
|
||||
checksum: 760384ba0aef329c52523747e36a452b5e51bc49b34160363a6934e7b7df3f93fcc88b35e33450361535d40a92a96412da870e1816aba9aa6cc556a9fedd8492
|
||||
"cookie@npm:0.5.0":
|
||||
version: 0.5.0
|
||||
resolution: "cookie@npm:0.5.0"
|
||||
checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -3076,17 +3078,24 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"depd@npm:^1.1.2, depd@npm:~1.1.2":
|
||||
"depd@npm:2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "depd@npm:2.0.0"
|
||||
checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"depd@npm:^1.1.2":
|
||||
version: 1.1.2
|
||||
resolution: "depd@npm:1.1.2"
|
||||
checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"destroy@npm:~1.0.4":
|
||||
version: 1.0.4
|
||||
resolution: "destroy@npm:1.0.4"
|
||||
checksum: da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03
|
||||
"destroy@npm:1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "destroy@npm:1.2.0"
|
||||
checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -3611,40 +3620,41 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"express@npm:^4.17.1":
|
||||
version: 4.17.1
|
||||
resolution: "express@npm:4.17.1"
|
||||
version: 4.18.2
|
||||
resolution: "express@npm:4.18.2"
|
||||
dependencies:
|
||||
accepts: ~1.3.7
|
||||
accepts: ~1.3.8
|
||||
array-flatten: 1.1.1
|
||||
body-parser: 1.19.0
|
||||
content-disposition: 0.5.3
|
||||
body-parser: 1.20.1
|
||||
content-disposition: 0.5.4
|
||||
content-type: ~1.0.4
|
||||
cookie: 0.4.0
|
||||
cookie: 0.5.0
|
||||
cookie-signature: 1.0.6
|
||||
debug: 2.6.9
|
||||
depd: ~1.1.2
|
||||
depd: 2.0.0
|
||||
encodeurl: ~1.0.2
|
||||
escape-html: ~1.0.3
|
||||
etag: ~1.8.1
|
||||
finalhandler: ~1.1.2
|
||||
finalhandler: 1.2.0
|
||||
fresh: 0.5.2
|
||||
http-errors: 2.0.0
|
||||
merge-descriptors: 1.0.1
|
||||
methods: ~1.1.2
|
||||
on-finished: ~2.3.0
|
||||
on-finished: 2.4.1
|
||||
parseurl: ~1.3.3
|
||||
path-to-regexp: 0.1.7
|
||||
proxy-addr: ~2.0.5
|
||||
qs: 6.7.0
|
||||
proxy-addr: ~2.0.7
|
||||
qs: 6.11.0
|
||||
range-parser: ~1.2.1
|
||||
safe-buffer: 5.1.2
|
||||
send: 0.17.1
|
||||
serve-static: 1.14.1
|
||||
setprototypeof: 1.1.1
|
||||
statuses: ~1.5.0
|
||||
safe-buffer: 5.2.1
|
||||
send: 0.18.0
|
||||
serve-static: 1.15.0
|
||||
setprototypeof: 1.2.0
|
||||
statuses: 2.0.1
|
||||
type-is: ~1.6.18
|
||||
utils-merge: 1.0.1
|
||||
vary: ~1.1.2
|
||||
checksum: d964e9e17af331ea6fa2f84999b063bc47189dd71b4a735df83f9126d3bb2b92e830f1cb1d7c2742530eb625e2689d7a9a9c71f0c3cc4dd6015c3cd32a01abd5
|
||||
checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -3916,18 +3926,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"finalhandler@npm:~1.1.2":
|
||||
version: 1.1.2
|
||||
resolution: "finalhandler@npm:1.1.2"
|
||||
"finalhandler@npm:1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "finalhandler@npm:1.2.0"
|
||||
dependencies:
|
||||
debug: 2.6.9
|
||||
encodeurl: ~1.0.2
|
||||
escape-html: ~1.0.3
|
||||
on-finished: ~2.3.0
|
||||
on-finished: 2.4.1
|
||||
parseurl: ~1.3.3
|
||||
statuses: ~1.5.0
|
||||
statuses: 2.0.1
|
||||
unpipe: ~1.0.0
|
||||
checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e
|
||||
checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4020,10 +4030,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"forwarded@npm:~0.1.2":
|
||||
version: 0.1.2
|
||||
resolution: "forwarded@npm:0.1.2"
|
||||
checksum: 54695c574292f9bc6bfa52111844337bc2e61cfcc5ec82f16b816d721a67a0c76b4849a34b57e38e51d64ddbb81aef974f393579f610ed1b990470e75abad2e0
|
||||
"forwarded@npm:0.2.0":
|
||||
version: 0.2.0
|
||||
resolution: "forwarded@npm:0.2.0"
|
||||
checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4148,14 +4158,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"get-intrinsic@npm:^1.0.0":
|
||||
version: 1.0.2
|
||||
resolution: "get-intrinsic@npm:1.0.2"
|
||||
"get-intrinsic@npm:^1.0.0, get-intrinsic@npm:^1.0.2":
|
||||
version: 1.1.3
|
||||
resolution: "get-intrinsic@npm:1.1.3"
|
||||
dependencies:
|
||||
function-bind: ^1.1.1
|
||||
has: ^1.0.3
|
||||
has-symbols: ^1.0.1
|
||||
checksum: bed41c7426212d79982c23e9dddb7de2b6b05ca35e94e653edfed06188381ed4eae0e04adf7f4d3ea1f47f1c345b255405e8c44b1167185537a506eff5c519c8
|
||||
has-symbols: ^1.0.3
|
||||
checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4486,10 +4496,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"has-symbols@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "has-symbols@npm:1.0.1"
|
||||
checksum: 4f09be6682f9fc29855ded1101ad2a0f5d559d7d9ed68f7b68be1ea213c23991216d08d6585bf3ff6fded6f526cc506bda528d276f083602b55d232f132cfa27
|
||||
"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.3":
|
||||
version: 1.0.3
|
||||
resolution: "has-symbols@npm:1.0.3"
|
||||
checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4627,29 +4637,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"http-errors@npm:1.7.2":
|
||||
version: 1.7.2
|
||||
resolution: "http-errors@npm:1.7.2"
|
||||
"http-errors@npm:2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "http-errors@npm:2.0.0"
|
||||
dependencies:
|
||||
depd: ~1.1.2
|
||||
inherits: 2.0.3
|
||||
setprototypeof: 1.1.1
|
||||
statuses: ">= 1.5.0 < 2"
|
||||
toidentifier: 1.0.0
|
||||
checksum: 5534b0ae08e77f5a45a2380f500e781f6580c4ff75b816cb1f09f99a290b57e78a518be6d866db1b48cca6b052c09da2c75fc91fb16a2fe3da3c44d9acbb9972
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"http-errors@npm:~1.7.2":
|
||||
version: 1.7.3
|
||||
resolution: "http-errors@npm:1.7.3"
|
||||
dependencies:
|
||||
depd: ~1.1.2
|
||||
depd: 2.0.0
|
||||
inherits: 2.0.4
|
||||
setprototypeof: 1.1.1
|
||||
statuses: ">= 1.5.0 < 2"
|
||||
toidentifier: 1.0.0
|
||||
checksum: a59f359473f4b3ea78305beee90d186268d6075432622a46fb7483059068a2dd4c854a20ac8cd438883127e06afb78c1309168bde6cdfeed1e3700eb42487d99
|
||||
setprototypeof: 1.2.0
|
||||
statuses: 2.0.1
|
||||
toidentifier: 1.0.1
|
||||
checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4868,13 +4865,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"inherits@npm:2.0.3":
|
||||
version: 2.0.3
|
||||
resolution: "inherits@npm:2.0.3"
|
||||
checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ini@npm:^1.3.4, ini@npm:^1.3.5":
|
||||
version: 1.3.8
|
||||
resolution: "ini@npm:1.3.8"
|
||||
@@ -6109,19 +6099,19 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mime-db@npm:1.45.0, mime-db@npm:^1.28.0":
|
||||
version: 1.45.0
|
||||
resolution: "mime-db@npm:1.45.0"
|
||||
checksum: 00aa67af7a2014c12380bec57b3efe988e45c51979acca792633e2ba4d45c601b4160ceaf9666e2b8fa6822f5cb81e12206f9921d1bc3d78226aee813d4244fd
|
||||
"mime-db@npm:1.52.0, mime-db@npm:^1.28.0":
|
||||
version: 1.52.0
|
||||
resolution: "mime-db@npm:1.52.0"
|
||||
checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24":
|
||||
version: 2.1.28
|
||||
resolution: "mime-types@npm:2.1.28"
|
||||
"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
|
||||
version: 2.1.35
|
||||
resolution: "mime-types@npm:2.1.35"
|
||||
dependencies:
|
||||
mime-db: 1.45.0
|
||||
checksum: ea59cb885b5234cd7fcc2c8de1eff8543cf057be7daaf804a1b9b2cc6930c8dbcdc5e86b9732827a794d5282baa6f45ef93bc50eaba93839b9174cc6d36c9702
|
||||
mime-db: 1.52.0
|
||||
checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6289,13 +6279,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ms@npm:2.1.1":
|
||||
version: 2.1.1
|
||||
resolution: "ms@npm:2.1.1"
|
||||
checksum: 0078a23cd916a9a7435c413caa14c57d4b4f6e2470e0ab554b6964163c8a4436448ac7ae020e883685475da6b6796cc396b670f579cb275db288a21e3e57721e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ms@npm:2.1.2":
|
||||
version: 2.1.2
|
||||
resolution: "ms@npm:2.1.2"
|
||||
@@ -6303,7 +6286,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ms@npm:^2.0.0, ms@npm:^2.1.1":
|
||||
"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1":
|
||||
version: 2.1.3
|
||||
resolution: "ms@npm:2.1.3"
|
||||
checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
|
||||
@@ -6345,14 +6328,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"negotiator@npm:0.6.2":
|
||||
version: 0.6.2
|
||||
resolution: "negotiator@npm:0.6.2"
|
||||
checksum: dfddaff6c06792f1c4c3809e29a427b8daef8cd437c83b08dd51d7ee11bbd1c29d9512d66b801144d6c98e910ffd8723f2432e0cbf8b18d41d2a09599c975ab3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"negotiator@npm:^0.6.3":
|
||||
"negotiator@npm:0.6.3, negotiator@npm:^0.6.3":
|
||||
version: 0.6.3
|
||||
resolution: "negotiator@npm:0.6.3"
|
||||
checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9
|
||||
@@ -6536,10 +6512,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-inspect@npm:^1.8.0":
|
||||
version: 1.9.0
|
||||
resolution: "object-inspect@npm:1.9.0"
|
||||
checksum: 715d2ef5beebfecd5c6d5b29dd370b11bb37d46284d4c1e38463c1ab5dd182cb9d1b543b3f0ea682c84a1883863ea2fe6e6b7599a65a6ab043545189b06e8800
|
||||
"object-inspect@npm:^1.8.0, object-inspect@npm:^1.9.0":
|
||||
version: 1.12.2
|
||||
resolution: "object-inspect@npm:1.12.2"
|
||||
checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6603,12 +6579,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"on-finished@npm:~2.3.0":
|
||||
version: 2.3.0
|
||||
resolution: "on-finished@npm:2.3.0"
|
||||
"on-finished@npm:2.4.1":
|
||||
version: 2.4.1
|
||||
resolution: "on-finished@npm:2.4.1"
|
||||
dependencies:
|
||||
ee-first: 1.1.1
|
||||
checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b
|
||||
checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7450,13 +7426,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"proxy-addr@npm:~2.0.5":
|
||||
version: 2.0.6
|
||||
resolution: "proxy-addr@npm:2.0.6"
|
||||
"proxy-addr@npm:~2.0.7":
|
||||
version: 2.0.7
|
||||
resolution: "proxy-addr@npm:2.0.7"
|
||||
dependencies:
|
||||
forwarded: ~0.1.2
|
||||
forwarded: 0.2.0
|
||||
ipaddr.js: 1.9.1
|
||||
checksum: 2bad9b7a56b847faf606a19328aaaf5fca3e561ebb4e933969a580d94a20f77e74fb21196028a6e417851b3d9d95a0c704732a3362e3ef515d45d96859ac7eb9
|
||||
checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7498,24 +7474,19 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"qs@npm:6.7.0":
|
||||
version: 6.7.0
|
||||
resolution: "qs@npm:6.7.0"
|
||||
checksum: dfd5f6adef50e36e908cfa70a6233871b5afe66fbaca37ecc1da352ba29eb2151a3797991948f158bb37fccde51bd57845cb619a8035287bfc24e4591172c347
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"qs@npm:^6.4.0":
|
||||
version: 6.9.4
|
||||
resolution: "qs@npm:6.9.4"
|
||||
checksum: 5ac0bd145f32d346d20c2fdcf19c8e548c5916458851e32527efb25be0c2cff8a3a81140c145c98a1184779b5b625c91bc7c50e147073bffb978fb7f4a9c8c8a
|
||||
"qs@npm:6.11.0, qs@npm:^6.4.0":
|
||||
version: 6.11.0
|
||||
resolution: "qs@npm:6.11.0"
|
||||
dependencies:
|
||||
side-channel: ^1.0.4
|
||||
checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"qs@npm:~6.5.2":
|
||||
version: 6.5.2
|
||||
resolution: "qs@npm:6.5.2"
|
||||
checksum: 24af7b9928ba2141233fba2912876ff100403dba1b08b20c3b490da9ea6c636760445ea2211a079e7dfa882a5cf8f738337b3748c8bdd0f93358fa8881d2db8f
|
||||
version: 6.5.3
|
||||
resolution: "qs@npm:6.5.3"
|
||||
checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7555,15 +7526,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"raw-body@npm:2.4.0":
|
||||
version: 2.4.0
|
||||
resolution: "raw-body@npm:2.4.0"
|
||||
"raw-body@npm:2.5.1":
|
||||
version: 2.5.1
|
||||
resolution: "raw-body@npm:2.5.1"
|
||||
dependencies:
|
||||
bytes: 3.1.0
|
||||
http-errors: 1.7.2
|
||||
bytes: 3.1.2
|
||||
http-errors: 2.0.0
|
||||
iconv-lite: 0.4.24
|
||||
unpipe: 1.0.0
|
||||
checksum: 6343906939e018c6e633a34a938a5d6d1e93ffcfa48646e00207d53b418e941953b521473950c079347220944dc75ba10e7b3c08bf97e3ac72c7624882db09bb
|
||||
checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8030,20 +8001,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1":
|
||||
version: 5.1.2
|
||||
resolution: "safe-buffer@npm:5.1.2"
|
||||
checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0":
|
||||
"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0":
|
||||
version: 5.2.1
|
||||
resolution: "safe-buffer@npm:5.2.1"
|
||||
checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1":
|
||||
version: 5.1.2
|
||||
resolution: "safe-buffer@npm:5.1.2"
|
||||
checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"safe-json-parse@npm:~1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "safe-json-parse@npm:1.0.1"
|
||||
@@ -8141,36 +8112,36 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"send@npm:0.17.1":
|
||||
version: 0.17.1
|
||||
resolution: "send@npm:0.17.1"
|
||||
"send@npm:0.18.0":
|
||||
version: 0.18.0
|
||||
resolution: "send@npm:0.18.0"
|
||||
dependencies:
|
||||
debug: 2.6.9
|
||||
depd: ~1.1.2
|
||||
destroy: ~1.0.4
|
||||
depd: 2.0.0
|
||||
destroy: 1.2.0
|
||||
encodeurl: ~1.0.2
|
||||
escape-html: ~1.0.3
|
||||
etag: ~1.8.1
|
||||
fresh: 0.5.2
|
||||
http-errors: ~1.7.2
|
||||
http-errors: 2.0.0
|
||||
mime: 1.6.0
|
||||
ms: 2.1.1
|
||||
on-finished: ~2.3.0
|
||||
ms: 2.1.3
|
||||
on-finished: 2.4.1
|
||||
range-parser: ~1.2.1
|
||||
statuses: ~1.5.0
|
||||
checksum: d214c2fa42e7fae3f8fc1aa3931eeb3e6b78c2cf141574e09dbe159915c1e3a337269fc6b7512e7dfddcd7d6ff5974cb62f7c3637ba86a55bde20a92c18bdca0
|
||||
statuses: 2.0.1
|
||||
checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"serve-static@npm:1.14.1":
|
||||
version: 1.14.1
|
||||
resolution: "serve-static@npm:1.14.1"
|
||||
"serve-static@npm:1.15.0":
|
||||
version: 1.15.0
|
||||
resolution: "serve-static@npm:1.15.0"
|
||||
dependencies:
|
||||
encodeurl: ~1.0.2
|
||||
escape-html: ~1.0.3
|
||||
parseurl: ~1.3.3
|
||||
send: 0.17.1
|
||||
checksum: c6b268e8486d39ecd54b86c7f2d0ee4a38cd7514ddd9c92c8d5793bb005afde5e908b12395898ae206782306ccc848193d93daa15b86afb3cbe5a8414806abe8
|
||||
send: 0.18.0
|
||||
checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8202,10 +8173,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"setprototypeof@npm:1.1.1":
|
||||
version: 1.1.1
|
||||
resolution: "setprototypeof@npm:1.1.1"
|
||||
checksum: a8bee29c1c64c245d460ce53f7460af8cbd0aceac68d66e5215153992cc8b3a7a123416353e0c642060e85cc5fd4241c92d1190eec97eda0dcb97436e8fcca3b
|
||||
"setprototypeof@npm:1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "setprototypeof@npm:1.2.0"
|
||||
checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8245,6 +8216,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"side-channel@npm:^1.0.4":
|
||||
version: 1.0.4
|
||||
resolution: "side-channel@npm:1.0.4"
|
||||
dependencies:
|
||||
call-bind: ^1.0.0
|
||||
get-intrinsic: ^1.0.2
|
||||
object-inspect: ^1.9.0
|
||||
checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7":
|
||||
version: 3.0.7
|
||||
resolution: "signal-exit@npm:3.0.7"
|
||||
@@ -8537,10 +8519,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0":
|
||||
version: 1.5.0
|
||||
resolution: "statuses@npm:1.5.0"
|
||||
checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c
|
||||
"statuses@npm:2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "statuses@npm:2.0.1"
|
||||
checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8947,10 +8929,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"toidentifier@npm:1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "toidentifier@npm:1.0.0"
|
||||
checksum: 199e6bfca1531d49b3506cff02353d53ec987c9ee10ee272ca6484ed97f1fc10fb77c6c009079ca16d5c5be4a10378178c3cacdb41ce9ec954c3297c74c6053e
|
||||
"toidentifier@npm:1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "toidentifier@npm:1.0.1"
|
||||
checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -9041,7 +9023,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"type-is@npm:~1.6.17, type-is@npm:~1.6.18":
|
||||
"type-is@npm:~1.6.18":
|
||||
version: 1.6.18
|
||||
resolution: "type-is@npm:1.6.18"
|
||||
dependencies:
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
const { createHash } = require('crypto');
|
||||
const { transform } = require('sucrase');
|
||||
const sucrasePkg = require('sucrase/package.json');
|
||||
const sucrasePluginPkg = require('@sucrase/jest-plugin/package.json');
|
||||
|
||||
const ESM_REGEX = /\b(?:import|export)\b/;
|
||||
|
||||
@@ -70,15 +69,12 @@ function createTransformer(config) {
|
||||
return { code: source };
|
||||
};
|
||||
|
||||
// TODO: contribute something like this to @sucrase/jest-plugin
|
||||
const getCacheKey = sourceText => {
|
||||
return createHash('md5')
|
||||
.update(sourceText)
|
||||
.update(Buffer.alloc(1))
|
||||
.update(sucrasePkg.version)
|
||||
.update(Buffer.alloc(1))
|
||||
.update(sucrasePluginPkg.version)
|
||||
.update(Buffer.alloc(1))
|
||||
.update(JSON.stringify(config))
|
||||
.update(Buffer.alloc(1))
|
||||
.update('1') // increment whenever the transform logic in this file changes
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
"@spotify/eslint-config-base": "^14.0.0",
|
||||
"@spotify/eslint-config-react": "^14.0.0",
|
||||
"@spotify/eslint-config-typescript": "^14.0.0",
|
||||
"@sucrase/jest-plugin": "^2.1.1",
|
||||
"@sucrase/webpack-loader": "^2.0.0",
|
||||
"@svgr/plugin-jsx": "6.5.x",
|
||||
"@svgr/plugin-svgo": "6.5.x",
|
||||
|
||||
@@ -35,6 +35,8 @@ export class WebStorage implements StorageApi {
|
||||
private readonly errorApi: ErrorApi,
|
||||
) {}
|
||||
|
||||
private static hasSubscribed = false;
|
||||
|
||||
static create(options: {
|
||||
errorApi: ErrorApi;
|
||||
namespace?: string;
|
||||
@@ -42,6 +44,16 @@ export class WebStorage implements StorageApi {
|
||||
return new WebStorage(options.namespace ?? '', options.errorApi);
|
||||
}
|
||||
|
||||
private static addStorageEventListener() {
|
||||
window.addEventListener('storage', event => {
|
||||
for (const [bucketPath, webStorage] of buckets.entries()) {
|
||||
if (event.key?.startsWith(bucketPath)) {
|
||||
webStorage.handleStorageChange(event.key);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
get<T>(key: string): T | undefined {
|
||||
return this.snapshot(key).value as T | undefined;
|
||||
}
|
||||
@@ -89,9 +101,19 @@ export class WebStorage implements StorageApi {
|
||||
observe$<T extends JsonValue>(
|
||||
key: string,
|
||||
): Observable<StorageValueSnapshot<T>> {
|
||||
if (!WebStorage.hasSubscribed) {
|
||||
WebStorage.addStorageEventListener();
|
||||
WebStorage.hasSubscribed = true;
|
||||
}
|
||||
return this.observable.filter(({ key: messageKey }) => messageKey === key);
|
||||
}
|
||||
|
||||
private handleStorageChange(eventKey: StorageEvent['key']) {
|
||||
if (!eventKey?.startsWith(this.namespace)) return;
|
||||
const key = eventKey?.replace(`${this.namespace}/`, '');
|
||||
this.notifyChanges(key);
|
||||
}
|
||||
|
||||
private getKeyName(key: string) {
|
||||
return `${this.namespace}/${encodeURIComponent(key)}`;
|
||||
}
|
||||
|
||||
@@ -624,21 +624,18 @@ describe('Integration Test', () => {
|
||||
describe('relative url resolvers', () => {
|
||||
it.each([
|
||||
[
|
||||
[document.location.href, document.location.href],
|
||||
['http://localhost', 'http://localhost'],
|
||||
{
|
||||
backend: {
|
||||
baseUrl: 'http://localhost:8008/',
|
||||
baseUrl: 'http://localhost:8008',
|
||||
},
|
||||
app: {
|
||||
baseUrl: 'http://localhost:8008/',
|
||||
baseUrl: 'http://localhost:8008',
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
[
|
||||
`${document.location.origin}/backstage`,
|
||||
`${document.location.origin}/backstage`,
|
||||
],
|
||||
['http://localhost/backstage', 'http://localhost/backstage'],
|
||||
{
|
||||
backend: {
|
||||
baseUrl: 'http://test.com/backstage',
|
||||
@@ -650,8 +647,8 @@ describe('Integration Test', () => {
|
||||
],
|
||||
[
|
||||
[
|
||||
`${document.location.origin}/backstage/instance`,
|
||||
`${document.location.origin}/backstage/instance`,
|
||||
'http://localhost/backstage/instance',
|
||||
'http://localhost/backstage/instance',
|
||||
],
|
||||
{
|
||||
backend: {
|
||||
@@ -664,8 +661,8 @@ describe('Integration Test', () => {
|
||||
],
|
||||
[
|
||||
[
|
||||
`${document.location.origin}/backstage/instance`,
|
||||
`http://test.com/backstage/instance`,
|
||||
'http://localhost/backstage/instance',
|
||||
'http://test.com/backstage/instance',
|
||||
],
|
||||
{
|
||||
backend: {
|
||||
|
||||
@@ -179,7 +179,7 @@ function useConfigLoader(
|
||||
return new URL(
|
||||
fullUrl.replace(getOrigin(fullUrl), ''),
|
||||
document.location.origin,
|
||||
).href;
|
||||
).href.replace(/\/$/, '');
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -199,15 +199,17 @@ function useConfigLoader(
|
||||
const backendOrigin = getOrigin(backendBaseUrl);
|
||||
|
||||
if (appOrigin === backendOrigin) {
|
||||
relativeResolverConfig.data.backend = {
|
||||
baseUrl: overrideOrigin(backendBaseUrl),
|
||||
};
|
||||
const newBackendBaseUrl = overrideOrigin(backendBaseUrl);
|
||||
if (backendBaseUrl !== newBackendBaseUrl) {
|
||||
relativeResolverConfig.data.backend = { baseUrl: newBackendBaseUrl };
|
||||
}
|
||||
}
|
||||
}
|
||||
if (appBaseUrl) {
|
||||
relativeResolverConfig.data.app = {
|
||||
baseUrl: overrideOrigin(appBaseUrl),
|
||||
};
|
||||
const newAppBaseUrl = overrideOrigin(appBaseUrl);
|
||||
if (appBaseUrl !== newAppBaseUrl) {
|
||||
relativeResolverConfig.data.app = { baseUrl: newAppBaseUrl };
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Only add the relative config if there is actually data to add.
|
||||
|
||||
+13
-11
@@ -48,7 +48,7 @@ describe('ProxiedSignInIdentity', () => {
|
||||
|
||||
it('handles a token that has no exp', async () => {
|
||||
const [a, _b, c] = validBackstageToken.split('.');
|
||||
const botched = `${a}.${btoa(JSON.stringify({}))}.${c}`;
|
||||
const botched = `${a}.${window.btoa(JSON.stringify({}))}.${c}`;
|
||||
expect(tokenToExpiry(botched)).toEqual(
|
||||
new Date(new Date(Date.now() + DEFAULTS.defaultTokenExpiryMillis)),
|
||||
);
|
||||
@@ -81,16 +81,18 @@ describe('ProxiedSignInIdentity', () => {
|
||||
backstageIdentity: {
|
||||
token: [
|
||||
'eyJhbGciOiJFUzI1NiIsImtpZCI6ImMxNTMzNDRiLWZjYzktNGIwOS1iN2ZhLTU3ZmM5MDhjMjBiNiJ9',
|
||||
btoa(
|
||||
JSON.stringify({
|
||||
iss: 'http://localhost:7007/api/auth',
|
||||
sub: 'user:default/freben',
|
||||
aud: 'backstage',
|
||||
iat,
|
||||
exp,
|
||||
ent: ['group:default/my-team'],
|
||||
}),
|
||||
).replace(/=/g, ''),
|
||||
window
|
||||
.btoa(
|
||||
JSON.stringify({
|
||||
iss: 'http://localhost:7007/api/auth',
|
||||
sub: 'user:default/freben',
|
||||
aud: 'backstage',
|
||||
iat,
|
||||
exp,
|
||||
ent: ['group:default/my-team'],
|
||||
}),
|
||||
)
|
||||
.replace(/=/g, ''),
|
||||
'4nOTmPHPwhzaKTzikgUsHcszfcP-JamcojMnRfyfsKhyHCCEywe6uLFlvvmK5NbaX5Z7IIji-kg7bxKU58kwoQ',
|
||||
].join('.'),
|
||||
identity: {
|
||||
|
||||
@@ -40,7 +40,7 @@ export function tokenToExpiry(jwtToken: string | undefined): Date {
|
||||
}
|
||||
|
||||
const [_header, rawPayload, _signature] = jwtToken.split('.');
|
||||
const payload = JSON.parse(atob(rawPayload));
|
||||
const payload = JSON.parse(window.atob(rawPayload));
|
||||
if (typeof payload.exp !== 'number') {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ import {
|
||||
|
||||
function parseJwtPayload(token: string) {
|
||||
const [_header, payload, _signature] = token.split('.');
|
||||
return JSON.parse(atob(payload));
|
||||
return JSON.parse(window.atob(payload));
|
||||
}
|
||||
|
||||
type LegacySignInResult = {
|
||||
|
||||
@@ -42,6 +42,7 @@ export default async (opts: OptionValues): Promise<void> => {
|
||||
{
|
||||
type: 'input',
|
||||
name: 'name',
|
||||
default: 'backstage',
|
||||
message: chalk.blue('Enter a name for the app [required]'),
|
||||
validate: (value: any) => {
|
||||
if (!value) {
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
"@spotify/prettier-config": "^12.0.0",
|
||||
"concurrently": "^6.0.0",
|
||||
"lerna": "^4.0.0",
|
||||
"node-gyp": "^9.0.0",
|
||||
"prettier": "^2.3.2",
|
||||
"typescript": "~4.6.4",
|
||||
"node-gyp": "^9.0.0"
|
||||
"typescript": "~4.6.4"
|
||||
},
|
||||
"resolutions": {
|
||||
"@types/react": "^17",
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
"@backstage/plugin-search-react": "^{{version '@backstage/plugin-search-react'}}",
|
||||
"@backstage/plugin-tech-radar": "^{{version '@backstage/plugin-tech-radar'}}",
|
||||
"@backstage/plugin-techdocs": "^{{version '@backstage/plugin-techdocs'}}",
|
||||
"@backstage/plugin-techdocs-react": "^{{version '@backstage/plugin-techdocs-react'}}",
|
||||
"@backstage/plugin-techdocs-module-addons-contrib": "^{{version '@backstage/plugin-techdocs-module-addons-contrib'}}",
|
||||
"@backstage/plugin-techdocs-react": "^{{version '@backstage/plugin-techdocs-react'}}",
|
||||
"@backstage/plugin-user-settings": "^{{version '@backstage/plugin-user-settings'}}",
|
||||
"@backstage/theme": "^{{version '@backstage/theme'}}",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
|
||||
@@ -16,11 +16,10 @@
|
||||
"build-image": "docker build ../.. -f Dockerfile --tag backstage"
|
||||
},
|
||||
"dependencies": {
|
||||
"app": "link:../app",
|
||||
"@backstage/backend-common": "^{{version '@backstage/backend-common'}}",
|
||||
"@backstage/backend-tasks": "^{{version '@backstage/backend-tasks'}}",
|
||||
"@backstage/catalog-model": "^{{version '@backstage/catalog-model'}}",
|
||||
"@backstage/catalog-client": "^{{version '@backstage/catalog-client'}}",
|
||||
"@backstage/catalog-model": "^{{version '@backstage/catalog-model'}}",
|
||||
"@backstage/config": "^{{version '@backstage/config'}}",
|
||||
"@backstage/plugin-app-backend": "^{{version '@backstage/plugin-app-backend'}}",
|
||||
"@backstage/plugin-auth-backend": "^{{version '@backstage/plugin-auth-backend'}}",
|
||||
@@ -34,6 +33,7 @@
|
||||
"@backstage/plugin-search-backend-module-pg": "^{{version '@backstage/plugin-search-backend-module-pg'}}",
|
||||
"@backstage/plugin-search-backend-node": "^{{version '@backstage/plugin-search-backend-node'}}",
|
||||
"@backstage/plugin-techdocs-backend": "^{{version '@backstage/plugin-techdocs-backend'}}",
|
||||
"app": "link:../app",
|
||||
"better-sqlite3": "^7.5.0",
|
||||
"dockerode": "^3.3.1",
|
||||
"express": "^4.17.1",
|
||||
@@ -44,8 +44,8 @@
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^{{version '@backstage/cli'}}",
|
||||
"@types/dockerode": "^3.3.0",
|
||||
"@types/express-serve-static-core": "^4.17.5",
|
||||
"@types/express": "^4.17.6",
|
||||
"@types/express-serve-static-core": "^4.17.5",
|
||||
"@types/luxon": "^2.0.4"
|
||||
},
|
||||
"files": [
|
||||
|
||||
@@ -57,13 +57,14 @@ export async function run() {
|
||||
const appDir = await createApp('test-app', workspaceDir, rootDir);
|
||||
|
||||
print('Creating a Backstage Plugin');
|
||||
const pluginName = await createPlugin('test-plugin', appDir);
|
||||
const pluginId = 'test';
|
||||
await createPlugin({ appDir, pluginId, select: 'plugin' });
|
||||
|
||||
print('Creating a Backstage Backend Plugin');
|
||||
await createPlugin('test-plugin', appDir, ['--backend']);
|
||||
await createPlugin({ appDir, pluginId, select: 'backend-plugin' });
|
||||
|
||||
print('Starting the app');
|
||||
await testAppServe(pluginName, appDir);
|
||||
await testAppServe(pluginId, appDir);
|
||||
|
||||
if (Boolean(process.env.POSTGRES_USER)) {
|
||||
print('Testing the PostgreSQL backend startup');
|
||||
@@ -328,14 +329,18 @@ async function overrideModuleResolutions(appDir: string, workspaceDir: string) {
|
||||
/**
|
||||
* Uses create-plugin command to create a new plugin in the app
|
||||
*/
|
||||
async function createPlugin(
|
||||
pluginName: string,
|
||||
appDir: string,
|
||||
options: string[] = [],
|
||||
) {
|
||||
const child = spawnPiped(['yarn', 'create-plugin', ...options], {
|
||||
cwd: appDir,
|
||||
});
|
||||
async function createPlugin(options: {
|
||||
appDir: string;
|
||||
pluginId: string;
|
||||
select: string;
|
||||
}) {
|
||||
const { appDir, pluginId, select } = options;
|
||||
const child = spawnPiped(
|
||||
['yarn', 'new', '--select', select, '--option', `id=${pluginId}`],
|
||||
{
|
||||
cwd: appDir,
|
||||
},
|
||||
);
|
||||
|
||||
try {
|
||||
let stdout = '';
|
||||
@@ -343,20 +348,14 @@ async function createPlugin(
|
||||
stdout = stdout + data.toString('utf8');
|
||||
});
|
||||
|
||||
await waitFor(() => stdout.includes('Enter an ID for the plugin'));
|
||||
child.stdin?.write(`${pluginName}\n`);
|
||||
|
||||
// await waitFor(() => stdout.includes('Enter the owner(s) of the plugin'));
|
||||
// child.stdin.write('@someuser\n');
|
||||
|
||||
print('Waiting for plugin create script to be done');
|
||||
await waitForExit(child);
|
||||
|
||||
const canonicalName = options.includes('--backend')
|
||||
? `${pluginName}-backend`
|
||||
: pluginName;
|
||||
|
||||
const pluginDir = resolvePath(appDir, 'plugins', canonicalName);
|
||||
const pluginDir = resolvePath(
|
||||
appDir,
|
||||
'plugins',
|
||||
select === 'backend-plugin' ? `${pluginId}-backend` : pluginId,
|
||||
);
|
||||
|
||||
print(`Running 'yarn tsc' in root for newly created plugin`);
|
||||
await runPlain(['yarn', 'tsc'], { cwd: appDir });
|
||||
@@ -365,8 +364,6 @@ async function createPlugin(
|
||||
print(`Running 'yarn ${cmd.join(' ')}' in newly created plugin`);
|
||||
await runPlain(['yarn', ...cmd], { cwd: pluginDir });
|
||||
}
|
||||
|
||||
return canonicalName;
|
||||
} finally {
|
||||
child.kill();
|
||||
}
|
||||
@@ -375,7 +372,7 @@ async function createPlugin(
|
||||
/**
|
||||
* Start serving the newly created app and make sure that the create plugin is rendering correctly
|
||||
*/
|
||||
async function testAppServe(pluginName: string, appDir: string) {
|
||||
async function testAppServe(pluginId: string, appDir: string) {
|
||||
const startApp = spawnPiped(['yarn', 'start'], {
|
||||
cwd: appDir,
|
||||
env: {
|
||||
@@ -398,8 +395,8 @@ async function testAppServe(pluginName: string, appDir: string) {
|
||||
await waitForPageWithText(page, '/', 'My Company Catalog');
|
||||
await waitForPageWithText(
|
||||
page,
|
||||
`/${pluginName}`,
|
||||
`Welcome to ${pluginName}!`,
|
||||
`/${pluginId}`,
|
||||
`Welcome to ${pluginId}!`,
|
||||
);
|
||||
|
||||
print('Both App and Plugin loaded correctly');
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.57",
|
||||
"object-hash": "^3.0.0",
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -48,7 +47,6 @@
|
||||
"@testing-library/react": "^12.1.3",
|
||||
"@testing-library/user-event": "^14.0.0",
|
||||
"@types/node": "^16.11.26",
|
||||
"@types/object-hash": "^2.2.1",
|
||||
"cross-fetch": "^3.1.5",
|
||||
"msw": "^0.49.0"
|
||||
},
|
||||
|
||||
@@ -13,9 +13,8 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Entity } from '@backstage/catalog-model';
|
||||
import React from 'react';
|
||||
import { Grid, Typography } from '@material-ui/core';
|
||||
import {
|
||||
EmptyState,
|
||||
ErrorPanel,
|
||||
@@ -23,12 +22,13 @@ import {
|
||||
MissingAnnotationEmptyState,
|
||||
Progress,
|
||||
} from '@backstage/core-components';
|
||||
import hash from 'object-hash';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
import { BackstageTheme } from '@backstage/theme';
|
||||
import { useApi } from '@backstage/core-plugin-api';
|
||||
import { airbrakeApiRef } from '../../api';
|
||||
import { BackstageTheme } from '@backstage/theme';
|
||||
import { Grid, Typography } from '@material-ui/core';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
import React from 'react';
|
||||
import useAsync from 'react-use/lib/useAsync';
|
||||
import { airbrakeApiRef } from '../../api';
|
||||
import { AIRBRAKE_PROJECT_ID_ANNOTATION, useProjectId } from '../useProjectId';
|
||||
|
||||
const useStyles = makeStyles<BackstageTheme>(() => ({
|
||||
@@ -64,8 +64,8 @@ export const EntityAirbrakeWidget = ({ entity }: { entity: Entity }) => {
|
||||
<Grid container spacing={3} direction="column">
|
||||
{value.groups?.map(group => (
|
||||
<Grid item key={group.id}>
|
||||
{group.errors?.map(groupError => (
|
||||
<InfoCard title={groupError.type} key={hash(groupError)}>
|
||||
{group.errors?.map((groupError, i) => (
|
||||
<InfoCard title={groupError.type} key={i}>
|
||||
<Typography variant="body1" className={classes.multilineText}>
|
||||
{groupError.message}
|
||||
</Typography>
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
import { PluginEndpointDiscovery } from '@backstage/backend-common';
|
||||
import {
|
||||
createBackendModule,
|
||||
createServiceFactory,
|
||||
coreServices,
|
||||
} from '@backstage/backend-plugin-api';
|
||||
import { startTestBackend } from '@backstage/backend-test-utils';
|
||||
@@ -27,15 +26,6 @@ import { catalogServiceRef } from './catalogService';
|
||||
describe('catalogServiceRef', () => {
|
||||
it('should return a catalogClient', async () => {
|
||||
expect.assertions(1);
|
||||
|
||||
const mockDiscoveryFactory = createServiceFactory({
|
||||
service: coreServices.discovery,
|
||||
deps: {},
|
||||
factory: async ({}) => {
|
||||
return async () => jest.fn() as unknown as PluginEndpointDiscovery;
|
||||
},
|
||||
});
|
||||
|
||||
const testModule = createBackendModule({
|
||||
moduleId: 'test',
|
||||
pluginId: 'test',
|
||||
@@ -52,7 +42,9 @@ describe('catalogServiceRef', () => {
|
||||
});
|
||||
|
||||
await startTestBackend({
|
||||
services: [mockDiscoveryFactory],
|
||||
services: [
|
||||
[coreServices.discovery, {} as unknown as PluginEndpointDiscovery],
|
||||
],
|
||||
features: [testModule()],
|
||||
});
|
||||
});
|
||||
|
||||
@@ -2,13 +2,17 @@
|
||||
|
||||
Welcome to the Dynatrace plugin!
|
||||
|
||||

|
||||
|
||||
## Getting started
|
||||
|
||||
This plugin uses the Backstage proxy to communicate with Dynatrace's REST APIs.
|
||||
|
||||
### Setup
|
||||
|
||||
#### Dynatrace API Key
|
||||
#### Requirements
|
||||
|
||||
##### Dynatrace API Key
|
||||
|
||||
The Dynatrace plugin will require the following information, to be used in the configuration options detailed below:
|
||||
|
||||
@@ -17,6 +21,39 @@ The Dynatrace plugin will require the following information, to be used in the c
|
||||
- `entities.read`
|
||||
- `problems.read`
|
||||
|
||||
#### Install
|
||||
|
||||
1. Install the plugin on your frontend:
|
||||
|
||||
```
|
||||
yarn add --cwd packages/app @backstage/plugin-dynatrace
|
||||
```
|
||||
|
||||
2. We created in our catalog the interface for using the integration with Dynatrace.
|
||||
|
||||
```diff
|
||||
# packages/app/src/components/catalog/EntityPage.tsx
|
||||
|
||||
[...]
|
||||
+ import { DynatraceTab, isDynatraceAvailable } from '@backstage/plugin-dynatrace'
|
||||
|
||||
[...]
|
||||
|
||||
const serviceEntityPage = (
|
||||
<EntityLayout>
|
||||
[...]
|
||||
+ <EntityLayout.Route
|
||||
+ path="/dynatrace"
|
||||
+ title="Dynatrace"
|
||||
+ if={isDynatraceAvailable}
|
||||
+ >
|
||||
+ <DynatraceTab />
|
||||
+ </EntityLayout.Route>
|
||||
</EntityLaytou>
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
#### Plugin Configuration
|
||||
|
||||
This plugin requires a proxy endpoint for Dynatrace configured in `app-config.yaml` like so:
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
@@ -12,6 +12,11 @@
|
||||
"backstage": {
|
||||
"role": "frontend-plugin"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/backstage/backstage",
|
||||
"directory": "plugins/dynatrace"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "backstage-cli package start",
|
||||
"build": "backstage-cli package build",
|
||||
|
||||
Reference in New Issue
Block a user