From 1fb616c5f5398c905936df23f2431a08f7305882 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 27 Jul 2020 15:36:28 +0200 Subject: [PATCH 001/303] feat(gql): added some experimentation around graphql modules --- plugins/bogus-graphql/.eslintrc.js | 3 + plugins/bogus-graphql/README.md | 13 ++ plugins/bogus-graphql/package.json | 44 +++++ plugins/bogus-graphql/scripts/mock-data.sh | 2 + plugins/bogus-graphql/src/graphql/module.ts | 47 +++++ plugins/bogus-graphql/src/index.ts | 19 ++ plugins/bogus-graphql/src/schema.gql | 3 + plugins/bogus-graphql/src/setupTests.ts | 18 ++ plugins/catalog-graphql/.eslintrc.js | 3 + plugins/catalog-graphql/README.md | 13 ++ plugins/catalog-graphql/package.json | 44 +++++ plugins/catalog-graphql/scripts/mock-data.sh | 2 + plugins/catalog-graphql/src/graphql/module.ts | 82 +++++++++ plugins/catalog-graphql/src/index.ts | 19 ++ plugins/catalog-graphql/src/schema.gql | 25 +++ plugins/catalog-graphql/src/setupTests.ts | 18 ++ plugins/graphql/package.json | 3 + plugins/graphql/src/schema.gql | 11 -- plugins/graphql/src/service/router.ts | 12 +- yarn.lock | 166 +++++++++++++++++- 20 files changed, 528 insertions(+), 19 deletions(-) create mode 100644 plugins/bogus-graphql/.eslintrc.js create mode 100644 plugins/bogus-graphql/README.md create mode 100644 plugins/bogus-graphql/package.json create mode 100755 plugins/bogus-graphql/scripts/mock-data.sh create mode 100644 plugins/bogus-graphql/src/graphql/module.ts create mode 100644 plugins/bogus-graphql/src/index.ts create mode 100644 plugins/bogus-graphql/src/schema.gql create mode 100644 plugins/bogus-graphql/src/setupTests.ts create mode 100644 plugins/catalog-graphql/.eslintrc.js create mode 100644 plugins/catalog-graphql/README.md create mode 100644 plugins/catalog-graphql/package.json create mode 100755 plugins/catalog-graphql/scripts/mock-data.sh create mode 100644 plugins/catalog-graphql/src/graphql/module.ts create mode 100644 plugins/catalog-graphql/src/index.ts create mode 100644 plugins/catalog-graphql/src/schema.gql create mode 100644 plugins/catalog-graphql/src/setupTests.ts diff --git a/plugins/bogus-graphql/.eslintrc.js b/plugins/bogus-graphql/.eslintrc.js new file mode 100644 index 0000000000..16a033dbc6 --- /dev/null +++ b/plugins/bogus-graphql/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: [require.resolve('@backstage/cli/config/eslint.backend')], +}; diff --git a/plugins/bogus-graphql/README.md b/plugins/bogus-graphql/README.md new file mode 100644 index 0000000000..3f85ec766e --- /dev/null +++ b/plugins/bogus-graphql/README.md @@ -0,0 +1,13 @@ +# graphql + +Welcome to the graphql backend plugin! + +_This plugin was created through the Backstage CLI_ + +## Getting started + +Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/graphql](http://localhost:3000/graphql). + +You can also serve the plugin in isolation by running `yarn start` in the plugin directory. +This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. +It is only meant for local development, and the setup for it can be found inside the [/dev](/dev) directory. diff --git a/plugins/bogus-graphql/package.json b/plugins/bogus-graphql/package.json new file mode 100644 index 0000000000..a5a439a701 --- /dev/null +++ b/plugins/bogus-graphql/package.json @@ -0,0 +1,44 @@ +{ + "name": "@backstage/plugin-bogus-graphql", + "version": "0.1.1-alpha.16", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.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", + "mock-data": "./scripts/mock-data.sh" + }, + "dependencies": { + "@backstage/backend-common": "^0.1.1-alpha.16", + "@graphql-modules/core": "^0.7.17", + "@types/express": "^4.17.6", + "@types/whatwg-fetch": "^0.0.33", + "graphql": "^15.3.0", + "node-fetch": "^2.6.0", + "whatwg-fetch": "^2.0.0", + "winston": "^3.2.1", + "yn": "^4.0.0" + }, + "devDependencies": { + "@backstage/cli": "^0.1.1-alpha.16", + "@types/supertest": "^2.0.8", + "eslint-plugin-graphql": "^4.0.0", + "msw": "^0.19.5", + "supertest": "^4.0.2" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/bogus-graphql/scripts/mock-data.sh b/plugins/bogus-graphql/scripts/mock-data.sh new file mode 100755 index 0000000000..ff30921715 --- /dev/null +++ b/plugins/bogus-graphql/scripts/mock-data.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +echo "use this script to load your service with some mock data if needed!" diff --git a/plugins/bogus-graphql/src/graphql/module.ts b/plugins/bogus-graphql/src/graphql/module.ts new file mode 100644 index 0000000000..f247686ea8 --- /dev/null +++ b/plugins/bogus-graphql/src/graphql/module.ts @@ -0,0 +1,47 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ + +import { Logger } from 'winston'; +import fs from 'fs'; +import path from 'path'; +import { GraphQLModule } from '@graphql-modules/core'; + +export interface ModuleOptions { + logger: Logger; +} + +export async function createModule( + options: ModuleOptions, +): Promise { + const typeDefs = await fs.promises.readFile( + path.resolve(__dirname, '..', 'schema.gql'), + 'utf-8', + ); + + const resolvers = { + EntityMetadata: { + uppercaseName: metadata => metadata.name.toUpperCase(), + }, + }; + + const module = new GraphQLModule({ + typeDefs, + resolvers, + logger: options.logger as any, + }); + + return module; +} diff --git a/plugins/bogus-graphql/src/index.ts b/plugins/bogus-graphql/src/index.ts new file mode 100644 index 0000000000..dd6508f88a --- /dev/null +++ b/plugins/bogus-graphql/src/index.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ + +require('whatwg-fetch'); + +export * from './graphql/module'; diff --git a/plugins/bogus-graphql/src/schema.gql b/plugins/bogus-graphql/src/schema.gql new file mode 100644 index 0000000000..74c0853a92 --- /dev/null +++ b/plugins/bogus-graphql/src/schema.gql @@ -0,0 +1,3 @@ +type EntityMetadata { + uppercaseName: String +} diff --git a/plugins/bogus-graphql/src/setupTests.ts b/plugins/bogus-graphql/src/setupTests.ts new file mode 100644 index 0000000000..ac41ef995a --- /dev/null +++ b/plugins/bogus-graphql/src/setupTests.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ +require('whatwg-fetch'); + +export {}; diff --git a/plugins/catalog-graphql/.eslintrc.js b/plugins/catalog-graphql/.eslintrc.js new file mode 100644 index 0000000000..16a033dbc6 --- /dev/null +++ b/plugins/catalog-graphql/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: [require.resolve('@backstage/cli/config/eslint.backend')], +}; diff --git a/plugins/catalog-graphql/README.md b/plugins/catalog-graphql/README.md new file mode 100644 index 0000000000..3f85ec766e --- /dev/null +++ b/plugins/catalog-graphql/README.md @@ -0,0 +1,13 @@ +# graphql + +Welcome to the graphql backend plugin! + +_This plugin was created through the Backstage CLI_ + +## Getting started + +Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/graphql](http://localhost:3000/graphql). + +You can also serve the plugin in isolation by running `yarn start` in the plugin directory. +This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. +It is only meant for local development, and the setup for it can be found inside the [/dev](/dev) directory. diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json new file mode 100644 index 0000000000..57fade9654 --- /dev/null +++ b/plugins/catalog-graphql/package.json @@ -0,0 +1,44 @@ +{ + "name": "@backstage/plugin-catalog-graphql", + "version": "0.1.1-alpha.16", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.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", + "mock-data": "./scripts/mock-data.sh" + }, + "dependencies": { + "@backstage/backend-common": "^0.1.1-alpha.16", + "@graphql-modules/core": "^0.7.17", + "@types/express": "^4.17.6", + "@types/whatwg-fetch": "^0.0.33", + "graphql": "^15.3.0", + "node-fetch": "^2.6.0", + "whatwg-fetch": "^2.0.0", + "winston": "^3.2.1", + "yn": "^4.0.0" + }, + "devDependencies": { + "@backstage/cli": "^0.1.1-alpha.16", + "@types/supertest": "^2.0.8", + "eslint-plugin-graphql": "^4.0.0", + "msw": "^0.19.5", + "supertest": "^4.0.2" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/catalog-graphql/scripts/mock-data.sh b/plugins/catalog-graphql/scripts/mock-data.sh new file mode 100755 index 0000000000..ff30921715 --- /dev/null +++ b/plugins/catalog-graphql/scripts/mock-data.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +echo "use this script to load your service with some mock data if needed!" diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts new file mode 100644 index 0000000000..65239d27db --- /dev/null +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -0,0 +1,82 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ + +import { Logger } from 'winston'; +import fetch from 'node-fetch'; +import fs from 'fs'; +import path from 'path'; +import { GraphQLModule } from '@graphql-modules/core'; + +export interface ModuleOptions { + logger: Logger; +} + +// function wrapLogger(logger: Logger) { +// return { +// log: (msg: string | Error, ...extra: any[]) => +// logger.info(String(msg), ...extra), +// debug: (msg: string | Error, ...extra: any[]) => +// logger.info(String(msg), ...extra), +// info: (msg: string | Error, ...extra: any[]) => +// logger.info(String(msg), ...extra), +// error: (msg: string | Error, ...extra: any[]) => +// logger.info(String(msg), ...extra), +// clientError: (msg: string | Error, ...extra: any[]) => +// logger.info(String(msg), ...extra), +// warn: (msg: string | Error, ...extra: any[]) => +// logger.info(String(msg), ...extra), +// }; +// } + +class CatalogClient { + async list() { + const res = await fetch('http://localhost:7000/catalog/entities'); + if (!res.ok) { + throw new Error(`NOPE, ${await res.text()}`); + } + + return res.json(); + } +} + +export async function createModule( + options: ModuleOptions, +): Promise { + const typeDefs = await fs.promises.readFile( + path.resolve(__dirname, '..', 'schema.gql'), + 'utf-8', + ); + + const catalogClient = new CatalogClient(); + + const resolvers = { + Query: { + catalog: () => true, + }, + CatalogQuery: { + list: () => catalogClient.list(), + }, + CatalogEntity: () => ({}), + }; + + const module = new GraphQLModule({ + typeDefs, + resolvers, + logger: options.logger as any, + }); + + return module; +} diff --git a/plugins/catalog-graphql/src/index.ts b/plugins/catalog-graphql/src/index.ts new file mode 100644 index 0000000000..dd6508f88a --- /dev/null +++ b/plugins/catalog-graphql/src/index.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ + +require('whatwg-fetch'); + +export * from './graphql/module'; diff --git a/plugins/catalog-graphql/src/schema.gql b/plugins/catalog-graphql/src/schema.gql new file mode 100644 index 0000000000..ea92d4e04f --- /dev/null +++ b/plugins/catalog-graphql/src/schema.gql @@ -0,0 +1,25 @@ +type EntityMetadataAnnotation { + key: String! + value: String! +} + +type EntityMetadata { + name: String! + namespace: String + annotation(name: String): EntityMetadataAnnotation + annotations: [EntityMetadataAnnotation!]! +} + +type CatalogEntity { + apiVersion: String + kind: String! + metadata: EntityMetadata +} + +type CatalogQuery { + list: [CatalogEntity!]! +} + +type Query { + catalog: CatalogQuery! +} diff --git a/plugins/catalog-graphql/src/setupTests.ts b/plugins/catalog-graphql/src/setupTests.ts new file mode 100644 index 0000000000..ac41ef995a --- /dev/null +++ b/plugins/catalog-graphql/src/setupTests.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ +require('whatwg-fetch'); + +export {}; diff --git a/plugins/graphql/package.json b/plugins/graphql/package.json index 42f3dc9046..269ebe71f5 100644 --- a/plugins/graphql/package.json +++ b/plugins/graphql/package.json @@ -22,6 +22,9 @@ }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.16", + "@backstage/plugin-catalog-graphql": "^0.1.1-alpha.16", + "@backstage/plugin-bogus-graphql": "^0.1.1-alpha.16", + "@graphql-modules/core": "^0.7.17", "@types/express": "^4.17.6", "apollo-server": "^2.16.0", "apollo-server-express": "^2.16.0", diff --git a/plugins/graphql/src/schema.gql b/plugins/graphql/src/schema.gql index 5568182f7f..e69de29bb2 100644 --- a/plugins/graphql/src/schema.gql +++ b/plugins/graphql/src/schema.gql @@ -1,11 +0,0 @@ -type CatalogEntity { - id: String -} - -type CatalogQuery { - list: [CatalogEntity!]! -} - -type Query { - catalog: CatalogQuery! -} diff --git a/plugins/graphql/src/service/router.ts b/plugins/graphql/src/service/router.ts index 09ab5270b7..e12f3770dd 100644 --- a/plugins/graphql/src/service/router.ts +++ b/plugins/graphql/src/service/router.ts @@ -20,7 +20,10 @@ import Router from 'express-promise-router'; import { Logger } from 'winston'; import fs from 'fs'; import path from 'path'; +import { GraphQLModule } from '@graphql-modules/core'; import { ApolloServer } from 'apollo-server-express'; +import { createModule as createCatalogModule } from '@backstage/plugin-catalog-graphql'; +import { createModule as createBogusModule } from '@backstage/plugin-bogus-graphql'; export interface RouterOptions { logger: Logger; @@ -34,7 +37,14 @@ export async function createRouter( 'utf-8', ); - const server = new ApolloServer({ typeDefs, logger: options.logger }); + const catalogModule = await createCatalogModule(options); + const bogusModule = await createBogusModule(options); + const { schema } = new GraphQLModule({ + imports: [catalogModule, bogusModule], + typeDefs, + }); + + const server = new ApolloServer({ schema, logger: options.logger }); const router = Router(); const apolloMiddlware = server.getMiddleware({ path: '/' }); diff --git a/yarn.lock b/yarn.lock index a31c2a75ae..55d8356bed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1229,6 +1229,47 @@ unique-filename "^1.1.1" which "^1.3.1" +"@graphql-modules/core@^0.7.17": + version "0.7.17" + resolved "https://registry.npmjs.org/@graphql-modules/core/-/core-0.7.17.tgz#ae9bbf44894509664bc0b6fcdd9b6cf3d99bcd00" + integrity sha512-hGJa1VIsIHTKJ0Hc5gJfFrdhHAF1Vm+LWYeMNC5mPbVd/IZA1wVSpdLDjjliylLI6GnVRu1YreS2gXvFNXPJFA== + dependencies: + "@graphql-modules/di" "0.7.17" + "@graphql-toolkit/common" "0.10.6" + "@graphql-toolkit/schema-merging" "0.10.6" + apollo-server-caching "0.5.1" + deepmerge "4.2.2" + graphql-tools "5.0.0" + tslib "2.0.0" + +"@graphql-modules/di@0.7.17": + version "0.7.17" + resolved "https://registry.npmjs.org/@graphql-modules/di/-/di-0.7.17.tgz#049f93f204a6d90b7ee4e047a0654c6056f28065" + integrity sha512-Lq5sd/3RO+bNb8wVnAg43LWbwrqD57D0AVEqZlqiTwUj1f0mITtQdGMRN7g2sG79U7ngoaQx8VK/IiKh8E1OFQ== + dependencies: + events "3.1.0" + tslib "2.0.0" + +"@graphql-toolkit/common@0.10.6": + version "0.10.6" + resolved "https://registry.npmjs.org/@graphql-toolkit/common/-/common-0.10.6.tgz#43591fd3478ab27ec95bf39d5a8afdd17f0ac2fd" + integrity sha512-rrH/KPheh/wCZzqUmNayBHd+aNWl/751C4iTL/327TzONdAVrV7ZQOyEkpGLW6YEFWPIlWxNkaBoEALIjCxTGg== + dependencies: + aggregate-error "3.0.1" + camel-case "4.1.1" + graphql-tools "5.0.0" + lodash "4.17.15" + +"@graphql-toolkit/schema-merging@0.10.6": + version "0.10.6" + resolved "https://registry.npmjs.org/@graphql-toolkit/schema-merging/-/schema-merging-0.10.6.tgz#9f57a349621a4377a3431a0320221d9aa6a9d982" + integrity sha512-BNABgYaNCw4Li3EiH/x7oDpkN+ml3M0SWqjnsW1Pf2NcyfGlv033Bda+O/q4XYtseZ0OOOh52GLXtUgwyPFb8A== + dependencies: + "@graphql-toolkit/common" "0.10.6" + deepmerge "4.2.2" + graphql-tools "5.0.0" + tslib "1.11.1" + "@graphql-tools/delegate@6.0.15": version "6.0.15" resolved "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-6.0.15.tgz#9e060bfc31fe7735bd5b2b401e98dea3fa5d3b25" @@ -4472,6 +4513,20 @@ dependencies: "@types/node" "*" +"@types/whatwg-fetch@^0.0.33": + version "0.0.33" + resolved "https://registry.npmjs.org/@types/whatwg-fetch/-/whatwg-fetch-0.0.33.tgz#19c0d2863c8cb2380f21a1c736b79cbf7895bb13" + integrity sha1-GcDShjyMsjgPIaHHNrecv3iVuxM= + dependencies: + "@types/whatwg-streams" "*" + +"@types/whatwg-streams@*": + version "3.2.1" + resolved "https://registry.npmjs.org/@types/whatwg-streams/-/whatwg-streams-3.2.1.tgz#225009a823e8b44be12569a24e60374ccdabe29e" + integrity sha512-Syv05sRL25b8cC8tqgXSQgLZZmqGq2GO+NafrtHbjPJccP6gWBXmHvo2Trw3AWXQ4QLIkVuOB7uStCuhzswyiw== + dependencies: + whatwg-streams "*" + "@types/whatwg-streams@^0.0.7": version "0.0.7" resolved "https://registry.npmjs.org/@types/whatwg-streams/-/whatwg-streams-0.0.7.tgz#28bfe73dc850562296367249c4b32a50db81e9d3" @@ -5056,7 +5111,16 @@ apollo-graphql@^0.5.0: apollo-env "^0.6.5" lodash.sortby "^4.7.0" -apollo-link@^1.2.14: +apollo-link-http-common@^0.2.14: + version "0.2.16" + resolved "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz#756749dafc732792c8ca0923f9a40564b7c59ecc" + integrity sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg== + dependencies: + apollo-link "^1.2.14" + ts-invariant "^0.4.0" + tslib "^1.9.3" + +apollo-link@^1.2.12, apollo-link@^1.2.14: version "1.2.14" resolved "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== @@ -5066,6 +5130,13 @@ apollo-link@^1.2.14: tslib "^1.9.3" zen-observable-ts "^0.8.21" +apollo-server-caching@0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.1.tgz#5cd0536ad5473abb667cc82b59bc56b96fb35db6" + integrity sha512-L7LHZ3k9Ao5OSf2WStvQhxdsNVplRQi7kCAPfqf9Z3GBEnQ2uaL0EgO0hSmtVHfXTbk5CTRziMT1Pe87bXrFIw== + dependencies: + lru-cache "^5.0.0" + apollo-server-caching@^0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.2.tgz#bef5d5e0d48473a454927a66b7bb947a0b6eb13e" @@ -5171,6 +5242,16 @@ apollo-tracing@^0.11.1: apollo-server-env "^2.4.5" apollo-server-plugin-base "^0.9.1" +apollo-upload-client@^13.0.0: + version "13.0.0" + resolved "https://registry.npmjs.org/apollo-upload-client/-/apollo-upload-client-13.0.0.tgz#146d1ddd85d711fcac8ca97a72d3ca6787f2b71b" + integrity sha512-lJ9/bk1BH1lD15WhWRha2J3+LrXrPIX5LP5EwiOUHv8PCORp4EUrcujrA3rI5hZeZygrTX8bshcuMdpqpSrvtA== + dependencies: + "@babel/runtime" "^7.9.2" + apollo-link "^1.2.12" + apollo-link-http-common "^0.2.14" + extract-files "^8.0.0" + apollo-utilities@^1.0.1, apollo-utilities@^1.3.0: version "1.3.4" resolved "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf" @@ -5954,6 +6035,11 @@ bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5 resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bluebird@~1.0.0: + version "1.0.8" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-1.0.8.tgz#851c7825e6cce59e4b43dde95d574b88675463fc" + integrity sha1-hRx4JebM5Z5LQ93pXVdLiGdUY/w= + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -7885,6 +7971,11 @@ deep-equal@^1.0.1, deep-equal@^1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deep-equal@~0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz#b246c2b80a570a47c11be1d9bd1070ec878b87ce" + integrity sha1-skbCuApXCkfBG+HZvRBw7IeLh84= + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -7905,7 +7996,7 @@ deep-object-diff@^1.1.0: resolved "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== -deepmerge@^4.2.2: +deepmerge@4.2.2, deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== @@ -7959,6 +8050,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@~0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz#f35eea7d705e933baf13b2f03b3f83d921403b3e" + integrity sha1-817qfXBekzuvE7LwOz+D2SFAOz4= + del@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -9007,7 +9103,7 @@ eventemitter3@^4.0.0: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== -events@^3.0.0: +events@3.1.0, events@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== @@ -9225,6 +9321,11 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-files@^8.0.0: + version "8.1.0" + resolved "https://registry.npmjs.org/extract-files/-/extract-files-8.1.0.tgz#46a0690d0fe77411a2e3804852adeaa65cd59288" + integrity sha512-PTGtfthZK79WUMk+avLmwx3NGdU8+iVFXC2NMGxKsn0MnihOG2lvumj+AZo8CTwTrwjXDgZ5tztbRlEdRjBonQ== + extract-zip@1.7.0: version "1.7.0" resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" @@ -10367,6 +10468,20 @@ graphql-tag@^2.9.2: resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.4.tgz#2f301a98219be8b178a6453bb7e33b79b66d8f83" integrity sha512-O7vG5BT3w6Sotc26ybcvLKNTdfr4GfsIVMD+LdYqXCeJIYPRyp8BIsDOUtxw7S1PYvRw5vH3278J2EDezR6mfA== +graphql-tools@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/graphql-tools/-/graphql-tools-5.0.0.tgz#67281c834a0e29f458adba8018f424816fa627e9" + integrity sha512-5zn3vtn//382b7G3Wzz3d5q/sh+f7tVrnxeuhTMTJ7pWJijNqLxH7VEzv8VwXCq19zAzHYEosFHfXiK7qzvk7w== + dependencies: + apollo-link "^1.2.14" + apollo-upload-client "^13.0.0" + deprecated-decorator "^0.1.6" + form-data "^3.0.0" + iterall "^1.3.0" + node-fetch "^2.6.0" + tslib "^1.11.1" + uuid "^7.0.3" + graphql-tools@^4.0.0: version "4.0.8" resolved "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.8.tgz#e7fb9f0d43408fb0878ba66b522ce871bafe9d30" @@ -11867,7 +11982,7 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2: +iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2, iterall@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== @@ -12508,6 +12623,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -17135,6 +17255,13 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + ret@~0.1.10: version "0.1.15" resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -18664,6 +18791,18 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tape@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz#2e7ce0a31df09f8d6851664a71842e0ca5057af7" + integrity sha1-Lnzgox3wn41oUWZKcYQuDKUFevc= + dependencies: + deep-equal "~0.1.0" + defined "~0.0.0" + inherits "~2.0.1" + jsonify "~0.0.0" + resumer "~0.0.0" + through "~2.3.4" + tar-fs@^1.16.3: version "1.16.3" resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" @@ -18906,7 +19045,7 @@ through2@^3.0.0: dependencies: readable-stream "2 || 3" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1, through@~2.3.4: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -19207,16 +19346,21 @@ tslib@1.10.0: resolved "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@1.11.1, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.11.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== -tslib@^2.0.0, tslib@~2.0.0: +tslib@2.0.0, tslib@^2.0.0, tslib@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== +tslib@^1.11.1: + version "1.13.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -20084,6 +20228,14 @@ whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-streams@*: + version "0.1.1" + resolved "https://registry.npmjs.org/whatwg-streams/-/whatwg-streams-0.1.1.tgz#dd5575c965bce13da76dc0dd495629a87572e74e" + integrity sha1-3VV1yWW84T2nbcDdSVYpqHVy504= + dependencies: + bluebird "~1.0.0" + tape "~2.3.2" + whatwg-url@^6.4.1: version "6.5.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" From 7811b086ebb4d9081ac4cd26d627228b5015c5c2 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 4 Aug 2020 09:46:56 +0200 Subject: [PATCH 002/303] chore(gql): added some nice stuff with the graphql context --- plugins/catalog-graphql/codegen.yml | 15 + plugins/catalog-graphql/package.json | 5 +- .../catalog-graphql/src/generated-models.ts | 288 ++++++++++++++++++ plugins/catalog-graphql/src/graphql/module.ts | 1 + plugins/catalog-graphql/src/index.ts | 2 - plugins/catalog-graphql/src/setupTests.ts | 2 - 6 files changed, 308 insertions(+), 5 deletions(-) create mode 100644 plugins/catalog-graphql/codegen.yml create mode 100644 plugins/catalog-graphql/src/generated-models.ts diff --git a/plugins/catalog-graphql/codegen.yml b/plugins/catalog-graphql/codegen.yml new file mode 100644 index 0000000000..c9e0173256 --- /dev/null +++ b/plugins/catalog-graphql/codegen.yml @@ -0,0 +1,15 @@ +overwrite: true +schema: ./src/schema.gql # You can use .js files as well +require: + - ts-node/register/transpile-only # required if you're using TS-Node +generates: + ./src/generated-models.ts: + plugins: + - typescript + - typescript-resolvers + + hooks: + afterOneFileWrite: + - prettier --write + config: + contextType: '@graphql-modules/core#ModuleContext' diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 57fade9654..8c478e767b 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -22,12 +22,15 @@ }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.16", + "@graphql-codegen/cli": "^1.17.7", + "@graphql-codegen/typescript": "^1.17.7", + "@graphql-codegen/typescript-resolvers": "^1.17.7", "@graphql-modules/core": "^0.7.17", "@types/express": "^4.17.6", "@types/whatwg-fetch": "^0.0.33", "graphql": "^15.3.0", "node-fetch": "^2.6.0", - "whatwg-fetch": "^2.0.0", + "ts-node": "^8.10.2", "winston": "^3.2.1", "yn": "^4.0.0" }, diff --git a/plugins/catalog-graphql/src/generated-models.ts b/plugins/catalog-graphql/src/generated-models.ts new file mode 100644 index 0000000000..f0f7f2f372 --- /dev/null +++ b/plugins/catalog-graphql/src/generated-models.ts @@ -0,0 +1,288 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ +import { GraphQLResolveInfo } from 'graphql'; +import { ModuleContext } from '@graphql-modules/core'; + +export type Maybe = T | null; +export type Exact = { + [K in keyof T]: T[K]; +}; +export type RequireFields = { + [X in Exclude]?: T[X]; +} & + { [P in K]-?: NonNullable }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; +}; + +export type EntityMetadataAnnotation = { + __typename?: 'EntityMetadataAnnotation'; + key: Scalars['String']; + value: Scalars['String']; +}; + +export type EntityMetadata = { + __typename?: 'EntityMetadata'; + name: Scalars['String']; + namespace?: Maybe; + annotation?: Maybe; + annotations: Array; +}; + +export type EntityMetadataAnnotationArgs = { + name?: Maybe; +}; + +export type CatalogEntity = { + __typename?: 'CatalogEntity'; + apiVersion?: Maybe; + kind: Scalars['String']; + metadata?: Maybe; +}; + +export type CatalogQuery = { + __typename?: 'CatalogQuery'; + list: Array; +}; + +export type Query = { + __typename?: 'Query'; + catalog: CatalogQuery; +}; + +export type ResolverTypeWrapper = Promise | T; + +export type LegacyStitchingResolver = { + fragment: string; + resolve: ResolverFn; +}; + +export type NewStitchingResolver = { + selectionSet: string; + resolve: ResolverFn; +}; +export type StitchingResolver = + | LegacyStitchingResolver + | NewStitchingResolver; +export type Resolver = + | ResolverFn + | StitchingResolver; + +export type ResolverFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo, +) => Promise | TResult; + +export type SubscriptionSubscribeFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo, +) => AsyncIterator | Promise>; + +export type SubscriptionResolveFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo, +) => TResult | Promise; + +export interface SubscriptionSubscriberObject< + TResult, + TKey extends string, + TParent, + TContext, + TArgs +> { + subscribe: SubscriptionSubscribeFn< + { [key in TKey]: TResult }, + TParent, + TContext, + TArgs + >; + resolve?: SubscriptionResolveFn< + TResult, + { [key in TKey]: TResult }, + TContext, + TArgs + >; +} + +export interface SubscriptionResolverObject { + subscribe: SubscriptionSubscribeFn; + resolve: SubscriptionResolveFn; +} + +export type SubscriptionObject< + TResult, + TKey extends string, + TParent, + TContext, + TArgs +> = + | SubscriptionSubscriberObject + | SubscriptionResolverObject; + +export type SubscriptionResolver< + TResult, + TKey extends string, + TParent = {}, + TContext = {}, + TArgs = {} +> = + | (( + ...args: any[] + ) => SubscriptionObject) + | SubscriptionObject; + +export type TypeResolveFn = ( + parent: TParent, + context: TContext, + info: GraphQLResolveInfo, +) => Maybe | Promise>; + +export type IsTypeOfResolverFn = ( + obj: T, + info: GraphQLResolveInfo, +) => boolean | Promise; + +export type NextResolverFn = () => Promise; + +export type DirectiveResolverFn< + TResult = {}, + TParent = {}, + TContext = {}, + TArgs = {} +> = ( + next: NextResolverFn, + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo, +) => TResult | Promise; + +/** Mapping between all available schema types and the resolvers types */ +export type ResolversTypes = { + EntityMetadataAnnotation: ResolverTypeWrapper; + String: ResolverTypeWrapper; + EntityMetadata: ResolverTypeWrapper; + CatalogEntity: ResolverTypeWrapper; + CatalogQuery: ResolverTypeWrapper; + Query: ResolverTypeWrapper<{}>; + Boolean: ResolverTypeWrapper; +}; + +/** Mapping between all available schema types and the resolvers parents */ +export type ResolversParentTypes = { + EntityMetadataAnnotation: EntityMetadataAnnotation; + String: Scalars['String']; + EntityMetadata: EntityMetadata; + CatalogEntity: CatalogEntity; + CatalogQuery: CatalogQuery; + Query: {}; + Boolean: Scalars['Boolean']; +}; + +export type EntityMetadataAnnotationResolvers< + ContextType = ModuleContext, + ParentType extends ResolversParentTypes['EntityMetadataAnnotation'] = ResolversParentTypes['EntityMetadataAnnotation'] +> = { + key?: Resolver; + value?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}; + +export type EntityMetadataResolvers< + ContextType = ModuleContext, + ParentType extends ResolversParentTypes['EntityMetadata'] = ResolversParentTypes['EntityMetadata'] +> = { + name?: Resolver; + namespace?: Resolver< + Maybe, + ParentType, + ContextType + >; + annotation?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + annotations?: Resolver< + Array, + ParentType, + ContextType + >; + __isTypeOf?: IsTypeOfResolverFn; +}; + +export type CatalogEntityResolvers< + ContextType = ModuleContext, + ParentType extends ResolversParentTypes['CatalogEntity'] = ResolversParentTypes['CatalogEntity'] +> = { + apiVersion?: Resolver< + Maybe, + ParentType, + ContextType + >; + kind?: Resolver; + metadata?: Resolver< + Maybe, + ParentType, + ContextType + >; + __isTypeOf?: IsTypeOfResolverFn; +}; + +export type CatalogQueryResolvers< + ContextType = ModuleContext, + ParentType extends ResolversParentTypes['CatalogQuery'] = ResolversParentTypes['CatalogQuery'] +> = { + list?: Resolver< + Array, + ParentType, + ContextType + >; + __isTypeOf?: IsTypeOfResolverFn; +}; + +export type QueryResolvers< + ContextType = ModuleContext, + ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query'] +> = { + catalog?: Resolver; +}; + +export type Resolvers = { + EntityMetadataAnnotation?: EntityMetadataAnnotationResolvers; + EntityMetadata?: EntityMetadataResolvers; + CatalogEntity?: CatalogEntityResolvers; + CatalogQuery?: CatalogQueryResolvers; + Query?: QueryResolvers; +}; + +/** + * @deprecated + * Use "Resolvers" root object instead. If you wish to get "IResolvers", add "typesPrefix: I" to your config. + */ +export type IResolvers = Resolvers; diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index 65239d27db..7648b7d302 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -19,6 +19,7 @@ import fetch from 'node-fetch'; import fs from 'fs'; import path from 'path'; import { GraphQLModule } from '@graphql-modules/core'; +import { QueryResolvers } from './types'; export interface ModuleOptions { logger: Logger; diff --git a/plugins/catalog-graphql/src/index.ts b/plugins/catalog-graphql/src/index.ts index dd6508f88a..2e3f1c1fe2 100644 --- a/plugins/catalog-graphql/src/index.ts +++ b/plugins/catalog-graphql/src/index.ts @@ -14,6 +14,4 @@ * limitations under the License. */ -require('whatwg-fetch'); - export * from './graphql/module'; diff --git a/plugins/catalog-graphql/src/setupTests.ts b/plugins/catalog-graphql/src/setupTests.ts index ac41ef995a..1485402d0d 100644 --- a/plugins/catalog-graphql/src/setupTests.ts +++ b/plugins/catalog-graphql/src/setupTests.ts @@ -13,6 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -require('whatwg-fetch'); - export {}; From 9bd1db1ed161621cde965bee0244a6a85a2c63a6 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 5 Aug 2020 07:26:44 +0200 Subject: [PATCH 003/303] chore(gql): removing old graphql things --- plugins/bogus-graphql/.eslintrc.js | 3 -- plugins/bogus-graphql/README.md | 13 ------ plugins/bogus-graphql/package.json | 44 ------------------- plugins/bogus-graphql/scripts/mock-data.sh | 2 - plugins/bogus-graphql/src/graphql/module.ts | 47 --------------------- plugins/bogus-graphql/src/index.ts | 19 --------- plugins/bogus-graphql/src/schema.gql | 3 -- plugins/bogus-graphql/src/setupTests.ts | 18 -------- 8 files changed, 149 deletions(-) delete mode 100644 plugins/bogus-graphql/.eslintrc.js delete mode 100644 plugins/bogus-graphql/README.md delete mode 100644 plugins/bogus-graphql/package.json delete mode 100755 plugins/bogus-graphql/scripts/mock-data.sh delete mode 100644 plugins/bogus-graphql/src/graphql/module.ts delete mode 100644 plugins/bogus-graphql/src/index.ts delete mode 100644 plugins/bogus-graphql/src/schema.gql delete mode 100644 plugins/bogus-graphql/src/setupTests.ts diff --git a/plugins/bogus-graphql/.eslintrc.js b/plugins/bogus-graphql/.eslintrc.js deleted file mode 100644 index 16a033dbc6..0000000000 --- a/plugins/bogus-graphql/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint.backend')], -}; diff --git a/plugins/bogus-graphql/README.md b/plugins/bogus-graphql/README.md deleted file mode 100644 index 3f85ec766e..0000000000 --- a/plugins/bogus-graphql/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# graphql - -Welcome to the graphql backend plugin! - -_This plugin was created through the Backstage CLI_ - -## Getting started - -Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/graphql](http://localhost:3000/graphql). - -You can also serve the plugin in isolation by running `yarn start` in the plugin directory. -This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. -It is only meant for local development, and the setup for it can be found inside the [/dev](/dev) directory. diff --git a/plugins/bogus-graphql/package.json b/plugins/bogus-graphql/package.json deleted file mode 100644 index a5a439a701..0000000000 --- a/plugins/bogus-graphql/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "@backstage/plugin-bogus-graphql", - "version": "0.1.1-alpha.16", - "main": "src/index.ts", - "types": "src/index.ts", - "license": "Apache-2.0", - "private": true, - "publishConfig": { - "access": "public", - "main": "dist/index.esm.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", - "mock-data": "./scripts/mock-data.sh" - }, - "dependencies": { - "@backstage/backend-common": "^0.1.1-alpha.16", - "@graphql-modules/core": "^0.7.17", - "@types/express": "^4.17.6", - "@types/whatwg-fetch": "^0.0.33", - "graphql": "^15.3.0", - "node-fetch": "^2.6.0", - "whatwg-fetch": "^2.0.0", - "winston": "^3.2.1", - "yn": "^4.0.0" - }, - "devDependencies": { - "@backstage/cli": "^0.1.1-alpha.16", - "@types/supertest": "^2.0.8", - "eslint-plugin-graphql": "^4.0.0", - "msw": "^0.19.5", - "supertest": "^4.0.2" - }, - "files": [ - "dist" - ] -} diff --git a/plugins/bogus-graphql/scripts/mock-data.sh b/plugins/bogus-graphql/scripts/mock-data.sh deleted file mode 100755 index ff30921715..0000000000 --- a/plugins/bogus-graphql/scripts/mock-data.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -echo "use this script to load your service with some mock data if needed!" diff --git a/plugins/bogus-graphql/src/graphql/module.ts b/plugins/bogus-graphql/src/graphql/module.ts deleted file mode 100644 index f247686ea8..0000000000 --- a/plugins/bogus-graphql/src/graphql/module.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ - -import { Logger } from 'winston'; -import fs from 'fs'; -import path from 'path'; -import { GraphQLModule } from '@graphql-modules/core'; - -export interface ModuleOptions { - logger: Logger; -} - -export async function createModule( - options: ModuleOptions, -): Promise { - const typeDefs = await fs.promises.readFile( - path.resolve(__dirname, '..', 'schema.gql'), - 'utf-8', - ); - - const resolvers = { - EntityMetadata: { - uppercaseName: metadata => metadata.name.toUpperCase(), - }, - }; - - const module = new GraphQLModule({ - typeDefs, - resolvers, - logger: options.logger as any, - }); - - return module; -} diff --git a/plugins/bogus-graphql/src/index.ts b/plugins/bogus-graphql/src/index.ts deleted file mode 100644 index dd6508f88a..0000000000 --- a/plugins/bogus-graphql/src/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ - -require('whatwg-fetch'); - -export * from './graphql/module'; diff --git a/plugins/bogus-graphql/src/schema.gql b/plugins/bogus-graphql/src/schema.gql deleted file mode 100644 index 74c0853a92..0000000000 --- a/plugins/bogus-graphql/src/schema.gql +++ /dev/null @@ -1,3 +0,0 @@ -type EntityMetadata { - uppercaseName: String -} diff --git a/plugins/bogus-graphql/src/setupTests.ts b/plugins/bogus-graphql/src/setupTests.ts deleted file mode 100644 index ac41ef995a..0000000000 --- a/plugins/bogus-graphql/src/setupTests.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ -require('whatwg-fetch'); - -export {}; From de1ddc1096d7253b952aca10fca064433f6b3d86 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 5 Aug 2020 07:27:07 +0200 Subject: [PATCH 004/303] chore(gql): pass through the config for the catalog client --- plugins/graphql/package.json | 2 +- plugins/graphql/src/service/router.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/graphql/package.json b/plugins/graphql/package.json index bc5004c580..8c90c74440 100644 --- a/plugins/graphql/package.json +++ b/plugins/graphql/package.json @@ -21,8 +21,8 @@ }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.16", + "@backstage/config": "^0.1.1-alpha.16", "@backstage/plugin-catalog-graphql": "^0.1.1-alpha.16", - "@backstage/plugin-bogus-graphql": "^0.1.1-alpha.16", "@graphql-modules/core": "^0.7.17", "@types/express": "^4.17.6", "apollo-server": "^2.16.0", diff --git a/plugins/graphql/src/service/router.ts b/plugins/graphql/src/service/router.ts index 6845bb366e..784b801b86 100644 --- a/plugins/graphql/src/service/router.ts +++ b/plugins/graphql/src/service/router.ts @@ -23,7 +23,7 @@ import path from 'path'; import { GraphQLModule } from '@graphql-modules/core'; import { ApolloServer } from 'apollo-server-express'; import { createModule as createCatalogModule } from '@backstage/plugin-catalog-graphql'; -import { createModule as createBogusModule } from '@backstage/plugin-bogus-graphql'; +import { Config } from '@backstage/config'; const schemaPath = path.resolve( require.resolve('@backstage/plugin-graphql-backend/package.json'), @@ -32,6 +32,7 @@ const schemaPath = path.resolve( export interface RouterOptions { logger: Logger; + config: Config; } export async function createRouter( @@ -40,9 +41,8 @@ export async function createRouter( const typeDefs = await fs.promises.readFile(schemaPath, 'utf-8'); const catalogModule = await createCatalogModule(options); - const bogusModule = await createBogusModule(options); const { schema } = new GraphQLModule({ - imports: [catalogModule, bogusModule], + imports: [catalogModule], typeDefs, }); From b9c21c6fbaeedd5ea3de4295736b8c5e18d9e961 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 5 Aug 2020 07:27:32 +0200 Subject: [PATCH 005/303] chore(gql): tidying up the graphql code --- plugins/catalog-graphql/.gitignore | 1 + plugins/catalog-graphql/codegen.yml | 11 +- plugins/catalog-graphql/package.json | 3 + .../catalog-graphql/src/generated-models.ts | 288 ------------------ plugins/catalog-graphql/src/graphql/module.ts | 61 ++-- plugins/catalog-graphql/src/schema.gql | 2 +- plugins/catalog-graphql/src/service/client.ts | 30 ++ 7 files changed, 68 insertions(+), 328 deletions(-) create mode 100644 plugins/catalog-graphql/.gitignore delete mode 100644 plugins/catalog-graphql/src/generated-models.ts create mode 100644 plugins/catalog-graphql/src/service/client.ts diff --git a/plugins/catalog-graphql/.gitignore b/plugins/catalog-graphql/.gitignore new file mode 100644 index 0000000000..5a5538170a --- /dev/null +++ b/plugins/catalog-graphql/.gitignore @@ -0,0 +1 @@ +src/graphql/types.ts diff --git a/plugins/catalog-graphql/codegen.yml b/plugins/catalog-graphql/codegen.yml index c9e0173256..ebdb34a938 100644 --- a/plugins/catalog-graphql/codegen.yml +++ b/plugins/catalog-graphql/codegen.yml @@ -1,15 +1,16 @@ overwrite: true -schema: ./src/schema.gql # You can use .js files as well +schema: ./src/schema.gql require: - - ts-node/register/transpile-only # required if you're using TS-Node + - ts-node/register/transpile-only generates: - ./src/generated-models.ts: + ./src/graphql/types.ts: plugins: - typescript - typescript-resolvers - hooks: afterOneFileWrite: - - prettier --write + - eslint --fix config: contextType: '@graphql-modules/core#ModuleContext' + useIndexSignature: true + defaultMapper: Partial<{T}> diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 8c478e767b..8a0c0474f6 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -17,11 +17,14 @@ "test": "backstage-cli test", "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", + "postinstall": "graphql-codegen", "clean": "backstage-cli clean", "mock-data": "./scripts/mock-data.sh" }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.16", + "@backstage/catalog-model": "^0.1.1-alpha.16", + "@backstage/config": "^0.1.1-alpha.16", "@graphql-codegen/cli": "^1.17.7", "@graphql-codegen/typescript": "^1.17.7", "@graphql-codegen/typescript-resolvers": "^1.17.7", diff --git a/plugins/catalog-graphql/src/generated-models.ts b/plugins/catalog-graphql/src/generated-models.ts deleted file mode 100644 index f0f7f2f372..0000000000 --- a/plugins/catalog-graphql/src/generated-models.ts +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ -import { GraphQLResolveInfo } from 'graphql'; -import { ModuleContext } from '@graphql-modules/core'; - -export type Maybe = T | null; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type RequireFields = { - [X in Exclude]?: T[X]; -} & - { [P in K]-?: NonNullable }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; -}; - -export type EntityMetadataAnnotation = { - __typename?: 'EntityMetadataAnnotation'; - key: Scalars['String']; - value: Scalars['String']; -}; - -export type EntityMetadata = { - __typename?: 'EntityMetadata'; - name: Scalars['String']; - namespace?: Maybe; - annotation?: Maybe; - annotations: Array; -}; - -export type EntityMetadataAnnotationArgs = { - name?: Maybe; -}; - -export type CatalogEntity = { - __typename?: 'CatalogEntity'; - apiVersion?: Maybe; - kind: Scalars['String']; - metadata?: Maybe; -}; - -export type CatalogQuery = { - __typename?: 'CatalogQuery'; - list: Array; -}; - -export type Query = { - __typename?: 'Query'; - catalog: CatalogQuery; -}; - -export type ResolverTypeWrapper = Promise | T; - -export type LegacyStitchingResolver = { - fragment: string; - resolve: ResolverFn; -}; - -export type NewStitchingResolver = { - selectionSet: string; - resolve: ResolverFn; -}; -export type StitchingResolver = - | LegacyStitchingResolver - | NewStitchingResolver; -export type Resolver = - | ResolverFn - | StitchingResolver; - -export type ResolverFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo, -) => Promise | TResult; - -export type SubscriptionSubscribeFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo, -) => AsyncIterator | Promise>; - -export type SubscriptionResolveFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo, -) => TResult | Promise; - -export interface SubscriptionSubscriberObject< - TResult, - TKey extends string, - TParent, - TContext, - TArgs -> { - subscribe: SubscriptionSubscribeFn< - { [key in TKey]: TResult }, - TParent, - TContext, - TArgs - >; - resolve?: SubscriptionResolveFn< - TResult, - { [key in TKey]: TResult }, - TContext, - TArgs - >; -} - -export interface SubscriptionResolverObject { - subscribe: SubscriptionSubscribeFn; - resolve: SubscriptionResolveFn; -} - -export type SubscriptionObject< - TResult, - TKey extends string, - TParent, - TContext, - TArgs -> = - | SubscriptionSubscriberObject - | SubscriptionResolverObject; - -export type SubscriptionResolver< - TResult, - TKey extends string, - TParent = {}, - TContext = {}, - TArgs = {} -> = - | (( - ...args: any[] - ) => SubscriptionObject) - | SubscriptionObject; - -export type TypeResolveFn = ( - parent: TParent, - context: TContext, - info: GraphQLResolveInfo, -) => Maybe | Promise>; - -export type IsTypeOfResolverFn = ( - obj: T, - info: GraphQLResolveInfo, -) => boolean | Promise; - -export type NextResolverFn = () => Promise; - -export type DirectiveResolverFn< - TResult = {}, - TParent = {}, - TContext = {}, - TArgs = {} -> = ( - next: NextResolverFn, - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo, -) => TResult | Promise; - -/** Mapping between all available schema types and the resolvers types */ -export type ResolversTypes = { - EntityMetadataAnnotation: ResolverTypeWrapper; - String: ResolverTypeWrapper; - EntityMetadata: ResolverTypeWrapper; - CatalogEntity: ResolverTypeWrapper; - CatalogQuery: ResolverTypeWrapper; - Query: ResolverTypeWrapper<{}>; - Boolean: ResolverTypeWrapper; -}; - -/** Mapping between all available schema types and the resolvers parents */ -export type ResolversParentTypes = { - EntityMetadataAnnotation: EntityMetadataAnnotation; - String: Scalars['String']; - EntityMetadata: EntityMetadata; - CatalogEntity: CatalogEntity; - CatalogQuery: CatalogQuery; - Query: {}; - Boolean: Scalars['Boolean']; -}; - -export type EntityMetadataAnnotationResolvers< - ContextType = ModuleContext, - ParentType extends ResolversParentTypes['EntityMetadataAnnotation'] = ResolversParentTypes['EntityMetadataAnnotation'] -> = { - key?: Resolver; - value?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type EntityMetadataResolvers< - ContextType = ModuleContext, - ParentType extends ResolversParentTypes['EntityMetadata'] = ResolversParentTypes['EntityMetadata'] -> = { - name?: Resolver; - namespace?: Resolver< - Maybe, - ParentType, - ContextType - >; - annotation?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - annotations?: Resolver< - Array, - ParentType, - ContextType - >; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type CatalogEntityResolvers< - ContextType = ModuleContext, - ParentType extends ResolversParentTypes['CatalogEntity'] = ResolversParentTypes['CatalogEntity'] -> = { - apiVersion?: Resolver< - Maybe, - ParentType, - ContextType - >; - kind?: Resolver; - metadata?: Resolver< - Maybe, - ParentType, - ContextType - >; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type CatalogQueryResolvers< - ContextType = ModuleContext, - ParentType extends ResolversParentTypes['CatalogQuery'] = ResolversParentTypes['CatalogQuery'] -> = { - list?: Resolver< - Array, - ParentType, - ContextType - >; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type QueryResolvers< - ContextType = ModuleContext, - ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query'] -> = { - catalog?: Resolver; -}; - -export type Resolvers = { - EntityMetadataAnnotation?: EntityMetadataAnnotationResolvers; - EntityMetadata?: EntityMetadataResolvers; - CatalogEntity?: CatalogEntityResolvers; - CatalogQuery?: CatalogQueryResolvers; - Query?: QueryResolvers; -}; - -/** - * @deprecated - * Use "Resolvers" root object instead. If you wish to get "IResolvers", add "typesPrefix: I" to your config. - */ -export type IResolvers = Resolvers; diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index 7648b7d302..1fc13d7950 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -15,43 +15,28 @@ */ import { Logger } from 'winston'; -import fetch from 'node-fetch'; import fs from 'fs'; import path from 'path'; import { GraphQLModule } from '@graphql-modules/core'; -import { QueryResolvers } from './types'; +import { Resolvers, CatalogEntity, CatalogQuery } from './types'; +import { Entity } from '@backstage/catalog-model'; +import { Config } from '@backstage/config'; +import { CatalogClient } from '../service/client'; export interface ModuleOptions { logger: Logger; + config: Config; } -// function wrapLogger(logger: Logger) { -// return { -// log: (msg: string | Error, ...extra: any[]) => -// logger.info(String(msg), ...extra), -// debug: (msg: string | Error, ...extra: any[]) => -// logger.info(String(msg), ...extra), -// info: (msg: string | Error, ...extra: any[]) => -// logger.info(String(msg), ...extra), -// error: (msg: string | Error, ...extra: any[]) => -// logger.info(String(msg), ...extra), -// clientError: (msg: string | Error, ...extra: any[]) => -// logger.info(String(msg), ...extra), -// warn: (msg: string | Error, ...extra: any[]) => -// logger.info(String(msg), ...extra), -// }; -// } - -class CatalogClient { - async list() { - const res = await fetch('http://localhost:7000/catalog/entities'); - if (!res.ok) { - throw new Error(`NOPE, ${await res.text()}`); - } - - return res.json(); - } -} +const parseToCatalogEntities = (e: Entity): CatalogEntity => ({ + ...e, + metadata: { + ...e.metadata, + annotations: Object.entries( + e.metadata.annotations ?? {}, + ).map(([key, value]) => ({ key, value })), + }, +}); export async function createModule( options: ModuleOptions, @@ -61,16 +46,24 @@ export async function createModule( 'utf-8', ); - const catalogClient = new CatalogClient(); + const catalogClient = new CatalogClient( + options.config.getString('backend.baseUrl'), + ); - const resolvers = { + const resolvers: Resolvers = { Query: { - catalog: () => true, + catalog: () => ({} as CatalogQuery), }, CatalogQuery: { - list: () => catalogClient.list(), + list: async () => { + const list = await catalogClient.list(); + return list.map(parseToCatalogEntities); + }, + }, + EntityMetadata: { + annotation: (e, { name }) => + e.annotations?.find(a => a.key === name) ?? null, }, - CatalogEntity: () => ({}), }; const module = new GraphQLModule({ diff --git a/plugins/catalog-graphql/src/schema.gql b/plugins/catalog-graphql/src/schema.gql index ea92d4e04f..b28f796855 100644 --- a/plugins/catalog-graphql/src/schema.gql +++ b/plugins/catalog-graphql/src/schema.gql @@ -7,7 +7,7 @@ type EntityMetadata { name: String! namespace: String annotation(name: String): EntityMetadataAnnotation - annotations: [EntityMetadataAnnotation!]! + annotations: [EntityMetadataAnnotation!] } type CatalogEntity { diff --git a/plugins/catalog-graphql/src/service/client.ts b/plugins/catalog-graphql/src/service/client.ts new file mode 100644 index 0000000000..091a8a8cc0 --- /dev/null +++ b/plugins/catalog-graphql/src/service/client.ts @@ -0,0 +1,30 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ + +import { Entity } from '@backstage/catalog-model'; +import fetch from 'node-fetch'; + +export class CatalogClient { + constructor(private baseUrl: string) {} + async list(): Promise { + const res = await fetch(`${this.baseUrl}/catalog/entities`); + if (!res.ok) { + throw new Error(`NOPE, ${await res.text()}`); + } + + return await (res.json() as Promise); + } +} From 11de4c5f4bfa082384dab2951d9c8d7cbb7e02f7 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 5 Aug 2020 07:27:51 +0200 Subject: [PATCH 006/303] gotcha(gql): if you just import the type the config library doesnt work :shrug: --- packages/backend/src/index.ts | 1 - packages/backend/src/plugins/graphql.ts | 8 +- yarn.lock | 981 +++++++++++++++++++++--- 3 files changed, 881 insertions(+), 109 deletions(-) diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 3fccfe9c59..d22e1088a7 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -88,7 +88,6 @@ async function main() { const configs = await loadConfig({ shouldReadSecrets: true }); const configReader = ConfigReader.fromConfigs(configs); const createEnv = makeCreateEnv(configs); - const healthcheckEnv = useHotMemoize(module, () => createEnv('healthcheck')); const catalogEnv = useHotMemoize(module, () => createEnv('catalog')); const scaffolderEnv = useHotMemoize(module, () => createEnv('scaffolder')); diff --git a/packages/backend/src/plugins/graphql.ts b/packages/backend/src/plugins/graphql.ts index 0f9b167d19..d52e28f9cb 100644 --- a/packages/backend/src/plugins/graphql.ts +++ b/packages/backend/src/plugins/graphql.ts @@ -30,10 +30,14 @@ */ import { createRouter } from '@backstage/plugin-graphql-backend'; -import type { PluginEnvironment } from '../types'; +import { PluginEnvironment } from '../types'; -export default async function createPlugin({ logger }: PluginEnvironment) { +export default async function createPlugin({ + logger, + config, +}: PluginEnvironment) { return await createRouter({ logger, + config, }); } diff --git a/yarn.lock b/yarn.lock index 9e463417b4..36a360c119 100644 --- a/yarn.lock +++ b/yarn.lock @@ -77,6 +77,28 @@ invariant "^2.2.4" semver "^5.5.0" +"@babel/core@^7.0.0": + version "7.11.1" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" + integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.1" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.0" + "@babel/types" "^7.11.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.1.0", "@babel/core@^7.4.4", "@babel/core@^7.4.5", "@babel/core@^7.7.5": version "7.9.6" resolved "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" @@ -108,6 +130,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.11.0", "@babel/generator@^7.5.0": + version "7.11.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== + dependencies: + "@babel/types" "^7.11.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/generator@^7.9.6": version "7.9.6" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" @@ -307,6 +338,19 @@ "@babel/types" "^7.10.5" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.11.0": + version "7.11.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + "@babel/helper-module-transforms@^7.9.0": version "7.9.0" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" @@ -405,6 +449,13 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.11.0" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" + integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== + dependencies: + "@babel/types" "^7.11.0" + "@babel/helper-split-export-declaration@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" @@ -412,6 +463,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" @@ -439,6 +497,15 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helpers@^7.9.6": version "7.9.6" resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" @@ -466,16 +533,21 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@7.10.5", "@babel/parser@^7.10.4", "@babel/parser@^7.10.5": + version "7.10.5" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" + integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== + +"@babel/parser@^7.0.0", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": + version "7.11.1" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.11.1.tgz#d91a387990b21e5d20047b336bb19b0553f02ff5" + integrity sha512-u9QMIRdKVF7hfEkb3nu2LgZDIzCQPv+yHD9Eg6ruoJLjkrQ9fFz4IBSlF/9XwoNri9+2F1IY+dYuOfZrXq8t3w== + "@babel/parser@^7.1.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": version "7.9.6" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== -"@babel/parser@^7.10.4", "@babel/parser@^7.10.5": - version "7.10.5" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" - integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== - "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" @@ -485,7 +557,7 @@ "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.10.4": +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== @@ -533,6 +605,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-object-rest-spread@^7.0.0": + version "7.11.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" @@ -604,7 +685,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.10.4": +"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== @@ -625,6 +706,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz#53351dd7ae01995e567d04ce42af1a6e0ba846a6" + integrity sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow@^7.8.3": version "7.8.3" resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" @@ -639,7 +727,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.10.4": +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== @@ -674,7 +762,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -702,7 +790,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.10.4": +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== @@ -718,13 +806,20 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.10.4" -"@babel/plugin-transform-block-scoped-functions@^7.10.4": +"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-block-scoping@^7.0.0": + version "7.11.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" + integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-block-scoping@^7.10.4": version "7.10.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" @@ -732,7 +827,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.10.4": +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== @@ -746,14 +841,14 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.10.4": +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.10.4": +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== @@ -791,6 +886,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" + integrity sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.10.4" + "@babel/plugin-transform-flow-strip-types@^7.9.0": version "7.9.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" @@ -799,14 +902,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-flow" "^7.8.3" -"@babel/plugin-transform-for-of@^7.10.4": +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.10.4": +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== @@ -814,14 +917,14 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.10.4": +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.10.4": +"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== @@ -837,7 +940,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.10.4": +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== @@ -889,7 +992,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-super@^7.10.4": +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== @@ -897,7 +1000,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-parameters@^7.10.4": +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.10.4": version "7.10.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== @@ -905,7 +1008,7 @@ "@babel/helper-get-function-arity" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.10.4": +"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== @@ -919,7 +1022,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-display-name@^7.10.4": +"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz#b5795f4e3e3140419c3611b7a2a3832b9aef328d" integrity sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw== @@ -951,7 +1054,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.10.4": +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2" integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A== @@ -983,13 +1086,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-shorthand-properties@^7.10.4": +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-spread@^7.0.0": + version "7.11.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" + integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-transform-spread@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz#4e2c85ea0d6abaee1b24dcfbbae426fe8d674cff" @@ -1005,7 +1116,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.10.4": +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.10.4": version "7.10.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== @@ -1186,6 +1297,36 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" +"@babel/traverse@7.10.5", "@babel/traverse@^7.10.4": + version "7.10.5" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" + integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/parser" "^7.10.5" + "@babel/types" "^7.10.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.11.0": + version "7.11.0" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" + integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.0" + "@babel/types" "^7.11.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.6": version "7.9.6" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" @@ -1201,20 +1342,14 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/traverse@^7.10.4": +"@babel/types@7.10.5", "@babel/types@^7.10.4", "@babel/types@^7.10.5": version "7.10.5" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" - integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== + resolved "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" + integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.10.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/parser" "^7.10.5" - "@babel/types" "^7.10.5" - debug "^4.1.0" - globals "^11.1.0" + "@babel/helper-validator-identifier" "^7.10.4" lodash "^4.17.19" + to-fast-properties "^2.0.0" "@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": version "7.9.6" @@ -1225,10 +1360,10 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@babel/types@^7.10.4", "@babel/types@^7.10.5": - version "7.10.5" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" - integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== +"@babel/types@^7.11.0": + version "7.11.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" + integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== dependencies: "@babel/helper-validator-identifier" "^7.10.4" lodash "^4.17.19" @@ -1479,6 +1614,119 @@ unique-filename "^1.1.1" which "^1.3.1" +"@graphql-codegen/cli@^1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-1.17.7.tgz#4ba45106403a3aca36585bf04f0169fda38ac9df" + integrity sha512-T9b4r7WkA+VfW8nsAjOWFoFbtpfFAAjPQM6q/8aPg6Ny3rwwefH8UDVa3P3QSfdIYl2qKnBk1FG2mNjBCUYKsg== + dependencies: + "@graphql-codegen/core" "1.17.7" + "@graphql-codegen/plugin-helpers" "1.17.7" + "@graphql-tools/apollo-engine-loader" "^6.0.0" + "@graphql-tools/code-file-loader" "^6.0.0" + "@graphql-tools/git-loader" "^6.0.0" + "@graphql-tools/github-loader" "^6.0.0" + "@graphql-tools/graphql-file-loader" "^6.0.0" + "@graphql-tools/json-file-loader" "^6.0.0" + "@graphql-tools/load" "^6.0.0" + "@graphql-tools/prisma-loader" "^6.0.0" + "@graphql-tools/url-loader" "^6.0.0" + "@graphql-tools/utils" "^6.0.0" + ansi-escapes "4.3.1" + camel-case "4.1.1" + chalk "4.1.0" + chokidar "3.4.1" + common-tags "1.8.0" + constant-case "3.0.3" + cosmiconfig "7.0.0" + debounce "1.2.0" + dependency-graph "0.9.0" + detect-indent "6.0.0" + glob "7.1.6" + graphql-config "^3.0.2" + indent-string "4.0.0" + inquirer "7.3.3" + is-glob "4.0.1" + json-to-pretty-yaml "1.2.2" + listr "0.14.3" + listr-update-renderer "0.5.0" + log-symbols "4.0.0" + lower-case "2.0.1" + minimatch "3.0.4" + mkdirp "1.0.4" + pascal-case "3.1.1" + request "2.88.2" + string-env-interpolation "1.0.1" + ts-log "2.1.4" + tslib "^2.0.0" + upper-case "2.0.1" + valid-url "1.0.9" + wrap-ansi "7.0.0" + yargs "15.4.1" + +"@graphql-codegen/core@1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@graphql-codegen/core/-/core-1.17.7.tgz#9f2f5798ec1c551827aa4ce6417d58cf48cd2a92" + integrity sha512-KfVoNtGCHvj/oN22Yl7ljPC9LkxvAAGDVPilYjJa3GjcT6YvF5k+ijyZ3GMjU8belN3g04Ls/WpKUsWA6HpkiQ== + dependencies: + "@graphql-codegen/plugin-helpers" "1.17.7" + "@graphql-tools/merge" "^6.0.0" + "@graphql-tools/utils" "^6.0.0" + tslib "~2.0.0" + +"@graphql-codegen/plugin-helpers@1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.17.7.tgz#5903105fda9470aafefe9da29e3a6fb3a52b8376" + integrity sha512-LsXS0s/ZOACZXa3W29ekcaQLzP8TsYzow6nIjW6rtkWX5T0EDooBQbDn1cdLdlpenqbUU+vtONwR6Qqc6hrq2Q== + dependencies: + "@graphql-tools/utils" "^6.0.0" + camel-case "4.1.1" + common-tags "1.8.0" + constant-case "3.0.3" + import-from "3.0.0" + lodash "~4.17.15" + lower-case "2.0.1" + param-case "3.0.3" + pascal-case "3.1.1" + tslib "~2.0.0" + upper-case "2.0.1" + +"@graphql-codegen/typescript-resolvers@^1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@graphql-codegen/typescript-resolvers/-/typescript-resolvers-1.17.7.tgz#fe912db2abeab36daf747108607d09bbc97b82fa" + integrity sha512-TFi7P8xSymFLj46HA8o/eLHPsY2X4z/maID+2rSaIYi+7IXVn2aHgvhFpvmmjIuCEdRvVH5Gdss7i7hwbaxW6w== + dependencies: + "@graphql-codegen/plugin-helpers" "1.17.7" + "@graphql-codegen/typescript" "1.17.7" + "@graphql-codegen/visitor-plugin-common" "1.17.7" + "@graphql-tools/utils" "^6.0.0" + auto-bind "~4.0.0" + tslib "~2.0.0" + +"@graphql-codegen/typescript@1.17.7", "@graphql-codegen/typescript@^1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-1.17.7.tgz#35d92da76d4e07b612ab1ac0bd9726fbaac1fb0d" + integrity sha512-itjssTRBIvZgoNwzz/mhDkaeZvoMqHaeN+PDqev+6gY+RDDGcr9fsEm/SLm9nOpBWZCAHFVc9u7wHlSPhbYGtw== + dependencies: + "@graphql-codegen/plugin-helpers" "1.17.7" + "@graphql-codegen/visitor-plugin-common" "1.17.7" + auto-bind "~4.0.0" + tslib "~2.0.0" + +"@graphql-codegen/visitor-plugin-common@1.17.7": + version "1.17.7" + resolved "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-1.17.7.tgz#3158ca4fc7d45a0f5a6ad0706061015eae481d9e" + integrity sha512-z5WvYqgCgPAAuMJMOE0e0nEicdaQRm59/vP+yYihKQmwrASzPlqa1BUiGDnfrPcCooB9fEUHB+cQb3gt9GRfEg== + dependencies: + "@graphql-codegen/plugin-helpers" "1.17.7" + "@graphql-tools/relay-operation-optimizer" "6.0.15" + array.prototype.flatmap "1.2.3" + auto-bind "~4.0.0" + dependency-graph "0.9.0" + graphql-tag "2.11.0" + parse-filepath "1.0.2" + pascal-case "3.1.1" + tslib "~2.0.0" + "@graphql-modules/core@^0.7.17": version "0.7.17" resolved "https://registry.npmjs.org/@graphql-modules/core/-/core-0.7.17.tgz#ae9bbf44894509664bc0b6fcdd9b6cf3d99bcd00" @@ -1520,6 +1768,25 @@ graphql-tools "5.0.0" tslib "1.11.1" +"@graphql-tools/apollo-engine-loader@^6.0.0": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-6.0.15.tgz#05ceca3ba024b5fbd4ac4366cf0cfc88e0fd7ef4" + integrity sha512-9SwaZZPr03dZh3rqmpw6GG2S+SzSuBCfYgx/cY37TPPB+wTJjBzZSzRGrC8hsUlbGLF7Qzq7rFYxfl0zGYpxXg== + dependencies: + "@graphql-tools/utils" "6.0.15" + cross-fetch "3.0.5" + tslib "~2.0.0" + +"@graphql-tools/code-file-loader@^6.0.0": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-6.0.15.tgz#d4c04b6493ac658da13bb115e7ed6821e2c687f1" + integrity sha512-Z4RLnJzlHWHbfe/yRFLqWuqxd6//dSxj/87FiOwN2GR+o/7I0N7ppZIAsLleVDM0LghDO+Nnt1cacNAEmTd0Fw== + dependencies: + "@graphql-tools/graphql-tag-pluck" "6.0.15" + "@graphql-tools/utils" "6.0.15" + fs-extra "9.0.1" + tslib "~2.0.0" + "@graphql-tools/delegate@6.0.15": version "6.0.15" resolved "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-6.0.15.tgz#9e060bfc31fe7735bd5b2b401e98dea3fa5d3b25" @@ -1530,6 +1797,23 @@ "@graphql-tools/utils" "6.0.15" tslib "~2.0.0" +"@graphql-tools/git-loader@^6.0.0": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-6.0.15.tgz#b9c70e332943372f50c7ef4e1161a65d5bdac08e" + integrity sha512-Tt33twi6oe++Hk+CeEl8A6DxETunwLG9EOkdHglxIKFn5k6yt8sd2hninwGjj8uyceC6CpeChN6jkF6Hg3N7fA== + dependencies: + "@graphql-tools/graphql-tag-pluck" "6.0.15" + "@graphql-tools/utils" "6.0.15" + +"@graphql-tools/github-loader@^6.0.0": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-6.0.15.tgz#2faccd5d20de87fba4762aa0e33659edd924da54" + integrity sha512-JYZp+u84JHJUB84dAlAHVgCxWtots6qtqMeENHPgNnpkci0cYKHAw+Mna3rZCEXR+9m4QKkM6K35U9cHODc6BA== + dependencies: + "@graphql-tools/graphql-tag-pluck" "6.0.15" + "@graphql-tools/utils" "6.0.15" + cross-fetch "3.0.5" + "@graphql-tools/graphql-file-loader@^6.0.0": version "6.0.15" resolved "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.0.15.tgz#e186b8147397bd7510e1b3318f5d3f7d365fc4e1" @@ -1540,6 +1824,18 @@ fs-extra "9.0.1" tslib "~2.0.0" +"@graphql-tools/graphql-tag-pluck@6.0.15": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.0.15.tgz#0e519202bc21faf068a22528b2e10d196e181aa6" + integrity sha512-d27PwoTIz3mQumnFtWjn60dulpePvWG6D8itPTGgl75H7LNpIdKPYlLTTcPcFsfWiFb4yIgg6/oarU8pJfRAsw== + dependencies: + "@babel/parser" "7.10.5" + "@babel/traverse" "7.10.5" + "@babel/types" "7.10.5" + "@graphql-tools/utils" "6.0.15" + optionalDependencies: + vue-template-compiler "^2.6.11" + "@graphql-tools/import@6.0.15": version "6.0.15" resolved "https://registry.npmjs.org/@graphql-tools/import/-/import-6.0.15.tgz#d6a9d3b6199a1e07d80d8021635d317b2c190c6f" @@ -1581,6 +1877,25 @@ "@graphql-tools/utils" "6.0.15" tslib "~2.0.0" +"@graphql-tools/prisma-loader@^6.0.0": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-6.0.15.tgz#9d67046cc577f0f9028d56a0ff29ac454ded5165" + integrity sha512-jitPrrJgR5RV0F557dLubHQ5XeID9Kc9G/Owp/ux2CPRJRoagm/4rudlA4LbE87vzO2EGKUJiYsFRHlTZuCqAg== + dependencies: + "@graphql-tools/url-loader" "6.0.15" + "@graphql-tools/utils" "6.0.15" + fs-extra "9.0.1" + prisma-yml "1.34.10" + tslib "~2.0.0" + +"@graphql-tools/relay-operation-optimizer@6.0.15": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.0.15.tgz#f991499c54945cb8fa2396bb5292252fbda0a773" + integrity sha512-Y4h2kclKh5HvyvmoxeZiDhqdhMKfLKamOYx6UVpFsbeKb6Tt9RCNPVhpa+YToXxUXl0PvjhxZWeQ4lZY0GE0ug== + dependencies: + "@graphql-tools/utils" "6.0.15" + relay-compiler "10.0.0" + "@graphql-tools/schema@6.0.15": version "6.0.15" resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-6.0.15.tgz#b016f9f36820342982887a291baa7e7d11b039ae" @@ -1589,7 +1904,7 @@ "@graphql-tools/utils" "6.0.15" tslib "~2.0.0" -"@graphql-tools/url-loader@^6.0.0": +"@graphql-tools/url-loader@6.0.15", "@graphql-tools/url-loader@^6.0.0": version "6.0.15" resolved "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-6.0.15.tgz#3ad621ed75c03fbc0ea08d2560f379a053c4035f" integrity sha512-/iGuK7J9yCECYMYQJqKNWnz4ytPHppkxh4YS5Ud9QPDNl488e+eInyNbkdiWcFGyZ4KHqEnXSDdRFg3mFNrMnw== @@ -5284,6 +5599,16 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +ajv@5: + version "5.5.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5, ajv@^6.7.0: version "6.12.2" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" @@ -5311,18 +5636,18 @@ ansi-colors@^3.0.0, ansi-colors@^3.2.1: resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: +ansi-escapes@4.3.1, ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.1" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: type-fest "^0.11.0" +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -5758,7 +6083,7 @@ array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -array.prototype.flatmap@^1.2.1: +array.prototype.flatmap@1.2.3, array.prototype.flatmap@^1.2.1: version "1.2.3" resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== @@ -5895,6 +6220,11 @@ atob@^2.1.2: resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +auto-bind@~4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb" + integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ== + autoprefixer@^9.7.2: version "9.7.4" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" @@ -6140,6 +6470,11 @@ babel-plugin-syntax-jsx@^6.18.0: resolved "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= +babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" + integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== + babel-plugin-transform-inline-consecutive-adds@^0.4.3: version "0.4.3" resolved "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" @@ -6215,6 +6550,39 @@ babel-preset-current-node-syntax@^0.1.2: "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +babel-preset-fbjs@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" + integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-member-expression-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-property-literals" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" + babel-preset-jest@^26.0.0: version "26.0.0" resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.0.0.tgz#1eac82f513ad36c4db2e9263d7c485c825b1faa6" @@ -6614,6 +6982,11 @@ buffer-crc32@~0.2.3: resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -6925,6 +7298,14 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4. escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -6944,14 +7325,6 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - char-regex@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -6987,6 +7360,21 @@ check-types@^11.1.1: resolved "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== +chokidar@3.4.1, chokidar@^3.2.2, chokidar@^3.3.0, chokidar@^3.3.1: + version "3.4.1" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chokidar@^2.0.4, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -7006,21 +7394,6 @@ chokidar@^2.0.4, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.2.2, chokidar@^3.3.0, chokidar@^3.3.1: - version "3.4.1" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" - integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - chownr@^1.0.1, chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -7147,6 +7520,11 @@ cli-width@^2.0.0: resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + clipboard@^2.0.0: version "2.0.6" resolved "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" @@ -7525,6 +7903,15 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +constant-case@3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/constant-case/-/constant-case-3.0.3.tgz#ac910a99caf3926ac5112f352e3af599d8c5fc0a" + integrity sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + upper-case "^2.0.1" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -7712,7 +8099,7 @@ core-js-pure@^3.0.0, core-js-pure@^3.0.1: resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== -core-js@^2.4.0, core-js@^2.5.7, core-js@^2.6.5: +core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.7, core-js@^2.6.5: version "2.6.11" resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== @@ -7759,6 +8146,17 @@ cosmiconfig@6.0.0, cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" +cosmiconfig@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + cosmiconfig@^5.0.0, cosmiconfig@^5.1.0, cosmiconfig@^5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -7815,6 +8213,14 @@ cross-env@^7.0.0: dependencies: cross-spawn "^7.0.1" +cross-fetch@2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz#a47ff4f7fc712daba8f6a695a11c948440d45723" + integrity sha1-pH/09/xxLauo9qaVoRyUhEDUVyM= + dependencies: + node-fetch "2.1.2" + whatwg-fetch "2.0.4" + cross-fetch@3.0.5: version "3.0.5" resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.5.tgz#2739d2981892e7ab488a7ad03b92df2816e03f4c" @@ -8291,7 +8697,12 @@ dateformat@^3.0.0: resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debounce@^1.2.0: +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= + +debounce@1.2.0, debounce@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== @@ -8512,6 +8923,11 @@ depd@~1.1.2: resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +dependency-graph@0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318" + integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== + deprecated-decorator@^0.1.6: version "0.1.6" resolved "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" @@ -8540,6 +8956,11 @@ detect-file@^1.0.0: resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-indent@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -8877,6 +9298,11 @@ dotenv-webpack@^1.7.0: dependencies: dotenv-defaults "^1.0.2" +dotenv@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" + integrity sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0= + dotenv@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" @@ -8915,6 +9341,13 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -9774,6 +10207,11 @@ fast-deep-equal@2.0.1, fast-deep-equal@^2.0.1: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + fast-deep-equal@^3.0.0, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -9875,6 +10313,25 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" + integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== + dependencies: + core-js "^2.4.1" + fbjs-css-vars "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -10889,6 +11346,13 @@ graphql-language-service@^3.0.0: graphql-language-service-interface "^2.4.0" graphql-language-service-types "^1.6.0" +graphql-request@^1.5.0: + version "1.8.2" + resolved "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz#398d10ae15c585676741bde3fc01d5ca948f8fbe" + integrity sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg== + dependencies: + cross-fetch "2.2.2" + graphql-subscriptions@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11" @@ -10896,6 +11360,11 @@ graphql-subscriptions@^1.0.0: dependencies: iterall "^1.2.1" +graphql-tag@2.11.0: + version "2.11.0" + resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd" + integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA== + graphql-tag@^2.9.2: version "2.10.4" resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.4.tgz#2f301a98219be8b178a6453bb7e33b79b66d8f83" @@ -11112,7 +11581,7 @@ hastscript@^5.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -he@^1.2.0: +he@^1.1.0, he@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -11460,7 +11929,7 @@ https-browserify@^1.0.0: resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.3: +https-proxy-agent@^2.2.1, https-proxy-agent@^2.2.3: version "2.2.4" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== @@ -11574,6 +12043,11 @@ immutable@>=3.8.2, immutable@^3.8.2: resolved "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= +immutable@~3.7.6: + version "3.7.6" + resolved "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" + integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= + import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -11596,7 +12070,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -11644,6 +12118,11 @@ imurmurhash@^0.1.4: resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@4.0.0, indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + indent-string@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" @@ -11656,11 +12135,6 @@ indent-string@^3.0.0: resolved "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -11759,6 +12233,25 @@ inquirer@7.0.4: strip-ansi "^5.1.0" through "^2.3.6" +inquirer@7.3.3: + version "7.3.3" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + inquirer@^6.2.0: version "6.5.2" resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" @@ -12262,7 +12755,7 @@ is-ssh@^1.3.0: dependencies: protocols "^1.1.0" -is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -12382,6 +12875,14 @@ isobject@^4.0.0: resolved "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== +isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -12897,6 +13398,14 @@ js-tokens@^3.0.2: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +js-yaml@^3.10.0: + version "3.14.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^3.13.1, js-yaml@^3.8.3: version "3.13.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -13010,6 +13519,11 @@ json-schema-merge-allof@^0.6.0: json-schema-compare "^0.2.2" lodash "^4.17.4" +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -13030,11 +13544,26 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json-to-pretty-yaml@1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz#f4cd0bd0a5e8fe1df25aaf5ba118b099fd992d5b" + integrity sha1-9M0L0KXo/h3yWq9boRiwmf2ZLVs= + dependencies: + remedial "^1.0.7" + remove-trailing-spaces "^1.0.6" + json3@^3.3.2: version "3.3.3" resolved "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" @@ -13092,6 +13621,22 @@ jsonpointer@^4.0.1: resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= +jsonwebtoken@^8.1.0: + version "8.5.1" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -13179,6 +13724,23 @@ jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: array-includes "^3.0.3" object.assign "^4.1.0" +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + jwt-decode@2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz#7d86bd56679f58ce6a84704a657dd392bba81a79" @@ -13416,7 +13978,7 @@ listr-silent-renderer@^1.1.1: resolved "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= -listr-update-renderer@^0.5.0: +listr-update-renderer@0.5.0, listr-update-renderer@^0.5.0: version "0.5.0" resolved "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== @@ -13611,17 +14173,47 @@ lodash.get@^4.4.2: resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.once@^4.1.1: +lodash.once@^4.0.0, lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= @@ -13671,7 +14263,7 @@ lodash@4.17.15: resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.2.1: +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.2.1, lodash@~4.17.15: version "4.17.19" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== @@ -13683,6 +14275,13 @@ log-symbols@3.0.0, log-symbols@^3.0.0: dependencies: chalk "^2.4.2" +log-symbols@4.0.0, log-symbols@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -13690,13 +14289,6 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" -log-symbols@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== - dependencies: - chalk "^4.0.0" - log-update@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" @@ -13752,7 +14344,7 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lower-case@^2.0.1: +lower-case@2.0.1, lower-case@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== @@ -14346,7 +14938,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@*, mkdirp@1.0.4, mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -14592,11 +15184,24 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" +node-fetch@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" + integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= + node-fetch@2.6.0, node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0, node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-forge@0.9.0: version "0.9.0" resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" @@ -14942,6 +15547,11 @@ nth-check@^1.0.2, nth-check@~1.0.1: dependencies: boolbase "~1.0.0" +nullthrows@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" + integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== + num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -15432,7 +16042,7 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@^3.0.3: +param-case@3.0.3, param-case@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== @@ -15471,7 +16081,7 @@ parse-entities@^1.1.0, parse-entities@^1.1.2: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-filepath@^1.0.1: +parse-filepath@1.0.2, parse-filepath@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= @@ -15553,7 +16163,7 @@ parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3: resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascal-case@^3.1.1: +pascal-case@3.1.1, pascal-case@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== @@ -16527,6 +17137,35 @@ pretty-hrtime@^1.0.3: resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= +prisma-json-schema@0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/prisma-json-schema/-/prisma-json-schema-0.1.3.tgz#6c302db8f464f8b92e8694d3f7dd3f41ac9afcbe" + integrity sha512-XZrf2080oR81mY8/OC8al68HiwBm0nXlFE727JIia0ZbNqwuV4MyRYk6E0+OIa6/9KEYxZrcAmoBs3EW1cCvnA== + +prisma-yml@1.34.10: + version "1.34.10" + resolved "https://registry.npmjs.org/prisma-yml/-/prisma-yml-1.34.10.tgz#0ef1ad3a125f54f200289cba56bdd9597f17f410" + integrity sha512-N9on+Cf/XQKFGUULk/681tnpfqiZ19UBTurFMm+/9rnml37mteDaFr2k8yz+K8Gt2xpEJ7kBu7ikG5PrXI1uoA== + dependencies: + ajv "5" + bluebird "^3.5.1" + chalk "^2.3.0" + debug "^3.1.0" + dotenv "^4.0.0" + fs-extra "^7.0.0" + graphql-request "^1.5.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + isomorphic-fetch "^2.2.1" + js-yaml "^3.10.0" + json-stable-stringify "^1.0.1" + jsonwebtoken "^8.1.0" + lodash "^4.17.4" + prisma-json-schema "0.1.3" + replaceall "^0.1.6" + scuid "^1.0.2" + yaml-ast-parser "^0.0.40" + prismjs@^1.8.4: version "1.19.0" resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.19.0.tgz#713afbd45c3baca4b321569f2df39e17e729d4dc" @@ -16604,6 +17243,13 @@ promise.series@^0.2.0: resolved "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" integrity sha1-LMfr6Vn8OmYZwEq029yeRS2GS70= +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + promise@^8.0.3: version "8.1.0" resolved "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" @@ -17666,6 +18312,36 @@ relateurl@^0.2.7: resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +relay-compiler@10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/relay-compiler/-/relay-compiler-10.0.0.tgz#04d50d8ec53e3f683bc379b756cf0542a76105af" + integrity sha512-EVBMcMCiP+waOPR2930cNCCsac1sNhfQayzS+bOEMz2Lls5Bx7grhaadkBZLTEdCHQ1kf7lrsmcMDqj9mxABFw== + dependencies: + "@babel/core" "^7.0.0" + "@babel/generator" "^7.5.0" + "@babel/parser" "^7.0.0" + "@babel/runtime" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + babel-preset-fbjs "^3.3.0" + chalk "^4.0.0" + fb-watchman "^2.0.0" + fbjs "^1.0.0" + glob "^7.1.1" + immutable "~3.7.6" + nullthrows "^1.1.1" + relay-runtime "10.0.0" + signedsource "^1.0.0" + yargs "^15.3.1" + +relay-runtime@10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/relay-runtime/-/relay-runtime-10.0.0.tgz#cfceb0f8453b39a385d63093f2dbf1702ddc02b3" + integrity sha512-QEpFwEjvGgWgQ0MPJyrZKggaCoGMKwxPQx7NwYl4FcMmxZcicc8wk6vI1iTxl0tsPKgW/YG8FgueQR+X7ZtZqw== + dependencies: + "@babel/runtime" "^7.0.0" + fbjs "^1.0.0" + remark-parse@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" @@ -17687,11 +18363,21 @@ remark-parse@^5.0.0: vfile-location "^2.0.0" xtend "^4.0.1" +remedial@^1.0.7: + version "1.0.8" + resolved "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz#a5e4fd52a0e4956adbaf62da63a5a46a78c578a0" + integrity sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg== + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= +remove-trailing-spaces@^1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.7.tgz#491f04e11d98880714d12429b0d0938cbe030ae6" + integrity sha512-wjM17CJ2kk0SgoGyJ7ZMzRRCuTq+V8YhMwpZ5XEWX0uaked2OUq6utvHXGNBQrfkUzUUABFMyxlKn+85hMv4dg== + renderkid@^2.0.1: version "2.0.3" resolved "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" @@ -17734,6 +18420,11 @@ replace-in-file@^6.0.0: glob "^7.1.6" yargs "^15.3.1" +replaceall@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz#81d81ac7aeb72d7f5c4942adf2697a3220688d8e" + integrity sha1-gdgax663LX9cSUKt8ml6MiBojY4= + request-progress@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" @@ -17757,7 +18448,7 @@ request-promise-native@^1.0.5, request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.85.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: +request@2.88.2, request@^2.85.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -18109,6 +18800,13 @@ rxjs@^6.5.2: dependencies: tslib "^1.9.0" +rxjs@^6.6.0: + version "6.6.2" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" + integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -18211,6 +18909,11 @@ screenfull@^5.0.0: resolved "https://registry.npmjs.org/screenfull/-/screenfull-5.0.2.tgz#b9acdcf1ec676a948674df5cd0ff66b902b0bed7" integrity sha512-cCF2b+L/mnEiORLN5xSAz6H3t18i2oHh9BA8+CQlAh5DRw2+NFAGQJOSYbcGw8B2k04g/lVvFcfZ83b3ysH5UQ== +scuid@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz#d3f9f920956e737a60f72d0e4ad280bf324d5dab" + integrity sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg== + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -18367,7 +19070,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -18485,6 +19188,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signedsource@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a" + integrity sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo= + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -19977,7 +20685,12 @@ ts-loader@^7.0.4: micromatch "^4.0.0" semver "^6.0.0" -ts-node@^8.6.2: +ts-log@2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/ts-log/-/ts-log-2.1.4.tgz#063c5ad1cbab5d49d258d18015963489fb6fb59a" + integrity sha512-P1EJSoyV+N3bR/IWFeAqXzKPZwHpnLY6j7j58mAvewHRipo+BQM2Y1f9Y9BjEQznKwgqqZm7H8iuixmssU7tYQ== + +ts-node@^8.10.2, ts-node@^8.6.2: version "8.10.2" resolved "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== @@ -20126,6 +20839,11 @@ typescript@^3.9.3: resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== +ua-parser-js@^0.7.18: + version "0.7.21" + resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" @@ -20369,6 +21087,13 @@ update-notifier@^4.0.0: semver-diff "^3.1.1" xdg-basedir "^4.0.0" +upper-case@2.0.1, upper-case@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/upper-case/-/upper-case-2.0.1.tgz#6214d05e235dc817822464ccbae85822b3d8665f" + integrity sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A== + dependencies: + tslib "^1.10.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -20641,6 +21366,14 @@ vscode-languageserver-types@^3.15.1: resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz#17be71d78d2f6236d414f0001ce1ef4d23e6b6de" integrity sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ== +vue-template-compiler@^2.6.11: + version "2.6.11" + resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080" + integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA== + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -20875,15 +21608,20 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" +whatwg-fetch@2.0.4, whatwg-fetch@^2.0.0, whatwg-fetch@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + whatwg-fetch@3.0.0, whatwg-fetch@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== -whatwg-fetch@^2.0.0, whatwg-fetch@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== +whatwg-fetch@>=0.10.0: + version "3.3.1" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.3.1.tgz#6c1acf37dec176b0fd6bc9a74b616bec2f612935" + integrity sha512-faXTmGDcLuEPBpJwb5LQfyxvubKiE+RlbmmweFGKjvIPFj4uHTTfdtTIkdTRhC6OSH9S9eyYbx8kZ0UEaQqYTA== whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" @@ -21027,6 +21765,15 @@ worker-rpc@^0.1.0: dependencies: microevent.ts "~0.1.1" +wrap-ansi@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -21259,12 +22006,17 @@ yallist@^4.0.0: resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml-ast-parser@^0.0.40: + version "0.0.40" + resolved "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.40.tgz#08536d4e73d322b1c9ce207ab8dd70e04d20ae6e" + integrity sha1-CFNtTnPTIrHJziB6uN1w4E0grm4= + yaml@*, yaml@^1.10.0, yaml@^1.7.2, yaml@^1.9.2: version "1.10.0" resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@18.x, yargs-parser@^18.1.1: +yargs-parser@18.x, yargs-parser@^18.1.1, yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -21303,6 +22055,23 @@ yargs-parser@^3.2.0: camelcase "^3.0.0" lodash.assign "^4.1.0" +yargs@15.4.1: + version "15.4.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yargs@^13.3.0, yargs@^13.3.2: version "13.3.2" resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" From f21b65561bf8163a0fce03ffdd8928232877cdb9 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 6 Aug 2020 10:37:39 +0200 Subject: [PATCH 007/303] chore(gql): fixing dependencies now there is a new release --- plugins/catalog-graphql/package.json | 10 +++++----- yarn.lock | 12 +++++------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 8a0c0474f6..f64ba1404e 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graphql", - "version": "0.1.1-alpha.16", + "version": "0.1.1-alpha.17", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,9 +22,9 @@ "mock-data": "./scripts/mock-data.sh" }, "dependencies": { - "@backstage/backend-common": "^0.1.1-alpha.16", - "@backstage/catalog-model": "^0.1.1-alpha.16", - "@backstage/config": "^0.1.1-alpha.16", + "@backstage/backend-common": "^0.1.1-alpha.17", + "@backstage/catalog-model": "^0.1.1-alpha.17", + "@backstage/config": "^0.1.1-alpha.17", "@graphql-codegen/cli": "^1.17.7", "@graphql-codegen/typescript": "^1.17.7", "@graphql-codegen/typescript-resolvers": "^1.17.7", @@ -38,7 +38,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.1.1-alpha.16", + "@backstage/cli": "^0.1.1-alpha.17", "@types/supertest": "^2.0.8", "eslint-plugin-graphql": "^4.0.0", "msw": "^0.19.5", diff --git a/yarn.lock b/yarn.lock index bbb0a0d3c9..8305285e7e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8898,17 +8898,15 @@ depd@~1.1.2: resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -<<<<<<< HEAD -dependency-graph@0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318" - integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== -======= depd@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== ->>>>>>> 24ed336579226fc628f7f6ba38c0bb27f430b257 + +dependency-graph@0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318" + integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== deprecated-decorator@^0.1.6: version "0.1.6" From 3bc0ff4dfbf22c3f603aabdea951726769ccbc95 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 6 Aug 2020 10:38:06 +0200 Subject: [PATCH 008/303] chore(gql): make catalog-gql non-private --- plugins/catalog-graphql/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index f64ba1404e..205e35aba6 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -4,7 +4,6 @@ "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", - "private": true, "publishConfig": { "access": "public", "main": "dist/index.esm.js", From e93e414fdd8150dc6dc1515d0475e3aeca996f3d Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 6 Aug 2020 14:46:00 +0200 Subject: [PATCH 009/303] chore(gql): fixing build issues --- plugins/catalog-graphql/package.json | 1 - plugins/graphql/README.md | 12 +--- plugins/graphql/package.json | 3 +- plugins/graphql/src/index.ts | 2 - plugins/graphql/src/run.ts | 33 ---------- .../graphql/src/service/standaloneServer.ts | 62 ------------------ plugins/graphql/src/setupTests.ts | 1 - yarn.lock | 63 ++----------------- 8 files changed, 9 insertions(+), 168 deletions(-) delete mode 100644 plugins/graphql/src/run.ts delete mode 100644 plugins/graphql/src/service/standaloneServer.ts diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 205e35aba6..6f3c2c9aaa 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -29,7 +29,6 @@ "@graphql-codegen/typescript-resolvers": "^1.17.7", "@graphql-modules/core": "^0.7.17", "@types/express": "^4.17.6", - "@types/whatwg-fetch": "^0.0.33", "graphql": "^15.3.0", "node-fetch": "^2.6.0", "ts-node": "^8.10.2", diff --git a/plugins/graphql/README.md b/plugins/graphql/README.md index 3f85ec766e..d5eef26169 100644 --- a/plugins/graphql/README.md +++ b/plugins/graphql/README.md @@ -1,13 +1,3 @@ # graphql -Welcome to the graphql backend plugin! - -_This plugin was created through the Backstage CLI_ - -## Getting started - -Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/graphql](http://localhost:3000/graphql). - -You can also serve the plugin in isolation by running `yarn start` in the plugin directory. -This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. -It is only meant for local development, and the setup for it can be found inside the [/dev](/dev) directory. +## TODO diff --git a/plugins/graphql/package.json b/plugins/graphql/package.json index 0cc85d2513..f640c6267b 100644 --- a/plugins/graphql/package.json +++ b/plugins/graphql/package.json @@ -30,7 +30,8 @@ "express": "^4.17.1", "express-promise-router": "^3.0.3", "graphql": "^15.3.0", - "whatwg-fetch": "^2.0.0", + "node-fetch": "^2.6.0", + "reflect-metadata": "^0.1.13", "winston": "^3.2.1", "yn": "^4.0.0" }, diff --git a/plugins/graphql/src/index.ts b/plugins/graphql/src/index.ts index f12e894c84..7612c392a2 100644 --- a/plugins/graphql/src/index.ts +++ b/plugins/graphql/src/index.ts @@ -14,6 +14,4 @@ * limitations under the License. */ -require('whatwg-fetch'); - export * from './service/router'; diff --git a/plugins/graphql/src/run.ts b/plugins/graphql/src/run.ts deleted file mode 100644 index b96989e4b8..0000000000 --- a/plugins/graphql/src/run.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ - -import { getRootLogger } from '@backstage/backend-common'; -import yn from 'yn'; -import { startStandaloneServer } from './service/standaloneServer'; - -const port = process.env.PLUGIN_PORT ? Number(process.env.PLUGIN_PORT) : 7000; -const enableCors = yn(process.env.PLUGIN_CORS, { default: false }); -const logger = getRootLogger(); - -startStandaloneServer({ port, enableCors, logger }).catch(err => { - logger.error(err); - process.exit(1); -}); - -process.on('SIGINT', () => { - logger.info('CTRL+C pressed; exiting.'); - process.exit(0); -}); diff --git a/plugins/graphql/src/service/standaloneServer.ts b/plugins/graphql/src/service/standaloneServer.ts deleted file mode 100644 index 0f772a583f..0000000000 --- a/plugins/graphql/src/service/standaloneServer.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ - -import { createServiceBuilder } from '@backstage/backend-common'; -import { Server } from 'http'; -import { Logger } from 'winston'; -import { createRouter } from './router'; - -export interface ServerOptions { - port: number; - enableCors: boolean; - logger: Logger; -} - -export async function startStandaloneServer( - options: ServerOptions, -): Promise { - const logger = options.logger.child({ service: 'graphql-backend' }); - logger.debug('Starting application server...'); - const router = await createRouter({ - logger, - }); - - const service = createServiceBuilder(module) - .enableCors({ origin: 'http://localhost:3000' }) - .addRouter('/graphql', router); - - return await service.start().catch(err => { - logger.error(err); - process.exit(1); - }); -} - -module.hot?.accept(); diff --git a/plugins/graphql/src/setupTests.ts b/plugins/graphql/src/setupTests.ts index ac41ef995a..ba33cf996b 100644 --- a/plugins/graphql/src/setupTests.ts +++ b/plugins/graphql/src/setupTests.ts @@ -13,6 +13,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -require('whatwg-fetch'); export {}; diff --git a/yarn.lock b/yarn.lock index 8305285e7e..ecfbbfa4ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5174,20 +5174,6 @@ dependencies: "@types/node" "*" -"@types/whatwg-fetch@^0.0.33": - version "0.0.33" - resolved "https://registry.npmjs.org/@types/whatwg-fetch/-/whatwg-fetch-0.0.33.tgz#19c0d2863c8cb2380f21a1c736b79cbf7895bb13" - integrity sha1-GcDShjyMsjgPIaHHNrecv3iVuxM= - dependencies: - "@types/whatwg-streams" "*" - -"@types/whatwg-streams@*": - version "3.2.1" - resolved "https://registry.npmjs.org/@types/whatwg-streams/-/whatwg-streams-3.2.1.tgz#225009a823e8b44be12569a24e60374ccdabe29e" - integrity sha512-Syv05sRL25b8cC8tqgXSQgLZZmqGq2GO+NafrtHbjPJccP6gWBXmHvo2Trw3AWXQ4QLIkVuOB7uStCuhzswyiw== - dependencies: - whatwg-streams "*" - "@types/whatwg-streams@^0.0.7": version "0.0.7" resolved "https://registry.npmjs.org/@types/whatwg-streams/-/whatwg-streams-0.0.7.tgz#28bfe73dc850562296367249c4b32a50db81e9d3" @@ -6749,11 +6735,6 @@ bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5 resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bluebird@~1.0.0: - version "1.0.8" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-1.0.8.tgz#851c7825e6cce59e4b43dde95d574b88675463fc" - integrity sha1-hRx4JebM5Z5LQ93pXVdLiGdUY/w= - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -8767,11 +8748,6 @@ deep-equal@^1.0.1, deep-equal@^1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-equal@~0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz#b246c2b80a570a47c11be1d9bd1070ec878b87ce" - integrity sha1-skbCuApXCkfBG+HZvRBw7IeLh84= - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -8846,11 +8822,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@~0.0.0: - version "0.0.0" - resolved "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz#f35eea7d705e933baf13b2f03b3f83d921403b3e" - integrity sha1-817qfXBekzuvE7LwOz+D2SFAOz4= - del@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -18113,6 +18084,11 @@ redux@^4.0.4: loose-envify "^1.4.0" symbol-observable "^1.2.0" +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + refractor@^2.4.1: version "2.10.1" resolved "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" @@ -18490,13 +18466,6 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= - dependencies: - through "~2.3.4" - ret@~0.1.10: version "0.1.15" resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -20065,18 +20034,6 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tape@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz#2e7ce0a31df09f8d6851664a71842e0ca5057af7" - integrity sha1-Lnzgox3wn41oUWZKcYQuDKUFevc= - dependencies: - deep-equal "~0.1.0" - defined "~0.0.0" - inherits "~2.0.1" - jsonify "~0.0.0" - resumer "~0.0.0" - through "~2.3.4" - tar-fs@^1.16.3: version "1.16.3" resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" @@ -20319,7 +20276,7 @@ through2@^3.0.0: dependencies: readable-stream "2 || 3" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1, through@~2.3.4: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -21532,14 +21489,6 @@ whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-streams@*: - version "0.1.1" - resolved "https://registry.npmjs.org/whatwg-streams/-/whatwg-streams-0.1.1.tgz#dd5575c965bce13da76dc0dd495629a87572e74e" - integrity sha1-3VV1yWW84T2nbcDdSVYpqHVy504= - dependencies: - bluebird "~1.0.0" - tape "~2.3.2" - whatwg-url@^6.4.1: version "6.5.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" From 679cc1c72b2cc5d9a897cf1e139a5605943e4322 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 6 Aug 2020 15:22:58 +0200 Subject: [PATCH 010/303] chore(gql): add todo --- plugins/catalog-graphql/src/service/client.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/catalog-graphql/src/service/client.ts b/plugins/catalog-graphql/src/service/client.ts index 091a8a8cc0..eddae2f396 100644 --- a/plugins/catalog-graphql/src/service/client.ts +++ b/plugins/catalog-graphql/src/service/client.ts @@ -22,6 +22,8 @@ export class CatalogClient { async list(): Promise { const res = await fetch(`${this.baseUrl}/catalog/entities`); if (!res.ok) { + // todo(blam): need some better way to handle errors here + // experiment with throwing the input errors etc and having graphql versions of that throw new Error(`NOPE, ${await res.text()}`); } From 06626e171ff9ad5c6e5fca2eba6e6ea11603ec52 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 6 Aug 2020 15:36:21 +0200 Subject: [PATCH 011/303] chore(gql): fixing the actual build issue --- plugins/catalog-graphql/package.json | 2 +- yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 6f3c2c9aaa..fec113f545 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -28,7 +28,6 @@ "@graphql-codegen/typescript": "^1.17.7", "@graphql-codegen/typescript-resolvers": "^1.17.7", "@graphql-modules/core": "^0.7.17", - "@types/express": "^4.17.6", "graphql": "^15.3.0", "node-fetch": "^2.6.0", "ts-node": "^8.10.2", @@ -39,6 +38,7 @@ "@backstage/cli": "^0.1.1-alpha.17", "@types/supertest": "^2.0.8", "eslint-plugin-graphql": "^4.0.0", + "@types/express": "^4.17.7", "msw": "^0.19.5", "supertest": "^4.0.2" }, diff --git a/yarn.lock b/yarn.lock index ecfbbfa4ea..a862980d7c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4458,7 +4458,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@^4.17.6": +"@types/express@*", "@types/express@^4.17.6", "@types/express@^4.17.7": version "4.17.7" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.7.tgz#42045be6475636d9801369cd4418ef65cdb0dd59" integrity sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ== From e0bbbae89816e14251fddd84500d6b79984542d1 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 6 Aug 2020 16:02:28 +0200 Subject: [PATCH 012/303] feat(gql): move out the generation into a one time command --- plugins/catalog-graphql/.gitignore | 1 - plugins/catalog-graphql/package.json | 2 +- plugins/catalog-graphql/src/graphql/types.ts | 209 +++++++++++++++++++ 3 files changed, 210 insertions(+), 2 deletions(-) delete mode 100644 plugins/catalog-graphql/.gitignore create mode 100644 plugins/catalog-graphql/src/graphql/types.ts diff --git a/plugins/catalog-graphql/.gitignore b/plugins/catalog-graphql/.gitignore deleted file mode 100644 index 5a5538170a..0000000000 --- a/plugins/catalog-graphql/.gitignore +++ /dev/null @@ -1 +0,0 @@ -src/graphql/types.ts diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index fec113f545..cb8f900bff 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -16,7 +16,7 @@ "test": "backstage-cli test", "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", - "postinstall": "graphql-codegen", + "generate:types": "graphql-codegen", "clean": "backstage-cli clean", "mock-data": "./scripts/mock-data.sh" }, diff --git a/plugins/catalog-graphql/src/graphql/types.ts b/plugins/catalog-graphql/src/graphql/types.ts new file mode 100644 index 0000000000..567e19c8bb --- /dev/null +++ b/plugins/catalog-graphql/src/graphql/types.ts @@ -0,0 +1,209 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ +import { GraphQLResolveInfo } from 'graphql'; +import { ModuleContext } from '@graphql-modules/core'; + +export type Maybe = T | null; +export type Exact = { [K in keyof T]: T[K] }; +export type RequireFields = { [X in Exclude]?: T[X] } & { [P in K]-?: NonNullable }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; +}; + +export type EntityMetadataAnnotation = { + __typename?: 'EntityMetadataAnnotation'; + key: Scalars['String']; + value: Scalars['String']; +}; + +export type EntityMetadata = { + __typename?: 'EntityMetadata'; + name: Scalars['String']; + namespace?: Maybe; + annotation?: Maybe; + annotations?: Maybe>; +}; + + +export type EntityMetadataAnnotationArgs = { + name?: Maybe; +}; + +export type CatalogEntity = { + __typename?: 'CatalogEntity'; + apiVersion?: Maybe; + kind: Scalars['String']; + metadata?: Maybe; +}; + +export type CatalogQuery = { + __typename?: 'CatalogQuery'; + list: Array; +}; + +export type Query = { + __typename?: 'Query'; + catalog: CatalogQuery; +}; + +export type WithIndex = TObject & Record; +export type ResolversObject = WithIndex; + +export type ResolverTypeWrapper = Promise | T; + + +export type LegacyStitchingResolver = { + fragment: string; + resolve: ResolverFn; +}; + +export type NewStitchingResolver = { + selectionSet: string; + resolve: ResolverFn; +}; +export type StitchingResolver = LegacyStitchingResolver | NewStitchingResolver; +export type Resolver = + | ResolverFn + | StitchingResolver; + +export type ResolverFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => Promise | TResult; + +export type SubscriptionSubscribeFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => AsyncIterator | Promise>; + +export type SubscriptionResolveFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => TResult | Promise; + +export interface SubscriptionSubscriberObject { + subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>; + resolve?: SubscriptionResolveFn; +} + +export interface SubscriptionResolverObject { + subscribe: SubscriptionSubscribeFn; + resolve: SubscriptionResolveFn; +} + +export type SubscriptionObject = + | SubscriptionSubscriberObject + | SubscriptionResolverObject; + +export type SubscriptionResolver = + | ((...args: any[]) => SubscriptionObject) + | SubscriptionObject; + +export type TypeResolveFn = ( + parent: TParent, + context: TContext, + info: GraphQLResolveInfo +) => Maybe | Promise>; + +export type IsTypeOfResolverFn = (obj: T, info: GraphQLResolveInfo) => boolean | Promise; + +export type NextResolverFn = () => Promise; + +export type DirectiveResolverFn = ( + next: NextResolverFn, + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => TResult | Promise; + +/** Mapping between all available schema types and the resolvers types */ +export type ResolversTypes = ResolversObject<{ + EntityMetadataAnnotation: ResolverTypeWrapper>; + String: ResolverTypeWrapper>; + EntityMetadata: ResolverTypeWrapper>; + CatalogEntity: ResolverTypeWrapper>; + CatalogQuery: ResolverTypeWrapper>; + Query: ResolverTypeWrapper<{}>; + Boolean: ResolverTypeWrapper>; +}>; + +/** Mapping between all available schema types and the resolvers parents */ +export type ResolversParentTypes = ResolversObject<{ + EntityMetadataAnnotation: Partial; + String: Partial; + EntityMetadata: Partial; + CatalogEntity: Partial; + CatalogQuery: Partial; + Query: {}; + Boolean: Partial; +}>; + +export type EntityMetadataAnnotationResolvers = ResolversObject<{ + key?: Resolver; + value?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type EntityMetadataResolvers = ResolversObject<{ + name?: Resolver; + namespace?: Resolver, ParentType, ContextType>; + annotation?: Resolver, ParentType, ContextType, RequireFields>; + annotations?: Resolver>, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type CatalogEntityResolvers = ResolversObject<{ + apiVersion?: Resolver, ParentType, ContextType>; + kind?: Resolver; + metadata?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type CatalogQueryResolvers = ResolversObject<{ + list?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type QueryResolvers = ResolversObject<{ + catalog?: Resolver; +}>; + +export type Resolvers = ResolversObject<{ + EntityMetadataAnnotation?: EntityMetadataAnnotationResolvers; + EntityMetadata?: EntityMetadataResolvers; + CatalogEntity?: CatalogEntityResolvers; + CatalogQuery?: CatalogQueryResolvers; + Query?: QueryResolvers; +}>; + + +/** + * @deprecated + * Use "Resolvers" root object instead. If you wish to get "IResolvers", add "typesPrefix: I" to your config. + */ +export type IResolvers = Resolvers; From b72f136c3657325a02b9c7b4831961747eafcdfd Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 6 Aug 2020 16:21:57 +0200 Subject: [PATCH 013/303] test(gql): added some mock tests for now --- .../src/service/client.test.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 plugins/catalog-graphql/src/service/client.test.ts diff --git a/plugins/catalog-graphql/src/service/client.test.ts b/plugins/catalog-graphql/src/service/client.test.ts new file mode 100644 index 0000000000..e249bf1c15 --- /dev/null +++ b/plugins/catalog-graphql/src/service/client.test.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ +import { CatalogClient } from './client'; + +describe('Catalog GraphQL Module', () => { + it('create a new client', () => { + void new CatalogClient('http://localhost:1234'); + expect(true).toBe(true); + }); +}); From 0fe6f44c17c0a472976308ecbc879c7bad03f75f Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 10:32:18 +0200 Subject: [PATCH 014/303] chore(gql/catalog): updating the version deps after new buymp --- plugins/catalog-graphql/package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index cb8f900bff..7c8b73a943 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graphql", - "version": "0.1.1-alpha.17", + "version": "0.1.1-alpha.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,9 +21,9 @@ "mock-data": "./scripts/mock-data.sh" }, "dependencies": { - "@backstage/backend-common": "^0.1.1-alpha.17", - "@backstage/catalog-model": "^0.1.1-alpha.17", - "@backstage/config": "^0.1.1-alpha.17", + "@backstage/backend-common": "^0.1.1-alpha.18", + "@backstage/catalog-model": "^0.1.1-alpha.18", + "@backstage/config": "^0.1.1-alpha.18", "@graphql-codegen/cli": "^1.17.7", "@graphql-codegen/typescript": "^1.17.7", "@graphql-codegen/typescript-resolvers": "^1.17.7", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.1.1-alpha.17", + "@backstage/cli": "^0.1.1-alpha.18", "@types/supertest": "^2.0.8", "eslint-plugin-graphql": "^4.0.0", "@types/express": "^4.17.7", From 219fa73ad0b8603d60982f496e5aca8474f93e72 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 10:51:46 +0200 Subject: [PATCH 015/303] feat(gql/catlaog): Tidying up the resolver for the annotations --- plugins/catalog-graphql/package.json | 3 +- plugins/catalog-graphql/src/graphql/module.ts | 23 +++++--------- plugins/catalog-graphql/src/schema.gql | 6 ++-- yarn.lock | 31 ++++++------------- 4 files changed, 22 insertions(+), 41 deletions(-) diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 7c8b73a943..be5c585186 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -29,6 +29,7 @@ "@graphql-codegen/typescript-resolvers": "^1.17.7", "@graphql-modules/core": "^0.7.17", "graphql": "^15.3.0", + "graphql-type-json": "^0.3.2", "node-fetch": "^2.6.0", "ts-node": "^8.10.2", "winston": "^3.2.1", @@ -36,9 +37,9 @@ }, "devDependencies": { "@backstage/cli": "^0.1.1-alpha.18", + "@types/express": "^4.17.7", "@types/supertest": "^2.0.8", "eslint-plugin-graphql": "^4.0.0", - "@types/express": "^4.17.7", "msw": "^0.19.5", "supertest": "^4.0.2" }, diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index 1fc13d7950..2f9df09408 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -18,26 +18,16 @@ import { Logger } from 'winston'; import fs from 'fs'; import path from 'path'; import { GraphQLModule } from '@graphql-modules/core'; -import { Resolvers, CatalogEntity, CatalogQuery } from './types'; -import { Entity } from '@backstage/catalog-model'; +import { Resolvers, CatalogQuery } from './types'; import { Config } from '@backstage/config'; import { CatalogClient } from '../service/client'; +import GraphQLJSON, { GraphQLJSONObject } from 'graphql-type-json'; export interface ModuleOptions { logger: Logger; config: Config; } -const parseToCatalogEntities = (e: Entity): CatalogEntity => ({ - ...e, - metadata: { - ...e.metadata, - annotations: Object.entries( - e.metadata.annotations ?? {}, - ).map(([key, value]) => ({ key, value })), - }, -}); - export async function createModule( options: ModuleOptions, ): Promise { @@ -51,18 +41,19 @@ export async function createModule( ); const resolvers: Resolvers = { + JSON: GraphQLJSON, + JSONObject: GraphQLJSONObject, Query: { catalog: () => ({} as CatalogQuery), }, CatalogQuery: { list: async () => { - const list = await catalogClient.list(); - return list.map(parseToCatalogEntities); + return await catalogClient.list(); }, }, EntityMetadata: { - annotation: (e, { name }) => - e.annotations?.find(a => a.key === name) ?? null, + annotations: e => e.annotations, + annotation: (e, { name }) => e.annotations[name] ?? null, }, }; diff --git a/plugins/catalog-graphql/src/schema.gql b/plugins/catalog-graphql/src/schema.gql index b28f796855..5b2ee51db0 100644 --- a/plugins/catalog-graphql/src/schema.gql +++ b/plugins/catalog-graphql/src/schema.gql @@ -1,3 +1,6 @@ +scalar JSON +scalar JSONObject + type EntityMetadataAnnotation { key: String! value: String! @@ -6,8 +9,7 @@ type EntityMetadataAnnotation { type EntityMetadata { name: String! namespace: String - annotation(name: String): EntityMetadataAnnotation - annotations: [EntityMetadataAnnotation!] + annotations: JSONObject } type CatalogEntity { diff --git a/yarn.lock b/yarn.lock index 83b287dd4a..e967be54ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10379,7 +10379,6 @@ file-loader@^4.2.0: "file-saver@github:eligrey/FileSaver.js#1.3.8": version "1.3.8" - uid e865e37af9f9947ddcced76b549e27dc45c1cb2e resolved "https://codeload.github.com/eligrey/FileSaver.js/tar.gz/e865e37af9f9947ddcced76b549e27dc45c1cb2e" file-system-cache@^1.0.5: @@ -11376,6 +11375,11 @@ graphql-tools@^4.0.0: iterall "^1.1.3" uuid "^3.1.0" +graphql-type-json@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.3.2.tgz#f53a851dbfe07bd1c8157d24150064baab41e115" + integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== + graphql-upload@^8.0.2: version "8.1.0" resolved "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.1.0.tgz#6d0ab662db5677a68bfb1f2c870ab2544c14939a" @@ -13586,7 +13590,6 @@ jsonpointer@^4.0.1: resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= -<<<<<<< HEAD jsonwebtoken@^8.1.0: version "8.5.1" resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" @@ -13602,7 +13605,7 @@ jsonwebtoken@^8.1.0: lodash.once "^4.0.0" ms "^2.1.1" semver "^5.6.0" -======= + jspdf-autotable@3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-3.5.3.tgz#2f73adb07f340e7dbf22950e3e6c8bf853991479" @@ -13614,12 +13617,11 @@ jspdf@1.5.3: integrity sha512-J9X76xnncMw+wIqb15HeWfPMqPwYxSpPY8yWPJ7rAZN/ZDzFkjCSZObryCyUe8zbrVRNiuCnIeQteCzMn7GnWw== dependencies: canvg "1.5.3" - file-saver "github:eligrey/FileSaver.js#1.3.8" + file-saver eligrey/FileSaver.js#1.3.8 html2canvas "1.0.0-alpha.12" omggif "1.0.7" promise-polyfill "8.1.0" stackblur-canvas "2.2.0" ->>>>>>> f225b094e4651d478fa5925ef498fdbdab6ca353 jsprim@^1.2.2: version "1.4.1" @@ -16072,9 +16074,6 @@ parse-entities@^1.1.0, parse-entities@^1.1.2: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -<<<<<<< HEAD -parse-filepath@1.0.2, parse-filepath@^1.0.1: -======= parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -16087,8 +16086,7 @@ parse-entities@^2.0.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-filepath@^1.0.1: ->>>>>>> f225b094e4651d478fa5925ef498fdbdab6ca353 +parse-filepath@1.0.2, parse-filepath@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= @@ -17149,7 +17147,6 @@ pretty-hrtime@^1.0.3: resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -<<<<<<< HEAD prisma-json-schema@0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/prisma-json-schema/-/prisma-json-schema-0.1.3.tgz#6c302db8f464f8b92e8694d3f7dd3f41ac9afcbe" @@ -17179,16 +17176,10 @@ prisma-yml@1.34.10: scuid "^1.0.2" yaml-ast-parser "^0.0.40" -prismjs@^1.8.4: - version "1.19.0" - resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.19.0.tgz#713afbd45c3baca4b321569f2df39e17e729d4dc" - integrity sha512-IVFtbW9mCWm9eOIaEkNyo2Vl4NnEifis2GQ7/MLRG5TQe6t+4Sj9J5QWI9i3v+SS43uZBlCAOn+zYTVYQcPXJw== -======= prismjs@^1.20.0, prismjs@^1.8.4, prismjs@~1.20.0: version "1.20.0" resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.20.0.tgz#9b685fc480a3514ee7198eac6a3bf5024319ff03" integrity sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ== ->>>>>>> f225b094e4651d478fa5925ef498fdbdab6ca353 optionalDependencies: clipboard "^2.0.0" @@ -18481,11 +18472,7 @@ request-promise-native@^1.0.5, request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -<<<<<<< HEAD -request@2.88.2, request@^2.85.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: -======= -request@^2.55.0, request@^2.85.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: ->>>>>>> f225b094e4651d478fa5925ef498fdbdab6ca353 +request@2.88.2, request@^2.55.0, request@^2.85.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== From f5eb812847a903d1e1381e59630c8e534dc34053 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 11:00:55 +0200 Subject: [PATCH 016/303] chore(gql/catalog): Added some more metadata fields to the catalog entities --- plugins/catalog-graphql/src/schema.gql | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/catalog-graphql/src/schema.gql b/plugins/catalog-graphql/src/schema.gql index 5b2ee51db0..02abffa09e 100644 --- a/plugins/catalog-graphql/src/schema.gql +++ b/plugins/catalog-graphql/src/schema.gql @@ -8,14 +8,19 @@ type EntityMetadataAnnotation { type EntityMetadata { name: String! - namespace: String + namespace: String! annotations: JSONObject + annotation(name: String): JSON + labels: JSONObject + uid: String! + etag: String! + generation: Int! } type CatalogEntity { - apiVersion: String + apiVersion: String! kind: String! - metadata: EntityMetadata + metadata: EntityMetadata! } type CatalogQuery { From 4d4ead15c4f3e168e29b0896b83a1a3352c5b345 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 11:09:30 +0200 Subject: [PATCH 017/303] chore(gql/catalog): making the client alittle more readabke --- plugins/catalog-graphql/src/service/client.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-graphql/src/service/client.ts b/plugins/catalog-graphql/src/service/client.ts index eddae2f396..f7bc5ccffe 100644 --- a/plugins/catalog-graphql/src/service/client.ts +++ b/plugins/catalog-graphql/src/service/client.ts @@ -27,6 +27,7 @@ export class CatalogClient { throw new Error(`NOPE, ${await res.text()}`); } - return await (res.json() as Promise); + const entities: Entity[] = await res.json(); + return entities; } } From 8e1cb1ca0be466c3f1a1849e37c591a536aeae8a Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 11:37:30 +0200 Subject: [PATCH 018/303] feat(gql/catalog): Fixing some of the query issues --- plugins/catalog-graphql/src/graphql/module.ts | 10 ++- plugins/catalog-graphql/src/graphql/types.ts | 74 ++++++++++++------- plugins/catalog-graphql/src/schema.gql | 12 +-- plugins/catalog-graphql/src/service/client.ts | 18 ++++- 4 files changed, 74 insertions(+), 40 deletions(-) diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index 2f9df09408..6deb2a3aad 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -48,7 +48,15 @@ export async function createModule( }, CatalogQuery: { list: async () => { - return await catalogClient.list(); + const catalogEntries = await catalogClient.list(); + return catalogEntries.map(entity => ({ + ...entity, + metadata: { + ...entity.metadata, + annotations: entity.metadata.annotations ?? {}, + labels: entity.metadata.labels ?? {}, + }, + })); }, }, EntityMetadata: { diff --git a/plugins/catalog-graphql/src/graphql/types.ts b/plugins/catalog-graphql/src/graphql/types.ts index 567e19c8bb..7294f749ad 100644 --- a/plugins/catalog-graphql/src/graphql/types.ts +++ b/plugins/catalog-graphql/src/graphql/types.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { GraphQLResolveInfo } from 'graphql'; +import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql'; import { ModuleContext } from '@graphql-modules/core'; export type Maybe = T | null; @@ -26,32 +26,40 @@ export type Scalars = { Boolean: boolean; Int: number; Float: number; + JSON: any; + JSONObject: any; }; -export type EntityMetadataAnnotation = { - __typename?: 'EntityMetadataAnnotation'; - key: Scalars['String']; - value: Scalars['String']; -}; + export type EntityMetadata = { __typename?: 'EntityMetadata'; name: Scalars['String']; - namespace?: Maybe; - annotation?: Maybe; - annotations?: Maybe>; + namespace: Scalars['String']; + annotations: Scalars['JSONObject']; + annotation?: Maybe; + labels: Scalars['JSONObject']; + label?: Maybe; + uid: Scalars['String']; + etag: Scalars['String']; + generation: Scalars['Int']; }; export type EntityMetadataAnnotationArgs = { - name?: Maybe; + name: Scalars['String']; +}; + + +export type EntityMetadataLabelArgs = { + name: Scalars['String']; }; export type CatalogEntity = { __typename?: 'CatalogEntity'; - apiVersion?: Maybe; + apiVersion: Scalars['String']; kind: Scalars['String']; - metadata?: Maybe; + metadata: EntityMetadata; }; export type CatalogQuery = { @@ -143,9 +151,11 @@ export type DirectiveResolverFn>; - String: ResolverTypeWrapper>; + JSON: ResolverTypeWrapper>; + JSONObject: ResolverTypeWrapper>; EntityMetadata: ResolverTypeWrapper>; + String: ResolverTypeWrapper>; + Int: ResolverTypeWrapper>; CatalogEntity: ResolverTypeWrapper>; CatalogQuery: ResolverTypeWrapper>; Query: ResolverTypeWrapper<{}>; @@ -154,33 +164,42 @@ export type ResolversTypes = ResolversObject<{ /** Mapping between all available schema types and the resolvers parents */ export type ResolversParentTypes = ResolversObject<{ - EntityMetadataAnnotation: Partial; - String: Partial; + JSON: Partial; + JSONObject: Partial; EntityMetadata: Partial; + String: Partial; + Int: Partial; CatalogEntity: Partial; CatalogQuery: Partial; Query: {}; Boolean: Partial; }>; -export type EntityMetadataAnnotationResolvers = ResolversObject<{ - key?: Resolver; - value?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; +export interface JsonScalarConfig extends GraphQLScalarTypeConfig { + name: 'JSON'; +} + +export interface JsonObjectScalarConfig extends GraphQLScalarTypeConfig { + name: 'JSONObject'; +} export type EntityMetadataResolvers = ResolversObject<{ name?: Resolver; - namespace?: Resolver, ParentType, ContextType>; - annotation?: Resolver, ParentType, ContextType, RequireFields>; - annotations?: Resolver>, ParentType, ContextType>; + namespace?: Resolver; + annotations?: Resolver; + annotation?: Resolver, ParentType, ContextType, RequireFields>; + labels?: Resolver; + label?: Resolver, ParentType, ContextType, RequireFields>; + uid?: Resolver; + etag?: Resolver; + generation?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; export type CatalogEntityResolvers = ResolversObject<{ - apiVersion?: Resolver, ParentType, ContextType>; + apiVersion?: Resolver; kind?: Resolver; - metadata?: Resolver, ParentType, ContextType>; + metadata?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -194,7 +213,8 @@ export type QueryResolvers; export type Resolvers = ResolversObject<{ - EntityMetadataAnnotation?: EntityMetadataAnnotationResolvers; + JSON?: GraphQLScalarType; + JSONObject?: GraphQLScalarType; EntityMetadata?: EntityMetadataResolvers; CatalogEntity?: CatalogEntityResolvers; CatalogQuery?: CatalogQueryResolvers; diff --git a/plugins/catalog-graphql/src/schema.gql b/plugins/catalog-graphql/src/schema.gql index 02abffa09e..bb8e5bcc87 100644 --- a/plugins/catalog-graphql/src/schema.gql +++ b/plugins/catalog-graphql/src/schema.gql @@ -1,17 +1,13 @@ scalar JSON scalar JSONObject -type EntityMetadataAnnotation { - key: String! - value: String! -} - type EntityMetadata { name: String! namespace: String! - annotations: JSONObject - annotation(name: String): JSON - labels: JSONObject + annotations: JSONObject! + annotation(name: String!): JSON + labels: JSONObject! + label(name: String!): JSON uid: String! etag: String! generation: Int! diff --git a/plugins/catalog-graphql/src/service/client.ts b/plugins/catalog-graphql/src/service/client.ts index f7bc5ccffe..05e73b88b8 100644 --- a/plugins/catalog-graphql/src/service/client.ts +++ b/plugins/catalog-graphql/src/service/client.ts @@ -14,20 +14,30 @@ * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; +import { Entity, EntityMeta } from '@backstage/catalog-model'; import fetch from 'node-fetch'; +import { JsonObject } from '@backstage/config'; +export interface ReaderEntityMeta extends EntityMeta { + uid: string; + etag: string; + generation: number; + namespace: string; +} +export interface ReaderEntity extends Entity { + metadata: JsonObject & ReaderEntityMeta; +} export class CatalogClient { constructor(private baseUrl: string) {} - async list(): Promise { + async list(): Promise { const res = await fetch(`${this.baseUrl}/catalog/entities`); if (!res.ok) { // todo(blam): need some better way to handle errors here // experiment with throwing the input errors etc and having graphql versions of that - throw new Error(`NOPE, ${await res.text()}`); + throw new Error(await res.text()); } - const entities: Entity[] = await res.json(); + const entities: ReaderEntity[] = await res.json(); return entities; } } From 042599d882ff3d10d1022fd854ba734d0dae3ca4 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 11:42:07 +0200 Subject: [PATCH 019/303] feat(gql/catalog): implement the label resolver --- plugins/catalog-graphql/src/graphql/module.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index 6deb2a3aad..772e472d1b 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -60,8 +60,8 @@ export async function createModule( }, }, EntityMetadata: { - annotations: e => e.annotations, - annotation: (e, { name }) => e.annotations[name] ?? null, + annotation: (e, { name }) => e.annotations?.[name] ?? null, + label: (e, { name }) => e.labels?.[name] ?? null, }, }; From be1c5267081fa7e37e48b337888d326cc5120881 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 11:43:44 +0200 Subject: [PATCH 020/303] chore(gql/catalog): removing the mock-data stuff --- plugins/graphql/package.json | 3 +-- plugins/graphql/scripts/mock-data.sh | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100755 plugins/graphql/scripts/mock-data.sh diff --git a/plugins/graphql/package.json b/plugins/graphql/package.json index 2b6d9a40e7..f98c21f2c7 100644 --- a/plugins/graphql/package.json +++ b/plugins/graphql/package.json @@ -16,8 +16,7 @@ "test": "backstage-cli test", "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", - "clean": "backstage-cli clean", - "mock-data": "./scripts/mock-data.sh" + "clean": "backstage-cli clean" }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.18", diff --git a/plugins/graphql/scripts/mock-data.sh b/plugins/graphql/scripts/mock-data.sh deleted file mode 100755 index ff30921715..0000000000 --- a/plugins/graphql/scripts/mock-data.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -echo "use this script to load your service with some mock data if needed!" From 8fc45676bf14c9d4389a7fb8934aa7712e0935e6 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 11:46:54 +0200 Subject: [PATCH 021/303] chore(gql/catalog): fixing bundling of graphql asse --- plugins/catalog-graphql/package.json | 3 ++- plugins/catalog-graphql/src/graphql/module.ts | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index be5c585186..d339119901 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -44,6 +44,7 @@ "supertest": "^4.0.2" }, "files": [ - "dist" + "dist", + "schema.gql" ] } diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index 772e472d1b..eb4c550819 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -28,13 +28,15 @@ export interface ModuleOptions { config: Config; } +const schemaPath = path.resolve( + require.resolve('@backstage/plugin-graphql-backend/package.json'), + '../schema.gql', +); + export async function createModule( options: ModuleOptions, ): Promise { - const typeDefs = await fs.promises.readFile( - path.resolve(__dirname, '..', 'schema.gql'), - 'utf-8', - ); + const typeDefs = await fs.promises.readFile(schemaPath, 'utf-8'); const catalogClient = new CatalogClient( options.config.getString('backend.baseUrl'), From c8060220e1842805c25e63cbe42f28b25509579b Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 11:47:31 +0200 Subject: [PATCH 022/303] chore(gql/catalog): actually read --- plugins/catalog-graphql/src/graphql/module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index eb4c550819..967df97662 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -29,7 +29,7 @@ export interface ModuleOptions { } const schemaPath = path.resolve( - require.resolve('@backstage/plugin-graphql-backend/package.json'), + require.resolve('@backstage/plugin-catalog-graphql/package.json'), '../schema.gql', ); From fc85bb41ddb9c09b468597033a92050a82a79d65 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 11:52:05 +0200 Subject: [PATCH 023/303] chore(gql/catalog): removing the mock data scripts for catalog-graph l --- plugins/catalog-graphql/package.json | 3 +-- plugins/catalog-graphql/scripts/mock-data.sh | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100755 plugins/catalog-graphql/scripts/mock-data.sh diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index d339119901..28e72cefd3 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -17,8 +17,7 @@ "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", "generate:types": "graphql-codegen", - "clean": "backstage-cli clean", - "mock-data": "./scripts/mock-data.sh" + "clean": "backstage-cli clean" }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.18", diff --git a/plugins/catalog-graphql/scripts/mock-data.sh b/plugins/catalog-graphql/scripts/mock-data.sh deleted file mode 100755 index ff30921715..0000000000 --- a/plugins/catalog-graphql/scripts/mock-data.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -echo "use this script to load your service with some mock data if needed!" From c4911612b1a07738cb747f4ad626ec6a66f442fa Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 14:21:10 +0200 Subject: [PATCH 024/303] chore(gql/catalog): updating the return types from the catalog api --- plugins/catalog-graphql/src/graphql/module.ts | 10 +--------- plugins/catalog-graphql/src/service/client.ts | 2 ++ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index 967df97662..3068b3b129 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -50,15 +50,7 @@ export async function createModule( }, CatalogQuery: { list: async () => { - const catalogEntries = await catalogClient.list(); - return catalogEntries.map(entity => ({ - ...entity, - metadata: { - ...entity.metadata, - annotations: entity.metadata.annotations ?? {}, - labels: entity.metadata.labels ?? {}, - }, - })); + return await catalogClient.list(); }, }, EntityMetadata: { diff --git a/plugins/catalog-graphql/src/service/client.ts b/plugins/catalog-graphql/src/service/client.ts index 05e73b88b8..8af97a89b1 100644 --- a/plugins/catalog-graphql/src/service/client.ts +++ b/plugins/catalog-graphql/src/service/client.ts @@ -23,6 +23,8 @@ export interface ReaderEntityMeta extends EntityMeta { etag: string; generation: number; namespace: string; + annotations: Record; + labels: Record; } export interface ReaderEntity extends Entity { metadata: JsonObject & ReaderEntityMeta; From 9bcc1bcb288a030c3d2e8ed3ad3fae06a439a9fe Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 16:11:21 +0200 Subject: [PATCH 025/303] chore(catalog/gql): move the catalog schema out of src --- plugins/catalog-graphql/{src => }/schema.gql | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename plugins/catalog-graphql/{src => }/schema.gql (100%) diff --git a/plugins/catalog-graphql/src/schema.gql b/plugins/catalog-graphql/schema.gql similarity index 100% rename from plugins/catalog-graphql/src/schema.gql rename to plugins/catalog-graphql/schema.gql From 10e4dc991f197322cfad0c9ecca35cd770de98cc Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 16:12:15 +0200 Subject: [PATCH 026/303] chore(catalog/gql): fixing csp for playground --- plugins/graphql/package.json | 1 + plugins/graphql/src/service/router.ts | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/plugins/graphql/package.json b/plugins/graphql/package.json index f98c21f2c7..6f8ff50c1a 100644 --- a/plugins/graphql/package.json +++ b/plugins/graphql/package.json @@ -29,6 +29,7 @@ "express": "^4.17.1", "express-promise-router": "^3.0.3", "graphql": "^15.3.0", + "helmet": "^4.0.0", "node-fetch": "^2.6.0", "reflect-metadata": "^0.1.13", "winston": "^3.2.1", diff --git a/plugins/graphql/src/service/router.ts b/plugins/graphql/src/service/router.ts index 784b801b86..cd926da3a2 100644 --- a/plugins/graphql/src/service/router.ts +++ b/plugins/graphql/src/service/router.ts @@ -24,6 +24,7 @@ import { GraphQLModule } from '@graphql-modules/core'; import { ApolloServer } from 'apollo-server-express'; import { createModule as createCatalogModule } from '@backstage/plugin-catalog-graphql'; import { Config } from '@backstage/config'; +import helmet from 'helmet'; const schemaPath = path.resolve( require.resolve('@backstage/plugin-graphql-backend/package.json'), @@ -41,15 +42,29 @@ export async function createRouter( const typeDefs = await fs.promises.readFile(schemaPath, 'utf-8'); const catalogModule = await createCatalogModule(options); + const { schema } = new GraphQLModule({ imports: [catalogModule], typeDefs, }); - const server = new ApolloServer({ schema, logger: options.logger }); + const server = new ApolloServer({ + schema, + logger: options.logger, + }); + const router = Router(); const apolloMiddlware = server.getMiddleware({ path: '/' }); + + router.use( + helmet.contentSecurityPolicy({ + directives: { + defaultSrc: ["'self'", "'unsafe-inline'", 'http://*'], + }, + }), + ); + router.use(apolloMiddlware); router.get('/health', (_, response) => { From e01952279e1a5e4ce45b80a028509e30bb657259 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 16:12:35 +0200 Subject: [PATCH 027/303] chore(catalog): yarn lock --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index e967be54ca..7dfa9e500f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10377,7 +10377,7 @@ file-loader@^4.2.0: loader-utils "^1.2.3" schema-utils "^2.5.0" -"file-saver@github:eligrey/FileSaver.js#1.3.8": +file-saver@eligrey/FileSaver.js#1.3.8: version "1.3.8" resolved "https://codeload.github.com/eligrey/FileSaver.js/tar.gz/e865e37af9f9947ddcced76b549e27dc45c1cb2e" From 90579b9089ca4111ba81316d2985e8eb283fdc44 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Aug 2020 18:50:08 +0200 Subject: [PATCH 028/303] feat(gql/catalog): Reduce the amount of duplication a little for unions --- plugins/catalog-graphql/codegen.yml | 2 +- plugins/catalog-graphql/schema.gql | 38 +++++++++- plugins/catalog-graphql/src/graphql/module.ts | 54 +++++++++++++- plugins/catalog-graphql/src/graphql/types.ts | 72 +++++++++++++++++-- 4 files changed, 156 insertions(+), 10 deletions(-) diff --git a/plugins/catalog-graphql/codegen.yml b/plugins/catalog-graphql/codegen.yml index ebdb34a938..a4f3abcbe4 100644 --- a/plugins/catalog-graphql/codegen.yml +++ b/plugins/catalog-graphql/codegen.yml @@ -1,5 +1,5 @@ overwrite: true -schema: ./src/schema.gql +schema: ./schema.gql require: - ts-node/register/transpile-only generates: diff --git a/plugins/catalog-graphql/schema.gql b/plugins/catalog-graphql/schema.gql index bb8e5bcc87..813b2840a6 100644 --- a/plugins/catalog-graphql/schema.gql +++ b/plugins/catalog-graphql/schema.gql @@ -1,9 +1,43 @@ scalar JSON scalar JSONObject -type EntityMetadata { +interface EntityMetadata { + name: String! + annotations: JSONObject! + annotation(name: String!): JSON + labels: JSONObject! + label(name: String!): JSON + uid: String! + etag: String! + generation: Int! +} + +type ComponentMetadata implements EntityMetadata { + name: String! + annotations: JSONObject! + annotation(name: String!): JSON + labels: JSONObject! + label(name: String!): JSON + uid: String! + etag: String! + generation: Int! + relationships: String! +} + +type TemplateMetadata implements EntityMetadata { + name: String! + annotations: JSONObject! + annotation(name: String!): JSON + labels: JSONObject! + label(name: String!): JSON + uid: String! + etag: String! + generation: Int! + updatedBy: String! +} + +type DefaultEntityMetadata implements EntityMetadata { name: String! - namespace: String! annotations: JSONObject! annotation(name: String!): JSON labels: JSONObject! diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index 3068b3b129..f66ff5073e 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -17,8 +17,14 @@ import { Logger } from 'winston'; import fs from 'fs'; import path from 'path'; +import { makeExecutableSchema } from 'apollo-server'; import { GraphQLModule } from '@graphql-modules/core'; -import { Resolvers, CatalogQuery } from './types'; +import { + Resolvers, + CatalogQuery, + CatalogEntityTypes, + EntityMetadataResolvers, +} from './types'; import { Config } from '@backstage/config'; import { CatalogClient } from '../service/client'; import GraphQLJSON, { GraphQLJSONObject } from 'graphql-type-json'; @@ -33,6 +39,19 @@ const schemaPath = path.resolve( '../schema.gql', ); +const getSpecTypenameForEntity = (e: { kind?: string }) => { + switch (e.kind) { + case 'Component': + return 'ComponentEntity'; + case 'Location': + return 'LocationEntity'; + case 'Template': + return 'TemplateEntity'; + default: + return null; + } +}; + export async function createModule( options: ModuleOptions, ): Promise { @@ -53,15 +72,46 @@ export async function createModule( return await catalogClient.list(); }, }, + ComponentMetadata: { + relationships: () => 'boop', + }, + TemplateMetadata: { + updatedBy: () => 'blam', + }, + CatalogEntity: { + metadata: e => ({ ...e.metadata!, catalogEntity: e }), + }, EntityMetadata: { + __resolveType: (obj: any) => { + const kind = obj.catalogEntity!.kind; + switch (kind) { + case 'Component': + return 'ComponentMetadata'; + case 'Template': + return 'TemplateMetadata'; + default: + return 'DefaultEntityMetadata'; + } + }, annotation: (e, { name }) => e.annotations?.[name] ?? null, + labels: e => e ?? {}, + annotations: e => e ?? {}, label: (e, { name }) => e.labels?.[name] ?? null, }, }; - const module = new GraphQLModule({ + const schema = makeExecutableSchema({ typeDefs, resolvers, + inheritResolversFromInterfaces: true, + resolverValidationOptions: { + allowResolversNotInSchema: true, + }, + }); + + const module = new GraphQLModule({ + resolverValidationOptions: {}, + extraSchemas: [schema], logger: options.logger as any, }); diff --git a/plugins/catalog-graphql/src/graphql/types.ts b/plugins/catalog-graphql/src/graphql/types.ts index 7294f749ad..e2b10ec6a2 100644 --- a/plugins/catalog-graphql/src/graphql/types.ts +++ b/plugins/catalog-graphql/src/graphql/types.ts @@ -33,9 +33,7 @@ export type Scalars = { export type EntityMetadata = { - __typename?: 'EntityMetadata'; name: Scalars['String']; - namespace: Scalars['String']; annotations: Scalars['JSONObject']; annotation?: Maybe; labels: Scalars['JSONObject']; @@ -55,6 +53,39 @@ export type EntityMetadataLabelArgs = { name: Scalars['String']; }; +export type ComponentMetadata = EntityMetadata & { + __typename?: 'ComponentMetadata'; + relationships: Scalars['String']; +}; + +export type TemplateMetadata = EntityMetadata & { + __typename?: 'TemplateMetadata'; + updatedBy: Scalars['String']; +}; + +export type DefaultEntityMetadata = EntityMetadata & { + __typename?: 'DefaultEntityMetadata'; + name: Scalars['String']; + annotations: Scalars['JSONObject']; + annotation?: Maybe; + labels: Scalars['JSONObject']; + label?: Maybe; + uid: Scalars['String']; + etag: Scalars['String']; + generation: Scalars['Int']; + updatedBy: Scalars['String']; +}; + + +export type DefaultEntityMetadataAnnotationArgs = { + name: Scalars['String']; +}; + + +export type DefaultEntityMetadataLabelArgs = { + name: Scalars['String']; +}; + export type CatalogEntity = { __typename?: 'CatalogEntity'; apiVersion: Scalars['String']; @@ -153,9 +184,12 @@ export type DirectiveResolverFn>; JSONObject: ResolverTypeWrapper>; - EntityMetadata: ResolverTypeWrapper>; + EntityMetadata: ResolversTypes['ComponentMetadata'] | ResolversTypes['TemplateMetadata'] | ResolversTypes['DefaultEntityMetadata']; String: ResolverTypeWrapper>; Int: ResolverTypeWrapper>; + ComponentMetadata: ResolverTypeWrapper>; + TemplateMetadata: ResolverTypeWrapper>; + DefaultEntityMetadata: ResolverTypeWrapper>; CatalogEntity: ResolverTypeWrapper>; CatalogQuery: ResolverTypeWrapper>; Query: ResolverTypeWrapper<{}>; @@ -166,9 +200,12 @@ export type ResolversTypes = ResolversObject<{ export type ResolversParentTypes = ResolversObject<{ JSON: Partial; JSONObject: Partial; - EntityMetadata: Partial; + EntityMetadata: ResolversParentTypes['ComponentMetadata'] | ResolversParentTypes['TemplateMetadata'] | ResolversParentTypes['DefaultEntityMetadata']; String: Partial; Int: Partial; + ComponentMetadata: Partial; + TemplateMetadata: Partial; + DefaultEntityMetadata: Partial; CatalogEntity: Partial; CatalogQuery: Partial; Query: {}; @@ -184,8 +221,8 @@ export interface JsonObjectScalarConfig extends GraphQLScalarTypeConfig = ResolversObject<{ + __resolveType: TypeResolveFn<'ComponentMetadata' | 'TemplateMetadata' | 'DefaultEntityMetadata', ParentType, ContextType>; name?: Resolver; - namespace?: Resolver; annotations?: Resolver; annotation?: Resolver, ParentType, ContextType, RequireFields>; labels?: Resolver; @@ -193,6 +230,28 @@ export type EntityMetadataResolvers; etag?: Resolver; generation?: Resolver; +}>; + +export type ComponentMetadataResolvers = ResolversObject<{ + relationships?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type TemplateMetadataResolvers = ResolversObject<{ + updatedBy?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type DefaultEntityMetadataResolvers = ResolversObject<{ + name?: Resolver; + annotations?: Resolver; + annotation?: Resolver, ParentType, ContextType, RequireFields>; + labels?: Resolver; + label?: Resolver, ParentType, ContextType, RequireFields>; + uid?: Resolver; + etag?: Resolver; + generation?: Resolver; + updatedBy?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -216,6 +275,9 @@ export type Resolvers = ResolversObject<{ JSON?: GraphQLScalarType; JSONObject?: GraphQLScalarType; EntityMetadata?: EntityMetadataResolvers; + ComponentMetadata?: ComponentMetadataResolvers; + TemplateMetadata?: TemplateMetadataResolvers; + DefaultEntityMetadata?: DefaultEntityMetadataResolvers; CatalogEntity?: CatalogEntityResolvers; CatalogQuery?: CatalogQueryResolvers; Query?: QueryResolvers; From eb3ed5c0f883973e8e86a4d08156ef417f96529d Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 12 Aug 2020 01:45:47 +0200 Subject: [PATCH 029/303] feat(gql/catalog): working on making the schema nice --- plugins/catalog-graphql/codegen.yml | 7 +- plugins/catalog-graphql/package.json | 2 + plugins/catalog-graphql/schema.gql | 62 --- plugins/catalog-graphql/src/graphql/module.ts | 75 ++- plugins/catalog-graphql/src/graphql/types.ts | 434 +++++++++++++++--- 5 files changed, 403 insertions(+), 177 deletions(-) delete mode 100644 plugins/catalog-graphql/schema.gql diff --git a/plugins/catalog-graphql/codegen.yml b/plugins/catalog-graphql/codegen.yml index a4f3abcbe4..bb50b68101 100644 --- a/plugins/catalog-graphql/codegen.yml +++ b/plugins/catalog-graphql/codegen.yml @@ -1,9 +1,7 @@ overwrite: true -schema: ./schema.gql -require: - - ts-node/register/transpile-only generates: ./src/graphql/types.ts: + schema: ./src/schema.js plugins: - typescript - typescript-resolvers @@ -11,6 +9,7 @@ generates: afterOneFileWrite: - eslint --fix config: - contextType: '@graphql-modules/core#ModuleContext' + contextType: "@graphql-modules/core#ModuleContext" + allowParentTypeOverride: true useIndexSignature: true defaultMapper: Partial<{T}> diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 28e72cefd3..83e88e1d25 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -27,7 +27,9 @@ "@graphql-codegen/typescript": "^1.17.7", "@graphql-codegen/typescript-resolvers": "^1.17.7", "@graphql-modules/core": "^0.7.17", + "apollo-server": "^2.16.1", "graphql": "^15.3.0", + "graphql-tag": "^2.11.0", "graphql-type-json": "^0.3.2", "node-fetch": "^2.6.0", "ts-node": "^8.10.2", diff --git a/plugins/catalog-graphql/schema.gql b/plugins/catalog-graphql/schema.gql deleted file mode 100644 index 813b2840a6..0000000000 --- a/plugins/catalog-graphql/schema.gql +++ /dev/null @@ -1,62 +0,0 @@ -scalar JSON -scalar JSONObject - -interface EntityMetadata { - name: String! - annotations: JSONObject! - annotation(name: String!): JSON - labels: JSONObject! - label(name: String!): JSON - uid: String! - etag: String! - generation: Int! -} - -type ComponentMetadata implements EntityMetadata { - name: String! - annotations: JSONObject! - annotation(name: String!): JSON - labels: JSONObject! - label(name: String!): JSON - uid: String! - etag: String! - generation: Int! - relationships: String! -} - -type TemplateMetadata implements EntityMetadata { - name: String! - annotations: JSONObject! - annotation(name: String!): JSON - labels: JSONObject! - label(name: String!): JSON - uid: String! - etag: String! - generation: Int! - updatedBy: String! -} - -type DefaultEntityMetadata implements EntityMetadata { - name: String! - annotations: JSONObject! - annotation(name: String!): JSON - labels: JSONObject! - label(name: String!): JSON - uid: String! - etag: String! - generation: Int! -} - -type CatalogEntity { - apiVersion: String! - kind: String! - metadata: EntityMetadata! -} - -type CatalogQuery { - list: [CatalogEntity!]! -} - -type Query { - catalog: CatalogQuery! -} diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts index f66ff5073e..c2266001b9 100644 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ b/plugins/catalog-graphql/src/graphql/module.ts @@ -15,47 +15,23 @@ */ import { Logger } from 'winston'; -import fs from 'fs'; -import path from 'path'; import { makeExecutableSchema } from 'apollo-server'; import { GraphQLModule } from '@graphql-modules/core'; -import { - Resolvers, - CatalogQuery, - CatalogEntityTypes, - EntityMetadataResolvers, -} from './types'; +import { Resolvers, CatalogQuery } from './types'; import { Config } from '@backstage/config'; import { CatalogClient } from '../service/client'; import GraphQLJSON, { GraphQLJSONObject } from 'graphql-type-json'; +import { Entity } from '@backstage/catalog-model'; export interface ModuleOptions { logger: Logger; config: Config; } -const schemaPath = path.resolve( - require.resolve('@backstage/plugin-catalog-graphql/package.json'), - '../schema.gql', -); - -const getSpecTypenameForEntity = (e: { kind?: string }) => { - switch (e.kind) { - case 'Component': - return 'ComponentEntity'; - case 'Location': - return 'LocationEntity'; - case 'Template': - return 'TemplateEntity'; - default: - return null; - } -}; - export async function createModule( options: ModuleOptions, ): Promise { - const typeDefs = await fs.promises.readFile(schemaPath, 'utf-8'); + const typeDefs = require('../schema'); const catalogClient = new CatalogClient( options.config.getString('backend.baseUrl'), @@ -64,6 +40,12 @@ export async function createModule( const resolvers: Resolvers = { JSON: GraphQLJSON, JSONObject: GraphQLJSONObject, + DefaultEntitySpec: { + raw: rootValue => { + const { entity } = rootValue as { entity: Entity }; + return entity.spec ?? null; + }, + }, Query: { catalog: () => ({} as CatalogQuery), }, @@ -72,18 +54,15 @@ export async function createModule( return await catalogClient.list(); }, }, - ComponentMetadata: { - relationships: () => 'boop', - }, - TemplateMetadata: { - updatedBy: () => 'blam', - }, CatalogEntity: { - metadata: e => ({ ...e.metadata!, catalogEntity: e }), + metadata: entity => ({ ...entity.metadata!, entity }), + spec: entity => ({ ...entity.spec!, entity }), }, EntityMetadata: { - __resolveType: (obj: any) => { - const kind = obj.catalogEntity!.kind; + __resolveType: rootValue => { + const { + entity: { kind }, + } = rootValue as { entity: Entity }; switch (kind) { case 'Component': return 'ComponentMetadata'; @@ -94,23 +73,35 @@ export async function createModule( } }, annotation: (e, { name }) => e.annotations?.[name] ?? null, - labels: e => e ?? {}, - annotations: e => e ?? {}, + labels: e => e.labels ?? {}, + annotations: e => e.annotations ?? {}, label: (e, { name }) => e.labels?.[name] ?? null, }, + EntitySpec: { + __resolveType: rootValue => { + const { + entity: { kind }, + } = rootValue as { entity: Entity }; + + switch (kind) { + case 'Component': + return 'ComponentEntitySpec'; + case 'Template': + return 'TemplateEntitySpec'; + default: + return 'DefaultEntitySpec'; + } + }, + }, }; const schema = makeExecutableSchema({ typeDefs, resolvers, inheritResolversFromInterfaces: true, - resolverValidationOptions: { - allowResolversNotInSchema: true, - }, }); const module = new GraphQLModule({ - resolverValidationOptions: {}, extraSchemas: [schema], logger: options.logger as any, }); diff --git a/plugins/catalog-graphql/src/graphql/types.ts b/plugins/catalog-graphql/src/graphql/types.ts index e2b10ec6a2..446a1f9f46 100644 --- a/plugins/catalog-graphql/src/graphql/types.ts +++ b/plugins/catalog-graphql/src/graphql/types.ts @@ -13,12 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql'; +import { + GraphQLResolveInfo, + GraphQLScalarType, + GraphQLScalarTypeConfig, +} from 'graphql'; import { ModuleContext } from '@graphql-modules/core'; export type Maybe = T | null; -export type Exact = { [K in keyof T]: T[K] }; -export type RequireFields = { [X in Exclude]?: T[X] } & { [P in K]-?: NonNullable }; +export type Exact = { + [K in keyof T]: T[K]; +}; +export type Omit = Pick>; +export type RequireFields = { + [X in Exclude]?: T[X]; +} & + { [P in K]-?: NonNullable }; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string; @@ -30,8 +40,6 @@ export type Scalars = { JSONObject: any; }; - - export type EntityMetadata = { name: Scalars['String']; annotations: Scalars['JSONObject']; @@ -43,26 +51,14 @@ export type EntityMetadata = { generation: Scalars['Int']; }; - export type EntityMetadataAnnotationArgs = { name: Scalars['String']; }; - export type EntityMetadataLabelArgs = { name: Scalars['String']; }; -export type ComponentMetadata = EntityMetadata & { - __typename?: 'ComponentMetadata'; - relationships: Scalars['String']; -}; - -export type TemplateMetadata = EntityMetadata & { - __typename?: 'TemplateMetadata'; - updatedBy: Scalars['String']; -}; - export type DefaultEntityMetadata = EntityMetadata & { __typename?: 'DefaultEntityMetadata'; name: Scalars['String']; @@ -73,24 +69,97 @@ export type DefaultEntityMetadata = EntityMetadata & { uid: Scalars['String']; etag: Scalars['String']; generation: Scalars['Int']; - updatedBy: Scalars['String']; }; - export type DefaultEntityMetadataAnnotationArgs = { name: Scalars['String']; }; - export type DefaultEntityMetadataLabelArgs = { name: Scalars['String']; }; +export type ComponentMetadata = EntityMetadata & { + __typename?: 'ComponentMetadata'; + name: Scalars['String']; + annotations: Scalars['JSONObject']; + annotation?: Maybe; + labels: Scalars['JSONObject']; + label?: Maybe; + uid: Scalars['String']; + etag: Scalars['String']; + generation: Scalars['Int']; + relationships?: Maybe; +}; + +export type ComponentMetadataAnnotationArgs = { + name: Scalars['String']; +}; + +export type ComponentMetadataLabelArgs = { + name: Scalars['String']; +}; + +export type TemplateMetadata = EntityMetadata & { + __typename?: 'TemplateMetadata'; + name: Scalars['String']; + annotations: Scalars['JSONObject']; + annotation?: Maybe; + labels: Scalars['JSONObject']; + label?: Maybe; + uid: Scalars['String']; + etag: Scalars['String']; + generation: Scalars['Int']; + updatedBy?: Maybe; +}; + +export type TemplateMetadataAnnotationArgs = { + name: Scalars['String']; +}; + +export type TemplateMetadataLabelArgs = { + name: Scalars['String']; +}; + +export type TemplateEntitySpec = { + __typename?: 'TemplateEntitySpec'; + type: Scalars['String']; + path?: Maybe; + schema: Scalars['JSONObject']; + templater: Scalars['String']; +}; + +export type ComponentEntitySpec = { + __typename?: 'ComponentEntitySpec'; + title: Scalars['String']; + lifecycle: Scalars['String']; + owner: Scalars['String']; +}; + +export type LocationEntitySpec = { + __typename?: 'LocationEntitySpec'; + type: Scalars['String']; + target?: Maybe; + targets: Array; +}; + +export type DefaultEntitySpec = { + __typename?: 'DefaultEntitySpec'; + raw?: Maybe; +}; + +export type EntitySpec = + | DefaultEntitySpec + | TemplateEntitySpec + | LocationEntitySpec + | ComponentEntitySpec; + export type CatalogEntity = { __typename?: 'CatalogEntity'; apiVersion: Scalars['String']; kind: Scalars['String']; - metadata: EntityMetadata; + metadata?: Maybe; + spec: EntitySpec; }; export type CatalogQuery = { @@ -108,7 +177,6 @@ export type ResolversObject = WithIndex; export type ResolverTypeWrapper = Promise | T; - export type LegacyStitchingResolver = { fragment: string; resolve: ResolverFn; @@ -118,7 +186,9 @@ export type NewStitchingResolver = { selectionSet: string; resolve: ResolverFn; }; -export type StitchingResolver = LegacyStitchingResolver | NewStitchingResolver; +export type StitchingResolver = + | LegacyStitchingResolver + | NewStitchingResolver; export type Resolver = | ResolverFn | StitchingResolver; @@ -127,26 +197,42 @@ export type ResolverFn = ( parent: TParent, args: TArgs, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => Promise | TResult; export type SubscriptionSubscribeFn = ( parent: TParent, args: TArgs, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => AsyncIterator | Promise>; export type SubscriptionResolveFn = ( parent: TParent, args: TArgs, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => TResult | Promise; -export interface SubscriptionSubscriberObject { - subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>; - resolve?: SubscriptionResolveFn; +export interface SubscriptionSubscriberObject< + TResult, + TKey extends string, + TParent, + TContext, + TArgs +> { + subscribe: SubscriptionSubscribeFn< + { [key in TKey]: TResult }, + TParent, + TContext, + TArgs + >; + resolve?: SubscriptionResolveFn< + TResult, + { [key in TKey]: TResult }, + TContext, + TArgs + >; } export interface SubscriptionResolverObject { @@ -154,43 +240,82 @@ export interface SubscriptionResolverObject { resolve: SubscriptionResolveFn; } -export type SubscriptionObject = +export type SubscriptionObject< + TResult, + TKey extends string, + TParent, + TContext, + TArgs +> = | SubscriptionSubscriberObject | SubscriptionResolverObject; -export type SubscriptionResolver = - | ((...args: any[]) => SubscriptionObject) +export type SubscriptionResolver< + TResult, + TKey extends string, + TParent = {}, + TContext = {}, + TArgs = {} +> = + | (( + ...args: any[] + ) => SubscriptionObject) | SubscriptionObject; export type TypeResolveFn = ( parent: TParent, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => Maybe | Promise>; -export type IsTypeOfResolverFn = (obj: T, info: GraphQLResolveInfo) => boolean | Promise; +export type IsTypeOfResolverFn = ( + obj: T, + info: GraphQLResolveInfo, +) => boolean | Promise; export type NextResolverFn = () => Promise; -export type DirectiveResolverFn = ( +export type DirectiveResolverFn< + TResult = {}, + TParent = {}, + TContext = {}, + TArgs = {} +> = ( next: NextResolverFn, parent: TParent, args: TArgs, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => TResult | Promise; /** Mapping between all available schema types and the resolvers types */ export type ResolversTypes = ResolversObject<{ JSON: ResolverTypeWrapper>; JSONObject: ResolverTypeWrapper>; - EntityMetadata: ResolversTypes['ComponentMetadata'] | ResolversTypes['TemplateMetadata'] | ResolversTypes['DefaultEntityMetadata']; + EntityMetadata: + | ResolversTypes['DefaultEntityMetadata'] + | ResolversTypes['ComponentMetadata'] + | ResolversTypes['TemplateMetadata']; String: ResolverTypeWrapper>; Int: ResolverTypeWrapper>; + DefaultEntityMetadata: ResolverTypeWrapper>; ComponentMetadata: ResolverTypeWrapper>; TemplateMetadata: ResolverTypeWrapper>; - DefaultEntityMetadata: ResolverTypeWrapper>; - CatalogEntity: ResolverTypeWrapper>; + TemplateEntitySpec: ResolverTypeWrapper>; + ComponentEntitySpec: ResolverTypeWrapper>; + LocationEntitySpec: ResolverTypeWrapper>; + DefaultEntitySpec: ResolverTypeWrapper>; + EntitySpec: Partial< + | ResolversTypes['DefaultEntitySpec'] + | ResolversTypes['TemplateEntitySpec'] + | ResolversTypes['LocationEntitySpec'] + | ResolversTypes['ComponentEntitySpec'] + >; + CatalogEntity: ResolverTypeWrapper< + Partial< + Omit & { spec: ResolversTypes['EntitySpec'] } + > + >; CatalogQuery: ResolverTypeWrapper>; Query: ResolverTypeWrapper<{}>; Boolean: ResolverTypeWrapper>; @@ -200,74 +325,241 @@ export type ResolversTypes = ResolversObject<{ export type ResolversParentTypes = ResolversObject<{ JSON: Partial; JSONObject: Partial; - EntityMetadata: ResolversParentTypes['ComponentMetadata'] | ResolversParentTypes['TemplateMetadata'] | ResolversParentTypes['DefaultEntityMetadata']; + EntityMetadata: + | ResolversParentTypes['DefaultEntityMetadata'] + | ResolversParentTypes['ComponentMetadata'] + | ResolversParentTypes['TemplateMetadata']; String: Partial; Int: Partial; + DefaultEntityMetadata: Partial; ComponentMetadata: Partial; TemplateMetadata: Partial; - DefaultEntityMetadata: Partial; - CatalogEntity: Partial; + TemplateEntitySpec: Partial; + ComponentEntitySpec: Partial; + LocationEntitySpec: Partial; + DefaultEntitySpec: Partial; + EntitySpec: Partial< + | ResolversParentTypes['DefaultEntitySpec'] + | ResolversParentTypes['TemplateEntitySpec'] + | ResolversParentTypes['LocationEntitySpec'] + | ResolversParentTypes['ComponentEntitySpec'] + >; + CatalogEntity: Partial< + Omit & { spec: ResolversParentTypes['EntitySpec'] } + >; CatalogQuery: Partial; Query: {}; Boolean: Partial; }>; -export interface JsonScalarConfig extends GraphQLScalarTypeConfig { +export interface JsonScalarConfig + extends GraphQLScalarTypeConfig { name: 'JSON'; } -export interface JsonObjectScalarConfig extends GraphQLScalarTypeConfig { +export interface JsonObjectScalarConfig + extends GraphQLScalarTypeConfig { name: 'JSONObject'; } -export type EntityMetadataResolvers = ResolversObject<{ - __resolveType: TypeResolveFn<'ComponentMetadata' | 'TemplateMetadata' | 'DefaultEntityMetadata', ParentType, ContextType>; +export type EntityMetadataResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['EntityMetadata'] +> = ResolversObject<{ + __resolveType: TypeResolveFn< + 'DefaultEntityMetadata' | 'ComponentMetadata' | 'TemplateMetadata', + ParentType, + ContextType + >; name?: Resolver; annotations?: Resolver; - annotation?: Resolver, ParentType, ContextType, RequireFields>; + annotation?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; labels?: Resolver; - label?: Resolver, ParentType, ContextType, RequireFields>; + label?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; uid?: Resolver; etag?: Resolver; generation?: Resolver; }>; -export type ComponentMetadataResolvers = ResolversObject<{ - relationships?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type TemplateMetadataResolvers = ResolversObject<{ - updatedBy?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type DefaultEntityMetadataResolvers = ResolversObject<{ +export type DefaultEntityMetadataResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['DefaultEntityMetadata'] +> = ResolversObject<{ name?: Resolver; annotations?: Resolver; - annotation?: Resolver, ParentType, ContextType, RequireFields>; + annotation?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; labels?: Resolver; - label?: Resolver, ParentType, ContextType, RequireFields>; + label?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; uid?: Resolver; etag?: Resolver; generation?: Resolver; - updatedBy?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; -export type CatalogEntityResolvers = ResolversObject<{ +export type ComponentMetadataResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['ComponentMetadata'] +> = ResolversObject<{ + name?: Resolver; + annotations?: Resolver; + annotation?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + labels?: Resolver; + label?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + uid?: Resolver; + etag?: Resolver; + generation?: Resolver; + relationships?: Resolver< + Maybe, + ParentType, + ContextType + >; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type TemplateMetadataResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['TemplateMetadata'] +> = ResolversObject<{ + name?: Resolver; + annotations?: Resolver; + annotation?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + labels?: Resolver; + label?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + uid?: Resolver; + etag?: Resolver; + generation?: Resolver; + updatedBy?: Resolver< + Maybe, + ParentType, + ContextType + >; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type TemplateEntitySpecResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['TemplateEntitySpec'] +> = ResolversObject<{ + type?: Resolver; + path?: Resolver, ParentType, ContextType>; + schema?: Resolver; + templater?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type ComponentEntitySpecResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['ComponentEntitySpec'] +> = ResolversObject<{ + title?: Resolver; + lifecycle?: Resolver; + owner?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type LocationEntitySpecResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['LocationEntitySpec'] +> = ResolversObject<{ + type?: Resolver; + target?: Resolver, ParentType, ContextType>; + targets?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type DefaultEntitySpecResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['DefaultEntitySpec'] +> = ResolversObject<{ + raw?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type EntitySpecResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['EntitySpec'] +> = ResolversObject<{ + __resolveType: TypeResolveFn< + | 'DefaultEntitySpec' + | 'TemplateEntitySpec' + | 'LocationEntitySpec' + | 'ComponentEntitySpec', + ParentType, + ContextType + >; +}>; + +export type CatalogEntityResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['CatalogEntity'] +> = ResolversObject<{ apiVersion?: Resolver; kind?: Resolver; - metadata?: Resolver; + metadata?: Resolver< + Maybe, + ParentType, + ContextType + >; + spec?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; -export type CatalogQueryResolvers = ResolversObject<{ - list?: Resolver, ParentType, ContextType>; +export type CatalogQueryResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['CatalogQuery'] +> = ResolversObject<{ + list?: Resolver< + Array, + ParentType, + ContextType + >; __isTypeOf?: IsTypeOfResolverFn; }>; -export type QueryResolvers = ResolversObject<{ +export type QueryResolvers< + ContextType = ModuleContext, + ParentType = ResolversParentTypes['Query'] +> = ResolversObject<{ catalog?: Resolver; }>; @@ -275,15 +567,19 @@ export type Resolvers = ResolversObject<{ JSON?: GraphQLScalarType; JSONObject?: GraphQLScalarType; EntityMetadata?: EntityMetadataResolvers; + DefaultEntityMetadata?: DefaultEntityMetadataResolvers; ComponentMetadata?: ComponentMetadataResolvers; TemplateMetadata?: TemplateMetadataResolvers; - DefaultEntityMetadata?: DefaultEntityMetadataResolvers; + TemplateEntitySpec?: TemplateEntitySpecResolvers; + ComponentEntitySpec?: ComponentEntitySpecResolvers; + LocationEntitySpec?: LocationEntitySpecResolvers; + DefaultEntitySpec?: DefaultEntitySpecResolvers; + EntitySpec?: EntitySpecResolvers; CatalogEntity?: CatalogEntityResolvers; CatalogQuery?: CatalogQueryResolvers; Query?: QueryResolvers; }>; - /** * @deprecated * Use "Resolvers" root object instead. If you wish to get "IResolvers", add "typesPrefix: I" to your config. From ce2ed89e57c8e978a62fbb77f423ad1bcde79ace Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 12 Aug 2020 01:47:09 +0200 Subject: [PATCH 030/303] feat(gql/catalog): to remove the duplication in the schema thanks to the limitations on implements, let's create the schema using javascript Trust me, i've tried getting this to work with a typescript file, but it just would not work with the import export keywords which are needed to satisfy typescript config. couldn't get it to transpile anything properly. so thought screw it for now --- packages/backend-common/src/gql.ts | 17 ++++++ packages/backend-common/src/index.ts | 1 + plugins/catalog-graphql/src/schema.js | 87 +++++++++++++++++++++++++++ yarn.lock | 65 +++++++++++++++++++- 4 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 packages/backend-common/src/gql.ts create mode 100644 plugins/catalog-graphql/src/schema.js diff --git a/packages/backend-common/src/gql.ts b/packages/backend-common/src/gql.ts new file mode 100644 index 0000000000..ca6b9c7f55 --- /dev/null +++ b/packages/backend-common/src/gql.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2020 Spotify AB + * + * 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 const gql = (s: TemplateStringsArray, ...args: any[]) => + s.map((ss, i) => `${ss}${args[i] || ''}`).join(''); diff --git a/packages/backend-common/src/index.ts b/packages/backend-common/src/index.ts index a3f57ed9df..4b9518c6bc 100644 --- a/packages/backend-common/src/index.ts +++ b/packages/backend-common/src/index.ts @@ -20,3 +20,4 @@ export * from './logging'; export * from './middleware'; export * from './service'; export * from './hot'; +export * from './gql'; diff --git a/plugins/catalog-graphql/src/schema.js b/plugins/catalog-graphql/src/schema.js new file mode 100644 index 0000000000..473aad97f5 --- /dev/null +++ b/plugins/catalog-graphql/src/schema.js @@ -0,0 +1,87 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ + +const EntityMetadataFields = /* GraphQL */ ` + name: String! + annotations: JSONObject! + annotation(name: String!): JSON + labels: JSONObject! + label(name: String!): JSON + uid: String! + etag: String! + generation: Int! +`; + +const EntityMetadata = /* GraphQL */ ` + scalar JSON + scalar JSONObject + + interface EntityMetadata { + ${EntityMetadataFields} + } + + type DefaultEntityMetadata implements EntityMetadata { + ${EntityMetadataFields} + } + + type ComponentMetadata implements EntityMetadata { + ${EntityMetadataFields} + # mock field to prove extensions working + relationships: String + } + + type TemplateMetadata implements EntityMetadata { + ${EntityMetadataFields} + # mock field to prove extensions working + updatedBy: String + } + + type TemplateEntitySpec { + type: String! + path: String + schema: JSONObject! + templater: String! + } + + type ComponentEntitySpec { + type: String! + lifecycle: String! + owner: String! + } + + type DefaultEntitySpec { + raw: JSONObject + } + + union EntitySpec = DefaultEntitySpec | TemplateEntitySpec | ComponentEntitySpec + + type CatalogEntity { + apiVersion: String! + kind: String! + metadata: EntityMetadata + spec: EntitySpec! + } + + type CatalogQuery { + list: [CatalogEntity!]! + } + + type Query { + catalog: CatalogQuery! + } +`; + +module.exports = EntityMetadata; diff --git a/yarn.lock b/yarn.lock index 7dfa9e500f..b4c5a4fe49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4460,7 +4460,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@^4.17.6", "@types/express@^4.17.7": +"@types/express@*", "@types/express@4.17.7", "@types/express@^4.17.6", "@types/express@^4.17.7": version "4.17.7" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.7.tgz#42045be6475636d9801369cd4418ef65cdb0dd59" integrity sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ== @@ -5843,6 +5843,34 @@ apollo-server-core@^2.16.0: subscriptions-transport-ws "^0.9.11" ws "^6.0.0" +apollo-server-core@^2.16.1: + version "2.16.1" + resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.16.1.tgz#5b5b8245ab9c0cb6c2367ec19ab855dea6ccea3a" + integrity sha512-nuwn5ZBbmzPwDetb3FgiFFJlNK7ZBFg8kis/raymrjd3eBGdNcOyMTJDl6J9673X9Xqp+dXQmFYDW/G3G8S1YA== + dependencies: + "@apollographql/apollo-tools" "^0.4.3" + "@apollographql/graphql-playground-html" "1.6.26" + "@types/graphql-upload" "^8.0.0" + "@types/ws" "^7.0.0" + apollo-cache-control "^0.11.1" + apollo-datasource "^0.7.2" + apollo-engine-reporting "^2.3.0" + apollo-server-caching "^0.5.2" + apollo-server-env "^2.4.5" + apollo-server-errors "^2.4.2" + apollo-server-plugin-base "^0.9.1" + apollo-server-types "^0.5.1" + apollo-tracing "^0.11.1" + fast-json-stable-stringify "^2.0.0" + graphql-extensions "^0.12.4" + graphql-tag "^2.9.2" + graphql-tools "^4.0.0" + graphql-upload "^8.0.2" + loglevel "^1.6.7" + sha.js "^2.4.11" + subscriptions-transport-ws "^0.9.11" + ws "^6.0.0" + apollo-server-env@^2.4.5: version "2.4.5" resolved "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.5.tgz#73730b4f0439094a2272a9d0caa4079d4b661d5f" @@ -5878,6 +5906,28 @@ apollo-server-express@^2.16.0: subscriptions-transport-ws "^0.9.16" type-is "^1.6.16" +apollo-server-express@^2.16.1: + version "2.16.1" + resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.16.1.tgz#7438bca590ef8577d24d20ba0b6d582c120c0146" + integrity sha512-Oq5YNcaMYnRk6jDmA9LWf8oSd2KHDVe7jQ4wtooAvG9FVUD+FaFBgSkytXHMvtifQh2wdF07Ri8uDLMz6IQjTw== + dependencies: + "@apollographql/graphql-playground-html" "1.6.26" + "@types/accepts" "^1.3.5" + "@types/body-parser" "1.19.0" + "@types/cors" "^2.8.4" + "@types/express" "4.17.7" + accepts "^1.3.5" + apollo-server-core "^2.16.1" + apollo-server-types "^0.5.1" + body-parser "^1.18.3" + cors "^2.8.4" + express "^4.17.1" + graphql-subscriptions "^1.0.0" + graphql-tools "^4.0.0" + parseurl "^1.3.2" + subscriptions-transport-ws "^0.9.16" + type-is "^1.6.16" + apollo-server-plugin-base@^0.9.1: version "0.9.1" resolved "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.9.1.tgz#a62ae9ab4e89790fd4cc5d123bb616da34e8e5fb" @@ -5905,6 +5955,17 @@ apollo-server@^2.16.0: graphql-subscriptions "^1.0.0" graphql-tools "^4.0.0" +apollo-server@^2.16.1: + version "2.16.1" + resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-2.16.1.tgz#edc319606eb29f73132239bdc005dd88ac40a142" + integrity sha512-oy9NVRzGwlpQ+W1DwLKRH+KASmodSYpvYIRY5DMAZtGqNmT2zOCpbIZVjBt23SuPB5NhIhhE4ROzoObRv3zy5w== + dependencies: + apollo-server-core "^2.16.1" + apollo-server-express "^2.16.1" + express "^4.0.0" + graphql-subscriptions "^1.0.0" + graphql-tools "^4.0.0" + apollo-tracing@^0.11.1: version "0.11.1" resolved "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.11.1.tgz#3e3a4ce4b21e57dcc57b10bbd539db243b752606" @@ -11340,7 +11401,7 @@ graphql-subscriptions@^1.0.0: dependencies: iterall "^1.2.1" -graphql-tag@2.11.0: +graphql-tag@2.11.0, graphql-tag@^2.11.0: version "2.11.0" resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd" integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA== From 3600b0216fc27b6c730001f99cf231c34cbd4014 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 12 Aug 2020 02:10:46 +0200 Subject: [PATCH 031/303] chore: reverting code --- packages/backend-common/src/gql.ts | 17 ----------------- packages/backend-common/src/index.ts | 1 - 2 files changed, 18 deletions(-) delete mode 100644 packages/backend-common/src/gql.ts diff --git a/packages/backend-common/src/gql.ts b/packages/backend-common/src/gql.ts deleted file mode 100644 index ca6b9c7f55..0000000000 --- a/packages/backend-common/src/gql.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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 const gql = (s: TemplateStringsArray, ...args: any[]) => - s.map((ss, i) => `${ss}${args[i] || ''}`).join(''); diff --git a/packages/backend-common/src/index.ts b/packages/backend-common/src/index.ts index 4b9518c6bc..a3f57ed9df 100644 --- a/packages/backend-common/src/index.ts +++ b/packages/backend-common/src/index.ts @@ -20,4 +20,3 @@ export * from './logging'; export * from './middleware'; export * from './service'; export * from './hot'; -export * from './gql'; From 56d93dcb52105642d0398491331d79f6a8898710 Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 14 Aug 2020 13:57:40 +0200 Subject: [PATCH 032/303] chore(gql/catalog): types as ts --- plugins/catalog-graphql/codegen.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog-graphql/codegen.yml b/plugins/catalog-graphql/codegen.yml index 4a5795eb9e..e100277942 100644 --- a/plugins/catalog-graphql/codegen.yml +++ b/plugins/catalog-graphql/codegen.yml @@ -1,6 +1,6 @@ overwrite: true generates: - ./src/graphql/types.d.ts: + ./src/graphql/types.ts: schema: ./src/schema.js plugins: - typescript From a09e949b6f9ff9d8efee1a24b37d7a7fc1a29af5 Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 14 Aug 2020 14:00:39 +0200 Subject: [PATCH 033/303] chore(gql/catalog): fixing dependencies --- plugins/catalog-graphql/package.json | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 83e88e1d25..79277bdc2b 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -6,7 +6,7 @@ "license": "Apache-2.0", "publishConfig": { "access": "public", - "main": "dist/index.esm.js", + "main": "dist/index.cjs.js", "types": "dist/index.d.ts" }, "scripts": { @@ -20,26 +20,25 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.1.1-alpha.18", "@backstage/catalog-model": "^0.1.1-alpha.18", + "@backstage/backend-common": "^0.1.1-alpha.18", "@backstage/config": "^0.1.1-alpha.18", - "@graphql-codegen/cli": "^1.17.7", - "@graphql-codegen/typescript": "^1.17.7", - "@graphql-codegen/typescript-resolvers": "^1.17.7", "@graphql-modules/core": "^0.7.17", "apollo-server": "^2.16.1", "graphql": "^15.3.0", "graphql-tag": "^2.11.0", "graphql-type-json": "^0.3.2", "node-fetch": "^2.6.0", - "ts-node": "^8.10.2", - "winston": "^3.2.1", - "yn": "^4.0.0" + "winston": "^3.2.1" }, "devDependencies": { "@backstage/cli": "^0.1.1-alpha.18", "@types/express": "^4.17.7", "@types/supertest": "^2.0.8", + "@graphql-codegen/cli": "^1.17.7", + "@graphql-codegen/typescript": "^1.17.7", + "@graphql-codegen/typescript-resolvers": "^1.17.7", + "ts-node": "^8.10.2", "eslint-plugin-graphql": "^4.0.0", "msw": "^0.19.5", "supertest": "^4.0.2" From 9b3236f47edba427ca35a3cef48586bdf0467694 Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 14 Aug 2020 14:37:17 +0200 Subject: [PATCH 034/303] chore(gql/catalog): fixing some code review comments --- plugins/catalog-graphql/package.json | 3 +- plugins/graphql/package.json | 4 +- plugins/graphql/src/service/router.ts | 17 ++++--- yarn.lock | 71 --------------------------- 4 files changed, 13 insertions(+), 82 deletions(-) diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 79277bdc2b..5531c23ade 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -44,7 +44,6 @@ "supertest": "^4.0.2" }, "files": [ - "dist", - "schema.gql" + "dist" ] } diff --git a/plugins/graphql/package.json b/plugins/graphql/package.json index 6f8ff50c1a..35aac33451 100644 --- a/plugins/graphql/package.json +++ b/plugins/graphql/package.json @@ -24,8 +24,8 @@ "@backstage/plugin-catalog-graphql": "^0.1.1-alpha.18", "@graphql-modules/core": "^0.7.17", "@types/express": "^4.17.6", - "apollo-server": "^2.16.0", - "apollo-server-express": "^2.16.0", + "apollo-server": "^2.16.1", + "apollo-server-express": "^2.16.1", "express": "^4.17.1", "express-promise-router": "^3.0.3", "graphql": "^15.3.0", diff --git a/plugins/graphql/src/service/router.ts b/plugins/graphql/src/service/router.ts index cd926da3a2..a06f696533 100644 --- a/plugins/graphql/src/service/router.ts +++ b/plugins/graphql/src/service/router.ts @@ -51,19 +51,22 @@ export async function createRouter( const server = new ApolloServer({ schema, logger: options.logger, + introspection: true, + playground: process.env.NODE_ENV === 'development', }); const router = Router(); const apolloMiddlware = server.getMiddleware({ path: '/' }); - router.use( - helmet.contentSecurityPolicy({ - directives: { - defaultSrc: ["'self'", "'unsafe-inline'", 'http://*'], - }, - }), - ); + if (process.env.NODE_ENV === 'development') + router.use( + helmet.contentSecurityPolicy({ + directives: { + defaultSrc: ["'self'", "'unsafe-inline'", 'http://*'], + }, + }), + ); router.use(apolloMiddlware); diff --git a/yarn.lock b/yarn.lock index dec603d9db..e15dd3bed6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4703,16 +4703,6 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/express@4.17.4": - version "4.17.4" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.4.tgz#e78bf09f3f530889575f4da8a94cd45384520aac" - integrity sha512-DO1L53rGqIDUEvOjJKmbMEQ5Z+BM2cIEPy/eV3En+s166Gz+FeuzRerxcab757u/U4v4XF4RYrZPmqKa+aY/2w== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "*" - "@types/qs" "*" - "@types/serve-static" "*" - "@types/fs-capacitor@*": version "2.0.0" resolved "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz#17113e25817f584f58100fb7a08eed288b81956e" @@ -6091,34 +6081,6 @@ apollo-server-caching@^0.5.2: dependencies: lru-cache "^5.0.0" -apollo-server-core@^2.16.0: - version "2.16.0" - resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.16.0.tgz#56b367db49f97b7da03b29cef89b63d9ed14ee0c" - integrity sha512-mnvg2cPvsQtjFXIqIhEAbPqGyiSXDSbiBgNQ8rY8g7r2eRMhHKZePqGF03gP1/w87yVaSDRAZBDk6o+jiBXjVQ== - dependencies: - "@apollographql/apollo-tools" "^0.4.3" - "@apollographql/graphql-playground-html" "1.6.26" - "@types/graphql-upload" "^8.0.0" - "@types/ws" "^7.0.0" - apollo-cache-control "^0.11.1" - apollo-datasource "^0.7.2" - apollo-engine-reporting "^2.3.0" - apollo-server-caching "^0.5.2" - apollo-server-env "^2.4.5" - apollo-server-errors "^2.4.2" - apollo-server-plugin-base "^0.9.1" - apollo-server-types "^0.5.1" - apollo-tracing "^0.11.1" - fast-json-stable-stringify "^2.0.0" - graphql-extensions "^0.12.4" - graphql-tag "^2.9.2" - graphql-tools "^4.0.0" - graphql-upload "^8.0.2" - loglevel "^1.6.7" - sha.js "^2.4.11" - subscriptions-transport-ws "^0.9.11" - ws "^6.0.0" - apollo-server-core@^2.16.1: version "2.16.1" resolved "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.16.1.tgz#5b5b8245ab9c0cb6c2367ec19ab855dea6ccea3a" @@ -6160,28 +6122,6 @@ apollo-server-errors@^2.4.2: resolved "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.4.2.tgz#1128738a1d14da989f58420896d70524784eabe5" integrity sha512-FeGxW3Batn6sUtX3OVVUm7o56EgjxDlmgpTLNyWcLb0j6P8mw9oLNyAm3B+deHA4KNdNHO5BmHS2g1SJYjqPCQ== -apollo-server-express@^2.16.0: - version "2.16.0" - resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.16.0.tgz#3474a7f7eb868a2a847a364839147f8d7f26454a" - integrity sha512-mBIvKcF8gApj7wbmqe0A4Tsy+Pw66mI6cmtD912bG59KhUBveSCZ21dDlRSvnXUyK+GOo2ItwcUEtmks+Z2Pqw== - dependencies: - "@apollographql/graphql-playground-html" "1.6.26" - "@types/accepts" "^1.3.5" - "@types/body-parser" "1.19.0" - "@types/cors" "^2.8.4" - "@types/express" "4.17.4" - accepts "^1.3.5" - apollo-server-core "^2.16.0" - apollo-server-types "^0.5.1" - body-parser "^1.18.3" - cors "^2.8.4" - express "^4.17.1" - graphql-subscriptions "^1.0.0" - graphql-tools "^4.0.0" - parseurl "^1.3.2" - subscriptions-transport-ws "^0.9.16" - type-is "^1.6.16" - apollo-server-express@^2.16.1: version "2.16.1" resolved "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.16.1.tgz#7438bca590ef8577d24d20ba0b6d582c120c0146" @@ -6220,17 +6160,6 @@ apollo-server-types@^0.5.1: apollo-server-caching "^0.5.2" apollo-server-env "^2.4.5" -apollo-server@^2.16.0: - version "2.16.0" - resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-2.16.0.tgz#fa30e29b78e8cb70b2c81d0f7b96953beb3d4baf" - integrity sha512-zbEe0FSqatqE6bmIfq/o1/Hsqc596ZOwZM/L8Ttwa4ucQ1ybqf1ZejSYu6ehFEj1G6rOBY1ttVKkIllcErK4GQ== - dependencies: - apollo-server-core "^2.16.0" - apollo-server-express "^2.16.0" - express "^4.0.0" - graphql-subscriptions "^1.0.0" - graphql-tools "^4.0.0" - apollo-server@^2.16.1: version "2.16.1" resolved "https://registry.npmjs.org/apollo-server/-/apollo-server-2.16.1.tgz#edc319606eb29f73132239bdc005dd88ac40a142" From e4d5628cf4fded262ab1e94860ae98f54e46d0ca Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 14 Aug 2020 14:50:01 +0200 Subject: [PATCH 035/303] docs(catalog/grqphql): updating docs --- plugins/catalog-graphql/README.md | 14 ++++++-------- plugins/graphql/README.md | 6 +++--- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/plugins/catalog-graphql/README.md b/plugins/catalog-graphql/README.md index 3f85ec766e..cec3204c52 100644 --- a/plugins/catalog-graphql/README.md +++ b/plugins/catalog-graphql/README.md @@ -1,13 +1,11 @@ -# graphql +# Catalog GraphQL Plugin -Welcome to the graphql backend plugin! +## Getting Started -_This plugin was created through the Backstage CLI_ +This is the Catalog GraphQL plugin. -## Getting started +It provides the `catalog` part of the GraphQL schema. -Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/graphql](http://localhost:3000/graphql). +To register it with the GraphQL backend, be sure to follow the [Gettting Started](../graphql/README.md#getting-started) guide of the GraphQL plugin. -You can also serve the plugin in isolation by running `yarn start` in the plugin directory. -This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. -It is only meant for local development, and the setup for it can be found inside the [/dev](/dev) directory. +g%g%+DGr%*$+wR8UWGak zZY+2kLB1f1M9l79P5KD1+m~e`%g=RcN*g=zXSt`qblQeOzL6g(2Amk?HP4uRkQm{u zFAsi>naOA!mhzVe17ITq@X+JvH&Svw32@{O#BTe* zv%5Od^CDM*(WFq$@K?u4WoK#aft=k?Wik^qA?@I+oF8E{VG866$TL>{rMtW&Z|8(@ zdv159$M&;vsYx%WC0pnaCW1WW9l_)3ZO5U)tGji8wB7H+CP{sEPv((a} z8F5CzupkC5!Bn$`Uou0|^j`bV@egPM_L&wf6F~VRLqR*%q9>yVsKja~v+vDyQyi%$P;qn8bXl>D($^L$_kob>Dl)B>(O^s_AmYS3jW$)6bAcs` zm4{edRQ=8JviI%grEx9avF6OJuKI`NWIuA|E5Y=$@5a5XSM3ZRSds2^vYhe~*_y?s@G>6h=g4c)89bN{-b5wY06vERH{coIOd;q(DWK z&&+wZZ{eO@UZr(Ib1nK4*uks3ptBd3OY!me!HDd!@|tv{!NV~w-*IiF&4~ZWp$8xd z18CeyCXR5;yndz$r|3;`Icv*rVw;vm&+3?uhN%(l7PJI{jw5&L(Yhy}W+--@X#URH zrcwsb_>xR`(fH~*pQ}h8XY5%8nV8QQ_~;65+e#Gq?lnE0ty(&JRkXjC7!wDkS1>Zq znB<%8%qN{Vkk0noe#8~i)!twKpF}R=-F1!dQ{m}PH?sSpKymV9*8eKA)(!%y84BAb zwf^n}keVI_a=2svJ?-D(@c-`&(#oxE_O{yj>TJ#r?0B=Rz(X3RL>$BCS4_IA(ECZ1 zf6GI|Tf_Ysqy}|rZ-18`TDhfO80%%}3vGs}dZbUO*eGGUDH|2B3Ta zxHLRi>Bg0{WY+~O1pR_+AGt}AC6+_$CM_NJ_RU1x3u7yQrEXw{=17nM6Hb^tzAxRF2|CsN3W#h`^=rqJ_x6Sr@P&J z&_ebZ;wvT<#+rI=U^xxuy|bJ3U1rRVhZxF(Vi@FP{}h%|1vH3Z$xXla^S~e5x>?@C z11yrQ=bf(qETz_4wAT+}$YG7WyJ3hjLf}}#XTCrG3<;%Ky9GjcYfrkMaCl zZ+e{%kGfu)tR}@b>**SRW7UKY;5V9ZWCglHN1#*q^hRmWf4lcz>;1p;y-P_CK2>k6 To$z!F;Gcqw>Wh-+CV~G4?FVZf diff --git a/plugins/jenkins/src/assets/folder-results.png b/plugins/jenkins/src/assets/folder-results.png index 2e14f3551f6cbfbd58356051ad28584c5510b9c7..c01e4cf43752019a5edd2d6e18edeec134752a19 100644 GIT binary patch literal 81758 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%0D+Hnsoy}FM?*WAaU!ea8qjS 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

G(qgOTu$m) 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≷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 Wh|FCcvA>q{&b+NtCAx0NXLcs4eGB(z* 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 literal 77035 zcmeFZWmH_t7A=ehXf$YoOK=VDn&3_c4+ISm+}+*XHNgo%f zTk~u!^Yis~9|!w+9?_vH@nmTF{c)hXG1o)MVVg`(kV4q!kDw6jpVz|8GSsMd2L~fU z2M^v98nSgi^$W&=S7pLta7qnN<<+SsO|bA*QaaQhNnk zS6p4gpFQ|^jaEKwWrS8f#hBfdmzsAJL5~CK_!X{9{4=N?jF7R@X;Vp}SY`+(44SSt z%PE0#xeEgtg!*|+e{XN5J}o3)vKa%4l~~WUH_I&lKF>4st6*3H)mn;&9Km7|Gp=zZ z=wax~^-^L2ZOZ%h7dDs**e^oD->lyqel$erQ;){P73^~#w0~efd*$=`dq3{&t3lSF z4FZO=w3oQ7eMRnG`CsLk*jy9q^;-%xaE&B-C#7+&S&UOCQ?=A$pHqaL)yZnyi|W|V zGi;q0v>R)rKgZ!uTB8UHdlggpQ11(MRPS(a16ZVxMGV+@{b{(b&pC(qO2-*)?TBG~s`{q!|uHV_FmKP#+Y7vX_`a6_u zp~{IweUG;EUrIiHWQ2}R>hI{MfuaeA8lLG$3_dm1R~bV35d96?n^h5kw-qWGhCY{z zdihzCHwhxl3Mu|8Z%S`eXHw+gR@QQuukan&*yiwjB9zkzXx{D1G~8&KZKl@5+AveC za@KhKFv={5IzCFr(6Yi9{(jvUILblxWE9;nm44gN2vsfEzQW-TgrVVyr;|oE3i$lRU2&!G4VX^aUo(JCB;kvhVnm@M zm}{3)Iuu{TL)2gd%#Lai;3$Uh*Q@x2V|``g#7Og&>tgD%gdDbU>hYETn155@wK&#T$fppTpW>@;R}EJAczAd`c<|~2 zY~AZQY;kP6)|vV)`aH;$BsX7?C}T>A&dTz>*(DVq{Xr4e(`m?TOU{$jl%g%sEbJ-$ zK%Uqx6 z6$&=8A;pFz*x%yws-%i^c0xyyL6Q2hCts{--p0emBgaG2g_;Rp->dlR>sJ))qZzEpClt#$W2^n)(dy8Q>E+5K{Mxkc7#efq2koZ! zs*UN6*Xz6Mse7*T7wBB{wJ5c&wRp&~xYl@t+APc8js|U)j+id8U0%7}ZIfM$pBcJL zIt!k$97uEEK96uA8@{;^pzk z{`l;11ggt>1DePuxpleK!pB3_f+|g;ixAZoP4neAjw~n=^bN%mSD%<1WQraj<|kSk zB#6ca!t$>U^s_d;`gKhGoa#Bx^A?7mOyTP4)yFQm7VDwihcss6qlGtx=p&0GTAxWe zk~<~!c@1#%gLzoyt}Xsm6lf-6YRvls78 z-i={zv}d^W@e;)7-yv!m`Dt)4T}i3DP!%NvFKo^>;kk|ddwsfV`O&Pc7`22;8;$)+ ztZV6O-@85dO?U$2K+rw1mu95Spw42ws8z=-&OQB0`pYt3)x58}+7{&vCKt=8-W)+w zm{Z1I?;SD*8Y&%*rn*Y4m`9m3RoIW;w>qJAoOXO(ZAP^u_~jAxkoo8_Bz_yw$mL1D z60glzP0Pr9Um5aaXBWLj2zgj>MqR;ynNs#%=dtUs_$QP$9#Y5g^Pz{qF9 zC+*m@RBykPU>kJm(HPwLsxcRb49B7o)yZn%J}*|yrM9=RxJa|a)!^cacra7T?Z+?9 z!?8uRhNH8nJCdU#^ywvK18o&gC^yoh)-%5fghsE=k6^VDB`wX{i|FO(bL;h$Z@gO# z4X&j(jHuRrxq4TUqcLd`9#J(MnjD8#$`*72&myHFf86n0Z@G2(MLA_=XPNMu+E+HD z%xaIqRAX0#*PLqRSs+>bDDahcsA;U`depz~%NcVmC>bnFpRrAJuG!vSuZP$f5J4hi z&P=xuc#|9j8!)_9~qpaJPs>wH^$Vo%hDU9TV`Dcb~O7Oy7mTI zcpqlx*T%gH)}U0ciYPZBWXRgX^TZI zeCLZR9$V@^r^nDWNT@nx1dF}+??N7mZtdo`azc!Bt##>|Q#~vmaqkXJ3@6ufqbc>} zWT3HEt{rD-T9E9m|l993B<)=;l#!1_Qe=4!CEt! zi}xwK`~|0cyN$iTHKhytV9dt*sNi;Y%e@c+dv$xIK$wq%E~fH98;EdKjnt)#<>a8~ zfcJ<{&_Sk9aKJlg;DryofIv7l5DEeKiwV5mWW)UPC>%H&_Mh)z(VtEfQ4y1p0{*HP z*cusG+L>6{%W~Dd11>dX3RbsQmy_i+u(Dv%Gqln-Vsf^yerf{6@5~FlwJ@^RBXzbg zx3uGR79jt91~2gb>1$?k(%+}pe-a>9ms2Dav$8cJa{>03G23y_mPb@Z>FKkn1W+4SE%S=#+$Sik_8pN=rUW@2If z*R_GB{7>KVDw;YQnXA7swE)Zm^db2AH48WY?*@N6^zSbJX!_31$X3kC0%&P3_-_OM zqw${){V=d&+a?h5dRS$s#qXO z%1Z_iO}018Uw+{r+ZQ@ZB7lXV;jtC}^H(s;Gw}TLzkaJI>_Z2SQV2%cT>i_Yo<2h3 zT>kw+irLaW@)IaRcKHWWs%snNe`_}^2#=4C-^=9O0iCe=LHgvf(ypT5uXhTf8SaEX z6~SI5zCP**(@_$pgje8o+<(#Fu!qa*unTtl+`)Fz_+MI0!UucFrg1XLX7cmMW(f+! zBNwyJ1xkbR?YD=??2i@&><{N>K1gdV!D-r+!(KZSz*6qU7eo%M}i>8@kC zWoeUkmHG8r=>Klf110Y(1e<8^=}F9ZsktyED!V~v_=_B=B@ea#wC|I-cQw3aaaPIX z5<+3b4`rWaIM&{1I+7q=bH8`HFu`rF5|7|S`dmvW@d;md8i51Bj*X!0I(@GfP5|hO}jx4`r{Ap_} zr6_;6*$evdYnHy*%mJ(F)6};dtEJ`~wKAO?l>*MGVv)U8J~jAVaCRx2%Cf}^R>SW8 z{Pd55=`Wq-fF1OFZ>p@QZL|3HX%wP3S$s!LZ2Y(T-}U@ZIT4qxI=On~FIR#{(9i|W z6~E}2su?YLTr%?M>}N z-D$z0{c{+TW^!kh=@^8*tO+yIWi!Q@QDu7sL~?U^MACeJU=_6Yt&z$7W~ZRE9BxqA z=LXY+E*WxhQLfhxp@`zg6ujB~g8P1_!k{ZKl8CSK3hK45yXnO7!J^yId&K;5ML5Za z%a+Fuf6%QKziy&BA*ID$1t4v?!suBqMSjh|oIvJKQ;Dh`F>1Bb? zJ*_X1%X-X8MHlfWN6iGZS5JcPjE}zu=6hNzz@1JJXT)(Rnqns2J#{v5U{r=sdyQd$GjGOu{ceNZ(9(F-EtoD#tq zG_4!1zyCGYUT3qWAJ~g2!|+^H(=_k+dMhgkPscguTgLnPvH~a#b!`MLCqK{SR-Y4b zL6J^ZW@N@H#pSo+gs%g%tbSb3Yiy{Z7RG;K3+SRa>rHYerCbttOo6q}gT^Ta<%RW7 zXF7jY5)L4h4?-ha4KVY(vAaz%nL!|N#}EXjTzv*OjVR0exz{p@=aruG-AUKnzU^eY zFJtYztqqBBOEFcpGWy;j??0A`@Ep$7MVS|oA8in^tI3yaq^-;OH}`;rFoyKDg$nXM z4rS&z9WAar+#W@3P00rF^)zwgZ5Wq8C-6)-G}SN&FMEIeYPrzBadX?t%r>#t9sRip zm`T?<2RC-TFNV0pZyT5HnVzXgR+0JzWP^Mrz7O)2Z0^mPLF1^#hR3$vl}P=7>Rl6BSC`XXwO)s_J?H!lb}OUh8cS=dAp=T%<=4 zbueL7K^j#=?2j(WEPk}B5U-6Adf-Nr5J$mt(ysbeGiz260>=t19{%Ea34vS&Z#9dB z<@z_^?oVz$j^;|OTukY5O{)x_h*iVDNt$rcz{`d{4l1(*+&5+V()JXA6$9vmfYmLR zZ5r+IYlixndh=Pvk-wH@J!OPy+@&gV;jp}PbM$i<;pzaJZu=gDkHM<K&0IL2>6O@nRH-q3E0NfkHTEDszgNjI45v7zXKa5o^sn& zTeho2bFM=ww~c=PD-GimqgB^43Y(1twN8-`SA8)mI1LU4EC*$-Md!8YEKaKzf;gTG zob%T0R~I#NmSIO5n_{tAJ?JEzchRqjJWZyFuXhTrkDISn!@BfB25m9)_`tV* zvKP5HYTB<>GD zaGM*Tq7aQB?&v*@>_94Mh)0^XgZqaWUpuZvzJCiz=oC|GsG(5n^puJ!rRbBWZZ&0Kc*0sU6W(#TOtq@Qy*0Y<)taiw=jJ!M?WqHcUK<&;Q$pYptina5BjCj zr8hoTTyZa+J*#Dx8yw({+ThBxo2*^(vOLuNXExNs;^G>Rr4yXp8$R!W65av0Y@+tnB)xKAmik z9rCR6hsAU&7Ei(KxWJ3|KGJZ?7N9 zCTgqrteQ6gLq`ZcHInzG4IhFh#k1!-tTWKF)h6Ur^L#kVLYU2x3^PMF2t{jBR#g@F!kQRKb#cRXh`5P96@nb zQ3^VtO#@>yUPT^>-7|$5rO)R&*&veE+j~Y(Qyr27xLiC?JrSGrX6p&E?iTD zgz|;1dlXiqP6zppw37)BOz)Nvgo2mG&|m2y4wuU_D9kEc+1vw9*1 zGSM4rEsu4{{jB2%F25M5P;o0cer~npCBA{+uW1A11H9K+a$F1S(al=(wt~+;6wlb; z(c!@0-=XRyF;|h-hC38#YRd)Bj zg7NGYG#9b!Nhm~fZjd~lue_gpFTuygS)9)9{ztx(y#dFalrjeyVD`mLzr@U5?ij%K zeB>FD_rbS(GZICRy^|hh_XC?^G5BVV1Y+WIpKnX*E?Ms_JWb>VB zL3>R*&1kiW5+_gr&l_+rs>|uI`-HG`Qr(w4&n2Pbu)%ux?wk1^ce$v?EST4FTZ&dU zC<{e}iXW{rRQebafUU|JI+@w-d)wGsrBoeC1QUG!4W?VbA&^L{@%hAUqM3!a2T(G` zVZluUj!@q_0NE04mr$0c9P8Ef%#bJUQM{dv^GOF@LC5VVA2b%zO&tw&bQ^Ti3DPNs z)JISDs&`T=trw5;LVz?%ePizvBhU&$r^^)#mDErrGkUT@~kSPdTUL)V3f@#!r@ttD284d}N zsUm}hy8v=GhE5O71#&V{cEt1{c*ySYtlzKf(^u`?OtT_pUVc1HYWeAnD)bO99cZML zVLvMM`pd^Oi<%ITO144nFS~TASCtWuK(Ad!6mfpf0_wxWvI9Jl<6tN6Yg_Iu=DoUy z^}TW#NtM-RIQMl84QxaqJv}6kS6$9dfq|7wb<4h2wUBbYgDREfBOeq-%|_;TH4Bb& zFJxB?19z-PW2GrMdtz)5u}__T-q`3@FS_n^7=6fanlVZ`F7vvlmrq?*2j!O^EjlfE zyk_Y>J+1twe zrXF%QXp`F9wjVZqll##?c#B}6Y1h3{gX&0W7&>OS=Dfw0u>4AwPb_3>s1|6z_w*LGPL+9gNgjHAff7SW~z|$b`E~z`_BpkwBPeO_+r8 z@|O>|xI${pTJ+5?waT`1i;mL@`6BC4iIt=MaTNu*41?aIcWUo(N{DfIZ$$o)#`S`% zJv*E!R%J!NxDyZhCcvTY>SLX1|M4GYiU^CbnWWCyZf{qGWKP zk!iIz2tk9qs|Z6eWlWjhQidp5h7ld1Wn2ezU!P62Equ-cPcZ7NEvypy-A37KF+^Sk zl^h4{>zju9Wr`PKE1#nw@E#3e#C-h^QQk;+nY5z{iAX}k*Rc&J6e1WDB#L_6hvNlM zFiY1WIT$9rkJiHxtrA7v(wdxyhXvWt?OQS@?x**sctiFdT_lG-&%)!iVJ8xO^2NW( zZ}@s{&{*z)_#wunElNw1>ZTyJ$)w%z_MkQ@B2EcDU?X3LaWCDM%#=_bt{F&Vx>^x^ zuzcU&sT+t?XJWrtJwy~*WI#|-l9t9Xx~_wT(BlM>WkbTer8(O3P2*ju3&rjiS0N!X z&3bf+aUK-9btR(9J|{LG7wQ|^>2ZEZ`O@?U-N(lMQc*Ue{b~iu|A{u^1xG&!OuN`N zCiw=Ftbi71)~L|SAf9TeIWk6AuYx;|ycQW>e#19P-+<7PUEO_a9Yg{X^UoB!P}|$w zk~mGalm6u^I1NN|YtNWLjVzDNnO0mIxmWkNn93TWA(85Y7jaVO1gPCA{K_G zNOw208F25y!C|&cZ?2V=ebbN^?4#w^p1-Hy`%-6(kP$XCK8f_sUK*zXeGrDuwC;|j z13J+@CcR8BCa_?nbQRKJ->}V)B&Wik#ZEL?3vN)=Ose9~)lpUtS`AxbXI#8~{smu& zhq)MjMI_rFN*P3cvL+FTigy7n&9PP*wBG-8Cz<~N-Uq?+tLe{hC|C{j^8$-x@LO6& zwzdpqXySZ@PUOG|l(gMTR!3d^-h^Y4hvyW*Zzf(8M^`Xc zW~PJ753bTdw=8+!3!cD&V#Oj+MOvH(VrLZlhc~(SY3xMdr(@Y}CrehEIyV~@SMn=X z^apd_8?IXZ0a>t9w{{R}41#m=XL-uNb#3jakrbXDZ`2*C-x<8S881t98r0+V`m)Ra zuI-HSUG++;pJ#fRwWXx7EuG(YV4=d+#dNw5Ze{Gu$LT2>%iuR(Wt`y;(sMJD6Y%2< zs?M*|2Fv0!2iqW4@sm@!~lOCW(ZHIR$f&zzL z6)Y<^yr4QG69}P^qj;1j4L%Li+6Q9IfDBD8kBC?pJ<#^$ispKJ(w^EcJYv;6g!_2^QQ6zKECD5rr1pvpVO)7H z6XuQSmGb7f%;9`SPBf>C8x_NvAG+WR#8n$n(L{6$$U0jPNFBh`(Y|!^{IXkn^Zim=8S_n2KDex! z#f)%5h=qy?$>G>c>D=gKt)hJXcb#Jqc8D;oH!LPtvO^ zinpv8Vf1Q_)|IzZRjN+2V@M1#wa)Bz8nhSdW6 zmYAV2A13K6K5z=yQ;_U`?KrK~6b=|~8MhSCd`&+6CaTYfI9D&^g&kfRZ*oVTfIxzu zqXJ^SVn9Ga>N@k{={qrX3CCwl+-Y=06(wK+Dj~u#>8NSB_KjOSFZmI-S)Ud1)PqbQOj6D;Tug?e(MOB=)_TJ z#4&xGD?8%z6|LbUnl;F@*>~GxS=pezUUW;)@=7MF+9@=SuWa&(n6`U?@ACNa{vo0d zvd#pG)?f-sn)1Okc9hs8f|tzBPpS)M#{xzYcOLHzKf-+i+N;>k4mJTZJ_ng2b~qUh z`pL6kib%(Q-AA;QYY= zWxs^B^v6+yHI5(uwVeL!9b#s*jqC);;1D;nRKSu`=5(B8w>5DR@h{a%oH70MJfGkRt@p&xd3Aq1@HYz20PlN?@5$xq2#B4&07EDY6tK^_cM z5kdPgSF4M?8`FF|l`tgiQ@Opx^f+(cGV*=j!my>;omqoZq49DeVIr)YCJ#P2C1o@$ zLBvnnk)96KlP?J=LJQknDj%icRg#U1U>%E$hL$p{nDWZTuNX%dtJw!5Gto86v2q=G zPKD4mHl^B&zhdES!=;@DP}fGk^|rAcx@3On4`AzSC!yECzdKemar?}T(MdulMBdNG zVX4XgL%R9wYT?c?`$qQ0=LhqrC4V5XbNq-Xic`B*d3)H{)kSsYyc)0ZT*7QsD3eNT z*}p%m$`eJJQ+gKHIWN}p1rj2Lwxka>nj)O_6esZeA-DR+t;-6y^9%Y zl&f)Syjh^pRTVnci{3KWdpcS}#tM(K+ZR44mG(3Y=mCw4@$qEXEryRat8GoR$%=@+ z<;`&9qapAMrr-U&LE<~43YTEzMn1R=W%^q<)zR~kYN;`c!wie`*`O7hc~j4D31P+q zzX7?fhks`DKcGZ#ilI*2wA{bv#TK3L$uF-1K(0d5OefDi09!m~b8s0Jri0VvMxgqh z81AeC-jmyM*A|Mdmi=-q8+P`*m^SWt#$oVSL;=wz@|vA|a=zR3MpD;>)K;|i@hKEC z{=fj0eF(pV~gvIy%u}a#vz4YAv1JxjLcIb zC}Mhqouxn^go2|Q>W8aD#i}BCMp0-x$g}k`%nYqK4~=zRirLAhot>U>+197~EoBrF z73}&`=8%MMUuy4a$4WTywyyh?v+#!ySXNX++mj5YeMHsc>3Um>I2NnV`*+^Mj?a8( znT}17{lY|H$gmF|lFZmBe)Zo=+~VCOvoIz`)vy8hk$!UVt7}fm;8{D7!6;0h03OEi z_X0;vXZnFqJ~*Q+MKxk+j8z39WPN@P%R8^ZNGrY>7gPrR7wZxc4?A5I^Of^JJpP(g zm#yELNu$RI_?RVF)qen zk(v^-r>+rZgaa+8uv8`XO%+4qpryh+M=U%hZ}-Ln^5gzcW?3H^r))Xs5b3tUPLW$m z?PNQI%&BzFaIGEwupkP=Hu!mBxBcgSFmTV*nV5dfh?tBdZ+vD<*o2{zO*4%lYI{p_ z!R4ZKyna&GUp5M`Y`=noao&GDAwzRl7*izt zOiGZ=xADc@2LOp_34dp<%t7EQ45t#BHH<~Ax+=tU4j`mg!oSdb;B>G(xsmWItjbY} zFl5O(%zs==hWX$y9jizk6dwN=_w2)R=gzLkI6GK9rqLrt$S7ug?a9#|Yb-rM?aM*< z0dW|tg6LUJZ0M$h9tYvNPW=|wzcB) z4+hCZlNA14DltS5M04zbw|o=+$q$=bsx3|*@7tG_&<~(9i|$=QPn!<)s#n^wr=K-N zq_3IrbKf?{TC~39Yr`xS#;)B`yc#o9Succ5(m1>?6SSez2j&CaG-PZPQTnLt*#nPnU2Ti ztM<$Otc+l!Z{;8rNrjrvyck*XXA=UxrZpYtiB8C_0p`GnKT~1I zzyL|Is;gBbiRnGeo?=PO+u1%xd!B#99RE}hGz-EUeC}2FVTG2NKAK5Tmzy)jW4d3p zSX;7J@SoQ|zQEo-zRgsZ2~&g>mum7xW9>Hd~R@AvXz(Srm9u` zdH?@3w+}wz3&kSn;{P@JpCSI38~=yQh;8uBZU#VdC!pWCMG7qWp^OW4eGL$ zkAIUiC}zVz!_wi9@&x~FnbAb!v1G?i9e@A(5k((BTLX$FeDn8Z-i`c1vFFp(f6+S? z3b%So!%L!l{?9$*X{76bdTpKK?(5%=fJr|H=fS)}Q2Og)hK4@{v~Z{Ro~nO8LWcot z0no92|0Zky_09zttqZEqlSZtRbhy@Psr)CVjK84AO?<|0#Pf-)ZE!r$bga`nH#ads zeB#B`0f~cHS0vG=*T@A$-Y~ibKGIQs7CwbCNlbdf*&=!)Z}BV=)@-y`tX~2E;su5PI27Gfdp46nj+fnc`8^2zQ5<+VaL`6<|@2H_2DK2pTWa_Hy*3~d(;$L%CE#>3NGC29Y zCtCnN9@bSg9`hh{I|HPfVT`y@E^NmAh-EDgu2;89kHmmb;s>{S6tMsVP~~6<*~t>J z8O!1e5W4MG=;bA-f}Yrfc7TP#mghhDS>DguhkbLVcXPg@x85D|TMQ8;cw>^ITOgkS zc_Q#Q0X9omIEYmb;%^NQcmV{Kb!67_Ivy7j?MI%MjS%h*5;VXGv$$U!uMT=Xu}`9Q zU2Q4~0vyj`(>|}dp8!-3divx23c6RYpN)CbR;C-o{cHd)%1tgp#wjwX1(1Xoc)yaP zM{NO^e*~Q;KAK;5J>72Vy%Q=RXmHq`EY%`3?~SKj0hlXfr-|D|&oN3d7 z3<$dCv7fW0!?F)T=ibsCI~@;o$$B!6^>S-DAg2flBJt$DyB_jl>er8x;|$qy-+8t) zUZm1)5G8>7gnP2stp4Qw9T9ik0|X$1EQkCOt#w8q z@0GQ9a&Kq*!B8K-#k~CH_4x2x5=5QlZp*!s8wUwvZdP|pN#&(_l5V{A?(d!#AocbD zc(jhNSU@sDw&+5cEq81L$QDjIsu0D`{CXE=o)i=;M?*r7{PO^*6L7TC{xQoVQSjy) zFyFA@=y=drG(7qrE!QoY zPC8G{#Lxw>spL|zg$kUSa}A94V{Vxpo@N<|Ox=uG4dpaW?Nt1B8>d0~}NSPei(_Wkm<> z%2dmP1KH{0J5ns0+dka~sc(_kUb~YtE_u#RCm@4s%YnJDY zY5E;7^>9iaqER74zE8>5Gq)&!{yqj+J6zlqfaXJ#AhdaNHBsh?<9Rcdh1;NZ=3@$s zmMB08SN(%e`Mhmk2Z>^&8=M?szBS=1>$u(tHC-Zko{jkOyVE{|QBjo@2r$P7rF4H! zRAw&iOO+i-p9=ZQ9^tCoF{I~yB!l7F6X!h^d- zAAnf`T2s5x1N0V=ewaVyy9NPzn}3jxsGU9|v7Hv!CS9N-wbFy0AHN6mVQVL$U-ejh zXcIEy-r4pW-dtB6HtcnN0CiP7QRhAchDCSV5<;M*>p>?7v*$?|5ZF=Y4!)+a8k6Hf zMdv>jMq$Ns?SD}0Ir-t7{_Ez492~fAtXKYx*{0*11>Vt5OheOB2>ig4=qo7%+YOek zw3;%#4CaDfc!C%PL%{793Vh;+d&>%QKiHH1#WJSRg4D%%nu-Wdl%t{(H0 zIT|6K82c{r1ymi^oxGHH&g(G}t8O<@<}WLaLy?`lYiEqp#4~{Xrky!r$poqe2#cpw zvt!pjP;$emAQoGHy#YjNtJef=SWM!YmC-NTuXmXm_c5DKBCOziM+v_dNlU$x4FkL) zO92cVH4R)?k2o2Da|ezZgCUuko4o3PZLX=EWeR#e3u@&FVj;E~4s|r7B8hGX&^K)- z8BZy9T{6qnp*osiLE|WgpBnuPe*UDf8*sYm6&iaGZfHMA7@B`cmo2=2JdB3)&aqoK zrvX(+y2+%^KhAD<&91;#RPl42^{M=_QL8ufiTr*#U`86rqFvb_Y?V!!3u5W|YdmK3 zrTXk^V8fg)#2ceS>t@GqWd_pEYMjD#ZgnJi>9~S>>cetdLh@`;hhBT9+Sna-E|eJ; zaJ}IyT(*l6d~nTId4Te5y)FSNeX$EwNsVTd-ln2(TiODOlj+1_hu*AcR{)fp+~#64*0SAg*6e!ABi{jH**b zk}!)%`Zf-r#U9ulwagv}DNOh1IFvi@imcp#t%g%Go(JiiJ=I$mSdib~Q~A&~OMb=s zW}BgNwQ^79?h9J>j&!O#99kCHlpKhsF|cdPZ1(Z)eZ`u)Hy{pUsFb_{(6D$XRXx}{XQdq&1YD;a1H)!IMG65ZXtYmxe*^rRe*S;(m{5OZE0VKoVQI?(C z`R4Cp%=PQBHmv*?kl#ML3d)Jt84T=cE!u^Lc29h-xZY0ftXWA%!8VJo{3H+6CM@;* zOUh}H74Ekm{PuBuDG1w71NO0`J>8q_E;*}Vg-HXJIU|-w6}c7U4H~Lu2RlF!>3O20 zTUn2HAJfq-bn--Ta#ss#^E{iMf}swW1VV%~KxaV_Ny=g&Z=>CtbhohJez`idqyKrn zB5sX%VzjN1?6_9tpVSOuo2L7`VwzTHOlGeK9I^iWS| zNpOK_f}6rrBR^wlU9Kg&s+M+j%rdG%bgrDxtY%MAB6ssv!BnDDX*G`k^HYMn=9D1IrC4^;=tuN!TrHEsaD#d~y3J|?+ zWXn@zF_fprtO4Do6X@a+i4IFvDoR?uOX3Edn4dep@QmmF!)bk8Zq1kN%voiroisok zp@H%+9A%Wv#MmW$2u2|hOdtHcg`4?ENBV70^_~C(b^w7bJ4RnvU={8B0%J27o*VXk zR{%`F*ElpH;|zQ(;T4-RZ2ZQ&0~#1Qe({vA@nG&}woK9~aeVEjyns<#r&NGNV-qgb z#j;pm@m8v|<|Jopk2DW5?CvqLE~#^Tu@MTcfc)KyuPM!zJgJk|>|7wl98 zU2+1L2{#v8e~a{wC2)$e>vT3*Cl7c$~OYGG@-PL!X4M zC*1Zx5E}qUXIYI8ZIZm9kYCypmT-p*sa4cpOlrYeDBD030+F3Co#~zhkZg`mo2!%v zTc?_1X9kMo2*BX$$@X=#U)jjLWUi_eC8fq;HI|fPWa8Jn2K3wXhx-5yc9n_@cqayl zpDIo_7khY}kwgShU(y@%YysU>mzmJcq2;d5ZicKtrG~18Q9`RTSZu3K;+=ivV;x`r zNxb-r`e{`qV; zA0azPii|#h2 zCU0j4EcGvN!upQz^|PiTOEDJz#zIq920kbBLizYe7r9b}R8^2V+x$rv2?^jIYlRb~ z8|Y=k3>eljoEB$HlnG^k*l(ebKo>Dq>nZ2cf67Zb*7A;aMEx5}I=Z-+1iPWu4=wE` z0!_-i?FOEt<*IhM#T39kF(|>qm3y2*;0^a~^u6|GUsGN7Z|V93qV;0DWv&fjAKtf+ zF_n)zkv0~Z13Vg@nhEat7Bs$)#>0kBFVc;Q6}cA$u9p2?_mCQ`b`ZaP93kb}^4GGc zewQ-@m=hVx41okc5as3RTkaMUpX-?A4kAhURjo!0xD`O-02ufI%`hN$ z0eCtAv`NjNMo3egLE5Y;Z6>vde&t2C$tFxLWn@Li+3{25(Qv$Q=}=GMk2X|ZvvBK0 zuG+j(!lf-^fo^|UbemQo-Pw1-lr78uEsHdxRb@Hnw_2fr1o{myQsro zjDYh5Nka9A{1c=6H=yFv1Yj&pfm#0r+yTJ>#eUxFq<^{AlRvY z^ZN6|FH{89Nq{2S6SZ1ZB`hW;#=Vtp2N~d6BBTbumZS2`)K7sxnklef-j4PJYUMb; zXnqPN32lBp*Gn-SO10$BKBE6eM>?%^LKA5`flsbT zA7-s93LOAKLd%kLJ$bZ&pi6JQ&PES_lxX`Ygiu5hpKvCAz^x8ElX`I!!L^7urR(LP zr|J3UGGL#?=PY7*MuZumPuC=eG0ZqWS`q@nJ}f!;GKDNbJpkfB0ZSAjAp1 zR|Bd~D%)rNqZY3C$wmE0F?b4B7^#FCsla_XD1_WBUn@HC^`^`9o~lcj`walt5j1E1 zUG8oXsAypUYMGt_nJz~q5bX6oHJQI>Mzb=oc64cL*`8Pzd}RCGaa#L>Sq{fsUi63& z9iXNw;@M}q;itsC(E%v&{R*I#dQW=AmvjJKXF2V%l|jJ4{RGbV17U8(2>acCpu~*y zfU7kU$Vdf7te60$a9)4fOWzlH2IT3S_<{S_zEn#OziQioXp>+Ozy+-V1Qjp;HGn2U zJ_`K{`hD6SEr6YKymO-HiGkw4l8lnqG06#70_^RpA+0Sz3-l=k<8r2PA#W}qTU zZ-2TX$Dk`RCntxj`Sg=f;D6iotHgZVS@MXOJR7wQ3GytG(gp(lik5#!6fXJzQV4ZF zsGeGFM+QnV9{pn|Bzh+xFvf*dEQN7@Wzn)35gESsv+6w|t3XYT0XMKhW+CJg6RcHc z1axZ%->~u>NibX^o!RYESg2%o8x5UZy6hlL2D-?7x|d-*zQm~!La);XL25@>o7W~+ zgmUdMvx%+K8#QQb1iXO{W%GoU;vT8mbp^lb>3$QPQ;vmb{?zK5_0HFJ1G9HFx12UwD{VBP$1 z{q*8^^+KaIWhLP#^CcCEdb3I0PR`tw6GT+up6}dquTA_u^@g?LNO|QT0uA*(Xp!)y zRhxjJD+ zUBMMOk9}PJ(98?b7oS{(Xfm6ZetYrRn%3F^N5rMfS&YP#MGU<2>PWVBi}%h0g(htX z0P*m&bH%o20s{V()KA}NXP6zDp3;;joc&2QYYl+Y&xobG05~gu@!bzypxAN+sFVcN zE^0p1mKBHamOm|z9ATS8kVPSe;tWth2;rPF$0`u*1T8TpAhAycN|&f!zx=-H)PCjj zDJaj100)*XgDNr%PbK5~B@d&vwTGa>(Xh*?gdHzZ*Czv*qp!7I$sC)@`dc44*e-GQmT}0wsg^v0p_)G2jH9d)fOKpg^{$aXO<&mbTrBn4iS+nhdC! z&yas(P@j-62=mvoj>VuhrVXM{pD2{8EuqJkundO9>5j9erPav}97{kYO4GxE5YC~0 z%UQ(zcfL^tBd5$VekJc_E{Eyh8* z$=rf$WGrxbWz#TmJ$FA3Uslhp1+Ms7N)Npi%i=nUz>5G(@qAIsE$es&hCVQbh_B0( z`TV>iXX-ep*HY4#_2}E}ne+1`jtzo_C|5xg_w)T>o<kk-cx9Pw`# zYb-ozTfL7njN$JO`Si}|_ySDdyZ#Jo-FIb|H>kK($XE-1dH5@8`Z${9kxwCT5UVRt zX{NzIlnSk{e0VI$kk~DN_KcaZA$nvl^hA!CmHtjXGF73!Wj^ zXgZs#Xg{Z2@xuZ964$*>BZZ{`zp>*scGCTq4zAF?ChJ6;(NQBGyfUN(!Bhu`RP<`~ zQF^LHnH)Ym*!9P~^?bAGqROT&%`Jf@?E`8eFjp!jq+Tn=b26Sv7LjgnXoR6d zrE4ewB?P4eq`Q0Q?(QxT0qJfA-Zk#M@5lT9e0{$>$FcW^IgrgYbIrBZI@fugzgR^B z!WZu)iFJ99V(8z<+iIdGY_kFAbNqlPzQI@t3II3khSN6o=0@*ZEdc2tLvpL$-=}`j zx>sp=7PoLomj{B2Arc&G#$spb9r*ppmKYJ3IYlg}8pohD{oqwHW|(zOSuc@=yKE9P z12UwR^#k-Pn#tD`ATPQO73N9=M|=FF>xhHqFoJjE1($TPRN76QO7&;Y7WPoW%$1V@^eK;L&c5PG=Dqtf{*0v)$yo z9v_;-j_*VVI|5gAl`J}5s$ffb1WPPx#N@1$;P*GG={wk)F?3zI?7rtY0H1LkGIoWt zrH)TBW07ulBtb9ud%prJIROFfVTd=e&vWQ4vA2QPhLa{zrbMX{0c(i?IMGvFJ&j-0 zJ@URFkXusd#-|;3h=2Qg7F?-aoDKJwsli9J3~^dw+lV7UHrT+0sRy_^<%r61Ud?zacQsM zPM%#8K+CyVfFO-CtNG9gV3ZG>852GsH&^dMEw7|*fSsMBPvNOmovq}N_~qfM75CPO z=0dYrjvLJvL-G~wF0JYc)|fT$z+*()C9{W5#%7uurTY8X>c=r`tz5(%@6QY6xla{v zzT91R%p9n$iHE+mKRZOcNL7rt75!#2p(xds^ZfAAesOF`_qYqk({?T2 z$%W1^Csl{bZst~pXy9POVz_@}gL8lC^a?WGf15<4H`j0__=#=F-A;EZd|!i!XO#6M zFAC05otqTL<*t+Y+ukNDZ0&QHpgm*{YNBA9j9YJL^}K$Na5lthXhQVRh`iIwynyBS zyLs|S(M74j49a4g?iIN&Q;;wK-JYID%ux!+(|kY7|LRwES$<*C6!(!c?0I`%B`rS& zR_(4Nxm8XAuIR?axi05Y0Q7N@Mt{vx83e+G8mVzLu+16t;l|yOM;yGiE4+L&9e0>m zJQ3`#J-N#C`cRDJBR@h2NlWvg)hCOYILSz;}!hRcwp&TiO8ZrDG7m<#;4kyFHPH$wukZNCl(2< zaXRRD(d&RY>=!(#(r&jY38j=^M!rTDo%z8RKU zKwdWlg=&yBp8IYS`rBt*ns@4vL_u#jRT!6gV6@hJes2cMk!{|ZMYR&OPKqOUlkP1XHL-4J-(xD_&x;( zRj%584et}MJ`qnW(5<=6rHORmT8#uUSkW-Q=-)+b4^rG{mN(9Ig0l5ENu^WfE8=~$ zf6NG$I+yxTd?(6_whO*HqFQ*~rW+=Sw{1D-M9zED9K2Y1!2_gENpC5eqKL0_71!it?=9_8^(F2m{&PyTx1(9$>Xd~@mm@i#WV?wNMv=#<&_FU}%;@rWU!`vT(icF)bkgWhr(F$TlUMTD`A+c_q&VQ>6)Oar;!cXMGLQSAZ_ zx%6cuwF|hZwAosb+JX)Yj%mDuhBLs0fAh!4puPN)U;UY3^k(92%yRsZAegYjB}B)2 zMzcda3rRB6DtHQh!?dzkxEvX{4Dhl~q5zryc?*}dOH`XejUMvdFZY(ZFhilSIzv4J zx6v4AoDH0}rW!NipR>n9<<6V$I!ua>V>X|7}MFJuR|&Yp0Fu1OT zYmduL#K!Rb=^u!$MddSNCq>OrR`<`t&9%8HHeQy~mOPovARw*Oy^8fHZFg1-o>DHu zkZ}0=H9q{vwp+0LCLX=Yj|PHoMptT?&7Un~R9EBG(Q8{7rb-YT+6i6W$KLak>+dTm z4@s{Kvc<6Giljq^i3Fm~8ta?+GL#LiR>=_Wx)2$?G&09p>+l5=_4!Y|CHmT$N%uF?uUkO-pVNvmcz|-KdJVpSeWWuR{!(zyE!Srx{e!_-<~aJ zNsKGBcb3EOawB#}$=D`cQ0`mzqBUO2*_}JYX zzusseNS5UUL|x_1tKH7I2p6%aTU%dh6M1W8ZlinqoM`qiPZZi6SBMIN!hOZcgsj5 z#_wIQCa5i$uZeT`ddYPEF#ovb)J@tN)+nVy>>`=H&PEA#EhunKqTYr{_p^pQaw<3viQEJhppy)#k?!C`|*_NVwl7| zjLdKEWb%YtO>M8j#XOaZrQW%;hiJ%6ng-aqKi4QXk;{t;r=+`% zx&2YqjUDyS;=Y_A%vfI;b8PuXMb&kvln4GVS;a~j2!q-L^%JRNZ!;fv{aTH<3lc%J z-^-rw(VO;X+|7xl6N7mcI2E^?_hM`gEk8D=iedQA+6@RT0)9bA$ml!(J&LU(4qFpc z4yqRY$(jK>fP}5?a9C75QRH$FXAv+NEFTED+9!Dsp)df~FfI3=TqAS_5=m{y*0j4i z%EJW);~(k0;qMMi9+0M`r@igLwryBJBP|*Ci0e)N7NfhnA1mzPN>!~NHyk#1ltAAj z{*{!QdBubx-0fa(!n=d$uaQMRB1OJ=Jc|A5u{c%@=BXt>j&^zh(uzl6VIN0X zm_oHG&Punji@ir=OvU(6HWnD&v~aOg`>kVQSt&?e_orF#eOc}ySqDg1zBgVJP`V|quMjPOB;NwO z=3ejm`kNnYrSkBiqtF_c1(Ru>>x99==@mZ}W@H#5wOmOWC;{Y-ukL0IuHc8*@v9#N z7<4~f{e}qz71L4HLD`q8;n0 z6nyxIhvRL0u-ZaZ3rvL9%*7*vM;LoPCG}x*F}fOKNA5G|umux4Uv(4VWDv09#9%Cs zhsz~d$aZ8WLT6S=Eu<{pIhU|@N4`UJ?Z&7Rrp*%6|B~WOW=r%K`o2Nz0ls-o%mnes z)sK;H&YqmddGybh8!rAK#rf_uTuVA`2a|9!VPyLb4$;0oMx!-l-7~Mv-hA1tk z^J0=PQL>dvT8&1oKNfl+tZ6n0Pmd1xj;&624&ADDzb|UBR`o;(Ij@n0(_b&%a28P8 zbhA=>6ZtYOzptMythyUnjhW@{a1Qw-TpFyfQxeq|`% z`7-&YmJcJf)F-P3<_Q^D8`1R0@A3Iylm~}V;%utTk>yu2X#G;s*A2@sw^f$_F{iN= z%^v8mWAHCL+mJR!LV2&OirebT?f@y+8_-^Wj8U5_fo6hJa0n}f$KjCo+78%r4FTJ- z*s!euFs6_$ZhP5;APXCh&X7dUXyZA%DFQ&B7EIowE>bePc7gw7n6zHd&Uy8#14B2c`|CDo`gj7QRh)*t$C0QgG|}VuV^buE z5)~Y*!b+4*tMN|vfMQm`Knwh&SBW$cZ9*e&6$G5TGBp zPJJl|0QV^fXdSwIN(&Ak^$ZQ65I!7~;AHrcvw&1x8X|qTn!X^-&z=F>ML&nl`8u~> zfE-_m^dUr&lygir%Kk<2!D0|(Zis361X4Ge&kW^^UYWH&(htNNSoh}yV;M^pj zz&MZJai>QTw-&w8DLyP=Qwl#b$s3ICcrSc)y5zT3JZlWcwK_xMYu(I+4-){f{x>9P z=xoJs@W}FaNc;Pti`HS~*fQo9flg^# z+q{7zN`X6GEC)nf}~UR z2T-B=c}Zcybb$HjZ?{q`wn~EsycTMP4~2K*x7(IA8_w15*5k@01JXX$VkdQIaN@=B z78z0zQ8e^|%n!hwoQ?;78u_j(H{OkOoy{o-2T$I`Td&U5FEbG)pfMpGI!jYj3`VXU zY2G;pz|vXVJI+d-PawvhC7UgB^NAWp__~m4@vEKdD|RrWi8yE8^QpCevc7y@3N$XQ z7DDI`--td8y}t843|pcK^wy9X6eB_4O)2+rZrIbf9tqk4;0$RP+KhCMoOx$HYIGc( zTTsoURQC%I>99~e{xq!~&GjN-I;w{1vIC5C1O+KLK(3El*xg^m#0`vr8QHz;kO+W~ z=P2`%Y0&8}2UtY`Z^cI@{&^rH@xIY}zEMayBi2>;MBVXDQdpl#0dCS72*{~or+Twl zEL$02XxuJ&~+ zo&*ki#Y#{vDpaSr%^g$z);4&cTe{3R{R+sjp-(mqSm}{2q1D^CsVnpE7A+N@W;&>*+GlTUBSx)kqZTOu?H9CuC)1B75it z><>*;QaqOX+vE9u&DJ)gdS*KOhBuB6wsEFX=L*%v`(6UftxVt;#^y(bu81-X|3Xo%v`Ps;ORDvqfNSj42JV#h4@olhMJ#2A=KT!OfdS8}gWX>40Uii1gGl|KWF@mu6h4_5ii%idsN2%>y3u}5 za1%FobNA~{B>6#O>I{gMNXY`hGO{!hUDCfk*E|J{j$19euZ&O_2y)OrPrchL?(mP{ zHf?V=0tSflZ`w&r39PdGTT&z9EOyd34352-q?q%|RGt9kic#bHyZF;)k5uUhGolAx zNzVamQqrr#Oc6BF`ekzo)Sv|S{jSLua-{A5sIrlp(7OEJD7+S@2)?#+L8_J8gP&};%P z{`(vJzU1Gp@m~Y+J0bdaH2!O5{a>3@-U^X;fXrGtEJm*IpXvXfQO>fw$*s2TdQkoD zzrG}LX((ZVWmT@^5c|LX&jfNi`S&6QrGFp9Uvc{12l4kJ`M>-iycNp7W{v!It}xU4 zo|9XE>2ZF@c=w6yNa}z&DN5^>}mY=bPjID&W`A z^7d8#!y?^X%S`kiN|oxE05*7}1(iPncY$^#0Gn?zi6iuq0~JEydAYX>^wE4|G@#g3 zY)1O^=L7oM*C@(=dIHGMnFK}cRWc`$%0xB+%04uz$g&cigQ6(`cD_cJDMi;)y-`4B zQ-8KX7m(Zma(3bic7TXM14{qvfEqPGYfpFO?m*tKmfUwhbTL6D@Jok8pk6BKX3BlP z*b>mu`-LZ5*Kvv#SuO2Z0w0uSK&d1BO}7J@*bK41y^#M3)+k^nYsnpg}Bq3_6~Fh z{6JAGnpUq-r$(d*oVky2JWUQBc*o#SHOK?obug zVCCu6O(Q|foQ9H`9rlZW8{pSo$d@8JR06pw(Cl{VZ-*^uOaEGE@HC{kl^(f4FCwx) z%4dqQ z&KyvjS%lELXhxYDsRTYp(*NA^-(T;s_r4D!Aas{JwOg5dkAZIm+}q*qXYVR=AYOMP zEpDd^{^wEreW@e5H#m}F8t_}J0Jl08Og(5#3tQWm@aFK{NZ!5^I4duic51p23$I%U zbj;FJgmN!w48q@W8&>QgX%7?radSe^ZRVu(x>PF$YiZpWp@Cy!9?+7<@u*9y7cq;c zBcJ%v`Y?Ov6oTI1A(JNQXy&RH5_{bDvG7&Mw-CNl#DQa0VNTxV76!YPjSRWqZe1zs zQztuh4Qy8JFtwI?fwPc7(>iIE&eB-2=qD4(;}+wYHZsW}PY)?(28(1rF5_VyMiM+!gli zf)?UK&uwmviU$U)vsH6CnN`+igI!zN8HwfTCe$-O&tFZXWinnpFB>=R%nPj&`w-_thK{ zCq=F@X4G!1oZbYX8RW4TZYOh2Tgd?wT+lonz&t(%@q0T^H@L=nyTq&e{jF=#b2@jE zhM>Hrz>nh=EA;T{WziGs%8T*YIfK4!yHEMHvn`%RbxAYQS7ht1xfxoai4^57Lf46` zw%n6n_U-Zzg|^jkTkMFgA?$dY-dMKt`MIywZ>E^6trZFvv`tcNG{RoBcu+S?vR=b^ z_4ZXq!(+lV2275G1{QkPUMS3LJzGR0K80*d#1)@VS{eC%8i&pv@KsF2*u=3~U5B#2 z<%b2#G#7M0^knh}h1dLxE(R2}^08^JsVN=Mn@!edU>*{MaXQwX^Lm+r;rv#qJ->#8 z%i_*I#W}`8Cu~eea!p@N6c4t2Zt@wZ_Vpiv?XZTL;D7<~0@&-P4dc~RO?kqr=c1xZv?4W29{peT;it6B)f5pJ+!MOmxmwsI z`D@rZ@X=?ch*-hvk!~w#c*DKwY4!=n^9x}&>R6{!mr;jYuawvV-FQV80y?@X50QZj z+8Pg=oy?22oUQ17*?jCE56_U<@~5!QEgLs<0(7-Nz7gj&_N&X=WPJr=qu1DsvNT$v zP@fti`?;GrBsi zgbo(ZQc*D8r6_YGQVr1=sZDGsw&lH0ol&a@k$<~T#*B-b&A6MCjLxjn_`>_+Vczn# zznv$U-K0lU;y1lATL{R&blZn;pbOtFZTt zODON%>A_r0&RBdjUD4~WJBR&NN<_ZLJl1CV;9Kb|0YmPFoIMNXRqwW2fj-~#Wvh>S z1CH2t+Ohbcz<^qs$p}Qj5z)u9DtO*p6JHP1AZsl)>zC_S_`vejBv!obT)EwB2uzch z<2<*xyopAfDvy)4oBa zIuGHRcJ%rbwqGVT4pYqMZsX+-P_6K=-p!Sd_USjU>Lf{ftOfWZa}Hcj6w(z{<=kE_ zG0G59-V&3(SU(skpVcqZa?6Q+kd2y%++78b`)-Rb0nLy-FPbdDL&iA(4H^QbYn;b^ z7rn5bUT7ckShIYSzLaaW1%TX-r%B`2EPWE(1m{JS8MgRCay4kL>y)Y$g^}5dpoFLx zA>vwnEhDKLkiE9)L8$<87e|P{Ooe_z$wyz?V+q)_yxR;^U+%D6v0IR4%vs5?Gj;_r zC%_M}37K|m>>$3NYI+r2j_Y0%4>yN?9OG3JgOIO5nBAj-ObRTAdpz;$8B;?B1Q?6O z_X40>I7j@>@IN-H@i=#bL@weMqReUtSDbHbyq%ZgwDDXOqZchVkYt0#Rzn( zsHhsS#yW-3hHFyKLAiC;eT6X_^K3W=6H5j9WhcJ+VBXR(5N~=0H4Cx3S@P04mF#h8 zWe?~0YFv%Z8`Gp~w_#oa>&aQGXqU*JpX41N-EC?(!c9U%9n?a+RNwgb$^?0IB9u*?&)G@rVfo6`kj0KP^HR>!Q1-9 zR4P|gkMeL)o`klWDqFKKVc;bO*GqeeZbi%o<{FkaA2Fc+n}Y zLEPu>dFv7>Wp~$)YwPmNipM;*Sc}v2w|QV$9gH#8xf&UMQ^jscWrJ^p#HnR^VPVo1 z7^aarCTEa6N4Pt5&s^EgB!7WrLiA$&Gv7xRAay-VQ6fzIACqBU;NrGswQG!Xc zl3(bab_vU$xGTLiiJE`j3JkooaQ2Jsjd;YfnAC7Ka2^>Ey@i#?RGCiozCdAGXJ==yf5&|O#P=C zM6@K&tlr-z(x$uh>%!9L;7|Xa_H)q)x~v^4Z5rzXrf4Cqo^k$ln<<+IugIg{;%&Kx zHI&efCi*a1sG(%jb2$=UT#EOS_cvV=7%eX?)1Wnx zO$4k-R6#K0yEJaIBqf!^T4WD8>KKIH$ujGdR%Wh#EB{79Oq{h_RbMSmqDB7QFqb>r z&;QNOw26}iA4>%4gsz3-Pz9!#=d=dw?HjrWU(#H<`;~f}rqC8y@9dwNxA9V_p;Mbx zvxbcF{5`K3czR!kT-CP9dhm zxXUCr3&$ZnPt8CSnAPhSjTX|Jq{Zzb?hU+Fx-ILRAJSU;;~*+xB_KeuhGIW(z|SID zZFD$3Ik1pPRq`esbPH9&?y(EHM}|ou*1UfKv;5#uQpN$^d_*x`HlZ%RWJ{Mlg5g$H zN=9Ddp*%CoBYnj)$U66HnZi`N{OYF`nBt$FZc@TJqf1f=Xzrd&aLru3ILdx!tCn^QQPdf8;EcOO}L|4SOv<1*_Q@fSkV&KwpQO&s6vrz|z4q3g&(*oTQ zLj$8wUjW<^)e)Q)VkmCqC{g~5=UZ9`Sx)jJN(&>>g;o6^7~y#`u_6AYHWZSTP4|+6 z#ZcmHliZw_Kfgx{CC}L1Ays)EtLF=+mLC*MmTa0fxeB!uc-34zJQI6Vp3b8aPb-k= znN%5wpTd32UB_Uz#R92rNr{D%wmEQGn6llOOUfA!=6bW9m$>RnN$RRn&FEY*2HaF? z44==zT&9Vq)UgSnDhx>}23^5dl5G-%m0fSpv`6Ola|Tk3RBj|)bxYT4LzoUEBxDZn z=<<4uFO^uD_Mecj4y{}e26~=}Mq+*a<-VR-n?d@x8+T|BpEXgvAzojuT))hAs372b zE&8e!bB<_E;HbapTZRKE2O%{t^%%kfT_FN!AgZ4pwM(v^Oc@bsDj(mk@3*Mmjb5#! zN$T0!3~;;Csq{=y&kn}Kxz9zn%ff=;B-c;&4D?gkUOiLwbBXjTtAFdHFH39G7yRzp zhG|6el#4WjXN>Sj-K%WotLOAdOG0r!zW%$GtjDGk?+XXqki7+OA#Ksn7vm%DDZH$u zsqzje?IC2Q!12d4iy0cLHX5;&vKfUVd`eY@1n(`GU^V6=bo%VHLPB#Tr9mZH>e`Z$ zw&uun+K;E?r5Qu#%JVMFMP&$Ho)*tX&1zOo{ zc!8ywJQ3pjQ?OTJdv7QR5y7KsrIHTZMAcLQ{!Lj=a%^H9mL^i3FeuGe=g(D~xTXwj z3a?f@;tr_H+~z5N9(|-7rg9~6n}-J4*x7KJ)I5IZzilqGqb0LPZPc?NGF&js^DFQ#-%G1-|8W@qKbblYjcU#H*o}XJh?A#ivG336LR)7zE zEl2q#rjR)G(aWLOgxXZED9pw6`_r!bpZ#Uk?S)45&vLQ&Sl)U2*112@CR|oel2sJ2 zc=b$2Y9_MKO1;9Q*YKpqa`~0zy2T2QqeLORL+}YvmBokf^&+zm8u%w^InZtQ+Y&ZD z%gy@bwHC)_AHF06r{{fn>0PmVlyffJ2QB-Gm4ymY6mpl@Q*Xi=iKnIDYtpS#tiPCy%5(7wl6)pTztg;Gu8O!fim6v|uckqi>a;XM?0 zw5a(vrR3|UKlz6-P$d!dj$BmRIKKpahXX~iVd^)lCr_r(3`}0JucqCQk~|m-@F!r@ zmLQSJskxt@{UG;zV#M_jl>++O{(2dsK}K@I7v+9kL&F5Ip6<_t)>J$Fk+H2IBTxsX z$62g0d{2{N9eD8OqupeQ?))NReQ$a?s$k0eLT4?&B(gscQ@_4#_Vc{{h}P50SE#C^ zPGLhS9SWMJBdPVg5%P*>%CZB2?z$SQj%&!=O4Q&4*BLIBBeVrGNvG4QC!@`$tefEJ z%l*XXe)@*;u5v~fFpBsUu;C6k->^x=-PVMCIQQ$;J7hwxWuC2B<28W7;h{XOo~r@T z(@U5GP8s8+rivG!^X^V0n?g2U`)09uzxp+DQsDviSo#- zT~^dt!jSxjlxCV`7VTd)&PU;iiMFl;x>i~~7vq9`6Cqi>_&O*u9KFRfn*v zG;{|`zeUq%v8;d3PG()d{>9AsGna&qT==eoY{P(}!V!cU^HZc%WDP}NiTRg`i^_@) zL3a_4`&yde^bg>K!l5UBWj9nxyxwVPG$Te4>PC`HxX_4S%3U!rF@%n3q93`m#`Br4 z7kpwXpglx0T1}{7ZqfgE0qmw@^0)q8kB)bctuW!Fl)Nf{r0~7Y2=rleZFK|Nt-SXN z(qUB)emtWiiPm|va34`Y-RXFj#_?Gw*Dv!LeJqKEB3mcoHs&km(WR^S5^lJVcooN{ z$5@3@Bvmk%9M8`eF$71tqLMNE)!@+5C0`4ij0j;oD4mty%CMbv4LtE%O;>!JJXCO| zpRp<2@^L7R4i~|5iBDhlWzbd2mb-Ov)TcCDI#PRc$<4>^H%@=vDrH07_zjdj znk05~&4Sq|v~2df%=mJj#lU~927xP@a7tELWK$+bTh#l$5DKJR4cQqPS^7fAfnkxu z5SDV62pda9bqk#CIOas;=zBMEUGM=RPCn>zdPd~?Fx8}Fcjj@at9hxlNUm48Qi>VQ ztj|-9Jynh;8gux__dc__Le}%|0r;oYUK1)BmW^i}+9~%j1K&lj>~3TwX4Z2$gL}xE z6?H*j>dvxvR2l0TG5j3|e?tJPcX%wvd)4guI$sSXFjGsSnW=L_&-Rzy`kOXixXFk@ z`2|QeF~J)Y)u905UJ}wgxCqFfXPk!W+?)hYX6^EIYaBBke`E?iJzJFwrJr~(4P1hw zr$&LVtrc)Wu1+k-RJ}{a*IR#m7i_>tPo!?d2UoVrTs3~Y_j=rQ!ZbWo$ zLEzhL%6KQ?YV<_0dKdzpsar1$ailr23fQY%JFz}YiSGL!{Y2_g6ygN{S`d9E)((+IGR+l z&U86gIe+=PpZM2TpkhPATiVZh!hnpZ{KQHbT|mmdbqf!)0PBEZv}Y->PoDw~LTe}P zfPkB zS4o+R7fp3Ev_wWD@6}=^TEih^M79Fh*A5f7D|1N7UmzigvlDDmo}xz*{*$naEmNf3 zB7z6@=%1+%B5){*aaQXRWce$&%?jcyP^7ctW^|0Bh0fmf-!@z2eP{|CV(agH6lPv} zPC`i0ZRW=a&S0(ogYr=P#LFD`>!^BXz47l-f;wNglQma z^$?o`6xE3dF^s684ZyWsELDw=#LH(CO?~uyQ9hAZsFoaH!NcBEY(Lqb(@-8v!`gV|Pv~G8-tpEdx0pg6jifIjDdF%Ul)@S?Y30opA~{p; ze%{T{ViX$*BZbB=RDK5A6(HinffG_6j~YX*`Dq`hZHR@lXHUrZZOVd!gYgc)aQS9X zb$Q*qwF&T8Y`QZ|!dB~%40*Fye-t6W`>ofIwXm=-6R`cCMS=T){w503o;}}FBG3de zLOuNOT8Laq(p=wtPm)qjT5k5(vnz<09S*#FqMuL@`eMhT5Rz))&l7kJg**6+7a2y$?4eOSlZ5^7$>9F}{-sj7L9Ctwix_sKLAB4b?l%}B83upD zIe!JsR^LXrXI)3j(3`v97mXB;l~P||Q(C>0l|68)J(+jA*u<09R7FJKD?Z~SP(xOH zu$_)3V%0iDV510uK4iV;zG7Ok*y6?k#UE2fNZDXUGsf-5eCfdN z`(jGU+6-dT3Sh{ko|j9MFt=_F7Z4k) zyS~sStMlYZ#jvEu1r7-BcTzh7H`B9BY{o`z!)DZLg4E%jeUd+J)%pHQBx2kZ=xZpI z@%sJwkVqaGz>N6JaR1wT~CT&d#SCwKuVY9(be6(e={jC%2fETJ@)sT)zo-h>E?NcZ!A=wW7wjq zHS;=$BKNQVS^vnN2(X@GWhqJc^`QRGZT|C9R>}=P`SdA%^1rU45*78c{3lxfF-8Bq z;@@ZW#{~O#mi#BB`D>B<|GGZHbRa&xy}jLR-S7V2RgDbKtYM!&-*>p~Qu^54BKOCx z_V;p4$^(nLgicQEe=p+{Ox%AjLXOlzdj6BBu44Khid0^Cg_EqWEz1x;Ot$fNDKnUc~{d5^mD z_1viFXkv51|6;p|(xTnTQo{>u13|`no#^Gumqn%tF71FcWwhV`5*lkDWIP5^v`KIV zi5U=BmJj#*va502+5`no1)Fa5Bx}X2%C-%!*yTcg#F_FGwl{NxB%~O)j)2E{LnGB zq`Yv@>7HS4xWp^Ag(ltwaHT&ECB@qqWP!zJGh2ywaB;Y1bg(+W&KdF-&+PB;T;u^r zhVX%qa^%yoxc@-FKFeW!wCiN7+QAa3rnlant>UvB&r`Yvmaw0&K?A^3L0Y<)&w6?i zkjfSV4&M_o9nsO#cO2rE0qDNJEMMemFSLo~FXZL#xNd-sdM9i121PFNZUvdbzJ0UG z&d#nU!(LYAoCaBX;qwXr${EMe(9ul;U$(9H_zJruOvu7vL_x3*UDhX3`1Jd&3osK9 z9ia5A0V1g_aBgrBvL^sqv=3O?ng2`&H@(0%Lf&Ykjx2Sh&<>v`BK7_j{6_7;jKu)D zB;a|vo|U=@L{`y#G29(Up8zGwrlJIJ;?5*EW(f*97Do<{C>98wmOuZW+gOnicvz0T zq2!}jf?pWOHEUps z!LX4Aq>T6ZGc!@Mowq;>!N%O&T%*)P{yO!9=RX^x_bJhn<4L2XiyKbisnils{-^gh zZ-Z~DMCcvKtU0|HKxxCILZ;`=_bV0DpU83w^gQi3x*BpO^C^1d{^tfhDBeU<1!qt3 zA-kSG4sJN5rpo-LiKZbKSy*@wKUY_^0gdA^YrFk_KK!4Id$J8hj6<@9)1c8yx0c`S zYK5DN%j#%-EGi7eu0c0N<%Qc%HtwIMq0g*0 zdHx(GWKt%HvW%vBnAQn&ZRY{Rp!afJ46JpV)q$H;mKrz1+#j8R->a)g@Q(f3aNEQH zax!d9TNcidJ2Dm=8%B>Sby?LFE|1#0Cc*M7i;&M{sWFs_a~!9PBQ9k&l zEt+(;hT9p9<0v8 zXpy_J#T$E-jfDwy9l_4OU45f-IZ8FRxcq!=YS54|DY-EN;AY7(%8dp0iz_)bTp%Ye?&HGiT8xud=+PcG+H5X#LA$*B<%}-J9z6T0oBkZt;Hl7Mut*dTHI%2Qi`V-u_z2kbJa~? zI8y=2{c-eH5!w4duzfpdxB3=J4NDT&MwXkz!h81V>vtz1hp#O6H{7D892p;ElX<8uU? z&ujWNbd|wbBZjVBG9Vc>X3x$nm$P_bBfL$R%YR*yWrf+zLUAZHGnrCYlPOm;-9rc2 zpiG35#%Wv}5mD^Y&&*Z^m0w+9XbbG3%=~~)ZHSmwlQkGwN$#k!u%~~jk+#41c~z4m zJPkuMI-2%c*-Um3-K(EoXCpP@6ZC-*LDb?W@smo?KwBDcx}UVgc}z&7&wT})q><9w6n z-pzmv{Ds3QGGMhiVD$P*L%V7MLwG4;sCVGosZu|V1t#BxGf;qirBh(RHh(qxO}Zl zuJ!S+y{jhQi%S(CAk9u12PSlobZ&Kxd@YcSuwv~zKDjVEFLO13+rax7BZBlNtjL;FxloxoJANuLi&vqKH+eaAvGszt-dee-L&l0Z6y!0&Ox81>s6cX*t0Y3 z^@@`XGZ(}!6VB2jQAz{zO`F5figQ&eDwPrJ+IsT|Y~AjR$f#<=k2CXPd|U77SsPyT zrEHB_E>)zGtz&PSD9>muI9{iCyj>Wa(Bf@Dqq*n6-$zfhqo@_rmv4Jgqoic6eqv;8 zxyKoyS45Sbu_Li?Z28OAN2q#lUZoaCAc2OM<7JoD@+SxVxTl+sMD!88Pk-DaMtwSE zy4mS0zuIEGGIUY{sH0+#F~k$?`IEa73z(L|R}RE9T}Mr<*7_3s_6qj53c$92bM2x! zLLpq4YObZwlUAs2aMtf~{!y{&0G`O-<#_io&Ws+M8o8N)rt_pWpyn%tg3)mU0?A zWrFd_bJQxd~9ufD$AW@}^LLw#6ds`K`dQ`|wK zw6CD4Mw|9}&jBml(62FJ&}y>tNAm9~?LS&lSS(K=NUpv@fVP!sQvk=W1D<*u)DK>~ ziU(@^-R&NE4BeaboKo|i##2G*&Z6<&gm(?-hxc#>J60S%U$aS;M)CZFFTg&P^Mab# z1(n_t5ZTY4#k3cFtHke1NL`hC!aU>+qQ8ie+)&@z@w3kHDiEJ`~xx zz3FqX;N8HcTWik-UN@g@B*z|=Eo)Jg>}fF4t1=xIq%VEoDDN5_yXS34^JIJ~qg{Aj zz{LTPnm4@k(7We`W{0tZqxV_}$Ch!@NE!NQ8a45FI^gj;M<-4$tIZP+-V(C~{)&Yi z&j4{W(y@NL*>ueD@Cdnj{>xEZe;y^f7oVJA)Q^-nJFhKd`t6&|7dv75?+j_}L|@)I zej;qXbe>{)Va@N^O3e{kPZa}X!vUJcY==MOS+SO3EjJZ%zE~BtAnb-76IPd%awMjn zQIAg}IkJq*DNcGv3zvyGJB%v29Da}}dl`c69%wC0JKMg;f7Bdn{&?kXO?xW$M1hLX z^nNAr?tFky_tBM<)sl@l?-%|Y3WKJ|i1h*eSneRC~&1;5DcG-VM*JQ z6!%t^PxC%GPBYzb6FldvA(F;|(fmF(n3HDB%9D+|^lFogO-0C9`DaRBY-5v#Eq6+n{Ime}G>(@>Wxv~*Y@yNVdkY}XsD>KY1 z`Oxx0_!c`b!xP_FGC!z$o<-(@~<0>;w^Juo#LB-PLGwuQbqS&zsGT zQAA!K615ZB7YRGnoL=uGzr-aOK9>42R1;fK#Mzv9DX8MfW;+u{Nh}IcNE~T~jpYb? zh8OXe;@;?UWGV4Ob61V~Mlx$oG|UgxbS)Ql<$Zqe#)lMui92~Vn95zr-4(W9Nv++e zda68~s=FgB-{3tK5+JhRnQe@=l!hMa;dG}eJ=N_()8zcE83`R`i`zqOGv~jOzEj$b z#&@c8-Y&~}855+$dPC}u16?8uKJe^)(+2d)CDPW``QFIy0iYV*2MoqufJmR0%sf}C zEFaUM)#W`Q#v1OP^75IqbkLalQeM&{aO_TRjVLMMsmY^@PKJ;gb)8l^2jd~(Y02p? zN=s-c2JhmtB;~&P$yjxdbT%;fagwX1nb;sT(S_L6fCVNJ2~oPU!Co+zDbY6v zkLZJiZ}|4w;|<$f zk*~O4Z1=~PAuCmmB1*fhNjP>j{!3)=mZ%TiJC*{yeo3?^uP&fQrn8 zs#j&*3H5VXpdsdc@|01fHKBIDf+S2sxbl4XrLf3~!J0_j41d9a?6{Ql$N z57hIwb9@=H%aRd(xa8S^z`17kA3vB6CM?;N#!K{daG4sA7gMNJhxxo1&c8Ouj?XfM z_j=Jtft{F$(OlqwrYDrRbiw*!14?y1P}d5hy)75=QDvmJytsvrxw%=v`E6{G?pG~W zTgJA&%RlmlY9X{&972-3223TH1n)dodLIFURcd_iu-Wq0Ce-$dG$A=5F}F+bQXH3E ziL*duLMR_rP7yD@NJYla1-6(~b3Nm$m{GA(sUs#5Vjd%XtT_3s!E$6)XnJ==S$Lbi z$N2gF%jU1iNn-As(mv=nplRDU)5>aosW>w<&$@SsgK`ZG&ZVD6pL@4QSvSddxe9ry zrpq1LB>1plfkhkOb zjtZ5^b|qekm#lo{c(oz_#@ZNEP@30(=VqhnT=~I=Diuz8O+sIX;pzaTABy$i_7+cc zZ5Cc`jUHP)=(`Z>H9diKQm{EL>*D(b_f0NQq+t7;WhptQF6nQqW!cbckEAxHX?uJK zrIl4=kBF>!Oi_xFyLlBn*%+&mAUkQF_47#7P0lMzIQ#lrnXsI}@ikX3Xh1F+RgWLgnU-RdE^qs(W+(QMJ@LG~pL zw=)UK==bMp^jA2TCcv*7eO4}6q2rcZ>IRDRsPoFcj7YXMkMx=@qJZ}0eFL(ct42sO zCV%U5D*DQG=O%oY-`n%0f8SzxU68!DfVlC_`lnM*?f@N=Lc7Ik07gjomFWi$>6XQO zaW5KjW4dXnCaR}H<=vHDwrS{VdecE+e5hFxT|yx)RMqiaSdT3OQA?*nc%M$lE+#AE zCViyL6J#6nl1KmRD3EUt+@x84srHYlE}Nyq-o2Sh$y>xL*rCCXnHu4 zU<{Q@BD_yYZDXCkDpmKtwwN`W@7r~~K+~ck{z*AdQoMv`T6T{6hCK-z#c}qG3ilHY z!Ak3yEQ7~=W2A{nBJ@o^nUUUow>BG+#(0ya9&-l@-O$WUV!fZ^&OOCGMD|tXOgHh8 zJ*5!A%QR%nQn0bo{);LpTp{eWlFv0}$Z=QGhtJzvg>gt@=aRn6sn479_)KpaPIgbl zTOgT;cqm^|JpsA_^}g+bjPY)W;W&`tEw6c>pyL55fX`<9aZ7V^5l#mMGPK_NQ{wK( z+oHHk2QD8upYyUAsI9aXzSAWDSQui@cR4b?6uD6upZwqkdVb!q_%q0XArlJnf8Fk@ zrpUgVq6&aTXR>7pAd1RW zDtPC{jB*hET#Cy2j#GGQ`{t73&`7CK<(7m5hkAF!Ze5g~yxTY=tbLb~K$QJjo;tEz zPPVPo!7~AI;{)NvOh~=gw(gGpa7gvQfNa-Y+o&C(7Fe97@|HwhG{J062m{B%WUKe3 zt5k}4@6BMPP8R6P1Z3CxNnFFQEezbb>NqpDYEpRW#E8Z-iX($#AWfOu9VH z0_&2Q7_~wX-<(zI2T?_xW9y4JiU8?Y2u#Ly!aW1c_UdMWM&aF&L6Dyinwd37h$tA) znj@QdT`5&m8CP*`pa%b*3cR^oAwcAP8yPYOKc7Vw9Bf#6o&2?S-eXdW$G0aI_Yf<} zw2!kFcT?DrQeruo@PQEIhQ^&{d&Ro(&Bfg5v_7XE5>KBVGp~RSB|hI^;UOXROo7j+ zkH2>1y&$EUU(3?=x@MP{#i(>sTdx{7DEBIBNi-;u-DDjCz6JYMR4&J;y?>OhM(P?j z|H`TlKETObEl0}>^8io*h>Sef#r@6emr^8#eevm=%{0)cBX2^BahwoGJ{1}r3DOV;`)*$ldn9u4&9uIpsZ&!KE830oe^Rj`a)`plpliI2<8&L_8XGuD!@?3!h*&tMT3<&kBg zx74Z|fRE&j?kGgS;Y%JP=#`CelyetJ@>k)%MM)?<5xpxMde!WNMTv=t&+ACxiY-qF z(#;UYzFeBYxSq~$VnE_bme$uvD|B5WL`HS@*;RE#&`-!lMV^{I%zREMdrfxvJS9t? z%YBf1oa3fbZV?mLb(T~LXpZHO+E31>;&^Vl@J-=V;R>eOHf40U+rC=fJz3Os8*SCRG6GcQF6tI`2T00Y^XAR0-WeXdhaiusRpoonGGC=_H z%%%Y@hsL1;xf+H*C76-`wVf0}11GX0Ls1G&-DS+@`vxNsbO-P{!})A0;-@l z%n6@spwKJftY$he%IFlU`c2ZHPkc3#DY1yUS7GQZ>5wFD0cIrp1kxLPj`Ip0z}C$3 zb}mkrc!33Rf|(fk>Q9Ju6fzgXy9#*#K*rB;;#<$Fk`PiA$7LXVUzbl(m};=hw+o@M z>1`5D6RV4Y5Q69@wZ40kpqfpyq=`1ommOCq9Rr^ap+)840Sp00aD+kH@-A=n?Ixl3 z-$7ra^`#hq@@%I-ywkb8bv^Fa+22YvXxW!9n>kWU>o3x+Yf)tCpix+GPf;L;(s6+o zkY}ic^HnJ6!C=b29BsBhC6(krrLhbMSUUhFXMvCv)CWg^0`D42_&&Jj!?@myXAy{@80mkCT_SYjKzC?WplY?Npm|3XoSe+<>Nb3)&O5;DR8a|d_aVoP}@)7 zJ-I%_3=GCM>jSPln!ZXn8z|sp6Mj$xbf+VPoTNhZuq|*xUo6)B8kM7x6Uhr7?wxIm zo5S>1sp)z3;krlwftcBn{$lehWXtb`vY(28jNlKIyn}nhstF zkkbYdGzN4Gtj7T@bSLSwf~vHIMYcIp7f!?oyc&`cGBnw!o}?zDrt*MPIXxi+ddTEi zgiGA<88%+_*lOd)7NmG%m-Kc4!~iq(n4X;NIPs7jc!csp;D2^tp4PdJRL?aj9OQj6 z4+asjGb+ z07@+I8>zN2&J4E(pS28dmIiRx6@}Uiz*K;4J^8Laem|w#YyEd+r4a7n3T@;T0u5-v zcS19!_xQx1Lo~@yacTgpP`$)mj{rN^D^bkfWCEPd74AzCT7Chc8&ugywTIM7aa}@w zKru4t5GEtj!!`jl0a(lZ9v2|ry-}@H745w+hAtz1&9o#D0#$XE1?+Bdyie=KeMl}t z(7oshr+^riaAyBXrv1B10L1vKt(9sVDS~oaUY&rt)6Q1!Tc{#1u$O=_dgSh0vlaebL2pX&Qf4;2-{S9); zoz6g8Tg?g4CXH6qON+bp{Ro$;WyFI;->(CCiJxa#++R5?q>BUvEd`W;Tvm)l`TP&@ zzxHI@%l1l7EK<@w-<5)0 zrxK!>50i&JFn+_PS3RmMZww&N$8&(tRRr|4?0=g!6sw;P`$@S~x9x|Mky8U>!QcP)^iR<-0C~iVuhJR6YbH*IezgN!`FXHx zZ}s0xBtSv_z#vWO-ys6-++&Kv-7 zNdmlKvg!+@f30kPuW>&$z?H`dI>G-08-Ly47k5NN=oxYygHCVD@BeJDfh+%eO#gdK zf2|$=FK5$7Ru5ZBO3DbG@R|S2s53t0K?U!L>AKfJfU7K6g8V9FD!97_E4uKxAo zxF1TqK9CXR_us`p9k&?xvv~b?G0?^>21`9Hb^l!q*l>%1SOoOHi$OkaG1ys{nf&W- z|2?t-*UJ?USo=th-G^_Tn8~9TbT+vR@y>jL6&+^yx7q`KbC(qt~^ZPn* z`XTJt!Il3#rmL_2_n7|JKmR|RO|{MhkHPWO8FU-M=Z16t6(tDDfRkGLM-xHtRs!Mc z_3PJJD(=1geMZ;jU#Ckf%9$Pl5y#OiWU)Wb5*Kx^fJnR;C;kW)KHk61fIBD=-MCN3 z!_Ldw2W%xYa0!#X9JP*`wc*knAslcJ93lpR>4H8evX_7k${}yi{2K)aUJN@+YEB0@ zh*-P8Qf?<|XBH%(cwrg858@>y9$7vP^ zX#{#_TVqI|Z~p3a#x0>oCXkQb#Zv7)r!kpAB0$07a^k1rTp({m$dhyGS~as|Nh`HQ z*!^lePywzThHbIDTQRJ$1x`zoy+hlt2b83JN^1kM{W z=Xk6b85uKLQ7v)gY^1ktTuP5Xu(PqT2{A9unYDNWRSuu)x_(VHJ`3p0eK$kFQ=aa_YzF0{Gj9+%iw zY@=)B2v}V=f6OaQJiva-p6Sb6K<3%VyFO5jV=B{w%X?D{Bb@lK?=$tVZJo~5F9Y^6 zb*0_i-OYZnFpVTjzU`c=s(LK*?AawR>+veLd2G9D$~)2(y#%ONF39ri))NaaziTTZ z`fdFO4Ujri3L2veOmST&FGj)@m0vwDZgF3_f8b>K2vfY$XvvGIsV3f$d`s*TgXP#B zcxE8>y!R}NqkL?i{PKw0(9=PKZzdl8Md|d78yCYU4Ii!;7odb zM-Ds<6Y+q{g`jMD;;>pV_hg~)&~#>QZX{DNWqC0Nxm!otXY|`SV)+=~J^Bp$E4gGPe}IbH%M6WZjoq>*(dgm7JSoer8X|cd@@|3-YdAGbZkgi8E=FG zg8n}sAvL$$^bV{0`Nv!M2F$Ht6kayGDC>e;_kU3#Ev&VdBfUqcI1iY!t>rX@;`;U; zYXKOh7Dt^;+14uxz*5cAvuPanE_hEQpc!S?F*2%aS_wxLV1=u{MLItmC3hBT-+XT2 zzx&L~@#NrHPN{)nFZ@YtMIpk2LZSQ{6}E@o~`g-EP!n@+F_X2 z_t_Pv{{s@4d?yO>jCpmxqez8)uh2J@s@?75#N6~K>;vDN@AXT3Wpgp8sxi^XxY((( zp>9a_aO-|8xeK&0vW&*6ZO(fJU+<*!Pf8?PQo$)D@;c$>=mxC~tJa!no+-i#a3M{# zEck$4596S5*EA(=_lw{Kn~D_*BG_vlVYI3t#;L{(h?q>XAHaG5yf7 zz`R9`_Q=AT)~^O(fnQDIQ*(*~dH6vVmCjDk8O7-6>0RvOwW#IYiZ2PP6eCl5kIZ-A zhc9K|UocvkF{Psk3F~rxmYM@0!CLU6&>9VdeeB9gdtQE$q)x!W%Q<%!7}6S8f%E0r zdxwPV*C74J2P6z4P6Fn(p(EI~6=R=_T~Tj&a2ss$Ox_om5LWl6 zmYX$0fqSmjQI9JyK)u`3Ne$s7=g__(P>st*34bvKTwa80Cpb1!x?i?8OS)0hRgj=0 z_ozWQ_EBS8@;~`0AB(FB_h)c@5P%eLEa7i4_+!VWS~Z!c(h4ggTx2?+J@a_W0lIsL9#! zyRfperj!yUmy{i)DxYuzh~_Z^a^@4~D9j1PzWBH`ec3x6yXv=<_e4&$f>FaKurP2O zK2#d3IaXTCmP9u((aFrjZT2m}Q#fu3wTa<#>QqU`DzBTAqNjR^EMFk<`}7|Dz;Pjc zB8DX~KZEledte^f4w-0^NZRgh{R3ASm+uOdGmIG+corvICXepHkgr#C(S%cEp-DP% zve}KkeZMtFjGO<&+OryT7mme;deAem%xU8R?B9Eu&j(l4?L0^1`P0*c0OFLqeO=5# z|BKb9T2uIH1lHzyJ;jj+Ue6roawy z#qyV(5-!%m2b1!M_l`?EQw^D0S{?gM69qYXkkaQmp-hiliYHX3^)B%l*H~h!=hFL2 zjaRPh)_u0Fd90GPWH1bkLT@>T3KKgGwA+a$u5##at5L5v>_7`ht<(nQ!$nW#I^1%G z?t0#r+)8%4FlXlw9|nv@TUkE0+gT#xUqh-lHqg|XS9I!$!q&+BvLKhlY+swB$lc1Wv*hAcBb^s9v` z&bjxD=V43J=^~Dg8!MJzKB>bogluRN5(-Db;gc~QfJm&-EtNAq39ziRH1Q#9owt#~ zV*#ItxD>X!mbW_mU3%H(v1hc92TBJxn?-*3V8BABC2-bgxWpV9oy54Diz6uLkWOA4 z2I45HsvYFsgr0r*^hbIbHuWdi3u}H6$?UXjDa$wD9!L8d|7t~XR`Q{XE{a>#9bM_? zpx#WO9u-&$`YhLFJv;(!x%1KbZAFSzZD!4&t}yf`#g9D2k==tMP3nDr!h7X$2xBrP zk2FW60N)}3u*waX!W{v)xMrcJ&9;P!wbDoFe%gY%`N251w zW`o~qIggi%lsKH~VpFhH0IygCofu!)-4LMN2c*ftz?&}h!q!bRP--#$enVpP0E8*X zm&D+$|2Ru@vel=$wS*;nni1>l?dl1&vSE=jAqY>AC2wH_`-KV-X&WFPhi z68ehL-D(tS(k7UeBw<4$&9e&!^?v=L^GGnVI4lzu^YK6DIQVU*bKgSYk| zv;ZpOEXj*h5ohTUhSpjV5FcJSy?>9v9QW^LN(!NIV+qH#Bl zXrB2VR_)FuX%{GBW66YXdC^a%WtjHo?xTSVw(j08Av?#b;|edkIMo*i8qddDy+d1* z+N#eKp#hyWkk~U^v$daZY0i(ibbzw}M=Cu;cmYhOI-H*1T zcW9l$O5-=G*SIbgL9lAOHtI2k0>`B=z^t%*i;i@%Iy?yiK=1Qo4P%xjCP1GjZ5!IG z-DMb&LKZ?4nb)q?=db|6Tpimw2)R+Gvgye-AV2(hSXKCf4@zMJ#av%jiY`YqFKZXb ze(95}XYU@n4=LSlW5x1sy6g2A%kEPj*mH?Ep6!RXa$B2;c?+|d`e9Hy6PY;+)Gq%A z;gMHkyGFmr8!#TbeW;0G7xBeKL({vu3lT!bc}xxx{KGS)vs+K%0_5hY51r?G^qsUDp80dL4Dnix-8*msB>0P{?M@a0P151`$60oA0O@J|H0H-oQXq{e!4OV6YNRHzTo! zcu)A5CqcOK+t239&n>IAO=*p~F$^4MCB)~lhk0^k>)pa; z8J#>ejiUlyB4LOQ2<6n%brjY~3)Xm;U3=@A!X++JUlHGGGGbmALyD{{zQBOE=~UzW zIAx-#rf0~t07&Uh&b@LKrQ)|1@6UOeX=PI;rN0#KRNfNH+kXGz>huQpTW($)&asQY zo4nFMu!7g(K$6$!j%TK10b<|My`NyOaCswgu;ZuZZGiy&`EXsoJu33F1Z940Y4NbH zA;Qc^v&^ST{I4YHsQVN&Rsyb?H-#XS_arE}2p$5-il$3_j_j-cVrU^dhilR>y^qvY zWr8XKlCl+Xu&-hb%xhR8;Y;`&AFBMIO2q>}^w%%HE;`^B+b-j()c7P-)p3ke2U&?A z4P{1}zmC@2FTI{MF{#;=6HpUj%{AU1l>dFw=DAPgrl!hqKwSCco5j+3s*&ePc(q~_ zOh?sK)-mMbctZa3xy9{4Q{?mi7!T0(N zsc?v>Z?m&(4nA5y)VHKS-Lnrp(cI4IB<{NuH#x!5A_m*J%OmjwF1`_(++BYq9DWTT z85O7GiKrDtRf)QOSdFqr>&&XOn7@`suB|y}uzbf%ijA1px3E#jUYt<94?_-j&^^6o zG|6Okz4x^uoRBC=QHkNr-$2G}<-dT8A>QMa*v%5!$P_A;=2Qg{$-0k}*fxqul}Uzr zGAo!%OU~}=;Ai}c*|$>|WQ-9^^@+ef0L$am|K5J3^?kCpUf(}%@{8@ZL0uo(*= zYvK}+m!+PnSZBn8K15eFKyCVN-TGvimwBh2<$2DFa)Ats=A*8Hm`nLLkVW>hXy4jq z(yjxwx6^sI4ZAe2z8fA)^do-Pq=<l*gW$6#^V##1-vc#0W=!S1F1|vYll`QNF4VM_AlE zRw7`l9y#tD*=5&RMM$ z-)8i_xG`E{M6Hq&;Po8scydwz3O&2Pf{)bW8bI_X(4y3rn^y>dG)7dfd;?TFOY8hD zXce2Zd5W&PV!mnegMMRNs~fyGQ?ZcG;1O8mL$CTIp2-X9IuF~~5^!Fg_hZIl_V$p# zRWF2ylIz~!s{wn0@YNdSna59a$NX+HZ&k+6-lAHnNa7Z57%q`*@vDinWb(gNw6h+k zH`(hncYJs&Cu`i#BwJ(B_a@c(uw||n+nu>JU&}^skuq6N@D)$&72~(r6_>D?d#A=Z zWyG|E4qCaHOP(|%vAp-v1~M(Z6bu|p?&>W`HavAH0ZlKIT>Pz1#1+Y19ySv%D4Y?W zyVbhR{k=^cAf~ke>ATL&-edR`W0IiW2|^**fo3h@?pg#Ja+`*O>N`C{yf5 z*(9lwli$UCtR^OkJehn;Ynh%ogwdTO{K?Xp786Vbr_E3K#Ud__ir1+%UsgP^pNJsI zjbW`F{zmkL<*kb?yM5nPMxe90%5H4TX1Av#p80|oj*JzeN=}U_RAwqKuZ=Sily;Jg zj@U^W%CV@3DdFK(cFd_jyvcLq4ViNiZoAOSBb&n&Tja%4C5xxXYb^T*==m%2eWN~; zr8Rt(uDqVv$4k@c<`Y7U1E0;JZ+&4|#nb@M6$;S)@JDjB_AJRQeaIAPKLd&x0nAT6 zXlr66vwo8tBz-e&eSZ3~#Gacj1iobu3=NpAdb~}3XyT(jW3A1u137X@(G>c z@cd;;>dvCLcu;s=(uL*u%Y=EXqmCWDH6}|MU5jVDYbvp8w`(+>O#sJ--NRXqsA~_# z$ZkN}Cp=)Bx#pElpZ))UKPESEd+5yHENYpi8AGNI^cQZ&$5)>iBg|B%ax>>wcnOsh z*3wEHSU94SSIEMLTa3jPJPJF#C`@*5YNxgbeR5(mCT?4T)?RS=Nh5gpnB@?Qbn>zH zvYQWDO*lR+G_dH2#4!8&F?X4!ISr?mz_>rMYoT&$JJMkXyj@p-ZL!DULdFWn7?l9v zRbFjqBTh*IjN*|8s{86++;=t?Hh@kiatui1`T@?Xi2-Mf0Q{ZmfM@WOB`n^t``HJl zQ_T*GjEHE&SMEoP+NA0go6W3P^LX&W^jEoUH48K-(C}xOc6@H25VDQR(xBfCi;J^- zPt7ma>Cafv>VH{}KUp6hKqLIg#GKN5dIicV%AGkae3_xbfCJ{aa#6@?%}lA$pD?g| zvKi^b`C=zY3~1%DUrN^-hham*kn%TX34?EK_KVOy4l1?Lh_sZR@5|3zK_rY#7T@Q2 z`#$|AdwzS6Nv|TgjN_LNAA_@E?=;`+?o6T?;#954HV>O!jF%YLcs5Er{zY(jdIbx?ZGtEnUX8T*z~R0Fuve^Vj9_beCANnAG(Ywl5&S3hNw3mg``YB>QI>IJY>v9F zBl=ApyaU=wbmF*vL&Wgj?#jprNINV9Lf%tyH(rp(vFn84Sa3I&!C7w8C-SQ}qS9q; z^&}eulEw!YJ{X1w^}Fw_!h!at2;A92k+;XfMfkkD7QO5B{@_4p2om8TlJa(X`<@5y zK#ab88ILTBh)Xp&B*O|ybfWk{vq(AF_(jdYyEve{ShW-QaUx-(ktL4Ul$R*>pFY{4 zJN(wXiP(NXd^onP=Gu4lhs{Xx_?jzH@cJvofHwi7K$z!4n8~#Dgt!rITCFlw7yeZ( zx%HJEvSMA6wP$0CHoG{;S+$YAu9dgYIiyUN654#71>O^y5}pU%&tbIVL?F#0RlB*= z)|}0fpo{tq0*J?^YsH27NwezMdoSFaO$;%s~x=;9`ZQ-tJYO!!% z>>6=rjsW_I-ImFA;EaieIzu+aC1)#(MTpoWbt~Hjo z<+JP0OM*aO0^j)A&<`wraEa}s-rZr5hN=W0Hd7xfyb0F2!7Tg+h>{~di!2ZT18%_= zr4Gj23px0B5kV<%;T7H}#e#9-YfLsM8I5*nZ`j(wf>S=C`C9&YNpZ{7#pqs_9jNbD zl<@-hI5ayfdBLKGbp!9=_(9KeK%9Dkw+5_#~YjYIO2k}s3-!YH!! zpMu=3=T!*^9;&rb=KIXOv#*C!t=QMCcptRrb+=Ioni2qq#%r1MG{-oaux)F;48s3$X9xITv zz`+b9E1#!7dj=cgXtq`q9ZsaNt;MV6kWp2QXyf|caw`gfz>~30wUgEaF$tG>i;I01hJ64S_Vu49-9Ej^u;DDeZtOP;%?x-mh{lz$SK||-Cu2-Mo9`@EBxCYJ zt*UThtr0*Bl=V01t8`wm@CJ%SI3T{_;ZW$=1@(KLf17Zfe3nKXZaq-oQqdD|0s;_5Rv}nthB7n@MN5HE%lCmCMUA zA3K*m6z@6+gJ9k~qE)PG+kf@XseA_lHhF8|^t3@m4J|e%ksJePvuxID{h)I^VGY1l zZ;=~Ds@&E41CR;*X?IgJykC?85O}R-iJ1XTGzTB6>?3A;t~gA_y7_io4_M7PgEG=E z0L}a|ZBSmsf>!?*PT%c8?IH0iL|I=|iEc?s(oClLxuSCrL3g&fp5_6B1wL#9lX_gZ z_8ygl(CW#3{KKsRm8Ghr_R9W))93rG@@K0Goe91Ddpz`BEK#q5REztUz7u2j17z&2 zf8GaYN<5g$P^RKtT2e(@37-hCJsnzweZ2ZHEX?ak%VJ;7+cD)K4j>IgRlJ&#X;^I) z!wu@wX-gP!X69^I`l}E!Wx(6)sRV|2am-;ZosY*$enjw1OZ8l{d~&n+-VzrgI_}nv z@G6#XNobQLDv7J%<5*|Hu;m;kA$)Y1rpk!#wC~`LSCmeVj-P)Zl2dP$8&+a8f`X?3 z)$j$a50jbu6p?Ix+b z6GSDs!K zMn>dwFZ%j~z0`mzFje|tjkQ7ygkcY|5z?KAhwB~AO(TB3AyxksHr&L6NGnrFN}2+# zp^Y#mgiq~B5J9KKSa+JtukG6GqKnF!B5Bx?0XAbx6#KGg70vn-8Q)G~4x5lisgrZP zH*S-w&8O?Ea&r)7l>nxQM^@KxKvx_~Gb4HFaEG=YCkK?T&pJ6%4fL;kz~+Xl2gl0Y zOZs&$duP6@{ygz5ZL2*Nf(nbi>=y%tSN~QPBzgiLwzo!!;T^V8d-)|V0Ww*udr2Kw z%B8!r#Boy}CP4vHVWi7aAD5L+9KMu!<0p1+!UkEj86*UFko_g*N|+_Rlf{gQn^4bk z@XqQY+~wfKW?grHz%wo(?PoJ9vLs8X1V!#czzuPq8%mYFEw1Dob&uQfe9lI~Lh(xXLKA zz)l4y(;~(|{TSF;dLMfVg42?h{+)}N+lzfIr&d&b*%8El;Bodr&{t6LGlC;W6&~#hD=}_@yaJ=9A{+wH^JhiTC&rDVK&AQN>)XOz6}!fb zU*Dy!IJG|bt`0D}%QoH^t<)PvM)bb}k}@0dBlzIfXr;LAgSZ2;+bh& zH3R5TZ+F+EA6kK;HuHTuV52u8Nugu3G=MBy9Yc@cfT|wAZT)E56{tjWaeyft0Re|c zkhdX9Olg0RWsyhJU}tl%lH6LLC?KCUCaMm4ibkiev9L) zc+Rby{hp2yCqcWXARK|q}{GW}#1upoTK!awjQ&L9j&RMJzDT*`pOnSgTl)({K9V5VzK<0Q*3 z37F_DAR6fWj7>3@ujGy&x&r-H1sj0{XGnQ=H%%e{-~W@jN9+ax>? z3mmW+;B!l`DDOi7vArU=e1EAY zBP7B6>4;?vmu#={t6iLG0Xy$d7DCHu-G0O2X8A|2;i$v*jCZ(*N&={&yq(UONBxM*O*1{Qu%c zypm1?qFCo)^9&7O+K`$5_U&&SsEJ%)+fq)4e#dRM&b}fb2*$BAOG`>h;%#}Z`24e6 z)aC=pyYWDIhc-P3cpmuRVx0A<`aF-lRa}*A5P;uI%0}(q_JJsMwfxtW6F1<_(Vroo z&=lhWIGwm0BnIU3mO*pb`iQZS(f$qy;L3mlO)U}wI>c6H<7`lX=(+@2(@)z|scGhV zmE?EUv`Q^z$_DI!`-yptj%^}nBJ7nDShyz$Y+jau`V|Ed$ro~5e{X~GSpm_&J_{}s zh@eZH;>THao;n$OZazZ;h#2VVyHb2|yjO#=8sb8OV>%qrgq=ag6jKbuo+!*Jx&tIR ztZ`%=?8FH+0e9+?d%Pi0ql=lFnHid_^Yco;)d1sxogAOXu9XKkYaj6ep5`Z9kJ|+} zsWxDk2CrFyLZUNfr3^C}%%^Odu2+L_25!xR!2ak34&H=0wF~__oJ5f6i(rxDRi|08 z%35(^AtL~(-S|!etgA|`hPq9I&FVlS=?X}O@5C@<`*9(TT+v{tfcV0Tz&r~Bj@Dn-Q{+MT17^0yudgRL!hD18h3QXx&46OMe(S;#JoqAlJ)HQ z%j+@h!|HgH5KCXfgDd<0ips8mo#Pt8sWY^oo`}XBQD8kE)*=1oICrmEPNUQ!V$8Ol z2nEhznjyD@jzYLJafG z?C{o2x9Jbgz@lRW=rugwM<$5}o{y8zRdJyg6hw>EO4Nnr=H@o>QE5v2b_6=(Gl(An z^ui;vXIiqxdKcMmz|A#St&~#6;KNxVT5WnJ8fDigzC)KDTBf71{FR8x8fX)jTF2XB z`kd^ywVXO3rSNCW{YH&wlT`yQRcd~w6Xb?aAPtRWm_2(3EXSCn!>i?a@xajd$q&wD zjr=Pz6Y4vqVK5`x9ZxHR+33hl|hR1HiYa3ck1 zAA){XSc6Gl2QZgeG2M9tGCoK4L_1xrVs-CC5w~mpiSM)XULIeRlBp6&GtO*<&T{Mx zELk5DP~7r-)2GAJ9(#QMYd=b`iL0Njq>)>=K=Q)nLL&BEd%TaP@CBTz`MsdVN}7^Y zS;uNggHT7Q3JpeMv%jt1esrtftUs_CxnqrK+tJjjrxkXHIcEu1s=uPJIpS|gj zQBioIe`bu8o!KS_eT;{y6xRbBQX&^xXz3?SnCzab_?D2Dvy@*&LWRdJt;^AoRhaq` z|A4uP@D6%>bJQ)T?ePYJ){1boR8PH?Q>ckkVEvBEXyYo>+Ynyk)%3BoM_>ZjPQMI-Hfdq#ZyACp_RSeW7f1o)br}{fDU*5*v17^+v&Eqv@ znTdi{^2)Wt^z$ou!CDimE$A^mf~O2aAH6zCBI3P&aRbj|C7ZfEz?%&m-7`%&ak;kS zvFWhpbBsv|>pMPl8J$^Sm0lsi3fVmV^@U5vVbHl-_Hk^Zy0{mQwv@jS?^vP9P8Vr2 zix`+;M^nVm*U7#pzz@$c?OdlJE9fI_igm{25UTfcEi%n4jNv)QyeYrgMJ2iuGDX|> z!1w{BK3qsK$(?Yysu&3}yR<)xOa07mNM?J~$~Y0*R%B5|_NC@fkAFybm{R*1+99;~ zq(xn5A}1H_kqDz%|3nXO*{XlF9V&3rSyO(Y?oA{Lk=5cn)OLYtTR$g38 zL(hZ*aVGVc-*i@W&6i_`*feWhz1)&plct}yU&8Zyz7ne_gz7s5)@zIC6EAHn9z^~; z{En9nC?6)Ip)Hw4H@htk4Vj;&7-lWh2|m1VkQq`!#41~#X+k618$ag;E#ELa(Sqyb zd`5i9w=~X3fh%F1`&Zgzdf%?)tRu>=^~Fuo4@M4{vH5ndAoSYKQGHc4>q>Q1hVn$0YyFd$Zi((#0TYpNrd88V$y`xERAvG*lG35zV2G=$8rdM6@d<$Ugr=WLzC?Td) zd{*<8SrP-*m(ndb3eM90wg^{=T$Rn*WTg5?k_+D6TefpYyR<0O?D49>iX?^XjV0Rk zAP4w#k;<^=UZ(e8+*X|6sJJV9#9^QEILUVQ&0fWFn9yi7jh6_$`w3WTylNJfqV^3$ zG|Q@Is*eqX(NosYrF-s}No+Gm%}!nTd0{VenkO?S{x0JNtD@*F8@OZ$N#4P?C_flh zZ(*k(zR<*{?VxQ1;fCf6tPC7gJoZ5})9UU!jfkzGjQaO9&aMd8v_PaZF}ZQUcWu_| zLd4<@LkQBDs59QQOm~TISVT!C^}9A=IF_bwpM(l;y~42NXt*d9Fc@zM01Y*&-8x}> zs;uu33sWho?O4@jY7e0?rKiDhKUvk|2Wb@cXOY{iw_%R9$TQ+a_xXXP^HDmf?`Uac z@CYF{9BE1SH}}3m^tjZH=V_ZFW|DJbz|7ph$U?V_wYqeI>vdi(@gzV!E{}SzFwSF+6a*m5Qcg}6hW*PO120S#n4?y5KU;hvrqyIe<>}eH`Lb8$;{FcN zR>dm6h;dx0%N^zq9%uDj{qxj=Y!5j=_H7@eoq4yiby`ieaLCpqCaBCT>{wFIR;hn> zp?9oEGep5&arTI;$hG#@w1xP2HH9c#oHUu4u~~@ePiUzeO}fH9HvSVe5zCNncMG7U zYN>`-Vh1L0%-jZ{wmlDStdcm5w?B>w$j!9vX{qSI?6at=$xEKEwLyQ~|K@V=32Gb{ z_Ov4k-`eVilbBNxsJHNKHI%KoxqtZR+kqhL?F#1F+zo6gck>Tfgw;+#oA{LO>8NpT=5wk8d&k`5iKU_!19VRqh^>atX}G#uqpeQ1<|`co`%Gsl zKg|m)x^{T_Gk;iS?-r@KUpG%-Eni*m`63C*sQkm^$mL%J3=DK zS-FX>Y_biN?{=kxW{>ZL(kK(Mfp&Zs4>Zf*5eyrp(;?qQBH zgYHtd<3sH9;i6xvB_i#7SePxn$e0(Q?SqrXQ$_w<6%b6?RV$9N#2}c#8ud-PCWiYken0AjZ+(&PG{q7E&%`5#T|Jjzob1%t>1S)F} zgU?fw)I{^UV#2Gxq0Y|$YP2jO?4@apPB;A(hV#p$HEJ}i(s(>p;S6zMheWHjt~aJ0 zmG0H^a-1`4PG;B2E)%tl>oZri*_paC?20^y+y;Y18m1J&Jts<1??~tArqQP>$)Awg zqM4q5re7t!Ke6v*J)vx3)WxdkAn-tQ?4!9orbh=?-O^7bLNW8APW*G@A3RXJ(VbhT zs@ir_wDJ=fWe;1Zr>=K&NNe_l8>oxv4TyAR7urP}4}eNi%!S`)%;5o%sCE_Pq>pd19;7o&ag?_LCTkh-N>W4kADOyPwN zRzU%W(}dEZ2qF#6%+u+Gq50*{b7b)6Nr&>ZI@&@sTQIy93ZhHX+7iD$se6t^$?|KT zbZ+~~+Ck+a(VAIUfd(o!uWhW|bC_LUw};t2=Q3B}ZnrG{t9yUC_Xf_5FNzm;bZK-D zqkfCJtGcM8j&gXj=Jt^PBb7OxD*Kk|_}HKApJw!?yW9nKHViKvx^m(IlXh*| zLC=cnw++sNFUAA>-VO`vPE7UQTbV5na(mUB<&0IS>p5-AK$>&MCD6{Gi}!P3(8Hdr zhk2J4vnKrwFUdaNqS3VV_Z@QL{<9}fQJ#Ljl-E#lX$3<#iT=>@4R%aW#VXMaN%&CX; zOCGW8WN1o1VBe&Zqfr@#gnNJq+?`uzn3A7LJ8V~FyG+j~mcaU@EbmUd$lASZ8&Mr| z#ylkOo|%GmxESQWs~kn)tUinp*^PdfYnRiqCUijN!)PKlM*)-Ys^{yr#ht(fO^m)a z@bXN>w2MKQUkK+hTORv0r_q&miwOm<#Ar0(QQ@m4yr7Dqaqo15_1PBz6f53Z!K+W_ z2h&Q?eDB{BFUrd$E9HM1^1CX+l194xOuz97rGI6=CzTR3C)C?nAIG+P>#idYbuk9> zn&KsRLblaCekJO?X!LQPi$Qez(*yUJn^?K>w4K0?FysI@&(A-_^UaFHnQa6=&nZFc zw^y`qXpC^hWO%trZ~#xWEgxHEW~A7e$Cep&SDL?EkTSW{8z`lAa#=puGRV+9#OBrM z*!lcQpbNt77`dAY~jm351>P|O@NU=ZBBLx{^L`#z=FNF-}msa(y$FQ9~ zUAIW)4l~{8lO(bgU)Rp#+K@L#GiKiDPTumEvKE=bm~KTwT4V!_@!UP(Sy!olXqy3g z)yJT=p=}-`DsE_-FFusNt-#K-T(Ue6y&)nbT|gNiGR$MzDc2noDrx?@m*Z0=l$l4< zD5GBEPukvaV@K9h-z1J)9I7<+!NxDVxmLbMiA!QU&#5PN!Z04U0-tc<7pqtbUIZIr` z`v-G{MM?K4xI zQ?`jEq3yNF6DQOn*p_x#DvkD5R3PzY3lIq01?Vty4&z%2$p}-A4EnJB%ZJwnkRkiQ zQ%Hsy(nxKGo>|R^$NWg7u$gFonXuOO-3M5(8_66AdGu^L=yT4=4a$Du5X8LH(mWLp z7I(dNbihdQr8E7X)&xqI2nUaC$eG1#KIGJ6yqHt4QNM&ags<*D|FkiaxBkd$68TPn zh(>Y8%@bB#-&c2#kLwE+MxH2HXXl}i3BimOJBd$~E~%rWblvmI>vV{t3`I6IpMT|> zOuJ|;cuX(Ky6b3hOXrzrBlORgZaH&*&_92SWZKmeMOk~6m)Z*ToZ z?mjv5c4Wm4*wh@Kbuk&mdd-W+eQKxdQ4^kbaY53|5gVg#9YMbx;>D4JB<9&iE(0w+ zQ}K1SG(%|!k?C^eo=NJHA|K?Fl$7)y$lt>y^(x@UM%q^b{`(_Bp#BzfVE8Y9KBNoU zTlNnESI0^Q;|OEyC@sr|7;9+%=5gI=Qg8)XIyG%ntl$ETdl|yEr)hH7PmUegu|1%Z z*}aUOPl@{@PK10jG$yeNR>BMVno=ua8vTM?3zi*w~eX^+0;X$7wS zimxHnn06*I^#NQx0s{-Rq=y|pvh)KqRIlij^)P0(2qhLUEu*X% zGjCNH{E$R-Pt?5j$Kg%ueq6mpo7s_zr}B?_qH?uTkMCvKvW5HlB_#!&_EH|b800)3 zSZD81zKg?Cf5;$>N%?uUoi>CI($r?VePc8v2+476^uwcl_K-S`B$&m=;tkO@3{Q;# zC(;f85N^yg%f7EmP z$HPyR;f>y1Vdn*h!M>&@Zj_FW+58XPiLAMM+Q08spknFk$83pUTJtDF!R?_|Sk=tLSDDfLA(e!}%ZE zWgnGgmYEAtk2^tdJ_;VaQPm;JQLAm;w^p$Y@huS zq65(h^QHS}!@$fL_H;KWolFx*fEp~13leXl0zc&fsUPWIhgkUmc+e>IN~{;@ z5~64R&%G~f<7)gB^22JWFKGtV3khlZv!Sz$-?FVeL!x!f^LwvU3w0EBHP-K$@szt) zuOiWNJI-jos6f11rz!4r=SjJ;{?uQwE~^-ApFdA0$c+T16b$3uj(T4g%R-Jf%HXI- zi@I+}%$QFD2qiO2E6TYW_T@|>0<;EMs-3BoUN<7>L}p!b?6ZI%w1?r@0_4_FIFj3% zc;0q|@E{n#+GJ4{Dz z4q|(qOuJieNz_4S&XSudC})3rJ(#D|*OaFEx_I!ecYDawV>v~7G|$>DpJ_)qToz$z z1LeL^73|c(`B6n??TA#eoorOy1v!r#3q$?A>LOU)12dqdj3UUj--?A6&~g`VE#ITI zZyuupoRUt-Z-L%ONR&l-n=(`HwjpydZQOnoW`S~(n+m!puU>{u1mpO+^akRK!}QUu z^h$_X{6IyXn%;xA*9p-R=#==jkjaltXeOwC3#BxnE>FxvB<=l zL7TWqecQQu@s9dYHO<{$#-ApG6+26s18L%*f@g`ZcrR!EZ z;9Wo)y`I|1WbhE~@Z*^8=^5EGe~_CEHptB&7s~>2^X160ZHr0C)-U)46jMGDbiuju z@J56=^z)kxpWJPJ+iTfFlm0NWdam+jym|J@=eZX@2=AUa0Ayr_J1O;s`nSB#g56sA zx914IW7;={dY#oM;B?vp43l6MWN2bylID-DB)#@W8|EYg)A1p9UV<<^Fl3Hs%dnwT zMNi}fIb67zG4wXVI+jExbp`7Ehb~+%O#F=rXLr+eK_7O>!syb=;d>%NUs!NPP4*EE z#T{52(IV~8Ae~52B6UZ^_@L27;wll-i1P8zxgz}JC&Xw~qY;vZ_uzYNlWz5jxiTzh z?IcK@Ei7L4b~V4%SkzBiK`T&)ACB7PaO|MxevHd{t*QOPKA%ThnbSUv(&T7#%=Up# zKL_&E{%ax({7Qdcx)Thqc#HAYVPe#0QNmg}zIvlTODf~XjJ4WABS-b|F2Uk!GSPO+ zM^dqi9cOY&)*OVGw%LpZ(85|nXGn%0yOas1IiQ=Ko8Xc)JNT`^Sf(Pm2a9CE>+JG_ zVx)^*-}qY38#jq3o@?+O;We$8g3p*AqqHC)C-z+huff7XiSt>%i%gemy(S>}G;i`J zJZc1;xlfE2gESkqJy-R{EIW*ypJW-Q`JVj??U(?hVWFejQt-Mz7xk^-);LFrGU;G{ zeszovodFyW6}_9EmDK7@IBCH}IrdU6_XUQWOV&DRdKpFEJ&h>CycLAuFj|C-k2sw*H8+qjV*LL7Qq0z4hSq(pehdR0VQ*JXXl4U z(}Bt#OS6-clMOQX?3Te{F!uSB?!M6uS47ziJ2tPTp^lV|(eNJ^7Dfwj{gmyZs!!Rk zvFg7R|LkNVkv})Drj|uP8k>qKg;_(l^90=F7@7*GHpDh#$<$U{?onj%V(GvbD~3`D z6T=hI#4Bj)p4#m}T@VR6&|xigr4U4!UC1OA(QF@f|L*6CgtqP8FYpGG#Ohm_#87r& zdpBsu$TXUAGk(4<$p_(LyH=t&mTp*AKuszdy0s-mjYDpKkx`LDx%*E8@ZQb zk2ZlLBK|pkOO5IJ3`g|2yH3Ayqek+rTL^@AAHc=4gb2Bx^2$>ux(XK+?Pvl~=2khoJ|u5AMxW|#^DAHqE?$^k+{OIR{oUeZ;k&nFNz)jyQmhC9PV z?VVCAi8}YqoE)Ck+1r974rzm{zDlrsR^uxu2r)*#@oCn{l)WzwACwqu7hiC%^A0Hx~D`eZ+;W z;ki95**l>8l<_|8VKtt@LRXlst9L~#tp7h$bUJ+Ku^zMx)h%`S9FO>Ndi-`~Ea zr3E*j3fz0pbqKP8BLtCi7c|65cSA2?pVwTDM9&@VU$Y1(4s;7S$ag30Fre!ez?ZNz ze_}l22^foT?ZGzhHZ!MpCdoS;5DciKyS&5t@LyP&ra@@^XpFP$k%=A%gD=X2nc=1kK}i?C<^-|L zD}Ay6JuA?VT|RDLKfS;tuElb3kl4llS7or3{yi_Ck`GMsb%4uA*F;{?S%;$^v?)(w zGHl{_^N&eNQr72EhCW;Zhc)d9CYK{1~Ug z7x>C}7+Lt*`};N1$E0UBJ?H&GfXvMr%K6y>DXUqVf@K+Q5g%p>OF~GiLKx3Z#P1#% zK*!}ZRVn)p@1N(hRK-08sJ>~A70}&u!7?6athezC7~oyPubhHF383MNcY^8pW_%Vt zQ2~huQP3u1xr`8D_fx46UTqeo!Ia$`0^0vE6k|`60dwK8${2U*_BA(v^9_8t)?WDT z-d}2Izo}htc;%k8>_>g&#aJ+Vv27eBbIodNyU#IP=l!WvsMe~Jqg3UuBLSj~?j0hc zHyQxn(BF}fUB;w#DQY4LSRJJD3;Nz|AmJ0i7~sn*#dL&B`I3 z-E?iV3I-Ffd^Lx@QKsy8sW`b*QijRgJ zWn&|2+*Z%u0dNSRXpK2>DM6HhC{uovcnm*eu3q(@B7GV;51Ug|p83 z-&*1y^r{R*jN*yg3;z{q|5v09<=lUj^c!{Of0gtbHiZA$9X2*0|3@YL|36O(k;M-t zJ5k=MHX!!Qhl=WD0XE#wl&i7i_&Z3)HPF)1x)iNjyMnNH9U!?~Rnis9Y}n;|1gekW zn>PzvV_kTjfNxFgHrzPW{{f=RlG2TXgVY$!5Zp*h9<4Q4)xVR3Qt&N?0a28{@8;T~+oPg1M60&XrO?RQea`E)?>` zi);<&qZamk*tCNs%F?Z^%;zJKJMXsrf?7PI5v4OL@?_8DFENt&T_|lj5+{Ps0q57!}z!|Xu)^Tm|ANwUxdw}1_y{d2QNbYiu_Bjlt&aBmVj zC%~fU=rYu{hYAD@@i9&+tS!)dAGc;a35{jOc5-U^k3-4(B4bNUxY3UZhL! ztbJd}W|68hPs(q=_Qnslq*AxE#Cc8}e3_#Bct6Q~`g%8%qG+K!C?{Wa^JARB0%-_< zgK^k#h+8BLz3~CyQS`dZ>U@q*A#|pj^|Fl*4lDM40<|ughO{=H_g6;40KpK@5=e)& z5`Vv}9PD)Ey(4ToY3YNPnZoaTDR0hE@Vj~;K{0SoM0mIbZRwNT7}U1;h`nBP?5Ljh zeqUij&_Exif=_f+G1dR5$9JZ6k8f$(sTa2>N1mxzu6O*c2kDNtzrJyy8#3!wh2M58 z0AOvpk_~l7^p0W`AJUS7{lx5V)QK8Sl%0Rn?$;)T>K3F}_E*Fj+pm#>nZ7`07ReN) zXfY6Z<()v*-HmKHka%6N-6qwfAU4V~r9;0_q4FIgbvw*%<+RU8=mA~&&^F;lS!!k$ zHlOgW9O)ey-;sR~O&4$|G&xaLIteYm*POtsogxL{^pSkHe?NTLCU5*5R2yz{#Jdpl#c6EoIBoUNQXzc>bUpfn_dd+^j8PEXuy`6 zs{;$P5$#>7)Pa@JHK1>dKTDA57dW`=+d02zNj0q{HjK zG4NH{Fg*RUjdDe>XqN5gb4y@H*Zuia{9%y77$mo-m$@T|eU#p||) zMIcd#NOwv~1(xbK46jIl&{+OCd~E?X)H9P}bLS(`Z#@?mn2CpGl6L&cBk`DNoh52f zD#P+jn5q4YqE=1sMCVRh3BH{R#X)RU<%M{A{Nx-=P7Y%Cmsx|So94Yeem?!0o?$k~ zhs2qc-G(GPtl4XSFGG_EgoDm~kvt}Alb(dPJB?xtyBkj2FVi}RkjvmfFR2-r zp6i{_CCRbos?(X$ym!;nedibhoxaK46o`cSFsHwskapw&!-tPHR->%j=B!5uD-T546_vrzgsXU$saq+Q zUXx|{lN@psWf^uA8pP4U8qSAX2Y0PhKzN#$tFDlpfPu;L99;n+%_!RpSX!E0&0i%+ zn`|mu{9e&9JhW=(Vo%j=xtA6|ErYzR|13T-Njy(tD7Ug?V{*gj`TC32f?kxX5atC` zYpZ9H0|(;$@D{a7l7I#}R)q`GOrR@3xJQhEfwEH=1BiR#MZ;7_eU{oI2tPM%0zKgeHOW%{lxBaB5Q%3q= z%&+DsQnl1w_I~m+{HGOe@y+Q!&~P)5Z`se!sMJ!!SEbar2dE2WjV$C@rM?YwNN^~~ zFXZx6#q>pg@$9T6#s$gl@T0RQcEJGr?owYMH7#;Jo#Mx)v)mWR?PYpsJ?VS_G^Q36 z*xC|`;YoZ<;bqO%3`#T<2rD9c=q^{sdf%zkXJSV?9MHW@)g8!7cW)lXZ%f9UXyew(I8){2`YR@UJc-cf$4&;z@?d_5&If}yQFRs(H<@R}HNj!Pe|jk`(jrsE+%33CX*|e>Is%a{MjO;P>j~ z_(j+d`kM_Sbhgb+Zs^kRgKM{JF@k@y&tv0Ne)NcIm*sTNzlk93h--K8o0G*~wb36x zh46syWtV@7(LdjZWoHhQkW=4`vSC2`k7Hmx4#%L7d*|`yVr%0M_8~6IZ=QAG|F%~9 zBi8Dj5e}Qr_3w3l85o(~dpec~|MPuVE{4D{&{sAKY+m*o&H4NKaDv`!3|n77(tK?n)YQ^RQ#8~p16@v6vAKZn0+77tCT_(WE(fsMrOjqCd7 zf1Tkd_=I~|DCjpc9rtZFv37ociJz4poKgkNuAx|WWFqp9b2?T_M`I35-d4pMcD7^- P{JW%lMJfBdng9O)p?7;+ diff --git a/plugins/jenkins/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx b/plugins/jenkins/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx new file mode 100644 index 0000000000..637cd40d6d --- /dev/null +++ b/plugins/jenkins/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx @@ -0,0 +1,134 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ +import React from 'react'; +import { useParams } from 'react-router-dom'; +import { Content, Link } from '@backstage/core'; +import { + Typography, + Breadcrumbs, + Paper, + TableContainer, + Table, + TableRow, + TableCell, + TableBody, + Link as MaterialLink, +} from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; +import { useBuildWithSteps } from '../useBuildWithSteps'; +import { useProjectSlugFromEntity } from '../useProjectSlugFromEntity'; +import { JenkinsRunStatus } from '../BuildsPage/lib/Status'; +import ExternalLinkIcon from '@material-ui/icons/Launch'; + +const useStyles = makeStyles(theme => ({ + root: { + maxWidth: 720, + margin: theme.spacing(2), + }, + table: { + padding: theme.spacing(1), + }, + externalLinkIcon: { + fontSize: 'inherit', + verticalAlign: 'bottom', + }, +})); + +const Page = () => ( + + + +); + +const BuildWithStepsView = () => { + const { owner, repo } = useProjectSlugFromEntity(); + const { branch, buildNumber } = useParams(); + const classes = useStyles(); + const buildPath = `${owner}/${repo}/${branch}/${buildNumber}`; + const [{ value }] = useBuildWithSteps(buildPath); + + return ( +

+ + Jobs + Run + + + + + + + Branch + + {value?.source?.branchName} + + + + Message + + {value?.source?.displayName} + + + + Commit ID + + {value?.source?.commit?.hash} + + + + Status + + + + + + + + Author + + {value?.source?.author} + + + + Jenkins + + + + View on Jenkins{' '} + + + + + + + GitHub + + + + View on GitHub{' '} + + + + + +
+
+
+ ); +}; + +export default Page; +export { BuildWithStepsView as BuildWithSteps }; diff --git a/plugins/jenkins/src/pages/BuildWithStepsPage/index.ts b/plugins/jenkins/src/components/BuildWithStepsPage/index.ts similarity index 100% rename from plugins/jenkins/src/pages/BuildWithStepsPage/index.ts rename to plugins/jenkins/src/components/BuildWithStepsPage/index.ts diff --git a/plugins/jenkins/src/pages/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx b/plugins/jenkins/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx similarity index 100% rename from plugins/jenkins/src/pages/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx rename to plugins/jenkins/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx diff --git a/plugins/jenkins/src/pages/BuildWithStepsPage/lib/ActionOutput/index.ts b/plugins/jenkins/src/components/BuildWithStepsPage/lib/ActionOutput/index.ts similarity index 100% rename from plugins/jenkins/src/pages/BuildWithStepsPage/lib/ActionOutput/index.ts rename to plugins/jenkins/src/components/BuildWithStepsPage/lib/ActionOutput/index.ts diff --git a/plugins/jenkins/src/pages/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx similarity index 81% rename from plugins/jenkins/src/pages/BuildsPage/lib/CITable/CITable.tsx rename to plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index 7f17107374..282cbc59b5 100644 --- a/plugins/jenkins/src/pages/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -14,21 +14,26 @@ * limitations under the License. */ import React, { FC } from 'react'; -import { Link, Typography, Box, IconButton } from '@material-ui/core'; +import { Box, IconButton, Link, Typography } from '@material-ui/core'; import RetryIcon from '@material-ui/icons/Replay'; import GitHubIcon from '@material-ui/icons/GitHub'; -import { Link as RouterLink } from 'react-router-dom'; +import { generatePath, Link as RouterLink } from 'react-router-dom'; import { Table, TableColumn } from '@backstage/core'; import { JenkinsRunStatus } from '../Status'; +import { useBuilds } from '../../../useBuilds'; +import { useProjectSlugFromEntity } from '../../../useProjectSlugFromEntity'; +import { buildRouteRef } from '../../../../plugin'; export type CITableBuildInfo = { id: string; buildName: string; - buildUrl?: string; + buildNumber: number; + buildUrl: string; source: { branchName: string; url: string; displayName: string; + author?: string; commit: { hash: string; }; @@ -105,7 +110,13 @@ const generatedColumns: TableColumn[] = [ field: 'buildName', highlight: true, render: (row: Partial) => ( - + {row.buildName} ), @@ -177,7 +188,8 @@ type Props = { pageSize: number; onChangePageSize: (pageSize: number) => void; }; -export const CITable: FC = ({ + +export const CITableView: FC = ({ projectName, loading, pageSize, @@ -191,7 +203,7 @@ export const CITable: FC = ({ return ( = ({ onClick: () => retry(), }, ]} - data={builds} + data={builds ?? []} onChangePage={onChangePage} onChangeRowsPerPage={onChangePageSize} title={ @@ -216,3 +228,18 @@ export const CITable: FC = ({ /> ); }; + +export const CITable = () => { + const { owner, repo } = useProjectSlugFromEntity(); + + const [tableProps, { setPage, retry, setPageSize }] = useBuilds(owner, repo); + + return ( + + ); +}; diff --git a/plugins/jenkins/src/pages/BuildsPage/lib/CITable/index.ts b/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts similarity index 100% rename from plugins/jenkins/src/pages/BuildsPage/lib/CITable/index.ts rename to plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts diff --git a/plugins/jenkins/src/pages/BuildsPage/lib/Status/JenkinsRunStatus.tsx b/plugins/jenkins/src/components/BuildsPage/lib/Status/JenkinsRunStatus.tsx similarity index 100% rename from plugins/jenkins/src/pages/BuildsPage/lib/Status/JenkinsRunStatus.tsx rename to plugins/jenkins/src/components/BuildsPage/lib/Status/JenkinsRunStatus.tsx diff --git a/plugins/jenkins/src/pages/BuildsPage/lib/Status/index.ts b/plugins/jenkins/src/components/BuildsPage/lib/Status/index.ts similarity index 100% rename from plugins/jenkins/src/pages/BuildsPage/lib/Status/index.ts rename to plugins/jenkins/src/components/BuildsPage/lib/Status/index.ts diff --git a/plugins/jenkins/src/components/JenkinsPluginWidget/JenkinsLastBuildWidget.tsx b/plugins/jenkins/src/components/Cards/Cards.tsx similarity index 78% rename from plugins/jenkins/src/components/JenkinsPluginWidget/JenkinsLastBuildWidget.tsx rename to plugins/jenkins/src/components/Cards/Cards.tsx index 6731808d8e..5034effdcf 100644 --- a/plugins/jenkins/src/components/JenkinsPluginWidget/JenkinsLastBuildWidget.tsx +++ b/plugins/jenkins/src/components/Cards/Cards.tsx @@ -14,12 +14,12 @@ * limitations under the License. */ import React from 'react'; -import { Entity } from '@backstage/catalog-model'; import { Link, Theme, makeStyles, LinearProgress } from '@material-ui/core'; import { InfoCard, StructuredMetadataTable } from '@backstage/core'; import ExternalLinkIcon from '@material-ui/icons/Launch'; -import { useBuilds } from '../../state'; -import { JenkinsRunStatus } from '../../pages/BuildsPage/lib/Status'; +import { useBuilds } from '../useBuilds'; +import { JenkinsRunStatus } from '../BuildsPage/lib/Status'; +import { useProjectSlugFromEntity } from '../useProjectSlugFromEntity'; const useStyles = makeStyles({ externalLinkIcon: { @@ -38,6 +38,7 @@ const WidgetContent = ({ }) => { const classes = useStyles(); if (loading || !lastRun) return ; + return ( { - const [owner, repo] = ( - entity?.metadata.annotations?.['jenkins.io/github-folder'] ?? '/' - ).split('/'); - const [{ loading, value }] = useBuilds(owner, repo, branch); - - const lastRun = value ?? {}; - +export const LatestRunCard = ({ branch = 'master' }: { branch: string }) => { + const { owner, repo } = useProjectSlugFromEntity(); + const [{ builds, loading }] = useBuilds(owner, repo, branch); + const lastRun = builds ?? {}; return ( diff --git a/plugins/jenkins/src/components/PluginHeader/index.ts b/plugins/jenkins/src/components/Cards/index.ts similarity index 93% rename from plugins/jenkins/src/components/PluginHeader/index.ts rename to plugins/jenkins/src/components/Cards/index.ts index 4de972f6f2..dace09e1a9 100644 --- a/plugins/jenkins/src/components/PluginHeader/index.ts +++ b/plugins/jenkins/src/components/Cards/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export * from './PluginHeader'; +export { LatestRunCard } from './Cards'; diff --git a/plugins/jenkins/src/components/Layout/Layout.tsx b/plugins/jenkins/src/components/Layout/Layout.tsx deleted file mode 100644 index c6000437a3..0000000000 --- a/plugins/jenkins/src/components/Layout/Layout.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ -import React from 'react'; -import { Header, Page, pageTheme, HeaderLabel } from '@backstage/core'; - -export const Layout: React.FC = ({ children }) => { - return ( - -
- - -
- {children} -
- ); -}; diff --git a/plugins/jenkins/src/components/Layout/index.ts b/plugins/jenkins/src/components/Layout/index.ts deleted file mode 100644 index 236fc98851..0000000000 --- a/plugins/jenkins/src/components/Layout/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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 './Layout'; diff --git a/plugins/jenkins/src/components/PluginHeader/PluginHeader.tsx b/plugins/jenkins/src/components/PluginHeader/PluginHeader.tsx deleted file mode 100644 index 501649e49a..0000000000 --- a/plugins/jenkins/src/components/PluginHeader/PluginHeader.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ -import React from 'react'; -import { ContentHeader, SupportButton } from '@backstage/core'; -import { Box, Typography } from '@material-ui/core'; - -export type Props = { title?: string }; -export const PluginHeader = ({ title = 'Jenkins' }) => { - return ( - ( - - {title} - - )} - > - - This plugin allows you to view and interact with your builds in Jenkins. - - - ); -}; diff --git a/plugins/jenkins/src/components/Router.tsx b/plugins/jenkins/src/components/Router.tsx new file mode 100644 index 0000000000..56df5456bc --- /dev/null +++ b/plugins/jenkins/src/components/Router.tsx @@ -0,0 +1,41 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ +import React from 'react'; +import { Route, Routes } from 'react-router'; +import { buildRouteRef, rootRouteRef } from '../plugin'; +import { DetailedViewPage } from './BuildWithStepsPage/'; +import { JENKINS_ANNOTATION } from '../constants'; +import { Entity } from '@backstage/catalog-model'; +import { WarningPanel } from '@backstage/core'; +import { CITable } from './BuildsPage/lib/CITable'; + +export const isPluginApplicableToEntity = (entity: Entity) => + Boolean(entity.metadata.annotations?.[JENKINS_ANNOTATION]) && + entity.metadata.annotations?.[JENKINS_ANNOTATION] !== ''; + +export const Router = ({ entity }: { entity: Entity }) => { + return !isPluginApplicableToEntity(entity) ? ( + +
entity.metadata.annotations['{JENKINS_ANNOTATION}']
+ key is missing on the entity. +
+ ) : ( + + } /> + } /> + + ); +}; diff --git a/plugins/jenkins/src/state/useAsyncPolling.ts b/plugins/jenkins/src/components/useAsyncPolling.ts similarity index 100% rename from plugins/jenkins/src/state/useAsyncPolling.ts rename to plugins/jenkins/src/components/useAsyncPolling.ts diff --git a/plugins/jenkins/src/state/useBuildWithSteps.ts b/plugins/jenkins/src/components/useBuildWithSteps.ts similarity index 97% rename from plugins/jenkins/src/state/useBuildWithSteps.ts rename to plugins/jenkins/src/components/useBuildWithSteps.ts index 617b2b1f4f..86d8162612 100644 --- a/plugins/jenkins/src/state/useBuildWithSteps.ts +++ b/plugins/jenkins/src/components/useBuildWithSteps.ts @@ -16,7 +16,7 @@ import { errorApiRef, useApi } from '@backstage/core'; import { useCallback } from 'react'; import { useAsyncRetry } from 'react-use'; -import { jenkinsApiRef } from '../api/index'; +import { jenkinsApiRef } from '../api'; import { useAsyncPolling } from './useAsyncPolling'; const INTERVAL_AMOUNT = 1500; diff --git a/plugins/jenkins/src/state/useBuilds.ts b/plugins/jenkins/src/components/useBuilds.ts similarity index 92% rename from plugins/jenkins/src/state/useBuilds.ts rename to plugins/jenkins/src/components/useBuilds.ts index deb3125637..62e3719dbd 100644 --- a/plugins/jenkins/src/state/useBuilds.ts +++ b/plugins/jenkins/src/components/useBuilds.ts @@ -56,8 +56,9 @@ export function useBuilds(owner: string, repo: string, branch?: string) { }); }, [repo, getBuilds]); - const { loading, value, retry } = useAsyncRetry( - () => getBuilds().then(builds => builds ?? [], restartBuild), + const { loading, value: builds, retry } = useAsyncRetry( + () => + getBuilds().then(retrievedBuilds => retrievedBuilds ?? [], restartBuild), [page, pageSize, getBuilds], ); @@ -67,12 +68,12 @@ export function useBuilds(owner: string, repo: string, branch?: string) { page, pageSize, loading, - value, + builds, projectName, total, }, { - getBuilds, + builds, setPage, setPageSize, restartBuild, diff --git a/plugins/jenkins/src/components/JenkinsPluginWidget/JenkinsBuildsWidget.tsx b/plugins/jenkins/src/components/useProjectSlugFromEntity.ts similarity index 66% rename from plugins/jenkins/src/components/JenkinsPluginWidget/JenkinsBuildsWidget.tsx rename to plugins/jenkins/src/components/useProjectSlugFromEntity.ts index 12eaf5653b..1dca918990 100644 --- a/plugins/jenkins/src/components/JenkinsPluginWidget/JenkinsBuildsWidget.tsx +++ b/plugins/jenkins/src/components/useProjectSlugFromEntity.ts @@ -13,15 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { useEntity } from '@backstage/plugin-catalog'; +import { JENKINS_ANNOTATION } from '../constants'; -import React from 'react'; -import { Builds } from '../../pages/BuildsPage/lib/Builds'; -import { Entity } from '@backstage/catalog-model'; +export const useProjectSlugFromEntity = () => { + const { entity } = useEntity(); -export const JenkinsBuildsWidget = ({ entity }: { entity: Entity }) => { const [owner, repo] = ( - entity?.metadata.annotations?.['jenkins.io/github-folder'] ?? '/' + entity.metadata.annotations?.[JENKINS_ANNOTATION] ?? '' ).split('/'); - - return ; + return { owner, repo }; }; diff --git a/plugins/jenkins/src/pages/BuildsPage/lib/Builds/index.ts b/plugins/jenkins/src/constants.ts similarity index 90% rename from plugins/jenkins/src/pages/BuildsPage/lib/Builds/index.ts rename to plugins/jenkins/src/constants.ts index e91a9496b7..fe8980de73 100644 --- a/plugins/jenkins/src/pages/BuildsPage/lib/Builds/index.ts +++ b/plugins/jenkins/src/constants.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { Builds } from './Builds'; +export const JENKINS_ANNOTATION = 'jenkins.io/github-folder'; diff --git a/plugins/jenkins/src/index.ts b/plugins/jenkins/src/index.ts index c7f2d8dc28..30fa0c70a5 100644 --- a/plugins/jenkins/src/index.ts +++ b/plugins/jenkins/src/index.ts @@ -14,5 +14,8 @@ * limitations under the License. */ -export { plugin, JenkinsBuildsWidget, JenkinsLastBuildWidget } from './plugin'; +export { plugin } from './plugin'; +export { LatestRunCard } from './components/Cards'; +export { Router, isPluginApplicableToEntity } from './components/Router'; +export { JENKINS_ANNOTATION } from './constants'; export * from './api'; diff --git a/plugins/jenkins/src/pages/BuildWithStepsPage/BuildWithStepsPage.tsx b/plugins/jenkins/src/pages/BuildWithStepsPage/BuildWithStepsPage.tsx deleted file mode 100644 index ab4fc3f34f..0000000000 --- a/plugins/jenkins/src/pages/BuildWithStepsPage/BuildWithStepsPage.tsx +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ -import React, { FC, useEffect } from 'react'; -import { useSearchParams } from 'react-router-dom'; -import { Content, InfoCard, Progress } from '@backstage/core'; -import { Grid, Box, Link, IconButton } from '@material-ui/core'; -import { makeStyles } from '@material-ui/core/styles'; -import { PluginHeader } from '../../components/PluginHeader'; -import { ActionOutput } from './lib/ActionOutput/ActionOutput'; -import { Layout } from '../../components/Layout'; -import LaunchIcon from '@material-ui/icons/Launch'; -import GitHubIcon from '@material-ui/icons/GitHub'; -import { useBuildWithSteps } from '../../state/useBuildWithSteps'; - -const IconLink = IconButton as typeof Link; -const BuildName: FC<{ build?: any }> = ({ build }) => ( - - {build?.buildName} - - {/* TODO use Jenkins logo*/} - - - - - -); -const useStyles = makeStyles(theme => ({ - neutral: {}, - failed: { - position: 'relative', - '&:after': { - pointerEvents: 'none', - content: '""', - position: 'absolute', - top: 0, - right: 0, - left: 0, - bottom: 0, - boxShadow: `inset 4px 0px 0px ${theme.palette.error.main}`, - }, - }, - running: { - position: 'relative', - '&:after': { - pointerEvents: 'none', - content: '""', - position: 'absolute', - top: 0, - right: 0, - left: 0, - bottom: 0, - boxShadow: `inset 4px 0px 0px ${theme.palette.info.main}`, - }, - }, - cardContent: { - backgroundColor: theme.palette.background.default, - }, - success: { - position: 'relative', - '&:after': { - pointerEvents: 'none', - content: '""', - position: 'absolute', - top: 0, - right: 0, - left: 0, - bottom: 0, - boxShadow: `inset 4px 0px 0px ${theme.palette.success.main}`, - }, - }, -})); - -const pickClassName = ( - classes: ReturnType, - build: any = {}, -) => { - if (build.result === 'UNSTABLE') return classes.failed; - if (build.result === 'FAILURE') return classes.failed; - if (build.building) return classes.running; - if (build.status === 'SUCCESS') return classes.success; - - return classes.neutral; -}; - -const Page = () => ( - - - - - -); - -const BuildWithStepsView = () => { - const [searchParams] = useSearchParams(); - const buildPath = searchParams.get('url') || ''; - const classes = useStyles(); - const [{ loading, value }, { startPolling, stopPolling }] = useBuildWithSteps( - buildPath, - ); - - useEffect(() => { - startPolling(); - return () => stopPolling(); - }, [buildPath, startPolling, stopPolling]); - return ( - <> - - - - - } - cardClassName={classes.cardContent} - > - {loading ? : } - - - - - ); -}; - -const BuildsList: FC<{ build?: any }> = ({ build }) => ( - - {build && - build.steps && - build.steps.map(({ name, actions }: { name: string; actions: any[] }) => ( - - ))} - -); - -const ActionsList: FC<{ actions: any[]; name: string }> = ({ actions }) => { - const classes = useStyles(); - return ( - <> - {actions.map((action: any) => ( - - ))} - - ); -}; - -export default Page; -export { BuildWithStepsView as BuildWithSteps }; diff --git a/plugins/jenkins/src/pages/BuildsPage/lib/Builds/Builds.tsx b/plugins/jenkins/src/pages/BuildsPage/lib/Builds/Builds.tsx deleted file mode 100644 index 79f081c82d..0000000000 --- a/plugins/jenkins/src/pages/BuildsPage/lib/Builds/Builds.tsx +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ -import React from 'react'; -import { CITable } from '../CITable'; -import { useBuilds } from '../../../../state'; - -export const Builds = ({ owner, repo }: { owner: string; repo: string }) => { - const [ - { total, loading, value, projectName, page, pageSize }, - { setPage, retry, setPageSize }, - ] = useBuilds(owner, repo); - return ( - - ); -}; diff --git a/plugins/jenkins/src/plugin.ts b/plugins/jenkins/src/plugin.ts index 4d1af322c4..8282f6b7f9 100644 --- a/plugins/jenkins/src/plugin.ts +++ b/plugins/jenkins/src/plugin.ts @@ -20,11 +20,15 @@ import { createApiFactory, configApiRef, } from '@backstage/core'; -import { DetailedViewPage } from './pages/BuildWithStepsPage'; import { jenkinsApiRef, JenkinsApi } from './api'; +export const rootRouteRef = createRouteRef({ + path: '', + title: 'Jenkins', +}); + export const buildRouteRef = createRouteRef({ - path: '/jenkins/job', + path: 'run/:branch/:buildNumber', title: 'Jenkins run', }); @@ -40,10 +44,4 @@ export const plugin = createPlugin({ ), }), ], - register({ router }) { - router.addRoute(buildRouteRef, DetailedViewPage); - }, }); - -export { JenkinsBuildsWidget } from './components/JenkinsPluginWidget/JenkinsBuildsWidget'; -export { JenkinsLastBuildWidget } from './components/JenkinsPluginWidget/JenkinsLastBuildWidget'; diff --git a/plugins/jenkins/src/state/index.ts b/plugins/jenkins/src/state/index.ts deleted file mode 100644 index d21a380c2a..0000000000 --- a/plugins/jenkins/src/state/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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 './useBuilds'; -export * from './useBuildWithSteps'; From 11cddc25aa6c51af574ca87a99aba4b0cd285d6c Mon Sep 17 00:00:00 2001 From: Fabian Chong Date: Thu, 10 Sep 2020 13:14:32 +0800 Subject: [PATCH 086/303] rename packageName --- .../commands/create-plugin/createPlugin.ts | 34 +++++++------------ .../templates/default-plugin/package.json.hbs | 4 +-- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/packages/cli/src/commands/create-plugin/createPlugin.ts b/packages/cli/src/commands/create-plugin/createPlugin.ts index fe23acc924..001a86ba6f 100644 --- a/packages/cli/src/commands/create-plugin/createPlugin.ts +++ b/packages/cli/src/commands/create-plugin/createPlugin.ts @@ -87,11 +87,9 @@ export const addExportStatement = async ( export async function addPluginDependencyToApp( rootDir: string, - pluginName: string, versionStr: string, - scopeNameWithSlash: string, + pluginPackage: string, ) { - const pluginPackage = `${scopeNameWithSlash}plugin-${pluginName}`; const packageFilePath = 'packages/app/package.json'; const packageFile = resolvePath(rootDir, packageFilePath); @@ -121,9 +119,8 @@ export async function addPluginDependencyToApp( export async function addPluginToApp( rootDir: string, pluginName: string, - scopeNameWithSlash: string, + pluginPackage: string, ) { - const pluginPackage = `${scopeNameWithSlash}plugin-${pluginName}`; const pluginNameCapitalized = pluginName .split('-') .map(name => capitalize(name)) @@ -183,10 +180,6 @@ export async function movePlugin( export default async (cmd: Command) => { const codeownersPath = await getCodeownersFilePath(paths.targetRoot); - const scopeName = cmd.scope ? `@${cmd.scope.replace(/^@/, '')}` : ''; - const scopeNameWithSlash = cmd.scope ? `${scopeName}/` : ''; - const privatePackage = cmd.private === false ? false : true; - const registryURL = cmd.npmRegistry; const questions: Question[] = [ { @@ -231,6 +224,13 @@ export default async (cmd: Command) => { } const answers: Answers = await inquirer.prompt(questions); + const packageName = cmd.scope + ? `@${cmd.scope.replace(/^@/, '')}/plugin-${answers.id}` + : `plugin-${answers.id}`; + const scopeName = cmd.scope ? `@${cmd.scope.replace(/^@/, '')}` : ''; + const registryURL = (cmd.npmRegistry && + cmd.scope)`"${scopeName}:registry": "${cmd.npmRegistry}",`; + const privatePackage = cmd.private === false ? false : true; const appPackage = paths.resolveTargetRoot('packages/app'); const templateDir = paths.resolveOwn('templates/default-plugin'); @@ -257,6 +257,7 @@ export default async (cmd: Command) => { version, backstageVersion, scopeName, + packageName, privatePackage, registryURL, }); @@ -269,15 +270,10 @@ export default async (cmd: Command) => { if (await fs.pathExists(appPackage)) { Task.section('Adding plugin as dependency in app'); - await addPluginDependencyToApp( - paths.targetRoot, - answers.id, - version, - scopeNameWithSlash, - ); + await addPluginDependencyToApp(paths.targetRoot, version, packageName); Task.section('Import plugin in app'); - await addPluginToApp(paths.targetRoot, answers.id, scopeNameWithSlash); + await addPluginToApp(paths.targetRoot, answers.id, packageName); } if (ownerIds && ownerIds.length) { @@ -289,11 +285,7 @@ export default async (cmd: Command) => { } Task.log(); - Task.log( - `🥇 Successfully created ${chalk.cyan( - `${scopeNameWithSlash}plugin-${answers.id}`, - )}`, - ); + Task.log(`🥇 Successfully created ${chalk.cyan(`${packageName}`)}`); Task.log(); Task.exit(); } catch (error) { diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index 1180d67ea8..e6f9209997 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -1,12 +1,12 @@ { - "name": "{{#if scopeName}}{{scopeName}}/{{/if}}plugin-{{id}}", + "name": "{{packageName}}", "version": "{{version}}", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", "private": {{privatePackage}}, "publishConfig": { - {{#if registryURL}}"{{scopeName}}:registry":"{{registryURL}}",{{/if}} + {{registryURL}} "access": "public", "main": "dist/index.esm.js", "types": "dist/index.d.ts" From 816f158623a86cac23da8387aebc31cff8e1b3cc Mon Sep 17 00:00:00 2001 From: Fabian Chong Date: Thu, 10 Sep 2020 14:02:26 +0800 Subject: [PATCH 087/303] fix registryURL --- packages/cli/src/commands/create-plugin/createPlugin.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/create-plugin/createPlugin.ts b/packages/cli/src/commands/create-plugin/createPlugin.ts index 001a86ba6f..561fa36f11 100644 --- a/packages/cli/src/commands/create-plugin/createPlugin.ts +++ b/packages/cli/src/commands/create-plugin/createPlugin.ts @@ -228,8 +228,10 @@ export default async (cmd: Command) => { ? `@${cmd.scope.replace(/^@/, '')}/plugin-${answers.id}` : `plugin-${answers.id}`; const scopeName = cmd.scope ? `@${cmd.scope.replace(/^@/, '')}` : ''; - const registryURL = (cmd.npmRegistry && - cmd.scope)`"${scopeName}:registry": "${cmd.npmRegistry}",`; + const registryURL = + cmd.npmRegistry && cmd.scope + ? `"${scopeName}:registry": "${cmd.npmRegistry}",` + : null; const privatePackage = cmd.private === false ? false : true; const appPackage = paths.resolveTargetRoot('packages/app'); From 9cb2cfe2eec407af162b7abc674bf00230c0ddba Mon Sep 17 00:00:00 2001 From: Fabian Chong Date: Thu, 10 Sep 2020 17:23:00 +0800 Subject: [PATCH 088/303] detect monorepo --- packages/cli/src/commands/create-plugin/createPlugin.ts | 4 +++- packages/cli/src/lib/tasks.ts | 2 +- packages/create-app/templates/default-app/package.json.hbs | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/commands/create-plugin/createPlugin.ts b/packages/cli/src/commands/create-plugin/createPlugin.ts index 561fa36f11..48bc9025d9 100644 --- a/packages/cli/src/commands/create-plugin/createPlugin.ts +++ b/packages/cli/src/commands/create-plugin/createPlugin.ts @@ -237,9 +237,11 @@ export default async (cmd: Command) => { const appPackage = paths.resolveTargetRoot('packages/app'); const templateDir = paths.resolveOwn('templates/default-plugin'); const tempDir = resolvePath(os.tmpdir(), answers.id); - const pluginDir = (await fs.pathExists(paths.resolveTargetRoot('plugins'))) + const pluginDir = (await fs.pathExists(paths.resolveTargetRoot('lerna.json'))) ? paths.resolveTargetRoot('plugins', answers.id) : paths.resolveTargetRoot(answers.id); + console.log(await paths.resolveTargetRoot('lerna.json')); + console.log(await pluginDir); const ownerIds = parseOwnerIds(answers.owner); const version = backstageVersion; diff --git a/packages/cli/src/lib/tasks.ts b/packages/cli/src/lib/tasks.ts index 0573b8fda8..34f796165b 100644 --- a/packages/cli/src/lib/tasks.ts +++ b/packages/cli/src/lib/tasks.ts @@ -74,7 +74,7 @@ export async function templatingTask( throw new Error(`Failed to read template directory: ${error.message}`); }); - const isMonoRepo = paths.resolveTargetRoot('lerna.json'); + const isMonoRepo = await fs.pathExists(paths.resolveTargetRoot('lerna.json')); for (const file of files) { const destinationFile = file.replace(templateDir, destinationDir); diff --git a/packages/create-app/templates/default-app/package.json.hbs b/packages/create-app/templates/default-app/package.json.hbs index b95b5bbc5b..19e3891551 100644 --- a/packages/create-app/templates/default-app/package.json.hbs +++ b/packages/create-app/templates/default-app/package.json.hbs @@ -16,7 +16,7 @@ "test:all": "lerna run test -- --coverage", "lint": "lerna run lint --since origin/master --", "lint:all": "lerna run lint --", - "create-plugin": "backstage-cli create-plugin", + "create-plugin": "backstage-cli create-plugin --scope backstage --no-private", "remove-plugin": "backstage-cli remove-plugin" }, "workspaces": { From 1db225a02f630ecd3d6ee3a9131247fcfff386b5 Mon Sep 17 00:00:00 2001 From: Fabian Chong Date: Thu, 10 Sep 2020 18:09:09 +0800 Subject: [PATCH 089/303] keep addPluginDependencyToApp argument consistent --- packages/cli/src/commands/create-plugin/createPlugin.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/create-plugin/createPlugin.ts b/packages/cli/src/commands/create-plugin/createPlugin.ts index 48bc9025d9..398009ca8f 100644 --- a/packages/cli/src/commands/create-plugin/createPlugin.ts +++ b/packages/cli/src/commands/create-plugin/createPlugin.ts @@ -87,8 +87,8 @@ export const addExportStatement = async ( export async function addPluginDependencyToApp( rootDir: string, - versionStr: string, pluginPackage: string, + versionStr: string, ) { const packageFilePath = 'packages/app/package.json'; const packageFile = resolvePath(rootDir, packageFilePath); @@ -274,7 +274,7 @@ export default async (cmd: Command) => { if (await fs.pathExists(appPackage)) { Task.section('Adding plugin as dependency in app'); - await addPluginDependencyToApp(paths.targetRoot, version, packageName); + await addPluginDependencyToApp(paths.targetRoot, packageName, version); Task.section('Import plugin in app'); await addPluginToApp(paths.targetRoot, answers.id, packageName); From 4ec10a0643cdfa3624a5bac95c46c0fea199519e Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Thu, 10 Sep 2020 14:41:58 +0100 Subject: [PATCH 090/303] Add ssl config to example app for postgres --- .../create-app/templates/default-app/app-config.yaml.hbs | 6 ++++++ 1 file changed, 6 insertions(+) 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 bdd933e810..062b9b2e60 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -30,6 +30,12 @@ backend: password: $secret: env: POSTGRES_PASSWORD + ssl: + #ca: # if you have a CA file and want to verify it you can uncomment this section + # $secret: + # file: /ca/server.crt + $secret: + env: POSTGRES_SSL_OPTIONS {{/if}} proxy: From 902781c36f5ae623e6f18474b05078f9a8176e86 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 10 Sep 2020 17:50:36 +0200 Subject: [PATCH 091/303] docs: fix broken fragment links --- docs/features/techdocs/FAQ.md | 4 ++-- docs/features/techdocs/README.md | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/features/techdocs/FAQ.md b/docs/features/techdocs/FAQ.md index 1a52a35cfb..8c716313bb 100644 --- a/docs/features/techdocs/FAQ.md +++ b/docs/features/techdocs/FAQ.md @@ -12,8 +12,8 @@ to? Edit this file ## Technology -- [What static site generator is TechDocs using?](./#what-static-site-generator-is-techdocs-using) -- [What is the mkdocs-techdocs-core plugin?](./#what-is-the-mkdocs-techdocs-core-plugin) +- [What static site generator is TechDocs using?](#what-static-site-generator-is-techdocs-using) +- [What is the mkdocs-techdocs-core plugin?](#what-is-the-mkdocs-techdocs-core-plugin) #### What static site generator is TechDocs using? diff --git a/docs/features/techdocs/README.md b/docs/features/techdocs/README.md index 8bdbd27d3c..610319d733 100644 --- a/docs/features/techdocs/README.md +++ b/docs/features/techdocs/README.md @@ -26,12 +26,12 @@ Spotify’s developer experience offering with 2,400+ documentation sites and ## Project roadmap -| Version | Description | -| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| [TechDocs V.0 ✅][v0] | Read docs in Backstage - Enable anyone to get a reader experience working in Backstage. [See V.0 Use Cases.](./#techdocs-v0) | -| [TechDocs V.1 🚧][v1] | TechDocs end to end (alpha) - Alpha of TechDocs that you can use end to end - and contribute to. [See V.1 Use Cases.](./#techdocs-v1) | -| [TechDocs V.2 🔮⌛][v2] | Platform stability and compatibility improvements. [See V.2 Use Cases.](./#techdocs-v2) | -| TechDocs V.3 🔮⌛ | Widget Architecture - TechDocs widget architecture available, so the community can create their own customized features. | +| Version | Description | +| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| [TechDocs V.0 ✅][v0] | Read docs in Backstage - Enable anyone to get a reader experience working in Backstage. [See V.0 Use Cases.](#techdocs-v0) | +| [TechDocs V.1 🚧][v1] | TechDocs end to end (alpha) - Alpha of TechDocs that you can use end to end - and contribute to. [See V.1 Use Cases.](#techdocs-v1) | +| [TechDocs V.2 🔮⌛][v2] | Platform stability and compatibility improvements. [See V.2 Use Cases.](#techdocs-v2) | +| TechDocs V.3 🔮⌛ | Widget Architecture - TechDocs widget architecture available, so the community can create their own customized features. | [v0]: https://github.com/spotify/backstage/milestone/15 [v1]: https://github.com/spotify/backstage/milestone/16 From 2615cafd5d021045ed780810d059d1a41a3623b8 Mon Sep 17 00:00:00 2001 From: Oliver Sand Date: Wed, 9 Sep 2020 14:50:54 +0200 Subject: [PATCH 092/303] feat: add showCopyCodeButton to CodeSnippet component This allows to easiy copy the content of the code snippet. --- .../CodeSnippet/CodeSnippet.stories.tsx | 6 +++++ .../CodeSnippet/CodeSnippet.test.tsx | 12 ++++++++- .../components/CodeSnippet/CodeSnippet.tsx | 27 +++++++++++++------ .../CopyTextButton/CopyTextButton.test.tsx | 4 +-- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/packages/core/src/components/CodeSnippet/CodeSnippet.stories.tsx b/packages/core/src/components/CodeSnippet/CodeSnippet.stories.tsx index c0f57d6330..77f3ca51cc 100644 --- a/packages/core/src/components/CodeSnippet/CodeSnippet.stories.tsx +++ b/packages/core/src/components/CodeSnippet/CodeSnippet.stories.tsx @@ -86,3 +86,9 @@ export const Languages = () => (
); + +export const CopyCode = () => ( + + + +); diff --git a/packages/core/src/components/CodeSnippet/CodeSnippet.test.tsx b/packages/core/src/components/CodeSnippet/CodeSnippet.test.tsx index 42efbf14af..1a76f84f44 100644 --- a/packages/core/src/components/CodeSnippet/CodeSnippet.test.tsx +++ b/packages/core/src/components/CodeSnippet/CodeSnippet.test.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; +import { render, fireEvent } from '@testing-library/react'; import { wrapInTestApp } from '@backstage/test-utils'; import { CodeSnippet } from './CodeSnippet'; @@ -55,4 +55,14 @@ describe('', () => { expect(queryByText(/2/)).toBeInTheDocument(); expect(queryByText(/3/)).toBeInTheDocument(); }); + + it('copy code using button', async () => { + document.execCommand = jest.fn(); + const rendered = render( + wrapInTestApp(), + ); + const button = rendered.getByTitle('Text copied to clipboard'); + fireEvent.click(button); + expect(document.execCommand).toHaveBeenCalled(); + }); }); diff --git a/packages/core/src/components/CodeSnippet/CodeSnippet.tsx b/packages/core/src/components/CodeSnippet/CodeSnippet.tsx index 324d71e936..b6d9b3a5aa 100644 --- a/packages/core/src/components/CodeSnippet/CodeSnippet.tsx +++ b/packages/core/src/components/CodeSnippet/CodeSnippet.tsx @@ -20,19 +20,22 @@ import SyntaxHighlighter from 'react-syntax-highlighter'; import { docco, dark } from 'react-syntax-highlighter/dist/cjs/styles/hljs'; import { useTheme } from '@material-ui/core'; import { BackstageTheme } from '@backstage/theme'; +import { CopyTextButton } from '../CopyTextButton'; type Props = { text: string; language: string; showLineNumbers?: boolean; + showCopyCodeButton?: boolean; }; const defaultProps = { showLineNumbers: false, + showCopyCodeButton: false, }; export const CodeSnippet: FC = props => { - const { text, language, showLineNumbers } = { + const { text, language, showLineNumbers, showCopyCodeButton } = { ...defaultProps, ...props, }; @@ -41,13 +44,20 @@ export const CodeSnippet: FC = props => { const mode = theme.palette.type === 'dark' ? dark : docco; return ( - - {text} - +
+ + {text} + + {showCopyCodeButton && ( +
+ +
+ )} +
); }; @@ -56,4 +66,5 @@ CodeSnippet.propTypes = { text: PropTypes.string.isRequired, language: PropTypes.string.isRequired, showLineNumbers: PropTypes.bool, + showCopyCodeButton: PropTypes.bool, }; diff --git a/packages/core/src/components/CopyTextButton/CopyTextButton.test.tsx b/packages/core/src/components/CopyTextButton/CopyTextButton.test.tsx index e789035b44..cab992e11a 100644 --- a/packages/core/src/components/CopyTextButton/CopyTextButton.test.tsx +++ b/packages/core/src/components/CopyTextButton/CopyTextButton.test.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; +import { render, fireEvent } from '@testing-library/react'; import { wrapInTestApp } from '@backstage/test-utils'; import { CopyTextButton } from './CopyTextButton'; import { @@ -76,7 +76,7 @@ describe('', () => { ), ); const button = rendered.getByTitle('mockTooltip'); - button.click(); + fireEvent.click(button); expect(document.execCommand).toHaveBeenCalled(); rendered.getByText('mockTooltip'); }); From 500038a30092e8164ca68b683c0fb57b6eb987f2 Mon Sep 17 00:00:00 2001 From: Oliver Sand Date: Wed, 9 Sep 2020 15:08:03 +0200 Subject: [PATCH 093/303] fix: allow copying multiline text --- .../core/src/components/CopyTextButton/CopyTextButton.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/core/src/components/CopyTextButton/CopyTextButton.tsx b/packages/core/src/components/CopyTextButton/CopyTextButton.tsx index e4773165cc..cb322e5b56 100644 --- a/packages/core/src/components/CopyTextButton/CopyTextButton.tsx +++ b/packages/core/src/components/CopyTextButton/CopyTextButton.tsx @@ -63,7 +63,7 @@ export const CopyTextButton: FC = props => { }; const classes = useStyles(props); const errorApi = useApi(errorApiRef); - const inputRef = useRef(null); + const inputRef = useRef(null); const [open, setOpen] = useState(false); const handleCopyClick: MouseEventHandler = e => { @@ -82,9 +82,8 @@ export const CopyTextButton: FC = props => { return ( <> - From 6f67809bd3abff3f74bfb14039ed8d95bb9bed98 Mon Sep 17 00:00:00 2001 From: Oliver Sand Date: Thu, 10 Sep 2020 10:34:04 +0200 Subject: [PATCH 094/303] feat: allow to view the raw API definitions, even if a viewer component is available --- .../catalog/EntityPageApi/EntityPageApi.tsx | 2 +- .../ApiDefinitionCard/ApiDefinitionCard.tsx | 91 ++++++++++++++++--- .../ApiDefinitionWidget.tsx | 40 -------- .../components/ApiDefinitionWidget/index.ts | 17 ---- .../AsyncApiDefinitionWidget.tsx | 2 +- .../OpenApiDefinitionWidget.tsx | 2 +- .../PlainApiDefinitionWidget.tsx | 4 +- plugins/api-docs/src/components/index.ts | 3 + 8 files changed, 85 insertions(+), 76 deletions(-) delete mode 100644 plugins/api-docs/src/components/ApiDefinitionWidget/ApiDefinitionWidget.tsx delete mode 100644 plugins/api-docs/src/components/ApiDefinitionWidget/index.ts diff --git a/plugins/api-docs/src/catalog/EntityPageApi/EntityPageApi.tsx b/plugins/api-docs/src/catalog/EntityPageApi/EntityPageApi.tsx index da2cf71ac4..f26691d58c 100644 --- a/plugins/api-docs/src/catalog/EntityPageApi/EntityPageApi.tsx +++ b/plugins/api-docs/src/catalog/EntityPageApi/EntityPageApi.tsx @@ -39,7 +39,7 @@ export const EntityPageApi: FC<{ entity: Entity }> = ({ entity }) => { {apiNames.map(api => ( - + ))} diff --git a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx index c4a366c4d9..5650b0745f 100644 --- a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx +++ b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx @@ -15,31 +15,92 @@ */ import { ApiEntity } from '@backstage/catalog-model'; -import { InfoCard } from '@backstage/core'; +import { TabbedCard, CardTab } from '@backstage/core'; import React from 'react'; -import { ApiDefinitionWidget } from '../ApiDefinitionWidget'; +import { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget'; import { Alert } from '@material-ui/lab'; +import { OpenApiDefinitionWidget } from '../OpenApiDefinitionWidget'; +import { AsyncApiDefinitionWidget } from '../AsyncApiDefinitionWidget'; -type Props = { - title?: string; - apiEntity?: ApiEntity; +type ApiDefinitionWidget = { + type: string; + title: string; + component: (definition: string) => React.ReactElement; + rawLanguage?: string; }; -export const ApiDefinitionCard = ({ title, apiEntity }: Props) => { +export function defaultDefinitionWidgets(): ApiDefinitionWidget[] { + return [ + { + type: 'openapi', + title: 'OpenAPI', + rawLanguage: 'yaml', + component: definition => ( + + ), + }, + { + type: 'asyncapi', + title: 'AsyncAPI', + rawLanguage: 'yaml', + component: definition => ( + + ), + }, + ]; +} + +type Props = { + apiEntity?: ApiEntity; + definitionWidgets?: ApiDefinitionWidget[]; +}; + +const defaultProps = { + definitionWidgets: defaultDefinitionWidgets(), +}; + +export const ApiDefinitionCard = (props: Props) => { + const { apiEntity, definitionWidgets } = { + ...defaultProps, + ...props, + }; + if (!apiEntity) { + return Could not fetch the API; + } + + const definitionWidget = definitionWidgets.find( + d => d.type === apiEntity.spec.type, + ); + + if (definitionWidget) { return ( - - Could not fetch the API - + + + {definitionWidget.component(apiEntity.spec.definition)} + + + + + ); } return ( - - - + + + , + ]} + /> ); }; diff --git a/plugins/api-docs/src/components/ApiDefinitionWidget/ApiDefinitionWidget.tsx b/plugins/api-docs/src/components/ApiDefinitionWidget/ApiDefinitionWidget.tsx deleted file mode 100644 index e1283bb525..0000000000 --- a/plugins/api-docs/src/components/ApiDefinitionWidget/ApiDefinitionWidget.tsx +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ - -import React from 'react'; -import { AsyncApiDefinitionWidget } from '../AsyncApiDefinitionWidget'; -import { OpenApiDefinitionWidget } from '../OpenApiDefinitionWidget'; -import { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget'; - -type Props = { - type: string; - definition: string; -}; - -export const ApiDefinitionWidget = ({ type, definition }: Props) => { - switch (type) { - case 'openapi': - return ; - - case 'asyncapi': - return ; - - default: - return ( - - ); - } -}; diff --git a/plugins/api-docs/src/components/ApiDefinitionWidget/index.ts b/plugins/api-docs/src/components/ApiDefinitionWidget/index.ts deleted file mode 100644 index 64c5f87b21..0000000000 --- a/plugins/api-docs/src/components/ApiDefinitionWidget/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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 { ApiDefinitionWidget } from './ApiDefinitionWidget'; diff --git a/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.tsx b/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.tsx index 2f64c4b2ab..ac5dedfd9c 100644 --- a/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinitionWidget.tsx @@ -136,7 +136,7 @@ const useStyles = makeStyles(theme => ({ })); type Props = { - definition: any; + definition: string; }; export const AsyncApiDefinitionWidget = ({ definition }: Props) => { diff --git a/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx b/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx index 61f5cb2b75..b96f50166e 100644 --- a/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx @@ -66,7 +66,7 @@ const useStyles = makeStyles(theme => ({ })); type Props = { - definition: any; + definition: string; }; export const OpenApiDefinitionWidget = ({ definition }: Props) => { diff --git a/plugins/api-docs/src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.tsx b/plugins/api-docs/src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.tsx index 46631c5a4b..0b2ebb4ca4 100644 --- a/plugins/api-docs/src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/PlainApiDefinitionWidget/PlainApiDefinitionWidget.tsx @@ -23,5 +23,7 @@ type Props = { }; export const PlainApiDefinitionWidget = ({ definition, language }: Props) => { - return ; + return ( + + ); }; diff --git a/plugins/api-docs/src/components/index.ts b/plugins/api-docs/src/components/index.ts index d49303c24a..55b9517f9c 100644 --- a/plugins/api-docs/src/components/index.ts +++ b/plugins/api-docs/src/components/index.ts @@ -15,5 +15,8 @@ */ export { ApiDefinitionCard } from './ApiDefinitionCard'; +export { AsyncApiDefinitionWidget } from './AsyncApiDefinitionWidget'; +export { OpenApiDefinitionWidget } from './OpenApiDefinitionWidget'; +export { PlainApiDefinitionWidget } from './PlainApiDefinitionWidget'; export { useComponentApiNames } from './useComponentApiNames'; export { useComponentApiEntities } from './useComponentApiEntities'; From 30f42d7655304ace20d615bda32fb483a67b4e79 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 10 Sep 2020 18:08:21 +0200 Subject: [PATCH 095/303] create-app: sync backend Dockerfile --- .../templates/default-app/packages/backend/Dockerfile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/create-app/templates/default-app/packages/backend/Dockerfile b/packages/create-app/templates/default-app/packages/backend/Dockerfile index 3e8ba36cec..a7bd814b19 100644 --- a/packages/create-app/templates/default-app/packages/backend/Dockerfile +++ b/packages/create-app/templates/default-app/packages/backend/Dockerfile @@ -2,8 +2,15 @@ FROM node:12 WORKDIR /usr/src/app -COPY . . +# Copy repo skeleton first, to avoid unnecessary docker cache invalidation. +# The skeleton contains the package.json of each package in the monorepo, +# and along with yarn.lock and the root package.json, that's enough to run yarn install. +ADD yarn.lock package.json skeleton.tar ./ RUN yarn install --frozen-lockfile --production +# This will copy the contents of the dist-workspace when running the build-image command. +# Do not use this Dockerfile outside of that command, as it will copy in the source code instead. +COPY . . + CMD ["node", "packages/backend"] From 24212dc6f23629b4a94704c25d9f88cac883b641 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Fri, 11 Sep 2020 00:16:18 +0530 Subject: [PATCH 096/303] Added Backstage logo to the Open Graph Image metadata of backstage.io (#2401) * updated svg to png * updated spaces with hex values * removed spaces from filenames * added deleted files --- microsite/siteConfig.js | 6 ++++-- ....ai => Backstage_Identity_Assets_Artwork_RGB.ai} | 0 ...e_Identity_Assets_Artwork_RGB_05 Logo_Black.jpg} | Bin ...e_Identity_Assets_Artwork_RGB_06_Icon_Black.jpg} | Bin ...df => Backstage_Identity_Assets_Artwork_RGB.pdf} | 0 .../{01 Logo_White.pdf => 01_Logo_White.pdf} | Bin .../{02 Icon_White.pdf => 02_Icon_White.pdf} | Bin .../{03 Logo_Teal.pdf => 03_Logo_Teal.pdf} | Bin .../{04 Icon_Teal.pdf => 04_Icon_Teal.pdf} | Bin .../{05 Logo_Black.pdf => 05_Logo_Black.pdf} | Bin .../{06 Icon_Black.pdf => 06_Icon_Black.pdf} | Bin ...Icon_Gradient.pdf => 07_Large Icon_Gradient.pdf} | Bin ...e_Identity_Assets_Artwork_RGB_01_Logo_White.png} | Bin ...e_Identity_Assets_Artwork_RGB_02_Icon_White.png} | Bin ...ge_Identity_Assets_Artwork_RGB_03_Logo_Teal.png} | Bin ...ge_Identity_Assets_Artwork_RGB_04_Icon_Teal.png} | Bin ...e_Identity_Assets_Artwork_RGB_05_Logo_Black.png} | Bin ...e_Identity_Assets_Artwork_RGB_06_Icon_Black.png} | Bin ...y_Assets_Artwork_RGB_07_Large_Icon_Gradient.png} | Bin 19 files changed, 4 insertions(+), 2 deletions(-) rename microsite/static/logo_assets/ai/{Backstage Identity_Assets_Artwork_RGB.ai => Backstage_Identity_Assets_Artwork_RGB.ai} (100%) rename microsite/static/logo_assets/jpeg/{Backstage Identity_Assets_Artwork_RGB_05 Logo_Black.jpg => Backstage_Identity_Assets_Artwork_RGB_05 Logo_Black.jpg} (100%) rename microsite/static/logo_assets/jpeg/{Backstage Identity_Assets_Artwork_RGB_06 Icon_Black.jpg => Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.jpg} (100%) rename microsite/static/logo_assets/pdf/{Backstage Identity_Assets_Artwork_RGB.pdf => Backstage_Identity_Assets_Artwork_RGB.pdf} (100%) rename microsite/static/logo_assets/pdf/Individual/{01 Logo_White.pdf => 01_Logo_White.pdf} (100%) rename microsite/static/logo_assets/pdf/Individual/{02 Icon_White.pdf => 02_Icon_White.pdf} (100%) rename microsite/static/logo_assets/pdf/Individual/{03 Logo_Teal.pdf => 03_Logo_Teal.pdf} (100%) rename microsite/static/logo_assets/pdf/Individual/{04 Icon_Teal.pdf => 04_Icon_Teal.pdf} (100%) rename microsite/static/logo_assets/pdf/Individual/{05 Logo_Black.pdf => 05_Logo_Black.pdf} (100%) rename microsite/static/logo_assets/pdf/Individual/{06 Icon_Black.pdf => 06_Icon_Black.pdf} (100%) rename microsite/static/logo_assets/pdf/Individual/{07 Large Icon_Gradient.pdf => 07_Large Icon_Gradient.pdf} (100%) rename microsite/static/logo_assets/png/{Backstage Identity_Assets_Artwork_RGB_01 Logo_White.png => Backstage_Identity_Assets_Artwork_RGB_01_Logo_White.png} (100%) rename microsite/static/logo_assets/png/{Backstage Identity_Assets_Artwork_RGB_02 Icon_White.png => Backstage_Identity_Assets_Artwork_RGB_02_Icon_White.png} (100%) rename microsite/static/logo_assets/png/{Backstage Identity_Assets_Artwork_RGB_03 Logo_Teal.png => Backstage_Identity_Assets_Artwork_RGB_03_Logo_Teal.png} (100%) rename microsite/static/logo_assets/png/{Backstage Identity_Assets_Artwork_RGB_04 Icon_Teal.png => Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png} (100%) rename microsite/static/logo_assets/png/{Backstage Identity_Assets_Artwork_RGB_05 Logo_Black.png => Backstage_Identity_Assets_Artwork_RGB_05_Logo_Black.png} (100%) rename microsite/static/logo_assets/png/{Backstage Identity_Assets_Artwork_RGB_06 Icon_Black.png => Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.png} (100%) rename microsite/static/logo_assets/png/{Backstage Identity_Assets_Artwork_RGB_07 Large Icon_Gradient.png => Backstage_Identity_Assets_Artwork_RGB_07_Large_Icon_Gradient.png} (100%) diff --git a/microsite/siteConfig.js b/microsite/siteConfig.js index cc5ad89e09..f0762dbf09 100644 --- a/microsite/siteConfig.js +++ b/microsite/siteConfig.js @@ -93,8 +93,10 @@ const siteConfig = { cleanUrl: true, // Open Graph and Twitter card images. - ogImage: 'img/logo-gradient-on-dark.svg', - twitterImage: 'img/logo-gradient-on-dark.svg', + ogImage: + 'logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png', + twitterImage: + 'logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png', // For sites with a sizable amount of content, set collapsible to true. // Expand/collapse the links and subcategories under categories. diff --git a/microsite/static/logo_assets/ai/Backstage Identity_Assets_Artwork_RGB.ai b/microsite/static/logo_assets/ai/Backstage_Identity_Assets_Artwork_RGB.ai similarity index 100% rename from microsite/static/logo_assets/ai/Backstage Identity_Assets_Artwork_RGB.ai rename to microsite/static/logo_assets/ai/Backstage_Identity_Assets_Artwork_RGB.ai diff --git a/microsite/static/logo_assets/jpeg/Backstage Identity_Assets_Artwork_RGB_05 Logo_Black.jpg b/microsite/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_05 Logo_Black.jpg similarity index 100% rename from microsite/static/logo_assets/jpeg/Backstage Identity_Assets_Artwork_RGB_05 Logo_Black.jpg rename to microsite/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_05 Logo_Black.jpg diff --git a/microsite/static/logo_assets/jpeg/Backstage Identity_Assets_Artwork_RGB_06 Icon_Black.jpg b/microsite/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.jpg similarity index 100% rename from microsite/static/logo_assets/jpeg/Backstage Identity_Assets_Artwork_RGB_06 Icon_Black.jpg rename to microsite/static/logo_assets/jpeg/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.jpg diff --git a/microsite/static/logo_assets/pdf/Backstage Identity_Assets_Artwork_RGB.pdf b/microsite/static/logo_assets/pdf/Backstage_Identity_Assets_Artwork_RGB.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Backstage Identity_Assets_Artwork_RGB.pdf rename to microsite/static/logo_assets/pdf/Backstage_Identity_Assets_Artwork_RGB.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/01 Logo_White.pdf b/microsite/static/logo_assets/pdf/Individual/01_Logo_White.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/01 Logo_White.pdf rename to microsite/static/logo_assets/pdf/Individual/01_Logo_White.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/02 Icon_White.pdf b/microsite/static/logo_assets/pdf/Individual/02_Icon_White.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/02 Icon_White.pdf rename to microsite/static/logo_assets/pdf/Individual/02_Icon_White.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/03 Logo_Teal.pdf b/microsite/static/logo_assets/pdf/Individual/03_Logo_Teal.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/03 Logo_Teal.pdf rename to microsite/static/logo_assets/pdf/Individual/03_Logo_Teal.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/04 Icon_Teal.pdf b/microsite/static/logo_assets/pdf/Individual/04_Icon_Teal.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/04 Icon_Teal.pdf rename to microsite/static/logo_assets/pdf/Individual/04_Icon_Teal.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/05 Logo_Black.pdf b/microsite/static/logo_assets/pdf/Individual/05_Logo_Black.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/05 Logo_Black.pdf rename to microsite/static/logo_assets/pdf/Individual/05_Logo_Black.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/06 Icon_Black.pdf b/microsite/static/logo_assets/pdf/Individual/06_Icon_Black.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/06 Icon_Black.pdf rename to microsite/static/logo_assets/pdf/Individual/06_Icon_Black.pdf diff --git a/microsite/static/logo_assets/pdf/Individual/07 Large Icon_Gradient.pdf b/microsite/static/logo_assets/pdf/Individual/07_Large Icon_Gradient.pdf similarity index 100% rename from microsite/static/logo_assets/pdf/Individual/07 Large Icon_Gradient.pdf rename to microsite/static/logo_assets/pdf/Individual/07_Large Icon_Gradient.pdf diff --git a/microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_01 Logo_White.png b/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_01_Logo_White.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_01 Logo_White.png rename to microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_01_Logo_White.png diff --git a/microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_02 Icon_White.png b/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_02_Icon_White.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_02 Icon_White.png rename to microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_02_Icon_White.png diff --git a/microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_03 Logo_Teal.png b/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_03_Logo_Teal.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_03 Logo_Teal.png rename to microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_03_Logo_Teal.png diff --git a/microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_04 Icon_Teal.png b/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_04 Icon_Teal.png rename to microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_04_Icon_Teal.png diff --git a/microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_05 Logo_Black.png b/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_05_Logo_Black.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_05 Logo_Black.png rename to microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_05_Logo_Black.png diff --git a/microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_06 Icon_Black.png b/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_06 Icon_Black.png rename to microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_06_Icon_Black.png diff --git a/microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_07 Large Icon_Gradient.png b/microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_07_Large_Icon_Gradient.png similarity index 100% rename from microsite/static/logo_assets/png/Backstage Identity_Assets_Artwork_RGB_07 Large Icon_Gradient.png rename to microsite/static/logo_assets/png/Backstage_Identity_Assets_Artwork_RGB_07_Large_Icon_Gradient.png From 0deaa7daa828c7a60d143fc371e45d3f21c6378b Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 00:27:57 +0200 Subject: [PATCH 097/303] Add the user Getting Started page This comes from our README https://github.com/spotify/backstage\#getting-started --- docs/getting-started/index.md | 111 ++++++------------ .../running-backstage-locally.md | 84 +++++++++++++ 2 files changed, 123 insertions(+), 72 deletions(-) create mode 100644 docs/getting-started/running-backstage-locally.md diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index c1c6ea9231..4695ab75e9 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -1,84 +1,51 @@ --- id: index -title: Running Backstage Locally +title: Getting Started --- -First make sure you are using NodeJS with an Active LTS Release, currently v12. -This is made easy with a version manager such as nvm which allows for version -switching. +There are two different ways to get started with Backstage, either by creating a +standalone app, or by cloning this repo. Which method you use depends on what +you're planning to do. + +Creating a standalone instance makes it simpler to customize the application for +your needs whilst staying up to date with the project. You will also depend on +`@backstage` packages from NPM, making the project much smaller. This is the +recommended approach if you want to kick the tyres of Backstage or setup your +own instance. + +On the other hand, if you want to contribute plugins or to the project in +general, it's easier to fork and clone this project. That will let you stay up +to date with the latest changes, and gives you an easier path to make Pull +Requests towards this repo. + +### Creating a Standalone App + +Backstage provides the `@backstage/create-app` package to scaffold standalone +instances of Backstage. You will need to have +[NodeJS](https://nodejs.org/en/download/) Active LTS Release installed +(currently v12), and [yarn](https://classic.yarnpkg.com/en/docs/install). You +will also need to have [Docker](https://docs.docker.com/engine/install/) +installed to use some features like Software Templates and TechDocs. + +Using `npx` you can then run the following to create an app in a chosen +subdirectory of your current working directory: ```bash -# Checking your version -node --version -> v14.7.0 - -# Adding a second node version -nvm install 12 -> Downloading and installing node v12.18.3... -> Now using node v12.18.3 (npm v6.14.6) +npx @backstage/create-app ``` -To get up and running with a local Backstage to evaluate it, let's clone it off -of GitHub and run an initial build. +You will be taken through a wizard to create your app, and the output should +look something like this. You can read more about this process +[here](https://backstage.io/docs/getting-started/create-an-app). -```bash -# Start from your local development folder -git clone git@github.com:spotify/backstage.git -cd backstage +### Contributing to Backstage -# Fetch our dependencies and run an initial build -yarn install -yarn tsc -yarn build -``` +You can read more in our +[CONTRIBUTING](https://github.com/spotify/backstage/blob/master/CONTRIBUTING.md) +guide, which can help you get setup with a Backstage development environment. -Phew! Now you have a local repository that's ready to run and to add any open -source contributions into. +### Next steps -We are now going to launch two things: an example Backstage frontend app, and an -example Backstage backend that the frontend talks to. You are going to need two -terminal windows, both starting from the Backstage project root. - -In the first window, run - -```bash -cd packages/backend -yarn start -``` - -That starts up a backend instance on port 7000. - -In the other window, we will first populate the catalog with some nice mock data -to look at, and then launch the frontend. These commands are run from the -project root, not inside the backend directory. - -```bash -yarn lerna run mock-data -yarn start -``` - -That starts up the frontend on port 3000, and should automatically open a -browser window showing it. - -Congratulations! That should be it. Let us know how it went -[on discord](https://discord.gg/EBHEGzX), file issues for any -[feature](https://github.com/spotify/backstage/issues/new?labels=help+wanted&template=feature_template.md) -or -[plugin suggestions](https://github.com/spotify/backstage/issues/new?labels=plugin&template=plugin_template.md&title=%5BPlugin%5D+THE+PLUGIN+NAME), -or -[bugs](https://github.com/spotify/backstage/issues/new?labels=bug&template=bug_template.md) -you have, and feel free to -[contribute](https://github.com/spotify/backstage/blob/master/CONTRIBUTING.md)! - -## Creating a Plugin - -The value of Backstage grows with every new plugin that gets added. Here is a -collection of tutorials that will guide you through setting up and extending an -instance of Backstage with your own plugins. - -- [Development Environment](development-environment.md) -- [Create a Backstage Plugin](../plugins/create-a-plugin.md) -- [Structure of a Plugin](../plugins/structure-of-a-plugin.md) -- [Utility APIs](../api/utility-apis.md) - -[Back to Docs](../README.md) +Take a look at the +[Running Backstage Locally](/docs/getting-started/running-backstage-locally) +guide to learn how to set up Backstage, and how to develop on the platform. diff --git a/docs/getting-started/running-backstage-locally.md b/docs/getting-started/running-backstage-locally.md new file mode 100644 index 0000000000..04be6499c6 --- /dev/null +++ b/docs/getting-started/running-backstage-locally.md @@ -0,0 +1,84 @@ +--- +id: running-backstage-locally +title: Running Backstage Locally +--- + +First make sure you are using NodeJS with an Active LTS Release, currently v12. +This is made easy with a version manager such as nvm which allows for version +switching. + +```bash +# Checking your version +node --version +> v14.7.0 + +# Adding a second node version +nvm install 12 +> Downloading and installing node v12.18.3... +> Now using node v12.18.3 (npm v6.14.6) +``` + +To get up and running with a local Backstage to evaluate it, let's clone it off +of GitHub and run an initial build. + +```bash +# Start from your local development folder +git clone git@github.com:spotify/backstage.git +cd backstage + +# Fetch our dependencies and run an initial build +yarn install +yarn tsc +yarn build +``` + +Phew! Now you have a local repository that's ready to run and to add any open +source contributions into. + +We are now going to launch two things: an example Backstage frontend app, and an +example Backstage backend that the frontend talks to. You are going to need two +terminal windows, both starting from the Backstage project root. + +In the first window, run + +```bash +cd packages/backend +yarn start +``` + +That starts up a backend instance on port 7000. + +In the other window, we will first populate the catalog with some nice mock data +to look at, and then launch the frontend. These commands are run from the +project root, not inside the backend directory. + +```bash +yarn lerna run mock-data +yarn start +``` + +That starts up the frontend on port 3000, and should automatically open a +browser window showing it. + +Congratulations! That should be it. Let us know how it went +[on discord](https://discord.gg/EBHEGzX), file issues for any +[feature](https://github.com/spotify/backstage/issues/new?labels=help+wanted&template=feature_template.md) +or +[plugin suggestions](https://github.com/spotify/backstage/issues/new?labels=plugin&template=plugin_template.md&title=%5BPlugin%5D+THE+PLUGIN+NAME), +or +[bugs](https://github.com/spotify/backstage/issues/new?labels=bug&template=bug_template.md) +you have, and feel free to +[contribute](https://github.com/spotify/backstage/blob/master/CONTRIBUTING.md)! + +## Creating a Plugin + +The value of Backstage grows with every new plugin that gets added. Here is a +collection of tutorials that will guide you through setting up and extending an +instance of Backstage with your own plugins. + +- [Development Environment](development-environment.md) +- [Create a Backstage Plugin](../plugins/create-a-plugin.md) +- [Structure of a Plugin](../plugins/structure-of-a-plugin.md) +- [Utility APIs](../api/utility-apis.md) + +[Back to Docs](../README.md) From 3e85b8cf91a42dbf4effbd1c2b8004a72f0da0b3 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 00:28:16 +0200 Subject: [PATCH 098/303] Fix docs sidebar for docs gettings started --- microsite/sidebars.json | 1 + 1 file changed, 1 insertion(+) diff --git a/microsite/sidebars.json b/microsite/sidebars.json index a3c11beeac..7b4c852f4d 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -12,6 +12,7 @@ ], "Getting Started": [ "getting-started/index", + "getting-started/running-backstage-locally", "getting-started/installation", "getting-started/development-environment", "getting-started/create-an-app", From 465701e058953fd7dfea04d519f55873480bccbd Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 00:35:32 +0200 Subject: [PATCH 099/303] Use relative file link in docs to refer other page --- docs/getting-started/index.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index 4695ab75e9..c528ad34ad 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -46,6 +46,5 @@ guide, which can help you get setup with a Backstage development environment. ### Next steps -Take a look at the -[Running Backstage Locally](/docs/getting-started/running-backstage-locally) +Take a look at the [Running Backstage Locally](./running-backstage-locally.md) guide to learn how to set up Backstage, and how to develop on the platform. From 705e02f7af1b2ee8f7828fc30630190e253a07d8 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 00:55:07 +0200 Subject: [PATCH 100/303] Remove duplicate section in the README --- README.md | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/README.md b/README.md index 4009864edc..65a2a05671 100644 --- a/README.md +++ b/README.md @@ -31,33 +31,7 @@ A detailed project roadmap, including already delivered milestones, is available ## Getting Started -There are two different ways to get started with Backstage, either by creating a standalone app, or by cloning this repo. Which method you use depends on what you're planning to do. - -Creating a standalone instance makes it simpler to customize the application for your needs whilst staying up to date with the project. You will also depend on `@backstage` packages from NPM, making the project much smaller. This is the recommended approach if you want to kick the tyres of Backstage or setup your own instance. - -On the other hand, if you want to contribute plugins or to the project in general, it's easier to fork and clone this project. That will let you stay up to date with the latest changes, and gives you an easier path to make Pull Requests towards this repo. - -### Creating a Standalone App - -Backstage provides the `@backstage/create-app` package to scaffold standalone instances of Backstage. You will need to have -[NodeJS](https://nodejs.org/en/download/) Active LTS Release installed -(currently v12), and [yarn](https://classic.yarnpkg.com/en/docs/install). You will also need to have [Docker](https://docs.docker.com/engine/install/) installed to use some features like Software Templates and TechDocs. - -Using `npx` you can then run the following to create an app in a chosen subdirectory of your current working directory: - -```bash -npx @backstage/create-app -``` - -You will be taken through a wizard to create your app, and the output should look something like this. You can read more about this process [here](https://backstage.io/docs/getting-started/create-an-app) - -### Contributing to Backstage - -You can read more in our [CONTRIBUTING.md](./CONTRIBUTING.md#get-started) guide, which can help you get setup with a Backstage development environment. - -### Next steps - -Take a look at the [Getting Started](https://backstage.io/docs/getting-started/index) guide to learn how to set up Backstage, and how to develop on the platform. +Check out [the documentation](https://backstage.io/docs/getting-started) on how to start using Backstage. ## Documentation From 0b95f633d9d850c9005786539c000952e961e149 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Fri, 11 Sep 2020 08:07:34 +0200 Subject: [PATCH 101/303] Update v1 milestone in project roadmap --- docs/features/techdocs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/techdocs/README.md b/docs/features/techdocs/README.md index 610319d733..a7af6cc503 100644 --- a/docs/features/techdocs/README.md +++ b/docs/features/techdocs/README.md @@ -29,7 +29,7 @@ Spotify’s developer experience offering with 2,400+ documentation sites and | Version | Description | | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | | [TechDocs V.0 ✅][v0] | Read docs in Backstage - Enable anyone to get a reader experience working in Backstage. [See V.0 Use Cases.](#techdocs-v0) | -| [TechDocs V.1 🚧][v1] | TechDocs end to end (alpha) - Alpha of TechDocs that you can use end to end - and contribute to. [See V.1 Use Cases.](#techdocs-v1) | +| [TechDocs V.1 ✅][v1] | TechDocs end to end (alpha) - Alpha of TechDocs that you can use end to end - and contribute to. [See V.1 Use Cases.](#techdocs-v1) | | [TechDocs V.2 🔮⌛][v2] | Platform stability and compatibility improvements. [See V.2 Use Cases.](#techdocs-v2) | | TechDocs V.3 🔮⌛ | Widget Architecture - TechDocs widget architecture available, so the community can create their own customized features. | From 84b72fbad1869cc6a8b9f96341a88371752202e0 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 09:37:35 +0200 Subject: [PATCH 102/303] Update mkdocks.yml for Techdocs rendering of the docs --- mkdocs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index bcf4969892..10cd7df9b2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -12,7 +12,8 @@ nav: - Strategies for adopting: 'overview/adopting.md' - Logo assets: 'overview/logos.md' - Getting started: - - Running Backstage locally: 'getting-started/index.md' + - Getting Started: 'getting-started/index.md' + - Running Backstage locally: 'getting-started/running-backstage-locally.md' - Installation: 'getting-started/installation.md' - Local development: 'getting-started/development-environment.md' - Demo deployment: https://backstage-demo.roadie.io From 2398a95e5c581cee559ca5a43db108e49195087c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Sep 2020 10:28:37 +0200 Subject: [PATCH 103/303] chore(deps): bump node-fetch from 2.6.0 to 2.6.1 (#2412) Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1. - [Release notes](https://github.com/bitinn/node-fetch/releases) - [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index add67f0fcf..6865bdc256 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14876,11 +14876,16 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@2.6.0, node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0, node-fetch@^2.6.0: +node-fetch@2.6.0: version "2.6.0" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== +node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0, node-fetch@^2.6.0: + version "2.6.1" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-forge@0.9.0: version "0.9.0" resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" From 39a5419fd75bf75f00d7df6786072606811c2492 Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Fri, 11 Sep 2020 09:37:39 +0100 Subject: [PATCH 104/303] Rerun CI From 51b94bd82cc282c84a6f2d1d5484684837ce1ecf Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 10:47:02 +0200 Subject: [PATCH 105/303] Remove duplicate instructions from contributing guide --- CONTRIBUTING.md | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 853332f74d..0d6a8db50c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,35 +62,7 @@ Have you started using Backstage? Adding your company to [ADOPTERS](ADOPTERS.md) So...feel ready to jump in? Let's do this. 👏🏻💯 -To run a Backstage app, you will need to have the following installed: - -- [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) -- [NodeJS](https://nodejs.org/en/download/) - Active LTS Release, currently v12 -- [yarn](https://classic.yarnpkg.com/en/docs/install) - -After cloning this repo, open a terminal window and start the example app using the following commands from the project root: - -```bash -yarn install # Install dependencies - -yarn start # Start dev server, use --check to enable linting and type-checks -``` - -The final `yarn start` command should open a local instance of Backstage in your browser, otherwise open one of the URLs printed in the terminal. - -Depending on the work you're doing, you often also want to run the example backend. Start the backend in a separate terminal session using the following: - -```bash -cd packages/backend - -yarn start - -yarn lerna run mock-data # Populate the backend with mock data -``` - -And that's it! You are good to go 👍 - -If you need help, just jump into our [Discord chatroom](https://discord.gg/MUpMjP2). +Start by reading our [Getting Started](https://backstage.io/docs/getting-started/) page. If you need help, just jump into our [Discord chatroom](https://discord.gg/MUpMjP2). # Coding Guidelines From f14d2735f81a0b7de589171fb9bb83bb2c3c7163 Mon Sep 17 00:00:00 2001 From: Oliver Sand Date: Fri, 11 Sep 2020 11:06:25 +0200 Subject: [PATCH 106/303] feat: extend API entity by lifecycle and owner --- .../software-catalog/descriptor-format.md | 37 +++++++++++++++++++ .../examples/hello-world-api.yaml | 2 + .../catalog-model/examples/petstore-api.yaml | 5 +++ .../examples/streetlights-api.yaml | 4 +- .../src/kinds/ApiEntityV1alpha1.test.ts | 32 ++++++++++++++++ .../src/kinds/ApiEntityV1alpha1.ts | 4 ++ 6 files changed, 83 insertions(+), 1 deletion(-) diff --git a/docs/features/software-catalog/descriptor-format.md b/docs/features/software-catalog/descriptor-format.md index fa4b8c23da..1ec35d10ce 100644 --- a/docs/features/software-catalog/descriptor-format.md +++ b/docs/features/software-catalog/descriptor-format.md @@ -483,6 +483,8 @@ metadata: description: Retrieve artist details spec: type: openapi + lifecycle: production + owner: artist-relations@example.com definition: | openapi: "3.0.0" info: @@ -527,6 +529,41 @@ The current set of well-known and common values for this field is: [Protocol Buffers](https://developers.google.com/protocol-buffers) to use with [gRPC](https://grpc.io/). +### `spec.lifecycle` [required] + +The lifecycle state of the API, e.g. `production`. This field is required. + +The software catalog accepts any lifecycle value, but an organization should +take great care to establish a proper taxonomy for these. + +The current set of well-known and common values for this field is: + +- `experimental` - an experiment or early, non-production API, signaling that + users may not prefer to consume it over other more established APIs, or that + there are low or no reliability guarantees +- `production` - an established, owned, maintained API +- `deprecated` - an API that is at the end of its lifecycle, and may disappear + at a later point in time + +### `spec.owner` [required] + +The owner of the API, e.g. `artist-relations@example.com`. This field is +required. + +In Backstage, the owner of an API is the singular entity (commonly a team) that +bears ultimate responsibility for the API, and has the authority and capability +to develop and maintain it. They will be the point of contact if something goes +wrong, or if features are to be requested. The main purpose of this field is for +display purposes in Backstage, so that people looking at catalog items can get +an understanding of to whom this API belongs. It is not to be used by automated +processes to for example assign authorization in runtime systems. There may be +others that also develop or otherwise touch the API, but there will always be +one ultimate owner. + +Apart from being a string, the software catalog leaves the format of this field +open to implementers to choose. Most commonly, it is set to the ID or email of a +group of people in an organizational structure. + ### `spec.definition` [required] The definition of the API, based on the format defined by `spec.type`. This diff --git a/packages/catalog-model/examples/hello-world-api.yaml b/packages/catalog-model/examples/hello-world-api.yaml index 298b0cb835..659c48adfb 100644 --- a/packages/catalog-model/examples/hello-world-api.yaml +++ b/packages/catalog-model/examples/hello-world-api.yaml @@ -5,6 +5,8 @@ metadata: description: Hello World example for gRPC spec: type: grpc + lifecycle: deprecated + owner: grpc@example.com definition: | // Copyright 2015 gRPC authors. // diff --git a/packages/catalog-model/examples/petstore-api.yaml b/packages/catalog-model/examples/petstore-api.yaml index 01953a4a97..c8ce576cce 100644 --- a/packages/catalog-model/examples/petstore-api.yaml +++ b/packages/catalog-model/examples/petstore-api.yaml @@ -3,8 +3,13 @@ kind: API metadata: name: petstore description: The petstore API + tags: + - store + - rest spec: type: openapi + lifecycle: experimental + owner: pets@example.com definition: | openapi: "3.0.0" info: diff --git a/packages/catalog-model/examples/streetlights-api.yaml b/packages/catalog-model/examples/streetlights-api.yaml index 4aeef993bb..d53b05fc2d 100644 --- a/packages/catalog-model/examples/streetlights-api.yaml +++ b/packages/catalog-model/examples/streetlights-api.yaml @@ -4,9 +4,11 @@ metadata: name: streetlights description: The Smartylighting Streetlights API allows you to remotely manage the city lights. tags: - - unstable + - mqtt spec: type: asyncapi + lifecycle: production + owner: streetlights@example.com definition: | asyncapi: 2.0.0 info: diff --git a/packages/catalog-model/src/kinds/ApiEntityV1alpha1.test.ts b/packages/catalog-model/src/kinds/ApiEntityV1alpha1.test.ts index 48de569213..35a1c59ef8 100644 --- a/packages/catalog-model/src/kinds/ApiEntityV1alpha1.test.ts +++ b/packages/catalog-model/src/kinds/ApiEntityV1alpha1.test.ts @@ -33,6 +33,8 @@ describe('ApiV1alpha1Policy', () => { }, spec: { type: 'openapi', + lifecycle: 'production', + owner: 'me', definition: ` openapi: "3.0.0" info: @@ -109,6 +111,36 @@ components: await expect(policy.enforce(entity)).rejects.toThrow(/type/); }); + it('rejects missing lifecycle', async () => { + delete (entity as any).spec.lifecycle; + await expect(policy.enforce(entity)).rejects.toThrow(/lifecycle/); + }); + + it('rejects wrong lifecycle', async () => { + (entity as any).spec.lifecycle = 7; + await expect(policy.enforce(entity)).rejects.toThrow(/lifecycle/); + }); + + it('rejects empty lifecycle', async () => { + (entity as any).spec.lifecycle = ''; + await expect(policy.enforce(entity)).rejects.toThrow(/lifecycle/); + }); + + it('rejects missing owner', async () => { + delete (entity as any).spec.owner; + await expect(policy.enforce(entity)).rejects.toThrow(/owner/); + }); + + it('rejects wrong owner', async () => { + (entity as any).spec.owner = 7; + await expect(policy.enforce(entity)).rejects.toThrow(/owner/); + }); + + it('rejects empty owner', async () => { + (entity as any).spec.owner = ''; + await expect(policy.enforce(entity)).rejects.toThrow(/owner/); + }); + it('rejects missing definition', async () => { delete (entity as any).spec.definition; await expect(policy.enforce(entity)).rejects.toThrow(/definition/); diff --git a/packages/catalog-model/src/kinds/ApiEntityV1alpha1.ts b/packages/catalog-model/src/kinds/ApiEntityV1alpha1.ts index 59e16df9a7..972f6df96d 100644 --- a/packages/catalog-model/src/kinds/ApiEntityV1alpha1.ts +++ b/packages/catalog-model/src/kinds/ApiEntityV1alpha1.ts @@ -26,6 +26,8 @@ export interface ApiEntityV1alpha1 extends Entity { kind: typeof KIND; spec: { type: string; + lifecycle: string; + owner: string; definition: string; }; } @@ -40,6 +42,8 @@ export class ApiEntityV1alpha1Policy implements EntityPolicy { spec: yup .object({ type: yup.string().required().min(1), + lifecycle: yup.string().required().min(1), + owner: yup.string().required().min(1), definition: yup.string().required().min(1), }) .required(), From 735411f3329ed0ff2c40b5aa9004dd0269e41e67 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 11:18:52 +0200 Subject: [PATCH 107/303] Upload test coverage to codecov (#2406) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add CI task to upload test coverage to codecov Backstage CLI runs tests in coverage mode. Jest generates coverage reports in individual coverage/ directories of packages. We don't need a Codecov token here because our repository is public * Upload test coverage on master build * tests and coverage upload have to be run in same CI task * try coverage report with yarn test:all * Use yarn test and test:all commands * Use lower level commands on CI * CLI working ✅ * Do not upload partial coverage reports --- .github/workflows/ci.yml | 6 ++++-- .github/workflows/master.yml | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0a094a10b3..c8c92c57ff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,9 +93,11 @@ jobs: if: ${{ steps.yarn-lock.outcome == 'success' }} run: yarn lerna -- run test --since origin/master -- --coverage - - name: test all packages + - name: test all packages (and upload coverage) if: ${{ steps.yarn-lock.outcome == 'failure' }} - run: yarn lerna -- run test -- --coverage + run: | + yarn lerna -- run test -- --coverage + bash <(curl -s https://codecov.io/bash) - name: verify plugin template run: yarn lerna -- run diff -- --check diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 469ef20cda..f99c266241 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -59,8 +59,10 @@ jobs: - name: verify type dependencies run: yarn lint:type-deps - - name: test - run: yarn lerna -- run test -- --coverage + - name: test (and upload coverage) + run: | + yarn lerna -- run test -- --coverage + bash <(curl -s https://codecov.io/bash) # Publishes current version of packages that are not already present in the registry - name: publish From 5e1a968b39146cb5ccdcd0f6898088785e602130 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 11:52:14 +0200 Subject: [PATCH 108/303] Add code coverage badge to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 65a2a05671..dcf19efae7 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ ![](https://github.com/spotify/backstage/workflows/Frontend%20CI/badge.svg) [![Discord](https://img.shields.io/discord/687207715902193673)](https://discord.gg/EBHEGzX) ![Code style](https://img.shields.io/badge/code_style-prettier-ff69b4.svg) +![Codecov](https://img.shields.io/codecov/c/github/spotify/backstage) [![](https://img.shields.io/npm/v/@backstage/core?label=Version)](https://github.com/spotify/backstage/releases) ## What is Backstage? From e7f4006b814762ae88e6666cfbac48177da23be8 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 11:53:42 +0200 Subject: [PATCH 109/303] Redirect badge to Codecov website --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dcf19efae7..9ef09aee06 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ![](https://github.com/spotify/backstage/workflows/Frontend%20CI/badge.svg) [![Discord](https://img.shields.io/discord/687207715902193673)](https://discord.gg/EBHEGzX) ![Code style](https://img.shields.io/badge/code_style-prettier-ff69b4.svg) -![Codecov](https://img.shields.io/codecov/c/github/spotify/backstage) +[![Codecov](https://img.shields.io/codecov/c/github/spotify/backstage)](https://codecov.io/gh/spotify/backstage) [![](https://img.shields.io/npm/v/@backstage/core?label=Version)](https://github.com/spotify/backstage/releases) ## What is Backstage? From 7553827223edb9b54a7cbc87c451cb6140549592 Mon Sep 17 00:00:00 2001 From: Dominik Henneke Date: Fri, 11 Sep 2020 13:05:53 +0200 Subject: [PATCH 110/303] feat(proxy-backend): support limiting the proxied HTTP methods --- docs/plugins/proxying.md | 5 ++++- plugins/proxy-backend/package.json | 1 + plugins/proxy-backend/src/service/router.ts | 14 ++++++++++++-- yarn.lock | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/plugins/proxying.md b/docs/plugins/proxying.md index 658df3dda1..1951f41763 100644 --- a/docs/plugins/proxying.md +++ b/docs/plugins/proxying.md @@ -52,7 +52,10 @@ configuration will lead to the proxy acting on backend requests to The value inside each route is either a simple URL string, or an object on the format accepted by -[http-proxy-middleware](https://www.npmjs.com/package/http-proxy-middleware). +[http-proxy-middleware](https://www.npmjs.com/package/http-proxy-middleware). It +is also possible to limit the forwarded HTTP methods with the configuration +`allowedMethods`, for example `allowedMethods: ['GET']` to enforce read-only +access. If the value is a string, it is assumed to correspond to: diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 9f3bc16103..efda451fd5 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -22,6 +22,7 @@ "@backstage/backend-common": "^0.1.1-alpha.21", "@backstage/config": "^0.1.1-alpha.21", "@types/express": "^4.17.6", + "@types/http-proxy-middleware": "^0.19.3", "express": "^4.17.1", "express-promise-router": "^3.0.3", "http-proxy-middleware": "^0.19.1", diff --git a/plugins/proxy-backend/src/service/router.ts b/plugins/proxy-backend/src/service/router.ts index 5c5e17b872..7cd5f37598 100644 --- a/plugins/proxy-backend/src/service/router.ts +++ b/plugins/proxy-backend/src/service/router.ts @@ -18,10 +18,11 @@ import { Config } from '@backstage/config'; import express from 'express'; import Router from 'express-promise-router'; import createProxyMiddleware, { - Config as ProxyConfig, + Config as ProxyMiddlewareConfig, Proxy, } from 'http-proxy-middleware'; import { Logger } from 'winston'; +import http from 'http'; export interface RouterOptions { logger: Logger; @@ -30,6 +31,10 @@ export interface RouterOptions { pathPrefix: string; } +export interface ProxyConfig extends ProxyMiddlewareConfig { + allowedMethods?: string[]; +} + // Creates a proxy middleware, possibly with defaults added on top of the // given config. function buildMiddleware( @@ -58,7 +63,12 @@ function buildMiddleware( // Attach the logger to the proxy config fullConfig.logProvider = () => logger; - return createProxyMiddleware(fullConfig); + // Only permit the allowed HTTP methods if configured + const filter = (_pathname: string, req: http.IncomingMessage): boolean => { + return fullConfig?.allowedMethods?.includes(req.method!) ?? true; + }; + + return createProxyMiddleware(filter, fullConfig); } export async function createRouter( diff --git a/yarn.lock b/yarn.lock index 6865bdc256..11bb8a3fd8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4209,7 +4209,7 @@ resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69" integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA== -"@types/http-proxy-middleware@*": +"@types/http-proxy-middleware@*", "@types/http-proxy-middleware@^0.19.3": version "0.19.3" resolved "https://registry.npmjs.org/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz#b2eb96fbc0f9ac7250b5d9c4c53aade049497d03" integrity sha512-lnBTx6HCOUeIJMLbI/LaL5EmdKLhczJY5oeXZpX/cXE4rRqb3RmV7VcMpiEfYkmTjipv3h7IAyIINe4plEv7cA== From 522794b0632850d576e2b0a4dfe920f5071f0977 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 18:12:54 +0200 Subject: [PATCH 111/303] Fix view for Table of Contents on smaller screens For backstage.io/docs and backstage.io/blog pages, we have a sidebar with Table of Contents. On smaller screens, this sidebar becomes a nav bar on top with a toggle hamburger button. However, we also have a nav bar on the website. This nav bar hinders the view of the TOC bar. This commit fixes the view for Table of Contents on Blog and Docs page on smaller screens. --- microsite/static/css/custom.css | 54 +++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/microsite/static/css/custom.css b/microsite/static/css/custom.css index 5e078582cc..5455a67eb6 100644 --- a/microsite/static/css/custom.css +++ b/microsite/static/css/custom.css @@ -203,6 +203,54 @@ td { border-radius: 0.25rem; } +/* + * Fix for viewing Table of Contents bar on documentation + * and blog pages on smaller screens. + */ +@media only screen and (max-width: 1023px) { + /* Nav bar hides the docs toc bar */ + .docMainWrapper { + margin-top: 4rem; + } + + /* Toc bar does not have to be fixed */ + .docsNavContainer { + position: unset; + width: 95vw; + z-index: 100; + margin-left: -2vw; + } + + /* Toc bar does not have to be fixed when slider is active */ + .docsSliderActive .toc .navBreadcrumb, + .tocActive .navBreadcrumb { + position: unset; + } + + /* Fix unexpected width increase when toc is toggled */ + .docsSliderActive .toc .navBreadcrumb, + .tocActive .navBreadcrumb { + width: inherit; + } + + /* This pseudo-element stops toc toggle button to be clicked */ + header.postHeader::before { + height: 2em !important; + margin-top: -2em !important; + } + + /* This pseudo-element stops toc toggle button to be clicked */ + #__docusaurus.postHeaderTitle::before { + height: 1em; + margin-top: -1em; + } + + /* Useless button causing trouble */ + .tocToggler { + display: none; + } +} + /* content */ .postContainer blockquote { color: $textColor; @@ -288,17 +336,17 @@ code { background: linear-gradient(70.44deg, #121212 75%, #5d817b 100%); } .bg-teal-top-right { - background: + background: /* linear-gradient( 178.64deg, rgba(255, 255, 255, 0) 57.61%, rgba(255, 255, 255, 0.17) 127.71% - ), */ + ), */ /* linear-gradient( 144.35deg, rgba(98, 197, 179, 0) 56.68%, rgba(98, 197, 179, 0.59) 109.25% - ), */ + ), */ /* linear-gradient( 192.29deg, rgba(155, 240, 225, 0) 54.17%, From c95fd141aed45d42f6954fe6744a06fa9974cda7 Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Fri, 11 Sep 2020 16:59:15 +0100 Subject: [PATCH 112/303] Remove hardcoded isOrg --- .../software-templates/installation.md | 3 -- .../techdocs/creating-and-publishing.md | 5 ---- .../__mocks__/@octokit/rest/index.ts | 3 ++ .../scaffolder/stages/publish/github.test.ts | 28 +++++++++++++++++-- .../src/scaffolder/stages/publish/github.ts | 9 ++++-- plugins/scaffolder/src/api.ts | 3 +- 6 files changed, 35 insertions(+), 16 deletions(-) diff --git a/docs/features/software-templates/installation.md b/docs/features/software-templates/installation.md index 50c2fd303c..eea78e3571 100644 --- a/docs/features/software-templates/installation.md +++ b/docs/features/software-templates/installation.md @@ -177,9 +177,6 @@ docs on creating private GitHub access tokens is available Note that the need for private GitHub access tokens will be replaced with GitHub Apps integration further down the line. -> **Right now it is only possible to scaffold repositories inside GitHub -> organizations, and not under personal accounts.** - The GitHub access token is passed along using the `GITHUB_ACCESS_TOKEN` environment variable. diff --git a/docs/features/techdocs/creating-and-publishing.md b/docs/features/techdocs/creating-and-publishing.md index 0dfa40f819..9866246c5f 100644 --- a/docs/features/techdocs/creating-and-publishing.md +++ b/docs/features/techdocs/creating-and-publishing.md @@ -30,11 +30,6 @@ the documentation template. Create an entity from the documentation template and you will get the needed setup for free. -!!! warning Currently the Backstage Software Templates are limited to create -repositories inside GitHub organizations. You also need to generate an personal -access token and use as an environment variable. Read more about this -[here](../software-templates/installation.md#runtime-dependencies). - ### Manually add documentation setup to already existing repository Prerequisities: diff --git a/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts b/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts index 85bed3a223..a302bc5931 100644 --- a/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts @@ -19,6 +19,9 @@ export const mockGithubClient = { createInOrg: jest.fn(), createForAuthenticatedUser: jest.fn(), }, + users: { + getByUsername: jest.fn(), + }, }; export class Octokit { diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts index 93493ab2cc..718c01438c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts @@ -19,11 +19,18 @@ jest.mock('nodegit'); import { Octokit } from '@octokit/rest'; import * as NodeGit from 'nodegit'; -import { OctokitResponse, ReposCreateInOrgResponseData } from '@octokit/types'; +import { + OctokitResponse, + ReposCreateInOrgResponseData, + UsersGetByUsernameResponseData, +} from '@octokit/types'; import { GithubPublisher } from './github'; const { mockGithubClient } = require('@octokit/rest') as { - mockGithubClient: { repos: jest.Mocked }; + mockGithubClient: { + repos: jest.Mocked; + users: jest.Mocked; + }; }; const { @@ -59,10 +66,14 @@ describe('GitHub Publisher', () => { clone_url: 'mockclone', }, } as OctokitResponse); + mockGithubClient.users.getByUsername.mockResolvedValue({ + data: { + type: 'Organization', + }, + } as OctokitResponse); await publisher.publish({ values: { - isOrg: true, storePath: 'blam/test', owner: 'bob', }, @@ -81,6 +92,11 @@ describe('GitHub Publisher', () => { clone_url: 'mockclone', }, } as OctokitResponse); + mockGithubClient.users.getByUsername.mockResolvedValue({ + data: { + type: 'User', + }, + } as OctokitResponse); await publisher.publish({ values: { @@ -112,6 +128,12 @@ describe('GitHub Publisher', () => { clone_url: 'mockclone', }, } as OctokitResponse); + mockGithubClient.users.getByUsername.mockResolvedValue({ + data: { + type: 'Organization', + }, + } as OctokitResponse); + it('should call init on the repo with the directory', async () => { await publisher.publish({ values, diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts index 5fd64d69fc..f3306e3662 100644 --- a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts +++ b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts @@ -45,9 +45,12 @@ export class GithubPublisher implements PublisherBase { ) { const [owner, name] = values.storePath.split('/'); - const repoCreationPromise = values.isOrg - ? this.client.repos.createInOrg({ name, org: owner }) - : this.client.repos.createForAuthenticatedUser({ name }); + const user = await this.client.users.getByUsername({ username: owner }); + + const repoCreationPromise = + user.data.type === 'Organization' + ? this.client.repos.createInOrg({ name, org: owner }) + : this.client.repos.createForAuthenticatedUser({ name }); const { data } = await repoCreationPromise; diff --git a/plugins/scaffolder/src/api.ts b/plugins/scaffolder/src/api.ts index cc69ed7627..f58c8e68d1 100644 --- a/plugins/scaffolder/src/api.ts +++ b/plugins/scaffolder/src/api.ts @@ -46,8 +46,7 @@ export class ScaffolderApi { headers: { 'Content-Type': 'application/json', }, - // TODO(shmidt-i): when repo picker is implemented, take isOrg from it - body: JSON.stringify({ template, values: { ...values, isOrg: true } }), + body: JSON.stringify({ template, values: { ...values } }), }); if (response.status !== 201) { From 7da352e2000113ee7c9f5c0e79f5d8671be6435c Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 23:20:44 +0200 Subject: [PATCH 113/303] Use TechDocs instead of docs-like-code --- microsite/sidebars.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 7b4c852f4d..06e3c0c925 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -62,7 +62,7 @@ }, { "type": "subcategory", - "label": "Docs-like-code", + "label": "TechDocs", "ids": [ "features/techdocs/techdocs-overview", "features/techdocs/getting-started", From 64d2edc097018ce6a049305a51096023c9b7452c Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 23:35:32 +0200 Subject: [PATCH 114/303] Updates to the TechDocs overview page - Add a one line context to what docs-like-code means - Add link to announcement blog post which is very in-depth about TechDocs - Milestone update and typo --- docs/features/techdocs/README.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/docs/features/techdocs/README.md b/docs/features/techdocs/README.md index a7af6cc503..626bf0afd9 100644 --- a/docs/features/techdocs/README.md +++ b/docs/features/techdocs/README.md @@ -8,16 +8,21 @@ sidebar_label: Overview -Wait, what is TechDocs? TechDocs is Spotify’s homegrown docs-like-code solution -built directly into Backstage. Today, it is now one of the core products in -Spotify’s developer experience offering with 2,400+ documentation sites and -1,000+ engineers using it daily. +TechDocs is Spotify’s homegrown docs-like-code solution built directly into +Backstage. This means engineers write their documentation in Markdown files +which live together with their code. + +Today, it is one of the core products in Spotify’s developer experience offering +with 2,400+ documentation sites and 1,000+ engineers using it daily. Read more +about TechDocs and the philosophy in its +[announcement blog post](https://backstage.io/blog/2020/09/08/announcing-tech-docs). +🎉 ## Features -- A centralized place to discover documentation. +- A centralized place to discover and read documentation. -- A clear end-to-end docs-like-code solution. (_Coming soon in V.1_) +- A clear end-to-end docs-like-code solution. - A tightly coupled feedback loop with the developer workflow. (_Coming soon in V.3_) @@ -44,7 +49,7 @@ Spotify’s developer experience offering with 2,400+ documentation sites and #### TechDocs V.0 - As a user I can navigate to a manually curated docs explore page. -- As a user I can navigte to and read mock documentation that is manually +- As a user I can navigate to and read mock documentation that is manually uploaded by the TechDocs core team. #### TechDocs V.1 From a5e6e17fd37429a862c8ad0bd0a8faa4b1965662 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 23:38:34 +0200 Subject: [PATCH 115/303] Avoid duplication, redirect to Backstage getting started --- docs/features/techdocs/getting-started.md | 31 ++--------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/docs/features/techdocs/getting-started.md b/docs/features/techdocs/getting-started.md index 33edfecbe8..fb87315763 100644 --- a/docs/features/techdocs/getting-started.md +++ b/docs/features/techdocs/getting-started.md @@ -6,35 +6,8 @@ title: Getting Started TechDocs functions as a plugin to Backstage, so you will need to use Backstage to use TechDocs. -## What is Backstage? - -Backstage is an open platform for building developer portals. It’s based on the -developer portal we’ve been using internally at Spotify for over four years. -[Read more here](https://github.com/spotify/backstage). - -## Prerequisities - -In order to use Backstage and TechDocs, you need to have the following -installed: - -- [Node.js](https://nodejs.org) Active LTS (long term support), currently v12 -- [Yarn](https://yarnpkg.com/getting-started/install) - -## Creating a new Backstage app - -> If you have already created a Backstage application, jump to -> [Installing TechDocs](#installing-techdocs), otherwise complete this step. - -To create a new Backstage application for TechDocs, run the following command: - -```bash -npx @backstage/create-app -``` - -You will then be prompted to enter a name for your application. Once that's -done, a new Backstage application will be created in a new folder. For example, -if you choose the name `hello-world`, a new `hello-world` folder is created -containing your new Backstage application. +If you haven't setup Backstage already, start +[here](../../getting-started/index.md). ## Installing TechDocs From 08856c7da973a1034b9aa46fa8659b1c7e5d62be Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 23:54:28 +0200 Subject: [PATCH 116/303] Add TechDocs architecture page --- docs/features/techdocs/architecture.md | 6 ++++++ microsite/sidebars.json | 1 + 2 files changed, 7 insertions(+) create mode 100644 docs/features/techdocs/architecture.md diff --git a/docs/features/techdocs/architecture.md b/docs/features/techdocs/architecture.md new file mode 100644 index 0000000000..4e063a8559 --- /dev/null +++ b/docs/features/techdocs/architecture.md @@ -0,0 +1,6 @@ +--- +id: architecture +title: Architecture +--- + +![TechDocs Big Picture](../../assets/techdocs/techdocs_big_picture.png) diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 06e3c0c925..849cd56179 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -67,6 +67,7 @@ "features/techdocs/techdocs-overview", "features/techdocs/getting-started", "features/techdocs/concepts", + "features/techdocs/architecture", "features/techdocs/creating-and-publishing", "features/techdocs/faqs" ] From 506d130854919dc23812b49e534c83564edc48f6 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 23:55:01 +0200 Subject: [PATCH 117/303] Some minor improvements to docs --- docs/features/techdocs/README.md | 4 ---- docs/features/techdocs/concepts.md | 6 +++--- docs/features/techdocs/getting-started.md | 6 +++--- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/docs/features/techdocs/README.md b/docs/features/techdocs/README.md index 626bf0afd9..03f3d452f4 100644 --- a/docs/features/techdocs/README.md +++ b/docs/features/techdocs/README.md @@ -106,7 +106,3 @@ more to come... https://github.com/spotify/backstage/blob/master/packages/techdocs-container [techdocs/cli]: https://github.com/spotify/backstage/blob/master/packages/techdocs-cli - -## TechDocs Big Picture - -![TechDocs Big Picture](../..//assets/techdocs/techdocs_big_picture.png) diff --git a/docs/features/techdocs/concepts.md b/docs/features/techdocs/concepts.md index 2fa84cebd6..8f5558c0f8 100644 --- a/docs/features/techdocs/concepts.md +++ b/docs/features/techdocs/concepts.md @@ -8,9 +8,9 @@ solution in Backstage. ### TechDocs Core Plugin -The TechDocs Core Plugin is a MkDocs plugin created as a wrapper around multiple -MkDocs plugins and Python Markdown extensions to standardize the configuration -of MkDocs used for TechDocs. +The TechDocs Core Plugin is an [MkDocs](https://www.mkdocs.org/) plugin created +as a wrapper around multiple MkDocs plugins and Python Markdown extensions to +standardize the configuration of MkDocs used for TechDocs. [TechDocs Core](https://github.com/spotify/backstage/blob/master/packages/techdocs-container/techdocs-core/README.md) diff --git a/docs/features/techdocs/getting-started.md b/docs/features/techdocs/getting-started.md index fb87315763..174894b020 100644 --- a/docs/features/techdocs/getting-started.md +++ b/docs/features/techdocs/getting-started.md @@ -47,7 +47,7 @@ export { plugin as TechDocs } from '@backstage/plugin-techdocs'; ### Setting the configuration TechDocs allows for configuration of the docs storage URL through your -`app-config` file. We provide two different values to be configured, +`app-config.yaml` file. We provide two different values to be configured, `requestUrl` and `storageUrl`. The `requestUrl` is what the reader will request its data from, and `storageUrl` is where the backend can find the stored documentation. @@ -60,13 +60,13 @@ techdocs: requestUrl: http://localhost:7000/techdocs/docs ``` -If you want `techdocs-backend` to manage building and publishing you want +If you want `techdocs-backend` to manage building and publishing, you want `requestUrl` to point to the default value (or wherever `techdocs-backend` is hosted). `storageUrl` should be where your publisher publishes your docs. Using the default `LocalPublish` that is the default value. If you have a setup where you are not using `techdocs-backend` for managing -building and publishing of your documentation you want to change the +building and publishing of your documentation, you want to change the `requestUrl` to point to your storage. In this case `storageUrl` is not required. From 7bdcd2ee5b701187c00413d8862d8633e91d2ad2 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 11 Sep 2020 23:55:13 +0200 Subject: [PATCH 118/303] Update mkdocks.yml for Techdocs rendering of the docs --- mkdocs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index 10cd7df9b2..c9fa1b7700 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -43,10 +43,11 @@ nav: - Create your own Templater: 'features/software-templates/extending/create-your-own-templater.md' - Create your own Publisher: 'features/software-templates/extending/create-your-own-publisher.md' - Create your own Preparer: 'features/software-templates/extending/create-your-own-preparer.md' - - Docs-like-code: + - TechDocs: - Overview: 'features/techdocs/README.md' - Getting Started: 'features/techdocs/getting-started.md' - Concepts: 'features/techdocs/concepts.md' + - TechDocs Architecture: 'features/techdocs/architecture.md' - Creating and Publishing Documentation: 'features/techdocs/creating-and-publishing.md' - FAQ: 'features/techdocs/FAQ.md' - Plugins: From 7b1b539e8cb5bdc670d5d0caeea09c81ac340b35 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sat, 12 Sep 2020 00:00:40 +0200 Subject: [PATCH 119/303] Remove the manual edit instructions There is an edit button on the website --- docs/features/techdocs/FAQ.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/features/techdocs/FAQ.md b/docs/features/techdocs/FAQ.md index 8c716313bb..fad7e104dc 100644 --- a/docs/features/techdocs/FAQ.md +++ b/docs/features/techdocs/FAQ.md @@ -6,10 +6,6 @@ sidebar_label: FAQ This page answers frequently asked questions about [TechDocs](README.md). -_Got a question that you think others might be interested in knowing the answer -to? Edit this file -[here](https://github.com/spotify/backstage/edit/master/docs/features/techdocs/FAQ.md)._ - ## Technology - [What static site generator is TechDocs using?](#what-static-site-generator-is-techdocs-using) From e87263e83947a482dcde8f4403061ca89074f9c9 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sat, 12 Sep 2020 00:01:11 +0200 Subject: [PATCH 120/303] Some minor improvements to docs --- docs/features/techdocs/creating-and-publishing.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/features/techdocs/creating-and-publishing.md b/docs/features/techdocs/creating-and-publishing.md index 0dfa40f819..89df2fb18e 100644 --- a/docs/features/techdocs/creating-and-publishing.md +++ b/docs/features/techdocs/creating-and-publishing.md @@ -11,7 +11,7 @@ This section will guide you through: - [Manually add documentation setup to already existing repository](#manually-add-documentation-setup-to-already-existing-repository) - [Writing and previewing your documentation](#writing-and-previewing-your-documentation) -## Prerequisities +## Prerequisites - A working Backstage instance with TechDocs installed (see [TechDocs getting started](getting-started.md)) @@ -81,12 +81,12 @@ updated documentation next time you run Backstage! ## Writing and previewing your documentation Using the `techdocs-cli` you can preview your docs inside a local Backstage -instance and get automatic recompilation on changes. This is useful for when you -want to write your documentation. +instance and get live reload on changes. This is useful when you want to preview +your documentation while writing. To do this you can run: ```bash -cd ~// +cd /path/to/docs-repository/ npx @techdocs/cli serve ``` From b1051d50e80196c494f5b34819dbf7797261452b Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sat, 12 Sep 2020 00:09:07 +0200 Subject: [PATCH 121/303] Add FAQ about file formats --- docs/features/techdocs/FAQ.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/features/techdocs/FAQ.md b/docs/features/techdocs/FAQ.md index fad7e104dc..cae0288889 100644 --- a/docs/features/techdocs/FAQ.md +++ b/docs/features/techdocs/FAQ.md @@ -10,6 +10,7 @@ This page answers frequently asked questions about [TechDocs](README.md). - [What static site generator is TechDocs using?](#what-static-site-generator-is-techdocs-using) - [What is the mkdocs-techdocs-core plugin?](#what-is-the-mkdocs-techdocs-core-plugin) +- [Does TechDocs support file formats other than Markdown (e.g. rst, asciidoc)?](#does-techdocs-support-file-formats-other-than-markdown-eg-rst-asciidoc-) #### What static site generator is TechDocs using? @@ -26,3 +27,10 @@ package is a MkDocs Plugin that works like a wrapper around multiple MkDocs plugins (e.g. [MkDocs Monorepo Plugin](https://github.com/spotify/mkdocs-monorepo-plugin)) as well as a selection of Python Markdown extensions that TechDocs supports. + +#### Does TechDocs support file formats other than Markdown (e.g. rst, asciidoc) ? + +Not right now. We are currently using MkDocs to generate the documentation from +source. So, they have to be in Markdown format. However, in future we want to +support other alternatives to MkDocs. That will make it possible to use other +file formats. From c7d129994b60b67d46ebef278bc2b4ff4115ccf9 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Sat, 12 Sep 2020 10:32:33 +0530 Subject: [PATCH 122/303] Design: Improved Low visibility and contrast in sidebar (#2432) * change colors * added navGroupSubcategoryTitleColor * Add a new line at the end of file Co-authored-by: Himanshu Mishra --- microsite/siteConfig.js | 5 +++-- microsite/static/css/custom.css | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/microsite/siteConfig.js b/microsite/siteConfig.js index f0762dbf09..d7a3bd67d0 100644 --- a/microsite/siteConfig.js +++ b/microsite/siteConfig.js @@ -67,8 +67,9 @@ const siteConfig = { primaryColor: '#36BAA2', secondaryColor: '#121212', textColor: '#FFFFFF', - navigatorTitleTextColor: '#9e9e9e', - navigatorItemTextColor: '#616161', + navigatorTitleTextColor: '#e4e4e4', + navigatorItemTextColor: '#9e9e9e', + navGroupSubcategoryTitleColor: '#9e9e9e', }, /* Colors for syntax highlighting */ diff --git a/microsite/static/css/custom.css b/microsite/static/css/custom.css index 5e078582cc..723594251a 100644 --- a/microsite/static/css/custom.css +++ b/microsite/static/css/custom.css @@ -113,6 +113,10 @@ td { color: $navigatorTitleTextColor; } +.toc .toggleNav .navGroup .navGroupSubcategoryTitle { + color: $navGroupSubcategoryTitleColor; +} + .toc .toggleNav ul li a, .onPageNav a { color: $navigatorItemTextColor; From 7bcd6814de61838be0ef1cc5d588637d961411af Mon Sep 17 00:00:00 2001 From: Joel Lau Date: Sat, 12 Sep 2020 15:16:50 +0800 Subject: [PATCH 123/303] applied theme's background image to template cards (#2436) --- .../src/components/TemplateCard/TemplateCard.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder/src/components/TemplateCard/TemplateCard.tsx b/plugins/scaffolder/src/components/TemplateCard/TemplateCard.tsx index d98b1a11e9..470fef1148 100644 --- a/plugins/scaffolder/src/components/TemplateCard/TemplateCard.tsx +++ b/plugins/scaffolder/src/components/TemplateCard/TemplateCard.tsx @@ -23,8 +23,8 @@ const useStyles = makeStyles(theme => ({ header: { color: theme.palette.common.white, padding: theme.spacing(2, 2, 6), - backgroundImage: (props: { gradientStart: string; gradientStop: string }) => - `linear-gradient(-137deg, ${props.gradientStart} 0%, ${props.gradientStop} 100%)`, + backgroundImage: (props: { backgroundImage: string }) => + props.backgroundImage, }, content: { padding: theme.spacing(2), @@ -56,8 +56,7 @@ export const TemplateCard = ({ name, }: TemplateCardProps) => { const theme = pageTheme[type] ?? pageTheme.other; - const [gradientStart, gradientStop] = theme.colors; - const classes = useStyles({ gradientStart, gradientStop }); + const classes = useStyles({ backgroundImage: theme.backgroundImage }); const href = generatePath(templateRoute.path, { templateName: name }); return ( From 75c7a055c1353ce0fecf1c61dd05f0f8f8182f3b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 11 Sep 2020 11:12:49 +0200 Subject: [PATCH 124/303] app-config: use catalog.locations + aggregating location entities --- app-config.yaml | 38 ++++++++++--------- packages/catalog-model/examples/all-apis.yaml | 10 +++++ .../examples/all-components.yaml | 16 ++++++++ .../templates/default-app/app-config.yaml.hbs | 23 +++-------- .../{scripts => examples}/sample.yaml | 0 .../sample-templates/all-templates.yaml | 13 +++++++ 6 files changed, 65 insertions(+), 35 deletions(-) create mode 100644 packages/catalog-model/examples/all-apis.yaml create mode 100644 packages/catalog-model/examples/all-components.yaml rename plugins/github-actions/{scripts => examples}/sample.yaml (100%) create mode 100644 plugins/scaffolder-backend/sample-templates/all-templates.yaml diff --git a/app-config.yaml b/app-config.yaml index 2d7f31e72d..5b704f9b8e 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -76,23 +76,27 @@ catalog: privateToken: $secret: env: AZURE_PRIVATE_TOKEN - exampleEntityLocations: - github: - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/artist-lookup-component.yaml - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/playback-order-component.yaml - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/podcast-api-component.yaml - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/queue-proxy-component.yaml - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/searcher-component.yaml - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/playback-lib-component.yaml - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/www-artist-component.yaml - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/shuffle-api-component.yaml - - https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/react-ssr-template/template.yaml - - https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/springboot-grpc-template/template.yaml - - https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/create-react-app/template.yaml - - https://github.com/spotify/cookiecutter-golang/blob/master/template.yaml - - https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/docs-template/template.yaml - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/hello-world-api.yaml - - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/streetlights-api.yaml + + locations: + # Backstage example components + - type: github + target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/all-components.yaml + + # Example component for github-actions + - type: github + target: https://github.com/spotify/backstage/blob/master/plugins/github-actions/examples/sample.yaml + + # Example component for techdocs + - type: github + target: https://github.com/spotify/backstage/blob/master/plugins/techdocs-backend/examples/documented-component/documented-component.yaml + + # Backstage example APIs + - type: github + target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/all-apis.yaml + + # Backstage example templates + - type: github + target: https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/all-templates.yaml auth: providers: diff --git a/packages/catalog-model/examples/all-apis.yaml b/packages/catalog-model/examples/all-apis.yaml new file mode 100644 index 0000000000..33b000d1ae --- /dev/null +++ b/packages/catalog-model/examples/all-apis.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Location +metadata: + name: example-apis + description: A collection of all Backstage example APIs +spec: + type: github + targets: + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/hello-world-api.yaml + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/streetlights-api.yaml diff --git a/packages/catalog-model/examples/all-components.yaml b/packages/catalog-model/examples/all-components.yaml new file mode 100644 index 0000000000..cad4eee044 --- /dev/null +++ b/packages/catalog-model/examples/all-components.yaml @@ -0,0 +1,16 @@ +apiVersion: backstage.io/v1alpha1 +kind: Location +metadata: + name: example-components + description: A collection of all Backstage example components +spec: + type: github + targets: + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/artist-lookup-component.yaml + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/playback-order-component.yaml + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/podcast-api-component.yaml + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/queue-proxy-component.yaml + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/searcher-component.yaml + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/playback-lib-component.yaml + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/www-artist-component.yaml + - https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/shuffle-api-component.yaml 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 bdd933e810..7b86b4f50e 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -51,25 +51,12 @@ catalog: locations: # Backstage example components - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/artist-lookup-component.yaml + target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/all-components.yaml + + # Backstage example APIs - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/playback-order-component.yaml - - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/podcast-api-component.yaml - - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/queue-proxy-component.yaml - - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/searcher-component.yaml - - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/playback-lib-component.yaml - - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/www-artist-component.yaml - - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/shuffle-api-component.yaml - - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/hello-world-api.yaml - - type: github - target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/streetlights-api.yaml + target: https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/all-apis.yaml + # Backstage example templates - type: github target: https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/react-ssr-template/template.yaml diff --git a/plugins/github-actions/scripts/sample.yaml b/plugins/github-actions/examples/sample.yaml similarity index 100% rename from plugins/github-actions/scripts/sample.yaml rename to plugins/github-actions/examples/sample.yaml diff --git a/plugins/scaffolder-backend/sample-templates/all-templates.yaml b/plugins/scaffolder-backend/sample-templates/all-templates.yaml new file mode 100644 index 0000000000..1eb619a072 --- /dev/null +++ b/plugins/scaffolder-backend/sample-templates/all-templates.yaml @@ -0,0 +1,13 @@ +apiVersion: backstage.io/v1alpha1 +kind: Location +metadata: + name: example-templates + description: A collection of all Backstage example templates +spec: + type: github + targets: + - https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/react-ssr-template/template.yaml + - https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/springboot-grpc-template/template.yaml + - https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/create-react-app/template.yaml + - https://github.com/spotify/cookiecutter-golang/blob/master/template.yaml + - https://github.com/spotify/backstage/blob/master/plugins/scaffolder-backend/sample-templates/docs-template/template.yaml From 3cf20cbad7170fdede7f414a2f7bb39646c6c580 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 11 Sep 2020 11:49:55 +0200 Subject: [PATCH 125/303] remove mock-data scripts --- .../software-templates/adding-templates.md | 7 ---- .../running-backstage-locally.md | 6 +-- ...announcing-backstage-software-templates.md | 2 +- packages/backend/README.md | 20 +++------- .../default-app/packages/backend/README.md | 38 +++++++++---------- plugins/catalog-backend/README.md | 5 +-- plugins/catalog-backend/package.json | 4 +- .../scripts/mock-data-local.sh | 12 ------ plugins/catalog-backend/scripts/mock-data.sh | 21 ---------- plugins/github-actions/package.json | 3 +- plugins/github-actions/scripts/mock-data.sh | 8 ---- plugins/graphql/package.json | 3 +- plugins/graphql/scripts/mock-data.sh | 2 - plugins/scaffolder-backend/package.json | 3 +- .../scaffolder-backend/scripts/mock-data.sh | 22 ----------- plugins/techdocs-backend/README.md | 3 -- plugins/techdocs-backend/package.json | 3 +- plugins/techdocs-backend/scripts/mock-data.sh | 12 ------ 18 files changed, 33 insertions(+), 141 deletions(-) delete mode 100755 plugins/catalog-backend/scripts/mock-data-local.sh delete mode 100755 plugins/catalog-backend/scripts/mock-data.sh delete mode 100755 plugins/github-actions/scripts/mock-data.sh delete mode 100755 plugins/graphql/scripts/mock-data.sh delete mode 100755 plugins/scaffolder-backend/scripts/mock-data.sh delete mode 100755 plugins/techdocs-backend/scripts/mock-data.sh diff --git a/docs/features/software-templates/adding-templates.md b/docs/features/software-templates/adding-templates.md index 4f7af7c015..1472986c2a 100644 --- a/docs/features/software-templates/adding-templates.md +++ b/docs/features/software-templates/adding-templates.md @@ -105,13 +105,6 @@ curl \ This should then have added the catalog, and also should now be listed under the create page at http://localhost:3000/create. -Alternatively, if you want to get setup with some mock templates that are -already provided, run the following to load those templates: - -``` -yarn lerna run mock-data -``` - The `type` field which is chosen in the request to add the `template.yaml` to the Service Catalog here, will be come the `PreparerKey` which will be used to select the `Preparer` when creating a job. diff --git a/docs/getting-started/running-backstage-locally.md b/docs/getting-started/running-backstage-locally.md index 04be6499c6..8b19910c8f 100644 --- a/docs/getting-started/running-backstage-locally.md +++ b/docs/getting-started/running-backstage-locally.md @@ -48,12 +48,10 @@ yarn start That starts up a backend instance on port 7000. -In the other window, we will first populate the catalog with some nice mock data -to look at, and then launch the frontend. These commands are run from the -project root, not inside the backend directory. +In the other window, we will then launch the frontend. This command is run from +the project root, not inside the backend directory. ```bash -yarn lerna run mock-data yarn start ``` diff --git a/microsite/blog/2020-08-05-announcing-backstage-software-templates.md b/microsite/blog/2020-08-05-announcing-backstage-software-templates.md index 51c1da2885..81d495e1c3 100644 --- a/microsite/blog/2020-08-05-announcing-backstage-software-templates.md +++ b/microsite/blog/2020-08-05-announcing-backstage-software-templates.md @@ -39,7 +39,7 @@ You can customize Backstage Software Templates to fit your organization’s stan ## Getting started -The sample Software Templates are available under `/create`. If you're setting up Backstage for the first time, follow [Getting Started with Backstage](https://backstage.io/docs/getting-started/) and go to `http://localhost:3000/create`. If you’ve already been running Backstage locally, run the command `yarn lerna run mock-data` to load the new sample templates into the Service Catalog first. +The sample Software Templates are available under `/create`. If you're setting up Backstage for the first time, follow [Getting Started with Backstage](https://backstage.io/docs/getting-started/) and go to `http://localhost:3000/create`. ![available-templates](assets/2020-08-05/templates.png) diff --git a/packages/backend/README.md b/packages/backend/README.md index 860520f4b5..c45a0d28d9 100644 --- a/packages/backend/README.md +++ b/packages/backend/README.md @@ -43,21 +43,13 @@ The backend starts up on port 7000 per default. ## Populating The Catalog -If you want to use the catalog functionality, you need to add so called locations -to the backend. These are places where the backend can find some entity descriptor -data to consume and serve. +If you want to use the catalog functionality, you need to add so called +locations to the backend. These are places where the backend can find some +entity descriptor data to consume and serve. For more information, see +[Software Catalog Overview - Adding Components to the Catalog](https://backstage.io/docs/features/software-catalog/software-catalog-overview#adding-components-to-the-catalog). -To get started, you can issue the following after starting the backend, from inside -the `plugins/catalog-backend` directory: - -```bash -yarn mock-data -``` - -You should then start seeing data on `localhost:7000/catalog/entities`. - -The catalog currently runs in-memory only, so feel free to try it out, but it will -need to be re-populated on next startup. +For convenience we already include some statically configured example locations +in `app-config.yaml` under `catalog.locations`. For local development you can override these in your own `app-config.local.yaml`. ## Authentication diff --git a/packages/create-app/templates/default-app/packages/backend/README.md b/packages/create-app/templates/default-app/packages/backend/README.md index f94904a930..5583bff625 100644 --- a/packages/create-app/templates/default-app/packages/backend/README.md +++ b/packages/create-app/templates/default-app/packages/backend/README.md @@ -3,8 +3,8 @@ This package is an EXAMPLE of a Backstage backend. The main purpose of this package is to provide a test bed for Backstage plugins -that have a backend part. Feel free to experiment locally or within your fork -by adding dependencies and routes to this backend, to try things out. +that have a backend part. Feel free to experiment locally or within your fork by +adding dependencies and routes to this backend, to try things out. Our goal is to eventually amend the create-app flow of the CLI, such that a production ready version of a backend skeleton is made alongside the frontend @@ -33,34 +33,32 @@ LOG_LEVEL=debug \ yarn start ``` -Substitute `x` for actual values, or leave them as -dummy values just to try out the backend without using the auth or sentry features. +Substitute `x` for actual values, or leave them as dummy values just to try out +the backend without using the auth or sentry features. The backend starts up on port 7000 per default. ## Populating The Catalog -If you want to use the catalog functionality, you need to add so called locations -to the backend. These are places where the backend can find some entity descriptor -data to consume and serve. +If you want to use the catalog functionality, you need to add so called +locations to the backend. These are places where the backend can find some +entity descriptor data to consume and serve. For more information, see +[Software Catalog Overview - Adding Components to the Catalog](https://backstage.io/docs/features/software-catalog/software-catalog-overview#adding-components-to-the-catalog). -To get started, you can issue the following after starting the backend, from inside -the `plugins/catalog-backend` directory: - -```bash -yarn mock-data -``` - -You should then start seeing data on `localhost:7000/catalog/entities`. - -The catalog currently runs in-memory only, so feel free to try it out, but it will -need to be re-populated on next startup. +To get started quickly, this template already includes some statically configured example locations +in `app-config.yaml` under `catalog.locations`. You can remove and replace these locations as you +like, and also override them for local development in `app-config.local.yaml`. ## Authentication -We chose [Passport](http://www.passportjs.org/) as authentication platform due to its comprehensive set of supported authentication [strategies](http://www.passportjs.org/packages/). +We chose [Passport](http://www.passportjs.org/) as authentication platform due +to its comprehensive set of supported authentication +[strategies](http://www.passportjs.org/packages/). -Read more about the [auth-backend](https://github.com/spotify/backstage/blob/master/plugins/auth-backend/README.md) and [how to add a new provider](https://github.com/spotify/backstage/blob/master/docs/auth/add-auth-provider.md) +Read more about the +[auth-backend](https://github.com/spotify/backstage/blob/master/plugins/auth-backend/README.md) +and +[how to add a new provider](https://github.com/spotify/backstage/blob/master/docs/auth/add-auth-provider.md) ## Documentation diff --git a/plugins/catalog-backend/README.md b/plugins/catalog-backend/README.md index 7c52dfad72..1b4a653f4a 100644 --- a/plugins/catalog-backend/README.md +++ b/plugins/catalog-backend/README.md @@ -21,12 +21,9 @@ To evaluate the catalog and have a greater amount of functionality available, in # in one terminal window, run this from from the very root of the Backstage project cd packages/backend yarn start - -# open another terminal window, and run the following from the very root of the Backstage project -yarn lerna run mock-data ``` -This will launch the full example backend and populate its catalog with some mock entities. +This will launch the full example backend, populated some example entities. ## Links diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index c1b20ed7bb..d1711cf3d5 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -17,9 +17,7 @@ "test": "backstage-cli test", "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", - "clean": "backstage-cli clean", - "mock-data": "./scripts/mock-data.sh", - "mock-data:local": "./scripts/mock-data-local.sh" + "clean": "backstage-cli clean" }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.21", diff --git a/plugins/catalog-backend/scripts/mock-data-local.sh b/plugins/catalog-backend/scripts/mock-data-local.sh deleted file mode 100755 index 3bea819319..0000000000 --- a/plugins/catalog-backend/scripts/mock-data-local.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -for FILE in \ - ../../packages/catalog-model/examples/*.yaml \ -; do \ - curl \ - --location \ - --request POST 'localhost:7000/catalog/locations' \ - --header 'Content-Type: application/json' \ - --data-raw "{\"type\": \"file\", \"target\": \"../catalog-model/${FILE}\"}" - echo -done diff --git a/plugins/catalog-backend/scripts/mock-data.sh b/plugins/catalog-backend/scripts/mock-data.sh deleted file mode 100755 index 92ec647281..0000000000 --- a/plugins/catalog-backend/scripts/mock-data.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -for URL in \ - 'artist-lookup-component.yaml' \ - 'playback-order-component.yaml' \ - 'podcast-api-component.yaml' \ - 'queue-proxy-component.yaml' \ - 'searcher-component.yaml' \ - 'playback-lib-component.yaml' \ - 'www-artist-component.yaml' \ - 'shuffle-api-component.yaml' \ - 'petstore-api.yaml' \ - 'streetlights-api.yaml' \ -; do \ - curl \ - --location \ - --request POST 'localhost:7000/catalog/locations' \ - --header 'Content-Type: application/json' \ - --data-raw "{\"type\": \"github\", \"target\": \"https://github.com/spotify/backstage/blob/master/packages/catalog-model/examples/${URL}\"}" - echo -done diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index e55a195f6e..25508a91ff 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -18,8 +18,7 @@ "diff": "backstage-cli plugin:diff", "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", - "clean": "backstage-cli clean", - "mock-data": "./scripts/mock-data.sh" + "clean": "backstage-cli clean" }, "dependencies": { "@backstage/catalog-model": "^0.1.1-alpha.21", diff --git a/plugins/github-actions/scripts/mock-data.sh b/plugins/github-actions/scripts/mock-data.sh deleted file mode 100755 index 2653a415dd..0000000000 --- a/plugins/github-actions/scripts/mock-data.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - - curl \ - --location \ - --request POST 'localhost:7000/catalog/locations' \ - --header 'Content-Type: application/json' \ - --data-raw "{\"type\": \"file\", \"target\": \"$(pwd)/scripts/sample.yaml\"}" - echo diff --git a/plugins/graphql/package.json b/plugins/graphql/package.json index 1612398ea9..706592c430 100644 --- a/plugins/graphql/package.json +++ b/plugins/graphql/package.json @@ -16,8 +16,7 @@ "test": "backstage-cli test", "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", - "clean": "backstage-cli clean", - "mock-data": "./scripts/mock-data.sh" + "clean": "backstage-cli clean" }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.21", diff --git a/plugins/graphql/scripts/mock-data.sh b/plugins/graphql/scripts/mock-data.sh deleted file mode 100755 index ff30921715..0000000000 --- a/plugins/graphql/scripts/mock-data.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -echo "use this script to load your service with some mock data if needed!" diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 2fe27f4eb7..2283dd5d05 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -17,8 +17,7 @@ "test": "backstage-cli test", "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", - "clean": "backstage-cli clean", - "mock-data": "./scripts/mock-data.sh" + "clean": "backstage-cli clean" }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.21", diff --git a/plugins/scaffolder-backend/scripts/mock-data.sh b/plugins/scaffolder-backend/scripts/mock-data.sh deleted file mode 100755 index 9a9b0b186b..0000000000 --- a/plugins/scaffolder-backend/scripts/mock-data.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -for URL in \ - 'react-ssr-template' \ - 'springboot-grpc-template' \ - 'create-react-app' \ - 'docs-template' \ -; do \ - curl \ - --location \ - --request POST 'localhost:7000/catalog/locations' \ - --header 'Content-Type: application/json' \ - --data-raw "{\"type\": \"file\", \"target\": \"$(pwd)/sample-templates/${URL}/template.yaml\"}" - echo -done - -curl \ - --location \ - --request POST 'localhost:7000/catalog/locations' \ - --header 'Content-Type: application/json' \ - --data-raw "{\"type\": \"github\", \"target\": \"https://github.com/spotify/cookiecutter-golang/blob/master/template.yaml\"}" -echo diff --git a/plugins/techdocs-backend/README.md b/plugins/techdocs-backend/README.md index 6a54971788..2185c3b3e4 100644 --- a/plugins/techdocs-backend/README.md +++ b/plugins/techdocs-backend/README.md @@ -14,9 +14,6 @@ To evaluate TechDocs and have a greater amount of functionality available, inste # in one terminal window, run this from from the very root of the Backstage project cd packages/backend yarn start - -# open another terminal window, and run the following from the very root of the Backstage project -yarn lerna run mock-data ``` ## What techdocs-backend does diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index edafe31657..47b2ebc8aa 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -17,8 +17,7 @@ "test": "backstage-cli test", "prepack": "backstage-cli prepack", "postpack": "backstage-cli postpack", - "clean": "backstage-cli clean", - "mock-data": "./scripts/mock-data.sh" + "clean": "backstage-cli clean" }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.21", diff --git a/plugins/techdocs-backend/scripts/mock-data.sh b/plugins/techdocs-backend/scripts/mock-data.sh deleted file mode 100755 index 0630490694..0000000000 --- a/plugins/techdocs-backend/scripts/mock-data.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -for URL in \ - 'documented-component/documented-component.yaml' \ -; do \ - curl \ - --location \ - --request POST 'localhost:7000/catalog/locations' \ - --header 'Content-Type: application/json' \ - --data-raw "{\"type\": \"file\", \"target\": \"$(pwd)/examples/${URL}\"}" - echo -done From 9b428eee0286950b92b603e2435c043c81967984 Mon Sep 17 00:00:00 2001 From: NetPenguins Date: Sat, 12 Sep 2020 10:03:32 -0400 Subject: [PATCH 126/303] pull file from upstream to revert changes --- yarn.lock | 2881 ++++++++++++++++++++++++----------------------------- 1 file changed, 1303 insertions(+), 1578 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4362f7e216..11bb8a3fd8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,9 +12,9 @@ js-yaml "^3.13.1" "@apollo/protobufjs@^1.0.3": - version "1.0.5" - resolved "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.5.tgz#a78b726147efc0795e74c8cb8a11aafc6e02f773" - integrity sha512-ZtyaBH1icCgqwIGb3zrtopV2D5Q8yxibkJzlaViM08eOhTQc7rACdYu0pfORFfhllvdMZ3aq69vifYHszY4gNA== + version "1.0.4" + resolved "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.4.tgz#cf01747a55359066341f31b5ce8db17df44244e0" + integrity sha512-EE3zx+/D/wur/JiLp6VCiw1iYdyy1lCJMf8CGPkLeDt5QJrN4N8tKFx33Ah4V30AUQzMk7Uz4IXKZ1LOj124gA== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -62,9 +62,9 @@ "@openapi-contrib/openapi-schema-to-json-schema" "^3.0.0" "@asyncapi/parser@^1.0.0-rc.1": - version "1.0.0-rc.3" - resolved "https://registry.npmjs.org/@asyncapi/parser/-/parser-1.0.0-rc.3.tgz#670224bad2b01dc4ec1b6c23ee502d79e89698e2" - integrity sha512-dfWCxNGt1e4aEmmvrTrV60K6Xo1UqQfYI3NQ5F/7zC6Jd0sSbUKPLlZRhKFxYAtX6bO2IMc4f+6XRgGNw9NQ8w== + version "1.0.0-rc.2" + resolved "https://registry.npmjs.org/@asyncapi/parser/-/parser-1.0.0-rc.2.tgz#87d2e83c1d390e21d53f868e6209cbc584d35449" + integrity sha512-nZYJLnMiq48q7YHa+AI9ZaDc5UqoqKR7MDhTiIKsIJj6X5fF6hpwBrTP0bQn76Pc1oGBXRB69PcD/Y+Et1qFyw== dependencies: "@apidevtools/json-schema-ref-parser" "^9.0.6" "@asyncapi/specs" "^2.7.4" @@ -140,10 +140,10 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.11.0", "@babel/generator@^7.11.4": - version "7.11.4" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz#1ec7eec00defba5d6f83e50e3ee72ae2fee482be" - integrity sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g== +"@babel/generator@^7.11.0": + version "7.11.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== dependencies: "@babel/types" "^7.11.0" jsesc "^2.5.1" @@ -223,10 +223,11 @@ lodash "^4.17.19" "@babel/helper-explode-assignable-expression@^7.10.4": - version "7.11.4" - resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" - integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== dependencies: + "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" "@babel/helper-function-name@^7.10.4": @@ -253,11 +254,11 @@ "@babel/types" "^7.10.4" "@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": - version "7.11.0" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" - integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + version "7.10.5" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz#172f56e7a63e78112f3a04055f24365af702e7ee" + integrity sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.10.5" "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4": version "7.10.4" @@ -299,13 +300,14 @@ lodash "^4.17.19" "@babel/helper-remap-async-to-generator@^7.10.4": - version "7.11.4" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d" - integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA== + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-wrap-function" "^7.10.4" "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" "@babel/helper-replace-supers@^7.10.4": @@ -551,12 +553,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz#53351dd7ae01995e567d04ce42af1a6e0ba846a6" - integrity sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ== +"@babel/plugin-syntax-flow@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" + integrity sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -716,13 +718,13 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-flow-strip-types@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" - integrity sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ== +"@babel/plugin-transform-flow-strip-types@^7.9.0": + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" + integrity sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-flow" "^7.10.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-flow" "^7.8.3" "@babel/plugin-transform-for-of@^7.10.4", "@babel/plugin-transform-for-of@^7.9.0": version "7.10.4" @@ -1035,17 +1037,17 @@ semver "^5.5.0" "@babel/preset-flow@^7.0.0": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.10.4.tgz#e0d9c72f8cb02d1633f6a5b7b16763aa2edf659f" - integrity sha512-XI6l1CptQCOBv+ZKYwynyswhtOKwpZZp5n0LG1QKCo8erRhqjoQV6nvx61Eg30JHpysWQSBwA2AWRU3pBbSY5g== + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.9.0.tgz#fee847c3e090b0b2d9227c1949e4da1d1379280d" + integrity sha512-88uSmlshIrlmPkNkEcx3UpSZ6b8n0UGBq0/0ZMZCF/uxAW0XIAUuDHBhIOAh0pvweafH4RxOwi/H3rWhtqOYPA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-transform-flow-strip-types" "^7.10.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-flow-strip-types" "^7.9.0" "@babel/preset-modules@^0.1.3": - version "0.1.4" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + version "0.1.3" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1093,15 +1095,15 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/runtime-corejs3@^7.10.2": - version "7.11.2" - resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz#02c3029743150188edeb66541195f54600278419" - integrity sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A== +"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.8.3": + version "7.10.3" + resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.10.3.tgz#931ed6941d3954924a7aa967ee440e60c507b91a" + integrity sha512-HA7RPj5xvJxQl429r5Cxr2trJwOfPjKiqhCXcdQPSqO2G0RHPZpXu4fkYmBaTKCp2c/jRaMK9GB/lN+7zvvFPw== dependencies: core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.11.2" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== @@ -1203,15 +1205,6 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@dabh/diagnostics@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" - integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - "@date-io/core@1.x", "@date-io/core@^1.3.13": version "1.3.13" resolved "https://registry.npmjs.org/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa" @@ -1235,9 +1228,9 @@ "@emotion/weak-memoize" "0.2.5" "@emotion/core@^10.0.0", "@emotion/core@^10.0.20", "@emotion/core@^10.0.28": - version "10.0.35" - resolved "https://registry.npmjs.org/@emotion/core/-/core-10.0.35.tgz#513fcf2e22cd4dfe9d3894ed138c9d7a859af9b3" - integrity sha512-sH++vJCdk025fBlRZSAhkRlSUoqSqgCzYf5fMOmqqi3bM6how+sQpg3hkgJonj8GxXM4WbD7dRO+4tegDB9fUw== + version "10.0.28" + resolved "https://registry.npmjs.org/@emotion/core/-/core-10.0.28.tgz#bb65af7262a234593a9e952c041d0f1c9b9bef3d" + integrity sha512-pH8UueKYO5jgg0Iq+AmCLxBsvuGtvlmiDCOuv8fGNYn3cowFpLN98L8zO56U0H1PjDIyAlXymgL3Wu7u7v6hbA== dependencies: "@babel/runtime" "^7.5.5" "@emotion/cache" "^10.0.27" @@ -1407,112 +1400,110 @@ dependencies: yaml-ast-parser "0.0.43" -"@graphql-tools/delegate@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-6.1.0.tgz#ceda597f091d5aed8065df3cea8d59858e35782e" - integrity sha512-LBulO9tEx+4TvRIY3yCivCYdtI18BpDX/qlSs+K7AuTgCH8eJ/S/FinFRTpTK/9bQwXnBh/d9WjiiRekUCiW6g== +"@graphql-tools/delegate@6.0.15": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-6.0.15.tgz#9e060bfc31fe7735bd5b2b401e98dea3fa5d3b25" + integrity sha512-GG/zp29PMfG6eXpfe1M5C3U1EI1f3tJu2glFN8t0RIfp4FEgZs/PRvZuuep5orFge8dvX/LQpJY8Vl2JmU4WMg== dependencies: "@ardatan/aggregate-error" "0.0.1" - "@graphql-tools/schema" "6.1.0" - "@graphql-tools/utils" "6.1.0" - is-promise "4.0.0" - tslib "~2.0.1" + "@graphql-tools/schema" "6.0.15" + "@graphql-tools/utils" "6.0.15" + tslib "~2.0.0" "@graphql-tools/graphql-file-loader@^6.0.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.1.0.tgz#8b0d8dc7ffd0417c68ad97a916a0ea1841d55d36" - integrity sha512-UZsCx/JJPlkCPYoKJhOcMpDYRx0RagBJ/0gVjgUyiykGJyl8QqTUz34QZhRFg5WGPWcEyT8z18w5WocPCXwK+g== + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.0.15.tgz#e186b8147397bd7510e1b3318f5d3f7d365fc4e1" + integrity sha512-QbCf731A2A2hrHP+cMSAKvY3D7IauFNqp5bAGdbLwSHRqaxUIfKi7Q76/9pZ3rN/e6yu/zVz+t1rkf7lT2/8OA== dependencies: - "@graphql-tools/import" "6.1.0" - "@graphql-tools/utils" "6.1.0" + "@graphql-tools/import" "6.0.15" + "@graphql-tools/utils" "6.0.15" fs-extra "9.0.1" - tslib "~2.0.1" + tslib "~2.0.0" -"@graphql-tools/import@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/import/-/import-6.1.0.tgz#82994007a99ba93db3ad95a5c51a59d9c9e84439" - integrity sha512-MuW9v8w8hc6GvsWQH41NnOAr1f7bkV4E6AWMYpndAHPcuwwGHiLHizLCEjbNovzdoA8N9h3sMenhQyRpCAiEzg== +"@graphql-tools/import@6.0.15": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/import/-/import-6.0.15.tgz#d6a9d3b6199a1e07d80d8021635d317b2c190c6f" + integrity sha512-YaQizD031nlrObiAJj+DO+0Wf2ompR2G5OFNQZIOgUlm1+kfH3GPIFoE5Ww74YH6vy9s4UyYYeZJz6APxPdMzg== dependencies: fs-extra "9.0.1" resolve-from "5.0.0" "@graphql-tools/json-file-loader@^6.0.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-6.1.0.tgz#1112dffa2936fb157185afd693e3de6a1805705c" - integrity sha512-U5+aU4Bi9Se2+rFE0lwARHii1TyKtVG+WPNtBM1YJdgQ800/jrgjSCBl2Js/bd2YkICMLz++lCehyQSgrLpIsg== + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-6.0.15.tgz#e341a5fed1ef3af8f8bfde17ed9a14e1a6df36c0" + integrity sha512-SQO7w+KPxW6Q3snE3G4eNOA8CcBBDYHpk8JILj93oe4BassuPY5NCUOeZ+2PYczwZQbTNDQXeW1oQou44U1aBg== dependencies: - "@graphql-tools/utils" "6.1.0" + "@graphql-tools/utils" "6.0.15" fs-extra "9.0.1" - tslib "~2.0.1" + tslib "~2.0.0" "@graphql-tools/load@^6.0.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/load/-/load-6.1.0.tgz#0880050722ac4297c6f782a84b8b87ce464933d8" - integrity sha512-4puWwWPvLKskTtabMXlYW4fdm5yaAgHNwJeUhs3/ftX9mrJOa8HnfIxULZOES9XEbaRoaVQ0wPRBjJKcTBJ7CQ== + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/load/-/load-6.0.15.tgz#f2012b8938b3a535dbafefbb719997684028f30f" + integrity sha512-STH3ZjbViRqDyCw+f7PZrnDs6yhP7m2l4x5lJBMyMeLaLwuO1z+WhgtqYZNpCYlQY2jNSLXWCa0nWmpYvdLnlA== dependencies: - "@graphql-tools/merge" "6.1.0" - "@graphql-tools/utils" "6.1.0" + "@graphql-tools/merge" "6.0.15" + "@graphql-tools/utils" "6.0.15" globby "11.0.1" import-from "3.0.0" is-glob "4.0.1" p-limit "3.0.2" - tslib "~2.0.1" + tslib "~2.0.0" unixify "1.0.0" valid-url "1.0.9" -"@graphql-tools/merge@6.1.0", "@graphql-tools/merge@^6.0.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/merge/-/merge-6.1.0.tgz#5c9d09b2387514f4b2d679a2e2b15335cee95f15" - integrity sha512-dD7J/LELhy87+5V8pko5EhSx2leoRIT02V5coa6S19PTiNrVqCJU/fMMKdWC1FmHSWUYOf+wZhItsilUxPr7XQ== +"@graphql-tools/merge@6.0.15", "@graphql-tools/merge@^6.0.0": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/merge/-/merge-6.0.15.tgz#09c84bd08971edfb3e1035d71432b47687820bdc" + integrity sha512-qusTLzkf6GtxS6LRQnEAWIwA1BeJj5SkZ2pnE4/wVe9gs0grpEsOKYxvGpBi8IZR7r8UeNpkdgk2HP0jlq/WWA== dependencies: - "@graphql-tools/schema" "6.1.0" - "@graphql-tools/utils" "6.1.0" - tslib "~2.0.1" + "@graphql-tools/schema" "6.0.15" + "@graphql-tools/utils" "6.0.15" + tslib "~2.0.0" -"@graphql-tools/schema@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-6.1.0.tgz#8176bf3b56dc1e78243a5f01646c7abbc9921d26" - integrity sha512-AZflTf9HU3Uy8UgUwxwFXN9Lf+9D36LBoDRIxPRhsj6EtawbwCqsd3UFwNek0OgiwNi3BL2b+D+6QEcw2IOsDA== +"@graphql-tools/schema@6.0.15": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-6.0.15.tgz#b016f9f36820342982887a291baa7e7d11b039ae" + integrity sha512-Wo+d6/OPjeXjwB1pcqsWmqLdweGH+BVhvKe/YPQA/uiWr8ikgShvNLNiuF03gc/1AMR487A09XcPEyabRKJLew== dependencies: - "@graphql-tools/utils" "6.1.0" - tslib "~2.0.1" + "@graphql-tools/utils" "6.0.15" + tslib "~2.0.0" "@graphql-tools/url-loader@^6.0.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-6.1.0.tgz#36a7cb6270548d3e800acebc25ecf65cb8ba6214" - integrity sha512-AzTDZPQqHv2jrTrKhPgLbeWBhEjwFMAFnRKPsaGnSxkZWAeTeA4XevbWS4wl9jho0klTtSRBbKnNBp+dxbpmwA== + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-6.0.15.tgz#3ad621ed75c03fbc0ea08d2560f379a053c4035f" + integrity sha512-/iGuK7J9yCECYMYQJqKNWnz4ytPHppkxh4YS5Ud9QPDNl488e+eInyNbkdiWcFGyZ4KHqEnXSDdRFg3mFNrMnw== dependencies: - "@graphql-tools/delegate" "6.1.0" - "@graphql-tools/utils" "6.1.0" - "@graphql-tools/wrap" "6.1.0" + "@graphql-tools/delegate" "6.0.15" + "@graphql-tools/utils" "6.0.15" + "@graphql-tools/wrap" "6.0.15" "@types/websocket" "1.0.1" cross-fetch "3.0.5" - subscriptions-transport-ws "0.9.18" - tslib "~2.0.1" + subscriptions-transport-ws "0.9.17" + tslib "~2.0.0" valid-url "1.0.9" websocket "1.0.31" -"@graphql-tools/utils@6.1.0", "@graphql-tools/utils@^6.0.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-6.1.0.tgz#a8ab67bb8d8a879f40d29b334f48de6e6be71c41" - integrity sha512-YcyslZ/8rk5nQOGnkEDp/xi6Xphu0mgjh5LTZ1qUio5P+d95/9MW44cPdmi3Feg4kO8u+1GcPC+685hFpJlZJw== +"@graphql-tools/utils@6.0.15", "@graphql-tools/utils@^6.0.0": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-6.0.15.tgz#6d54d383285bea3c22797531933b62a408e78e49" + integrity sha512-VG5cMLPgh9RDLGHamGpXVnBrNw7bZGT46LrxK7IIqDZI9H0GPsRCo8+p+CfDkw0IlDiEECb624WVCpm9IYNecA== dependencies: "@ardatan/aggregate-error" "0.0.1" camel-case "4.1.1" -"@graphql-tools/wrap@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-6.1.0.tgz#52451574dc667a423b66ad05720add03cbecb7b8" - integrity sha512-sJ4ePvgQ2AKWGQ75hockh1k+0BhPbr7SZqe4T/HKNMCuATNiRi0m78FoxHTp/JODMKRPfhadunD74CXrxupy6A== +"@graphql-tools/wrap@6.0.15": + version "6.0.15" + resolved "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-6.0.15.tgz#1b4a43d406f3894e4cbc931f9d4e0d282ab0076e" + integrity sha512-yWiDBrbzml6PRl4aeJBLNGPw385LFtszMfkfYwjLSWvNyVILDCMa/XWHThw4FMaZ1nPL0GuLggW2bVkUBi3TYA== dependencies: - "@graphql-tools/delegate" "6.1.0" - "@graphql-tools/schema" "6.1.0" - "@graphql-tools/utils" "6.1.0" - aggregate-error "3.1.0" - is-promise "4.0.0" - tslib "~2.0.1" + "@graphql-tools/delegate" "6.0.15" + "@graphql-tools/schema" "6.0.15" + "@graphql-tools/utils" "6.0.15" + aggregate-error "3.0.1" + tslib "~2.0.0" -"@hapi/address@^4.1.0": +"@hapi/address@^4.0.1": version "4.1.0" resolved "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz#d60c5c0d930e77456fdcde2598e77302e2955e1d" integrity sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ== @@ -1529,6 +1520,17 @@ resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.0.4.tgz#e80ad4e8e8d2adc6c77d985f698447e8628b6010" integrity sha512-EwaJS7RjoXUZ2cXXKZZxZqieGtc7RbvQhUy8FwDoMQtxWVi14tFjeFCYPZAM1mBCpOpiBpyaZbb9NeHc7eGKgw== +"@hapi/joi@^17.1.1": + version "17.1.1" + resolved "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz#9cc8d7e2c2213d1e46708c6260184b447c661350" + integrity sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg== + dependencies: + "@hapi/address" "^4.0.1" + "@hapi/formula" "^2.0.0" + "@hapi/hoek" "^9.0.0" + "@hapi/pinpoint" "^2.0.0" + "@hapi/topo" "^5.0.0" + "@hapi/pinpoint@^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz#805b40d4dbec04fc116a73089494e00f073de8df" @@ -1557,13 +1559,12 @@ integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== "@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + version "1.0.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" + integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== dependencies: camelcase "^5.3.1" find-up "^4.1.0" - get-package-type "^0.1.0" js-yaml "^3.13.1" resolve-from "^5.0.0" @@ -2473,9 +2474,9 @@ write-file-atomic "^2.3.0" "@material-icons/font@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@material-icons/font/-/font-1.0.4.tgz#4bfc59dcaba90f6d71e4aeffd1ebb2ea6119c844" - integrity sha512-tt80HS8dDtx/jj6fXWi6CycCZWC1AY3YOXjHwxShwe/jrW/fRVdw0C9JOGo0ij5/7y+uG0Rp0c4plu7J4Cq7EA== + version "1.0.3" + resolved "https://registry.npmjs.org/@material-icons/font/-/font-1.0.3.tgz#f722e5a69a03f20ef47d015cb69420bebeeaabe5" + integrity sha512-aIRd0Z9b/HJ/O24KOaP7dNsXypMnXhpWrpLVYvQB/JesVqXYSbioYND200sR+C14a0LSCp+qWnWCnSXmN1hWGw== "@material-ui/core@^4.11.0", "@material-ui/core@^4.9.1": version "4.11.0" @@ -2579,9 +2580,9 @@ "@types/whatwg-streams" "^0.0.7" "@mdx-js/react@^1.0.0", "@mdx-js/react@^1.5.2": - version "1.6.16" - resolved "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.16.tgz#538eb14473194d0b3c54020cb230e426174315cd" - integrity sha512-+FhuSVOPo7+4fZaRwWuCSRUcZkJOkZu0rfAbBKvoCg1LWb1Td8Vzi0DTLORdSvgWNbU6+EL40HIgwTOs00x2Jw== + version "1.5.9" + resolved "https://registry.npmjs.org/@mdx-js/react/-/react-1.5.9.tgz#31873ab097fbe58c61c7585fc0be64e83182b6df" + integrity sha512-rengdUSedIdIQbXPSeafItCacTYocARAjUA51b6R1KNHmz+59efz7UmyTKr73viJQZ98ouu7iRGmOTtjRrbbWA== "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" @@ -2625,41 +2626,41 @@ mkdirp "^1.0.4" "@octokit/auth-token@^2.4.0": - version "2.4.2" - resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a" - integrity sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ== + version "2.4.0" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" + integrity sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg== dependencies: - "@octokit/types" "^5.0.0" + "@octokit/types" "^2.0.0" "@octokit/core@^3.0.0": - version "3.1.2" - resolved "https://registry.npmjs.org/@octokit/core/-/core-3.1.2.tgz#c937d5f9621b764573068fcd2e5defcc872fd9cc" - integrity sha512-AInOFULmwOa7+NFi9F8DlDkm5qtZVmDQayi7TUgChE3yeIGPq0Y+6cAEXPexQ3Ea+uZy66hKEazR7DJyU+4wfw== + version "3.1.0" + resolved "https://registry.npmjs.org/@octokit/core/-/core-3.1.0.tgz#9c3c9b23f7504668cfa057f143ccbf0c645a0ac9" + integrity sha512-yPyQSmxIXLieEIRikk2w8AEtWkFdfG/LXcw1KvEtK3iP0ENZLW/WYQmdzOKqfSaLhooz4CJ9D+WY79C8ZliACw== dependencies: "@octokit/auth-token" "^2.4.0" "@octokit/graphql" "^4.3.1" "@octokit/request" "^5.4.0" "@octokit/types" "^5.0.0" before-after-hook "^2.1.0" - universal-user-agent "^6.0.0" + universal-user-agent "^5.0.0" "@octokit/endpoint@^6.0.1": - version "6.0.5" - resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.5.tgz#43a6adee813c5ffd2f719e20cfd14a1fee7c193a" - integrity sha512-70K5u6zd45ItOny6aHQAsea8HHQjlQq85yqOMe+Aj8dkhN2qSJ9T+Q3YjUjEYfPRBcuUWNgMn62DQnP/4LAIiQ== + version "6.0.3" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.3.tgz#dd09b599662d7e1b66374a177ab620d8cdf73487" + integrity sha512-Y900+r0gIz+cWp6ytnkibbD95ucEzDSKzlEnaWS52hbCDNcCJYO5mRmWW7HRAnDc7am+N/5Lnd8MppSaTYx1Yg== dependencies: "@octokit/types" "^5.0.0" - is-plain-object "^4.0.0" - universal-user-agent "^6.0.0" + is-plain-object "^3.0.0" + universal-user-agent "^5.0.0" "@octokit/graphql@^4.3.1": - version "4.5.4" - resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.4.tgz#c9ef75b0406ebf195bf5f4ed2304a77ed7df27c7" - integrity sha512-ITpZ+dQc0cXAW1FmDkHJJM+8Lb6anUnin0VB5hLBilnYVdLC0ICFU/KIvT7OXfW9S81DE3U4Vx2EypDG1OYaPA== + version "4.5.1" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.1.tgz#162aed1490320b88ce34775b3f6b8de945529fa9" + integrity sha512-qgMsROG9K2KxDs12CO3bySJaYoUu2aic90qpFrv7A8sEBzZ7UFGvdgPKiLw5gOPYEYbS0Xf8Tvf84tJutHPulQ== dependencies: "@octokit/request" "^5.3.0" "@octokit/types" "^5.0.0" - universal-user-agent "^6.0.0" + universal-user-agent "^5.0.0" "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -2674,11 +2675,11 @@ "@octokit/types" "^2.0.1" "@octokit/plugin-paginate-rest@^2.2.0": - version "2.3.1" - resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.3.1.tgz#00f91701dfda26227c3e748d42bc89e2d0d9ce55" - integrity sha512-81A+ONLpcSX7vWxnEmVZteQPNsbdeScSVUqjgMYPSk1trzG69iYkhS42wPRWtN0nYw6OEmT48DNeQCjHeyroYw== + version "2.2.3" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.2.3.tgz#a6ad4377e7e7832fb4bdd9d421e600cb7640ac27" + integrity sha512-eKTs91wXnJH8Yicwa30jz6DF50kAh7vkcqCQ9D7/tvBAP5KKkg6I2nNof8Mp/65G0Arjsb4QcOJcIEQY+rK1Rg== dependencies: - "@octokit/types" "^5.3.0" + "@octokit/types" "^5.0.0" "@octokit/plugin-request-log@^1.0.0": version "1.0.0" @@ -2720,23 +2721,23 @@ once "^1.4.0" "@octokit/request@^5.2.0", "@octokit/request@^5.3.0", "@octokit/request@^5.4.0": - version "5.4.7" - resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.7.tgz#fd703ee092e0463ceba49ff7a3e61cb4cf8a0fde" - integrity sha512-FN22xUDP0i0uF38YMbOfx6TotpcENP5W8yJM1e/LieGXn6IoRxDMnBf7tx5RKSW4xuUZ/1P04NFZy5iY3Rax1A== + version "5.4.5" + resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.5.tgz#8df65bd812047521f7e9db6ff118c06ba84ac10b" + integrity sha512-atAs5GAGbZedvJXXdjtKljin+e2SltEs48B3naJjqWupYl2IUBbB/CJisyjbNHcKpHzb3E+OYEZ46G8eakXgQg== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" "@octokit/types" "^5.0.0" deprecation "^2.0.0" - is-plain-object "^4.0.0" + is-plain-object "^3.0.0" node-fetch "^2.3.0" once "^1.4.0" - universal-user-agent "^6.0.0" + universal-user-agent "^5.0.0" "@octokit/rest@^16.28.4": - version "16.43.2" - resolved "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" - integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== + version "16.43.1" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" + integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw== dependencies: "@octokit/auth-token" "^2.4.0" "@octokit/plugin-paginate-rest" "^1.1.1" @@ -2766,16 +2767,16 @@ "@octokit/plugin-rest-endpoint-methods" "4.1.4" "@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.16.2" - resolved "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" - integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== + version "2.5.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-2.5.0.tgz#f1bbd147e662ae2c79717d518aac686e58257773" + integrity sha512-KEnLwOfdXzxPNL34fj508bhi9Z9cStyN7qY1kOfVahmqtAfrWw6Oq3P4R+dtsg0lYtZdWBpUrS/Ixmd5YILSww== dependencies: "@types/node" ">= 8" -"@octokit/types@^5.0.0", "@octokit/types@^5.0.1", "@octokit/types@^5.1.1", "@octokit/types@^5.3.0": - version "5.4.1" - resolved "https://registry.npmjs.org/@octokit/types/-/types-5.4.1.tgz#d5d5f2b70ffc0e3f89467c3db749fa87fc3b7031" - integrity sha512-OlMlSySBJoJ6uozkr/i03nO5dlYQyE05vmQNZhAh9MyO4DPBP88QlwsDVLmVjIMFssvIZB6WO0ctIGMRG+xsJQ== +"@octokit/types@^5.0.0", "@octokit/types@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@octokit/types/-/types-5.0.1.tgz#5459e9a5e9df8565dcc62c17a34491904d71971e" + integrity sha512-GorvORVwp244fGKEt3cgt/P+M0MGy4xEDbckw+K5ojEezxyMDgCaYPKVct+/eWQfZXOT7uq0xRpmrl/+hliabA== dependencies: "@types/node" ">= 8" @@ -2792,11 +2793,12 @@ integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== "@openapi-contrib/openapi-schema-to-json-schema@^3.0.0": - version "3.0.4" - resolved "https://registry.npmjs.org/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.0.4.tgz#a0e29445b9cd76331c473ab820e97b28ae828ebc" - integrity sha512-+1RBoJ+xjX8mIXxisTJVlN/r6DOh4kyszw3cLBSAxwKP7Ui42DjlxWgR2PnWxOOWtRCnQurRzlsvL1ce5FUrWg== + version "3.0.3" + resolved "https://registry.npmjs.org/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.0.3.tgz#c626eab186938f2751ee54ec68b345133bc0065c" + integrity sha512-/WX/Jos8n7CxvtWPmhlKl9qCAAW0I+VR+V4yXfQxCmB8wmjiz6lPLTGjNk5zD15qi2MGv58++hQLLdow89KdkA== dependencies: fast-deep-equal "^3.1.3" + lodash.clonedeep "^4.5.0" "@panva/asn1.js@^1.0.0": version "1.0.0" @@ -2932,9 +2934,9 @@ react-use "^15.3.3" "@rollup/plugin-commonjs@^13.0.0": - version "13.0.2" - resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-13.0.2.tgz#b7783f0db049450c72d60bc06cf48d4951515e58" - integrity sha512-9JXf2k8xqvMYfqmhgtB6eCgMN9fbxwF1XDF3mGKJc6pkAmt0jnsqurxQ0tC1akQKNSXCm7c3unQxa3zuxtZ7mQ== + version "13.0.0" + resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-13.0.0.tgz#8a1d684ba6848afe8b9e3d85649d4b2f6f7217ec" + integrity sha512-Anxc3qgkAi7peAyesTqGYidG5GRim9jtg8xhmykNaZkImtvjA7Wsqep08D2mYsqw1IF7rA3lYfciLgzUSgRoqw== dependencies: "@rollup/pluginutils" "^3.0.8" commondir "^1.0.1" @@ -2983,9 +2985,9 @@ picomatch "^2.2.2" "@samverschueren/stream-to-observable@^0.3.0": - version "0.3.1" - resolved "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" - integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== + version "0.3.0" + resolved "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== dependencies: any-observable "^0.3.0" @@ -3005,9 +3007,9 @@ integrity sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ== "@sinonjs/commons@^1.7.0": - version "1.8.1" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" - integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + version "1.7.1" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" + integrity sha512-Debi3Baff1Qu1Unc3mjJ96MgpbwTn43S1+9yJ0llWygPwDNu2aaWBD6yc9y/Z8XDRNhx7U+u2UDg2OGQXkclUQ== dependencies: type-detect "4.0.8" @@ -3751,7 +3753,7 @@ "@testing-library/dom" "^7.22.2" "@types/testing-library__cypress" "^5.0.6" -"@testing-library/dom@^7.11.0", "@testing-library/dom@^7.22.2": +"@testing-library/dom@^7.11.0", "@testing-library/dom@^7.17.1", "@testing-library/dom@^7.22.2": version "7.23.0" resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-7.23.0.tgz#c54c0fa53705ad867bcefb52fc0c96487fbc10f6" integrity sha512-H5m090auYH+obdZmsaYLrSWC5OauWD2CvNbz88KBxQJoXgkJzbU0DpAG8BS7Evj5WqCC3nAAKrLS6vw0ljUYLg== @@ -3762,30 +3764,18 @@ dom-accessibility-api "^0.5.1" pretty-format "^26.4.2" -"@testing-library/dom@^7.22.3": - version "7.24.1" - resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-7.24.1.tgz#0e8acd042070f2c1b183fbfe5c0d38b3194ad3c0" - integrity sha512-TemHWY59gvzcScGiE5eooZpzYk9GaED0TuuK4WefbIc/DQg0L5wOpnj7MIEeAGF3B7Ekf1kvmVnQ97vwz4Lmhg== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.10.3" - "@types/aria-query" "^4.2.0" - aria-query "^4.2.2" - chalk "^4.1.0" - dom-accessibility-api "^0.5.1" - pretty-format "^26.4.2" - "@testing-library/jest-dom@^5.10.1": - version "5.11.4" - resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.11.4.tgz#f325c600db352afb92995c2576022b35621ddc99" - integrity sha512-6RRn3epuweBODDIv3dAlWjOEHQLpGJHB2i912VS3JQtsD22+ENInhdDNl4ZZQiViLlIfFinkSET/J736ytV9sw== + version "5.10.1" + resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.10.1.tgz#6508a9f007bd74e5d3c0b3135b668027ab663989" + integrity sha512-uv9lLAnEFRzwUTN/y9lVVXVXlEzazDkelJtM5u92PsGkEasmdI+sfzhZHxSDzlhZVTrlLfuMh2safMr8YmzXLg== 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 "^2.2.4" css.escape "^1.5.1" + jest-diff "^25.1.0" + jest-matcher-utils "^25.1.0" lodash "^4.17.15" redent "^3.0.0" @@ -3798,17 +3788,17 @@ "@types/testing-library__react-hooks" "^3.3.0" "@testing-library/react@^10.4.1": - version "10.4.9" - resolved "https://registry.npmjs.org/@testing-library/react/-/react-10.4.9.tgz#9faa29c6a1a217bf8bbb96a28bd29d7a847ca150" - integrity sha512-pHZKkqUy0tmiD81afs8xfiuseXfU/N7rAX3iKjeZYje86t9VaB0LrxYVa+OOsvkrveX5jCK3IjajVn2MbePvqA== + version "10.4.3" + resolved "https://registry.npmjs.org/@testing-library/react/-/react-10.4.3.tgz#c6f356688cffc51f6b35385583d664bb11a161f4" + integrity sha512-A/ydYXcwAcfY7vkPrfUkUTf9HQLL3/GtixTefcu3OyGQtAYQ7XBQj1S9FWbLEhfWa0BLwFwTBFS3Ao1O0tbMJg== dependencies: "@babel/runtime" "^7.10.3" - "@testing-library/dom" "^7.22.3" + "@testing-library/dom" "^7.17.1" "@testing-library/user-event@^12.0.7": - version "12.1.3" - resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.1.3.tgz#0b19022f4e59596563f3f53293d67b3ab2c394f3" - integrity sha512-U6tpKWbBMvqt8tIF77crr9VyP1W+yxK+c48xH5rvYwmT4MER5jvWAFqNzkn542Bt3qeDCn0aqwb0Pv+3mDbLtw== + version "12.0.7" + resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.0.7.tgz#6028d8de294ebd1cbf63812bc40f99e61b82f318" + integrity sha512-v/1DS6V6P5zJVq5HCC/NU93CQaqML+exslOOYRmE71ULvtOCS4Fv6A2wgBjIsEEecjZtdS2LF+KlrOK3KvVZBA== dependencies: "@babel/runtime" "^7.10.2" @@ -3911,9 +3901,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.13" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18" - integrity sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ== + version "7.0.9" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a" + integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw== dependencies: "@babel/types" "^7.3.0" @@ -3946,9 +3936,9 @@ integrity sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ== "@types/clean-css@*": - version "4.2.2" - resolved "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.2.tgz#99fd79f6939c2b325938a1c569712e07dd97d709" - integrity sha512-xiTJn3bmDh1lA8c6iVJs4ZhHw+pcmxXlJQXOB6G1oULaak8rmarIeFKI4aTJ7849dEhaO612wgIualZfbxTJwA== + version "4.2.1" + resolved "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.1.tgz#cb0134241ec5e6ede1b5344bc829668fd9871a8d" + integrity sha512-A1HQhQ0hkvqqByJMgg+Wiv9p9XdoYEzuwm11SVo1mX2/4PSdhjcrUlilJQoqLscIheC51t1D5g+EFWCXZ2VTQQ== dependencies: "@types/node" "*" @@ -4038,9 +4028,9 @@ "@types/node" "*" "@types/cors@^2.8.4", "@types/cors@^2.8.6": - version "2.8.7" - resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.7.tgz#ab2f47f1cba93bce27dfd3639b006cc0e5600889" - integrity sha512-sOdDRU3oRS7LBNTIqwDkPJyq0lpHYcbMTt0TrjzsXbk/e37hcLTH6eZX7CdbDeN0yJJvzw9hFBZkbtCSbk/jAQ== + version "2.8.6" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.6.tgz#cfaab33c49c15b1ded32f235111ce9123009bd02" + integrity sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg== dependencies: "@types/express" "*" @@ -4074,17 +4064,17 @@ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== "@types/eslint@*": - version "7.2.2" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.2.tgz#c88426b896efeb0b2732a92431ce8aa7ec0dee61" - integrity sha512-psWuwNXuKR2e6vMU5d2qH0Kqzrb2Zxwk+uBCF2LsyEph+Nex3lFIPMJXwxfGesdtJM2qtjKoCYsyh76K3x9wLg== + version "6.1.8" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-6.1.8.tgz#7e868f89bc1e520323d405940e49cb912ede5bba" + integrity sha512-CJBhm9pYdUS8cFVbXACWlLxZWFBTQMiM0eI6RYxng3u9oQ9gHdQ5PN89DHPrK4RISRzX62nRsteUlbBgEIdSug== dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree@*": - version "0.0.45" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" - integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + version "0.0.44" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.44.tgz#980cc5a29a3ef3bea6ff1f7d021047d7ea575e21" + integrity sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g== "@types/estree@0.0.39": version "0.0.39" @@ -4177,9 +4167,9 @@ "@types/express" "*" "@types/history@*": - version "4.7.7" - resolved "https://registry.npmjs.org/@types/history/-/history-4.7.7.tgz#613957d900fab9ff84c8dfb24fa3eef0c2a40896" - integrity sha512-2xtoL22/3Mv6a70i4+4RB7VgbDDORoWwjcqeNysojZA0R7NK17RbY5Gof/2QiFfJgX+KkWghbwJ+d/2SB8Ndzg== + version "4.7.5" + resolved "https://registry.npmjs.org/@types/history/-/history-4.7.5.tgz#527d20ef68571a4af02ed74350164e7a67544860" + integrity sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw== "@types/html-minifier-terser@^5.0.0": version "5.1.0" @@ -4187,9 +4177,9 @@ integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA== "@types/html-minifier@*": - version "4.0.0" - resolved "https://registry.npmjs.org/@types/html-minifier/-/html-minifier-4.0.0.tgz#2065cb9944f2d1b241146707c6935aa7b947d279" - integrity sha512-eFnGhrKmjWBlnSGNtunetE3UU2Tc/LUl92htFslSSTmpp9EKHQVcYQadCyYfnzUEFB5G/3wLWo/USQS/mEPKrA== + version "3.5.3" + resolved "https://registry.npmjs.org/@types/html-minifier/-/html-minifier-3.5.3.tgz#5276845138db2cebc54c789e0aaf87621a21e84f" + integrity sha512-j1P/4PcWVVCPEy5lofcHnQ6BtXz9tHGiFPWzqm7TtGuWZEfCHEP446HlkSNc9fQgNJaJZ6ewPtp2aaFla/Uerg== dependencies: "@types/clean-css" "*" "@types/relateurl" "*" @@ -4214,7 +4204,7 @@ resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== -"@types/http-errors@*", "@types/http-errors@^1.6.3": +"@types/http-errors@^1.6.3": version "1.8.0" resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69" integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA== @@ -4249,9 +4239,9 @@ integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + version "2.0.1" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== "@types/istanbul-lib-report@*": version "3.0.0" @@ -4261,9 +4251,9 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + version "1.1.1" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" @@ -4283,14 +4273,6 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" -"@types/jest@26.x": - version "26.0.13" - resolved "https://registry.npmjs.org/@types/jest/-/jest-26.0.13.tgz#5a7b9d5312f5dd521a38329c38ee9d3802a0b85e" - integrity sha512-sCzjKow4z9LILc6DhBvn5AkIfmQzDZkgtVVKmGwVrs5tuid38ws281D4l+7x1kP487+FlKDh5kfMZ8WSPAdmdA== - dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" - "@types/jquery@^3.3.34": version "3.5.1" resolved "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.1.tgz#cebb057acf5071c40e439f30e840c57a30d406c3" @@ -4338,15 +4320,14 @@ "@types/koa" "*" "@types/koa@*": - version "2.11.4" - resolved "https://registry.npmjs.org/@types/koa/-/koa-2.11.4.tgz#8af02a069a9f8e08fa47b8da28d982e652f69cfb" - integrity sha512-Etqs0kdqbuAsNr5k6mlZQelpZKVwMu9WPRHVVTLnceZlhr0pYmblRNJbCgoCMzKWWePldydU0AYEOX4Q9fnGUQ== + version "2.11.3" + resolved "https://registry.npmjs.org/@types/koa/-/koa-2.11.3.tgz#540ece376581b12beadf9a417dd1731bc31c16ce" + integrity sha512-ABxVkrNWa4O/Jp24EYI/hRNqEVRlhB9g09p48neQp4m3xL1TJtdWk2NyNQSMCU45ejeELMQZBYyfstyVvO2H3Q== dependencies: "@types/accepts" "*" "@types/content-disposition" "*" "@types/cookies" "*" "@types/http-assert" "*" - "@types/http-errors" "*" "@types/keygrip" "*" "@types/koa-compose" "*" "@types/node" "*" @@ -4376,9 +4357,9 @@ "@types/braces" "*" "@types/mime@*": - version "2.0.3" - resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" - integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== + version "2.0.1" + resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" + integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw== "@types/mini-css-extract-plugin@^0.9.1": version "0.9.1" @@ -4392,11 +4373,6 @@ resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/minimist@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" - integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= - "@types/minipass@*": version "2.2.0" resolved "https://registry.npmjs.org/@types/minipass/-/minipass-2.2.0.tgz#51ad404e8eb1fa961f75ec61205796807b6f9651" @@ -4427,9 +4403,9 @@ form-data "^3.0.0" "@types/node@*", "@types/node@>= 8": - version "14.6.2" - resolved "https://registry.npmjs.org/@types/node/-/node-14.6.2.tgz#264b44c5a28dfa80198fc2f7b6d3c8a054b9491f" - integrity sha512-onlIwbaeqvZyniGPfdw/TEhKIh79pz66L1q06WUQqJLnAb6wbjvOtepLYTGHTqzdXgBYIE3ZdmqHDGsRsbBz7A== + version "14.0.26" + resolved "https://registry.npmjs.org/@types/node/-/node-14.0.26.tgz#22a3b8a46510da8944b67bfc27df02c34a35331c" + integrity sha512-W+fpe5s91FBGE0pEa0lnqGLL4USgpLgs4nokw16SrBBco/gQxuua7KnArSEOd5iaMqbbSHV10vUDkJYJJqpXKA== "@types/node@^10.1.0": version "10.17.28" @@ -4437,9 +4413,9 @@ integrity sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ== "@types/node@^12.0.0": - version "12.12.54" - resolved "https://registry.npmjs.org/@types/node/-/node-12.12.54.tgz#a4b58d8df3a4677b6c08bfbc94b7ad7a7a5f82d1" - integrity sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w== + version "12.12.53" + resolved "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz#be0d375933c3d15ef2380dafb3b0350ea7021129" + integrity sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ== "@types/node@^13.7.2": version "13.13.15" @@ -4530,16 +4506,16 @@ "@types/passport" "*" "@types/passport@*", "@types/passport@^1.0.3": - version "1.0.4" - resolved "https://registry.npmjs.org/@types/passport/-/passport-1.0.4.tgz#1b35c4e197560d3974fa5f71711b6e9cce0711f0" - integrity sha512-h5OfAbfBBYSzjeU0GTuuqYEk9McTgWeGQql9g3gUw2/NNCfD7VgExVRYJVVeU13Twn202Mvk9BT0bUrl30sEgA== + version "1.0.3" + resolved "https://registry.npmjs.org/@types/passport/-/passport-1.0.3.tgz#e459ed6c262bf0686684d1b05901be0d0b192a9c" + integrity sha512-nyztuxtDPQv9utCzU0qW7Gl8BY2Dn8BKlYAFFyxKipFxjaVd96celbkLCV/tRqqBUZ+JB8If3UfgV8347DTo3Q== dependencies: "@types/express" "*" "@types/prettier@^2.0.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.0.tgz#5f96562c1075ee715a5b138f0b7f591c1f40f6b8" - integrity sha512-hiYA88aHiEIgDmeKlsyVsuQdcFn3Z2VuFd/Xm/HCnGnPD8UFU5BM128uzzRVVGEzKDKYUrRsRH9S2o+NUy/3IA== + version "2.0.0" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.0.0.tgz#dc85454b953178cc6043df5208b9e949b54a3bc4" + integrity sha512-/rM+sWiuOZ5dvuVzV37sUuklsbg+JPOP8d+nNFlo2ZtfpzPiPvh1/gc8liWOLBqe+sR+ZM7guPaIcTt6UZTo7Q== "@types/prop-types@*": version "15.7.3" @@ -4547,9 +4523,9 @@ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== "@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + version "1.5.2" + resolved "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== "@types/qs@*", "@types/qs@^6.9.0": version "6.9.4" @@ -4625,16 +4601,16 @@ "@types/react" "*" "@types/react-test-renderer@*": - version "16.9.3" - resolved "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.9.3.tgz#96bab1860904366f4e848b739ba0e2f67bcae87e" - integrity sha512-wJ7IlN5NI82XMLOyHSa+cNN4Z0I+8/YaLl04uDgcZ+W+ExWCmCiVTLT/7fRNqzy4OhStZcUwIqLNF7q+AdW43Q== + version "16.9.2" + resolved "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.9.2.tgz#e1c408831e8183e5ad748fdece02214a7c2ab6c5" + integrity sha512-4eJr1JFLIAlWhzDkBCkhrOIWOvOxcCAfQh+jiKg7l/nNZcCIL2MHl2dZhogIFKyHzedVWHaVP1Yydq/Ruu4agw== dependencies: "@types/react" "*" "@types/react-transition-group@^4.2.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d" - integrity sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w== + version "4.2.4" + resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.4.tgz#c7416225987ccdb719262766c1483da8f826838d" + integrity sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA== dependencies: "@types/react" "*" @@ -4646,12 +4622,12 @@ "@types/react" "*" "@types/react@*", "@types/react@^16.9": - version "16.9.48" - resolved "https://registry.npmjs.org/@types/react/-/react-16.9.48.tgz#d3387329f070d1b1bc0ff4a54a54ceefd5a8485c" - integrity sha512-4ykBVswgYitPGMXFRxJCHkxJDU2rjfU3/zw67f8+dB7sNdVJXsrwqoYxz/stkAucymnEEbRPFmX7Ce5Mc/kJCw== + version "16.9.37" + resolved "https://registry.npmjs.org/@types/react/-/react-16.9.37.tgz#8fb93e7dbd5b1d3796f69aa979a7fe0439bc7bea" + integrity sha512-ZqnAXallQiZ08LTSqMfWMNvAfJEzRLOxdlbbbCIJlYGjU98BEU6bE2uBpKPGeWn+v3hIgCraHKtqUcKZBzMP/Q== dependencies: "@types/prop-types" "*" - csstype "^3.0.2" + csstype "^2.2.0" "@types/react@16.4.6": version "16.4.6" @@ -4718,9 +4694,9 @@ "@types/node" "*" "@types/serve-static@*": - version "1.13.5" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.5.tgz#3d25d941a18415d3ab092def846e135a08bbcf53" - integrity sha512-6M64P58N+OXjU432WoLLBQxbA0LRGBCRm7aAGQJ+SMC1IMl0dgRVi9EFfoDcS2a7Xogygk/eGN94CfwU9UF7UQ== + version "1.13.3" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz#eb7e1c41c4468272557e897e9171ded5e2ded9d1" + integrity sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g== dependencies: "@types/express-serve-static-core" "*" "@types/mime" "*" @@ -4767,17 +4743,17 @@ "@types/react" "*" "@types/superagent@*": - version "4.1.10" - resolved "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz#5e2cc721edf58f64fe9b819f326ee74803adee86" - integrity sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g== + version "4.1.7" + resolved "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.7.tgz#a7d92d98c490ee0f802a127fdf149b9a114f77a5" + integrity sha512-JSwNPgRYjIC4pIeOqLwWwfGj6iP1n5NE6kNBEbGx2V8H78xCPwx7QpNp9plaI30+W3cFEzJO7BIIsXE+dbtaGg== dependencies: "@types/cookiejar" "*" "@types/node" "*" "@types/supertest@^2.0.8": - version "2.0.10" - resolved "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.10.tgz#630d79b4d82c73e043e43ff777a9ca98d457cab7" - integrity sha512-Xt8TbEyZTnD5Xulw95GLMOkmjGICrOQyJ2jqgkSjAUR3mm7pAIzSR0NFBaMcwlzVvlpCjNwbATcWWwjNiZiFrQ== + version "2.0.9" + resolved "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.9.tgz#049bddbcb0ee0d60a9b836ccc977d813a1c32325" + integrity sha512-0BTpWWWAO1+uXaP/oA0KW1eOZv4hc0knhrWowV06Gwwz3kqQxNO98fUFM2e15T+PdPRmOouNFrYvaBgdojPJ3g== dependencies: "@types/superagent" "*" @@ -4789,9 +4765,9 @@ "@types/react" "*" "@types/tapable@*", "@types/tapable@^1.0.5": - version "1.0.6" - resolved "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" - integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + version "1.0.5" + resolved "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" + integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ== "@types/tar@^4.0.3": version "4.0.3" @@ -4817,9 +4793,9 @@ cypress "*" "@types/testing-library__jest-dom@^5.9.1": - version "5.9.2" - resolved "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.2.tgz#59e4771a1cf87d51e89a5cc8195cd3b647cba322" - integrity sha512-K7nUSpH/5i8i0NagTJ+uFUDRueDlnMNhJtMjMwTGPPSqyImbWC/hgKPDCKt6Phu2iMJg2kWqlax+Ucj2DKMwpA== + version "5.9.1" + resolved "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.1.tgz#aba5ee062b7880f69c212ef769389f30752806e5" + integrity sha512-yYn5EKHO3MPEMSOrcAb1dLWY+68CG29LiXKsWmmpVHqoP5+ZRiAVLyUHvPNrO2dABDdUGZvavMsaGpWNjM6N2g== dependencies: "@types/jest" "*" @@ -4838,16 +4814,16 @@ "@types/node" "*" "@types/uglify-js@*": - version "3.9.3" - resolved "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz#d94ed608e295bc5424c9600e6b8565407b6b4b6b" - integrity sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w== + version "3.0.4" + resolved "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082" + integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ== dependencies: source-map "^0.6.1" "@types/uuid@^8.0.0": - version "8.3.0" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f" - integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== + version "8.0.0" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.0.0.tgz#165aae4819ad2174a17476dbe66feebd549556c0" + integrity sha512-xSQfNcvOiE5f9dyd4Kzxbof1aTrLobL278pGLKOZI6esGfZ7ts9Ka16CzIN6Y8hFHE1C7jIBZokULhK1bOgjRw== "@types/webpack-dev-server@*", "@types/webpack-dev-server@^3.10.0": version "3.11.0" @@ -4873,13 +4849,13 @@ "@types/webpack" "*" "@types/webpack-sources@*": - version "1.4.2" - resolved "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.2.tgz#5d3d4dea04008a779a90135ff96fb5c0c9e6292c" - integrity sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw== + version "0.1.6" + resolved "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.6.tgz#3d21dfc2ec0ad0c77758e79362426a9ba7d7cbcb" + integrity sha512-FtAWR7wR5ocJ9+nP137DV81tveD/ZgB1sadnJ/axUGM3BUVfRPx8oQNMtv3JNfTeHx3VP7cXiyfR/jmtEsVHsQ== dependencies: "@types/node" "*" "@types/source-list-map" "*" - source-map "^0.7.3" + source-map "^0.6.1" "@types/webpack@*", "@types/webpack@^4.41.7", "@types/webpack@^4.41.8": version "4.41.21" @@ -4925,9 +4901,9 @@ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^15.0.0": - version "15.0.5" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" - integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== + version "15.0.4" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" + integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== dependencies: "@types/yargs-parser" "*" @@ -4942,46 +4918,46 @@ integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg== "@typescript-eslint/eslint-plugin@^2.14.0": - version "2.34.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" - integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== + version "2.24.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz#a86cf618c965a462cddf3601f594544b134d6d68" + integrity sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA== dependencies: - "@typescript-eslint/experimental-utils" "2.34.0" + "@typescript-eslint/experimental-utils" "2.24.0" + eslint-utils "^1.4.3" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.34.0", "@typescript-eslint/experimental-utils@^2.5.0": - version "2.34.0" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== +"@typescript-eslint/experimental-utils@2.24.0", "@typescript-eslint/experimental-utils@^2.5.0": + version "2.24.0" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz#a5cb2ed89fedf8b59638dc83484eb0c8c35e1143" + integrity sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" + "@typescript-eslint/typescript-estree" "2.24.0" eslint-scope "^5.0.0" - eslint-utils "^2.0.0" "@typescript-eslint/parser@^2.14.0": - version "2.34.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" - integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== + version "2.24.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz#2cf0eae6e6dd44d162486ad949c126b887f11eb8" + integrity sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.34.0" - "@typescript-eslint/typescript-estree" "2.34.0" + "@typescript-eslint/experimental-utils" "2.24.0" + "@typescript-eslint/typescript-estree" "2.24.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== +"@typescript-eslint/typescript-estree@2.24.0": + version "2.24.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz#38bbc8bb479790d2f324797ffbcdb346d897c62a" + integrity sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" glob "^7.1.6" is-glob "^4.0.1" lodash "^4.17.15" - semver "^7.3.2" + semver "^6.3.0" tsutils "^3.17.1" "@webassemblyjs/ast@1.9.0": @@ -5186,9 +5162,9 @@ abab@^1.0.0: integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4= abab@^2.0.0, abab@^2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz#6dfa57b417ca06d21b2478f0e638302f99c2405c" - integrity sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ== + version "2.0.3" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== abbrev@1: version "1.1.1" @@ -5237,9 +5213,9 @@ acorn-walk@^6.0.1: integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + version "7.1.1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" + integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== acorn@^2.1.0, acorn@^2.4.0: version "2.7.0" @@ -5256,10 +5232,10 @@ acorn@^6.0.1, acorn@^6.4.1: resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" - integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== +acorn@^7.1.1, acorn@^7.2.0: + version "7.3.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== address@1.1.2, address@^1.0.1: version "1.1.2" @@ -5287,10 +5263,10 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" -aggregate-error@3.1.0, aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== +aggregate-error@3.0.1, aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" @@ -5370,16 +5346,11 @@ ansi-align@^3.0.0: dependencies: string-width "^3.0.0" -ansi-colors@^3.0.0: +ansi-colors@^3.0.0, ansi-colors@^3.2.1: version "3.2.4" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -5691,6 +5662,14 @@ argparse@^1.0.10, argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + aria-query@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -5793,7 +5772,7 @@ array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -array.prototype.flatmap@^1.2.1, array.prototype.flatmap@^1.2.3: +array.prototype.flatmap@^1.2.1: version "1.2.3" resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== @@ -5822,15 +5801,14 @@ asap@^2.0.0, asap@~2.0.3, asap@~2.0.6: resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" asn1@~0.2.0, asn1@~0.2.3: version "0.2.4" @@ -5857,7 +5835,7 @@ assign-symbols@^1.0.0: resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types-flow@^0.0.7: +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= @@ -5868,11 +5846,9 @@ ast-types@0.11.3: integrity sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA== ast-types@^0.13.2: - version "0.13.4" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - dependencies: - tslib "^2.0.1" + version "0.13.2" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" + integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== astral-regex@^1.0.0: version "1.0.0" @@ -5906,14 +5882,14 @@ async@0.9.x: resolved "https://registry.npmjs.org/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= -async@^2.6.2: +async@^2.6.1, async@^2.6.2: version "2.6.3" resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== dependencies: lodash "^4.17.14" -async@^3.1.0, async@^3.2.0: +async@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== @@ -5964,16 +5940,11 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + version "1.9.1" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== -axe-core@^3.5.4: - version "3.5.5" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" - integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== - -axios@^0.19.2: +axios@^0.19.0, axios@^0.19.2: version "0.19.2" resolved "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== @@ -5987,10 +5958,10 @@ axios@^0.20.0: dependencies: follow-redirects "^1.10.0" -axobject-query@^2.1.2: - version "2.2.0" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" - integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== +axobject-query@^2.0.2: + version "2.1.2" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799" + integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ== babel-code-frame@^6.22.0: version "6.26.0" @@ -6074,9 +6045,9 @@ babel-plugin-dynamic-import-node@^2.3.3: object.assign "^4.1.0" babel-plugin-emotion@^10.0.20, babel-plugin-emotion@^10.0.27: - version "10.0.33" - resolved "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03" - integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ== + version "10.0.29" + resolved "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.29.tgz#89d8e497091fcd3d10331f097f1471e4cc3f35b4" + integrity sha512-7Jpi1OCxjyz0k163lKtqP+LHMg5z3S6A7vMBfHnF06l2unmtsOmFDzZBpGf0CWo1G4m8UACfVcDJiSiRuu/cSw== dependencies: "@babel/helper-module-imports" "^7.0.0" "@emotion/hash" "0.8.0" @@ -6435,9 +6406,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + version "2.0.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== bindings@^1.5.0: version "1.5.0" @@ -6460,33 +6431,23 @@ bl@^1.0.0: safe-buffer "^5.1.1" bl@^4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" - integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + version "4.0.2" + resolved "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" + integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== dependencies: buffer "^5.5.0" inherits "^2.0.4" readable-stream "^3.4.0" -blob-util@2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" - integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== - bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: - version "4.11.9" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== - -bn.js@^5.1.1: - version "5.1.3" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" - integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== body-parser@1.19.0, body-parser@^1.18.3: version "1.19.0" @@ -6612,7 +6573,7 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: +browserify-rsa@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= @@ -6621,19 +6582,17 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + version "4.0.4" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -6652,7 +6611,7 @@ browserslist@4.10.0: node-releases "^1.1.52" pkg-up "^3.1.0" -browserslist@^4.0.0, browserslist@^4.12.0: +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.3: version "4.13.0" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== @@ -6662,16 +6621,6 @@ browserslist@^4.0.0, browserslist@^4.12.0: escalade "^3.0.1" node-releases "^1.1.58" -browserslist@^4.8.5: - version "4.14.0" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" - integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ== - dependencies: - caniuse-lite "^1.0.30001111" - electron-to-chromium "^1.3.523" - escalade "^3.0.2" - node-releases "^1.1.60" - bs-logger@0.x: version "0.2.6" resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -6804,9 +6753,9 @@ bytes@3.1.0: integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + version "12.0.3" + resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -7004,16 +6953,11 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001109: version "1.0.30001113" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001113.tgz#22016ab55b5a8b04fa00ca342d9ee1b98df48065" integrity sha512-qMvjHiKH21zzM/VDZr6oosO6Ri3U0V2tC015jRXjOecwQCJtsU5zklTNTk31jQbIOP8gha0h1ccM/g0ECP+4BA== -caniuse-lite@^1.0.30001111: - version "1.0.30001120" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001120.tgz#cd21d35e537214e19f7b9f4f161f7b0f2710d46c" - integrity sha512-JBP68okZs1X8D7MQTY602jxMYBmXEKOFkzTBaNSkubooMPFOAv2TXWaKle7qgHpjLDhUzA/TMT0qsNleVyXGUQ== - canvas@^2.6.1: version "2.6.1" resolved "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz#0d087dd4d60f5a5a9efa202757270abea8bef89e" @@ -7186,11 +7130,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: safe-buffer "^5.0.1" circleci-api@^4.0.0: - version "4.1.3" - resolved "https://registry.npmjs.org/circleci-api/-/circleci-api-4.1.3.tgz#cafd80bc1905c6064724636741b4b5b231ed34d0" - integrity sha512-Km6H8LB3nNbFUjErhI+sNQrcHcU7dCBnQEi4ckBtQMkCXh+2gDvaYchfkeuIaA1hkakQT5sLmdPbYzhKbvsOMg== + version "4.0.0" + resolved "https://registry.npmjs.org/circleci-api/-/circleci-api-4.0.0.tgz#d773fe68f4a59e1968881269883a23b0805b3546" + integrity sha512-D/THFyhOv6THSkYXJhrOLIOmV7fmyDqgs1+pBFMAqDR+ywXszxa2Dqx1Zw+YD3O2zD2y5LQOifCDT96VidRG7Q== dependencies: - axios "^0.20.0" + axios "^0.19.0" class-utils@^0.3.5: version "0.3.6" @@ -7245,12 +7189,12 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.2.0, cli-spinners@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f" - integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== +cli-spinners@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" + integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== -cli-table3@0.6.0, cli-table3@~0.6.0: +cli-table3@0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== @@ -7270,6 +7214,14 @@ cli-table3@~0.5.1: optionalDependencies: colors "^1.1.2" +cli-truncate@2.1.0, cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -7278,18 +7230,10 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + version "2.2.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= cli-width@^3.0.0: version "3.0.0" @@ -7364,7 +7308,7 @@ clone@^1.0.2: resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clsx@^1.0.2, clsx@^1.0.4, clsx@^1.1.0: +clsx@^1.0.1, clsx@^1.0.2, clsx@^1.0.4, clsx@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== @@ -7394,17 +7338,17 @@ code-point-at@^1.0.0: integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= codemirror-graphql@^0.12.0: - version "0.12.1" - resolved "https://registry.npmjs.org/codemirror-graphql/-/codemirror-graphql-0.12.1.tgz#02ce19ffe15397c049ca87c195ac13080d2abe8f" - integrity sha512-PlOCTpfBBUwDZXQo60ZfzD/nGZsaJoE1tA07Uf9xJN7R0kBDGJeD4AVfdUTprZr27p0JIntJzmL6mt/G4Zkzeg== + version "0.12.0" + resolved "https://registry.npmjs.org/codemirror-graphql/-/codemirror-graphql-0.12.0.tgz#55f782ffaaea7ff8dbda037e6b97b584dff2402a" + integrity sha512-C/0vKzQT5Uw+DLz6/MwKer29FQM52sh9Bem+VdDW42094j8nES1sdnuqj4k5ahNdQpW4FmVeoj/ngn2g3AWmgg== dependencies: - graphql-language-service-interface "^2.4.1" - graphql-language-service-parser "^1.6.1" + graphql-language-service-interface "^2.4.0" + graphql-language-service-parser "^1.6.0" codemirror@^5.52.2: - version "5.57.0" - resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.57.0.tgz#d26365b72f909f5d2dbb6b1209349ca1daeb2d50" - integrity sha512-WGc6UL7Hqt+8a6ZAsj/f1ApQl3NPvHY/UQSzG6fB6l4BjExgVdhFaxd7mRTw1UCiYe/6q86zHP+kfvBQcZGvUg== + version "5.53.2" + resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.53.2.tgz#9799121cf8c50809cca487304e9de3a74d33f428" + integrity sha512-wvSQKS4E+P8Fxn/AQ+tQtJnF1qH5UOlxtugFLpubEZ5jcdH2iXTVinb+Xc/4QjshuOxRm4fUsU2QPF1JJKiyXA== collapse-white-space@^1.0.2: version "1.0.6" @@ -7412,9 +7356,9 @@ collapse-white-space@^1.0.2: integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + version "1.0.0" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1" + integrity sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ== collection-visit@^1.0.0: version "1.0.0" @@ -7477,6 +7421,11 @@ colorette@1.2.1, colorette@^1.2.1: resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== +colornames@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96" + integrity sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y= + colors@^1.1.2, colors@^1.2.1: version "1.4.0" resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -7515,7 +7464,7 @@ command-exists-promise@^2.0.2: resolved "https://registry.npmjs.org/command-exists-promise/-/command-exists-promise-2.0.2.tgz#7beecc4b218299f3c61fa69a4047aa0b36a64a99" integrity sha512-T6PB6vdFrwnHXg/I0kivM3DqaCGZLjjYSOe0a5WgFKcz1sOnmOeIjnhQPXVXX3QjVbLyTJ85lJkX6lUpukTzaA== -commander@^2.19.0, commander@^2.20.0, commander@^2.20.3: +commander@^2.11.0, commander@^2.19.0, commander@^2.20.0, commander@^2.20.3, commander@~2.20.3: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -7530,7 +7479,7 @@ commander@^5.0.0, commander@^5.1.0: resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -commander@^6.0.0, commander@^6.1.0: +commander@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== @@ -7545,13 +7494,13 @@ commondir@^1.0.1: resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== +compare-func@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= dependencies: array-ify "^1.0.0" - dot-prop "^5.1.0" + dot-prop "^3.0.0" compare-versions@^3.6.0: version "3.6.0" @@ -7717,11 +7666,11 @@ content-type@~1.0.4: integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== conventional-changelog-angular@^5.0.3: - version "5.0.11" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.11.tgz#99a3ca16e4a5305e0c2c2fae3ef74fd7631fc3fb" - integrity sha512-nSLypht/1yEflhuTogC03i7DX7sOrXGsRn14g131Potqi6cbGbGEE9PSDEHKldabB6N76HiSyw9Ph+kLmC04Qw== + version "5.0.6" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" + integrity sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA== dependencies: - compare-func "^2.0.0" + compare-func "^1.3.1" q "^1.5.1" conventional-changelog-core@^3.1.6: @@ -7744,43 +7693,43 @@ conventional-changelog-core@^3.1.6: through2 "^3.0.0" conventional-changelog-preset-loader@^2.1.1: - version "2.3.4" - resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + version "2.3.0" + resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz#580fa8ab02cef22c24294d25e52d7ccd247a9a6a" + integrity sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ== conventional-changelog-writer@^4.0.6: - version "4.0.17" - resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.17.tgz#4753aaa138bf5aa59c0b274cb5937efcd2722e21" - integrity sha512-IKQuK3bib/n032KWaSb8YlBFds+aLmzENtnKtxJy3+HqDq5kohu3g/UdNbIHeJWygfnEbZjnCKFxAW0y7ArZAw== + version "4.0.11" + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4" + integrity sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw== dependencies: - compare-func "^2.0.0" - conventional-commits-filter "^2.0.6" + compare-func "^1.3.1" + conventional-commits-filter "^2.0.2" dateformat "^3.0.0" - handlebars "^4.7.6" + handlebars "^4.4.0" json-stringify-safe "^5.0.1" lodash "^4.17.15" - meow "^7.0.0" + meow "^5.0.0" semver "^6.0.0" split "^1.0.0" through2 "^3.0.0" -conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.6.tgz#0935e1240c5ca7698329affee1b6a46d33324c4c" - integrity sha512-4g+sw8+KA50/Qwzfr0hL5k5NWxqtrOVw4DDk3/h6L85a9Gz0/Eqp3oP+CWCNfesBvZZZEFHF7OTEbRe+yYSyKw== +conventional-commits-filter@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" + integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== dependencies: lodash.ismatch "^4.4.0" modify-values "^1.0.0" conventional-commits-parser@^3.0.3: - version "3.1.0" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz#10140673d5e7ef5572633791456c5d03b69e8be4" - integrity sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA== + version "3.0.8" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" + integrity sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" lodash "^4.17.15" - meow "^7.0.0" + meow "^5.0.0" split2 "^2.0.0" through2 "^3.0.0" trim-off-newlines "^1.0.0" @@ -7859,22 +7808,17 @@ copy-to-clipboard@^3, copy-to-clipboard@^3.0.8, copy-to-clipboard@^3.1.0, copy-t toggle-selection "^1.0.6" core-js-compat@^3.6.2: - version "3.6.5" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" - integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + version "3.6.4" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" + integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== dependencies: - browserslist "^4.8.5" + browserslist "^4.8.3" semver "7.0.0" core-js-pure@^3.0.0, core-js-pure@^3.0.1: - version "3.6.5" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" - integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + version "3.6.4" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" + integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== core-js@^2.4.0, core-js@^2.5.7, core-js@^2.6.11, core-js@^2.6.5: version "2.6.11" @@ -7932,14 +7876,14 @@ cosmiconfig@^7.0.0: yaml "^1.10.0" create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + version "4.0.3" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== dependencies: bn.js "^4.1.0" - elliptic "^6.5.3" + elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: +create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -7950,7 +7894,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: version "1.1.7" resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -7962,15 +7906,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-class@^15.5.1: - version "15.6.3" - resolved "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" - integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - object-assign "^4.1.1" - create-react-context@0.3.0, create-react-context@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" @@ -8136,12 +8071,13 @@ css-select@^2.0.0: nth-check "^1.0.2" css-selector-tokenizer@^0.7.0: - version "0.7.3" - resolved "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" - integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== + version "0.7.2" + resolved "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" + integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw== dependencies: cssesc "^3.0.0" fastparse "^1.1.2" + regexpu-core "^4.6.0" css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" @@ -8151,7 +8087,7 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" -css-tree@1.0.0-alpha.39, css-tree@^1.0.0-alpha.28: +css-tree@^1.0.0-alpha.28: version "1.0.0-alpha.39" resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== @@ -8159,12 +8095,12 @@ css-tree@1.0.0-alpha.39, css-tree@^1.0.0-alpha.28: mdn-data "2.0.6" source-map "^0.6.1" -css-vendor@^2.0.8: - version "2.0.8" - resolved "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" - integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== +css-vendor@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.7.tgz#4e6d53d953c187981576d6a542acc9fb57174bda" + integrity sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg== dependencies: - "@babel/runtime" "^7.8.3" + "@babel/runtime" "^7.6.2" is-in-browser "^1.0.2" css-what@2.1: @@ -8173,23 +8109,24 @@ css-what@2.1: integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== css-what@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" - integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== + version "3.2.1" + resolved "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" + integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== css.escape@1.5.1, css.escape@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= -css@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== +css@^2.2.4: + version "2.2.4" + resolved "https://registry.npmjs.org/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== dependencies: - inherits "^2.0.4" + inherits "^2.0.3" source-map "^0.6.1" - source-map-resolve "^0.6.0" + source-map-resolve "^0.5.2" + urix "^0.1.0" cssesc@^3.0.0: version "3.0.0" @@ -8270,11 +8207,11 @@ cssnano@^4.1.10: postcss "^7.0.0" csso@^4.0.2: - version "4.0.3" - resolved "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" - integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== + version "4.0.2" + resolved "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" + integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== dependencies: - css-tree "1.0.0-alpha.39" + css-tree "1.0.0-alpha.37" cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0", "cssom@>= 0.3.2 < 0.4.0", cssom@~0.3.6: version "0.3.8" @@ -8307,15 +8244,10 @@ cssstyle@^2.2.0: dependencies: cssom "~0.3.6" -csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.5, csstype@^2.5.7: - version "2.6.13" - resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.13.tgz#a6893015b90e84dd6e85d0e3b442a1e84f2dbe0f" - integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A== - -csstype@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" - integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== +csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.5, csstype@^2.5.7, csstype@^2.6.5, csstype@^2.6.7: + version "2.6.9" + resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" + integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== currently-unhandled@^0.4.1: version "0.4.1" @@ -8329,51 +8261,7 @@ cyclist@^1.0.1: resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -cypress@*: - version "5.0.0" - resolved "https://registry.npmjs.org/cypress/-/cypress-5.0.0.tgz#6957e299b790af8b1cd7bea68261b8935646f72e" - integrity sha512-jhPd0PMO1dPSBNpx6pHVLkmnnaTfMy3wCoacHAKJ9LJG06y16zqUNSFri64N4BjuGe8y6mNMt8TdgKnmy9muCg== - dependencies: - "@cypress/listr-verbose-renderer" "^0.4.1" - "@cypress/request" "^2.88.5" - "@cypress/xvfb" "^1.2.4" - "@types/sinonjs__fake-timers" "^6.0.1" - "@types/sizzle" "^2.3.2" - arch "^2.1.2" - blob-util "2.0.2" - bluebird "^3.7.2" - cachedir "^2.3.0" - chalk "^4.1.0" - check-more-types "^2.24.0" - cli-table3 "~0.6.0" - commander "^4.1.1" - common-tags "^1.8.0" - debug "^4.1.1" - eventemitter2 "^6.4.2" - execa "^4.0.2" - executable "^4.1.1" - extract-zip "^1.7.0" - fs-extra "^9.0.1" - getos "^3.2.1" - is-ci "^2.0.0" - is-installed-globally "^0.3.2" - lazy-ass "^1.6.0" - listr "^0.14.3" - lodash "^4.17.19" - log-symbols "^4.0.0" - minimist "^1.2.5" - moment "^2.27.0" - ospath "^1.2.2" - pretty-bytes "^5.3.0" - ramda "~0.26.1" - request-progress "^3.0.0" - supports-color "^7.1.0" - tmp "~0.2.1" - untildify "^4.0.0" - url "^0.11.0" - yauzl "^2.10.0" - -cypress@^4.2.0: +cypress@*, cypress@^4.2.0: version "4.12.1" resolved "https://registry.npmjs.org/cypress/-/cypress-4.12.1.tgz#0ead1b9f4c0917d69d8b57f996b6e01fe693b6ec" integrity sha512-9SGIPEmqU8vuRA6xst2CMTYd9sCFCxKSzrHt0wr+w2iAQMCIIsXsQ5Gplns1sT6LDbZcmLv6uehabAOl3fhc9Q== @@ -8448,7 +8336,7 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" -damerau-levenshtein@^1.0.6: +damerau-levenshtein@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== @@ -8496,9 +8384,9 @@ date-fns@^1.27.2: integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== date-fns@^2.0.0-alpha.27, date-fns@^2.0.1, date-fns@^2.15.0: - version "2.16.0" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.16.0.tgz#d34f0f5f2fd498c984513042e8f7247ea86c4cb7" - integrity sha512-DWTRyfOA85sZ4IiXPHhiRIOs3fW5U6Msrp+gElXARa6EpoQTXPyHQmh7hr+ssw2nx9FtOQWnAMJKgL5vaJqILw== + version "2.15.0" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.15.0.tgz#424de6b3778e4e69d3ff27046ec136af58ae5d5f" + integrity sha512-ZCPzAMJZn3rNUvvQIMlXhDr4A+Ar07eLeGsGREoWU19a3Pqf5oYa+ccd+B3F6XVtQY6HANMFdOQ8A+ipFnvJdQ== dateformat@^3.0.0: version "3.0.3" @@ -8543,7 +8431,7 @@ debuglog@^1.0.1: resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= -decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: +decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= @@ -8819,6 +8707,15 @@ dezalgo@^1.0.0: asap "^2.0.0" wrappy "1" +diagnostics@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz#cab6ac33df70c9d9a727490ae43ac995a769b22a" + integrity sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ== + dependencies: + colorspace "1.1.x" + enabled "1.0.x" + kuler "1.0.x" + dicer@0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" @@ -8893,9 +8790,9 @@ dns-txt@^2.0.2: buffer-indexof "^1.0.0" docker-modem@^2.1.0: - version "2.1.4" - resolved "https://registry.npmjs.org/docker-modem/-/docker-modem-2.1.4.tgz#54ec1079287624a8d30cc3c55ab0e1201e7c46c9" - integrity sha512-vDTzZjjO1sXMY7m0xKjGdFMMZL7vIUerkC3G4l6rnrpOET2M6AOufM8ajmQoOB+6RfSn6I/dlikCUq/Y91Q1sQ== + version "2.1.3" + resolved "https://registry.npmjs.org/docker-modem/-/docker-modem-2.1.3.tgz#15432225f63db02eb5de4bb9a621b7293e5f264d" + integrity sha512-cwaRptBmYZwu/FyhGcqBm2MzXA77W2/E6eVkpOZVDk6PkI9Bjj84xPrXiHMA+OWjzNy+DFjgKh8Q+1hMR7/OHg== dependencies: debug "^4.1.1" readable-stream "^3.5.0" @@ -8944,15 +8841,15 @@ dom-converter@^0.2: dependencies: utila "~0.4" -dom-helpers@^5.0.1, dom-helpers@^5.1.3: - version "5.2.0" - resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b" - integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ== +dom-helpers@^5.0.0, dom-helpers@^5.0.1: + version "5.1.4" + resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz#4609680ab5c79a45f2531441f1949b79d6587f4b" + integrity sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A== dependencies: "@babel/runtime" "^7.8.7" - csstype "^3.0.2" + csstype "^2.6.7" -dom-serializer@0: +dom-serializer@0, dom-serializer@^0.2.1: version "0.2.2" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== @@ -8960,19 +8857,10 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.0.1.tgz#79695eb49af3cd8abc8d93a73da382deb1ca0795" - integrity sha512-1Aj1Qy3YLbdslkI75QEOfdp9TkQ3o8LRISAzxOibjBs/xWwr1WxZFOQphFkZuepHFGo+kB8e5FVJSS0faAJ4Rw== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - entities "^2.0.0" - dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + version "0.1.1" + resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= domain-browser@^1.1.1: version "1.2.0" @@ -9023,9 +8911,9 @@ dompurify@^1.0.11: integrity sha512-XywCTXZtc/qCX3iprD1pIklRVk/uhl8BKpkTxr+ZyMVUzSUg7wkQXRBp/euJ5J5moa1QvfpvaPQVP71z1O59dQ== dompurify@^2.0.7: - version "2.0.14" - resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.0.14.tgz#792f72e95bc643999e7ae81baf6e9c6d9de02429" - integrity sha512-oqcjyCLHLjWugZ6VwK0YfmRND/DFy/CuZhdasmymMfnxbzaaQxBSA1ATZIXWESGDj/nvq1vKLmRa7rTdbGgrmQ== + version "2.0.12" + resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.0.12.tgz#284a2b041e1c60b8e72d7b4d2fadad36141254ae" + integrity sha512-Fl8KseK1imyhErHypFPA8qpq9gPzlsJ/EukA6yk9o0gX23p1TzC+rh9LqNg1qvErRTc0UNMYlKxEGSfSh43NDg== domutils@1.5.1: version "1.5.1" @@ -9044,11 +8932,11 @@ domutils@^1.5.1, domutils@^1.7.0: domelementtype "1" domutils@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.2.0.tgz#f3ce1610af5c30280bde1b71f84b018b958f32cf" - integrity sha512-0haAxVr1PR0SqYwCH7mxMpHZUwjih9oPPedqpR/KufsnxPyZ9dyVw1R5093qnJF3WXSbjBkdzRWLw/knJV/fAg== + version "2.0.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.0.0.tgz#15b8278e37bfa8468d157478c58c367718133c08" + integrity sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg== dependencies: - dom-serializer "^1.0.1" + dom-serializer "^0.2.1" domelementtype "^2.0.1" domhandler "^3.0.0" @@ -9060,14 +8948,21 @@ dot-case@^3.0.3: no-case "^3.0.3" tslib "^1.10.0" -dot-prop@^4.2.0: - version "4.2.1" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" - integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= dependencies: is-obj "^1.0.0" -dot-prop@^5.1.0, dot-prop@^5.2.0: +dot-prop@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +dot-prop@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== @@ -9087,9 +8982,9 @@ dotenv-expand@^5.1.0: integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== dotenv-webpack@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz#7ca79cef2497dd4079d43e81e0796bc9d0f68a5e" - integrity sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg== + version "1.7.0" + resolved "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.7.0.tgz#4384d8c57ee6f405c296278c14a9f9167856d3a1" + integrity sha512-wwNtOBW/6gLQSkb8p43y0Wts970A3xtNiG/mpwj9MLUhtPCQG6i+/DSXXoNN7fbPCU/vQ7JjwGmgOeGZSSZnsw== dependencies: dotenv-defaults "^1.0.2" @@ -9109,9 +9004,9 @@ duplexer3@^0.1.4: integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= duplexer@^0.1.1, duplexer@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + version "0.1.1" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" @@ -9143,16 +9038,11 @@ ejs@^3.1.2: dependencies: jake "^10.6.1" -electron-to-chromium@^1.3.378: +electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.488: version "1.3.509" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.509.tgz#830fcb89cd66dc2984d18d794973b99e3f00584c" integrity sha512-cN4lkjNRuTG8rtAqTOVgwpecEC2kbKA04PG6YijcKGHK/kD0xLjiqExcAOmLUwtXZRF8cBeam2I0VZcih919Ug== -electron-to-chromium@^1.3.523: - version "1.3.555" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.555.tgz#a096716ff77cf8da9a608eb628fd6927869503d2" - integrity sha512-/55x3nF2feXFZ5tdGUOr00TxnUjUgdxhrn+eCJ1FAcoAt+cKQTjQkUC5XF4frMWE1R5sjHk+JueuBalimfe5Pg== - elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -9165,7 +9055,7 @@ element-resize-detector@^1.2.1: dependencies: batch-processor "1.0.0" -elliptic@^6.5.3: +elliptic@^6.0.0: version "6.5.3" resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== @@ -9193,7 +9083,7 @@ emittery@^0.7.1: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= -emoji-regex@^7.0.1: +emoji-regex@^7.0.1, emoji-regex@^7.0.2: version "7.0.3" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== @@ -9203,11 +9093,6 @@ emoji-regex@^8.0.0: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.0.0.tgz#48a2309cc8a1d2e9d23bc6a67c39b63032e76ea4" - integrity sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w== - emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -9227,10 +9112,12 @@ emotion-theming@^10.0.19: "@emotion/weak-memoize" "0.2.5" hoist-non-react-statics "^3.3.0" -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== +enabled@1.0.x: + version "1.0.2" + resolved "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93" + integrity sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M= + dependencies: + env-variable "0.0.x" encodeurl@~1.0.2: version "1.0.2" @@ -9238,11 +9125,11 @@ encodeurl@~1.0.2: integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= encoding@^0.1.11: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + version "0.1.12" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: - iconv-lite "^0.6.2" + iconv-lite "~0.4.13" end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" @@ -9276,32 +9163,30 @@ enquirer@^2.3.5: dependencies: ansi-colors "^3.2.1" -enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - entities@^1.1.1, entities@^1.1.2, entities@~1.1.1: version "1.1.2" resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0, entities@~2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + version "2.0.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== env-paths@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== +env-variable@0.0.x: + version "0.0.6" + resolved "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz#74ab20b3786c545b62b4a4813ab8cf22726c9808" + integrity sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg== + envinfo@^7.3.1: - version "7.7.3" - resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" - integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== + version "7.5.0" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" + integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== err-code@^1.0.0: version "1.1.2" @@ -9346,41 +9231,6 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es- string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" -es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.0: - version "1.18.0-next.0" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" - integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-negative-zero "^2.0.0" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^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" @@ -9418,9 +9268,9 @@ es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@ next-tick "~1.0.0" es5-shim@^4.5.13: - version "4.5.14" - resolved "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.14.tgz#90009e1019d0ea327447cb523deaff8fe45697ef" - integrity sha512-7SwlpL+2JpymWTt8sNLuC2zdhhc+wrfe5cMPI2j0o6WsPdfAiPwmFy2f0AocPB4RQVBOZ9kNTgi5YF7TdhkvEg== + version "4.5.13" + resolved "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.13.tgz#5d88062de049f8969f83783f4a4884395f21d28b" + integrity sha512-xi6hh6gsvDE0MaW4Vp1lgNEBpVcCXRWfPXj5egDvtgLz4L9MEvNwYEMdJH+JJinWkwa8c3c3o5HduV7dB/e1Hw== es6-iterator@^2.0.3, es6-iterator@~2.0.3: version "2.0.3" @@ -9471,7 +9321,7 @@ esbuild@0.6.3: resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.6.3.tgz#a957e22f2503c745793514388110f9b55b3a6f83" integrity sha512-4lHgz/EvGLRQnDYzzrvW+eilaPHim5pCLz4mP0k0QIalD/n8Ji2NwQwoIa1uX+yKkbn9R/FAZvaEbodjx55rDg== -escalade@^3.0.2: +escalade@^3.0.1: version "3.0.2" resolved "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== @@ -9509,9 +9359,9 @@ escodegen@^1.14.1, escodegen@^1.6.1, escodegen@^1.9.1: source-map "~0.6.1" eslint-config-prettier@^6.0.0: - version "6.11.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" - integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA== + version "6.10.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz#7b15e303bf9c956875c948f6b21500e48ded6a7f" + integrity sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg== dependencies: get-stdin "^6.0.0" @@ -9527,9 +9377,9 @@ eslint-formatter-friendly@^7.0.0: text-table "0.2.0" eslint-import-resolver-node@^0.3.3: - version "0.3.4" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + version "0.3.3" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" + integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== dependencies: debug "^2.6.9" resolve "^1.13.1" @@ -9579,28 +9429,26 @@ eslint-plugin-import@^2.20.2, eslint-plugin-import@^2.22.0: tsconfig-paths "^3.9.0" eslint-plugin-jest@^23.6.0: - version "23.20.0" - resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-23.20.0.tgz#e1d69c75f639e99d836642453c4e75ed22da4099" - integrity sha512-+6BGQt85OREevBDWCvhqj1yYA4+BFK4XnRZSGJionuEYmcglMZYLNNBBemwzbqUAckURaHdJSBcjHPyrtypZOw== + version "23.8.2" + resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-23.8.2.tgz#6f28b41c67ef635f803ebd9e168f6b73858eb8d4" + integrity sha512-xwbnvOsotSV27MtAe7s8uGWOori0nUsrXh2f1EnpmXua8sDfY6VZhHAhHg2sqK7HBNycRQExF074XSZ7DvfoFg== dependencies: "@typescript-eslint/experimental-utils" "^2.5.0" eslint-plugin-jsx-a11y@^6.2.1: - version "6.3.1" - resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz#99ef7e97f567cc6a5b8dd5ab95a94a67058a2660" - integrity sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== + version "6.2.3" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" + integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== dependencies: - "@babel/runtime" "^7.10.2" - aria-query "^4.2.2" - array-includes "^3.1.1" + "@babel/runtime" "^7.4.5" + aria-query "^3.0.0" + array-includes "^3.0.3" ast-types-flow "^0.0.7" - axe-core "^3.5.4" - axobject-query "^2.1.2" - damerau-levenshtein "^1.0.6" - emoji-regex "^9.0.0" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" has "^1.0.3" - jsx-ast-utils "^2.4.1" - language-tags "^1.0.5" + jsx-ast-utils "^2.2.1" eslint-plugin-monorepo@^0.2.1: version "0.2.1" @@ -9625,26 +9473,27 @@ eslint-plugin-notice@^0.9.10: metric-lcs "^0.1.2" eslint-plugin-react-hooks@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.0.tgz#6323fbd5e650e84b2987ba76370523a60f4e7925" - integrity sha512-36zilUcDwDReiORXmcmTc6rRumu9JIM3WjSvV0nclHoUQ0CNrX866EwONvLR/UqaeqFutbAnVu8PEmctdo2SRQ== + version "4.0.4" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.4.tgz#aed33b4254a41b045818cacb047b81e6df27fa58" + integrity sha512-equAdEIsUETLFNCmmCkiCGq6rkSK5MoJhXFPFYeUebcjKgBmWWcgVOqZyQC8Bv1BwVCnTq9tBxgJFgAJTWoJtA== eslint-plugin-react@^7.12.4: - version "7.20.6" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.6.tgz#4d7845311a93c463493ccfa0a19c9c5d0fd69f60" - integrity sha512-kidMTE5HAEBSLu23CUDvj8dc3LdBU0ri1scwHBZjI41oDv4tjsWZKU7MQccFzH1QYPYhsnTF2ovh7JlcIcmxgg== + version "7.19.0" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" + integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ== dependencies: array-includes "^3.1.1" - array.prototype.flatmap "^1.2.3" doctrine "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.4.1" - object.entries "^1.1.2" + jsx-ast-utils "^2.2.3" + object.entries "^1.1.1" object.fromentries "^2.0.2" object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.17.0" + resolve "^1.15.1" + semver "^6.3.0" string.prototype.matchall "^4.0.2" + xregexp "^4.3.0" eslint-scope@^4.0.3: version "4.0.3" @@ -9662,22 +9511,29 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa" + integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ== eslint@^7.1.0: - version "7.7.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" - integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== + version "7.4.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.4.0.tgz#4e35a2697e6c1972f9d6ef2b690ad319f80f206f" + integrity sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -9687,9 +9543,9 @@ eslint@^7.1.0: doctrine "^3.0.0" enquirer "^2.3.5" eslint-scope "^5.1.0" - eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" - espree "^7.2.0" + eslint-utils "^2.0.0" + eslint-visitor-keys "^1.2.0" + espree "^7.1.0" esquery "^1.2.0" esutils "^2.0.2" file-entry-cache "^5.0.1" @@ -9703,7 +9559,7 @@ eslint@^7.1.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.19" + lodash "^4.17.14" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -9721,14 +9577,14 @@ esm@^3.2.25: resolved "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -espree@^7.2.0: - version "7.3.0" - resolved "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" - integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== +espree@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz#a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c" + integrity sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw== dependencies: - acorn "^7.4.0" + acorn "^7.2.0" acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^1.2.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" @@ -9755,9 +9611,9 @@ estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.1.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== estree-walker@^0.6.0, estree-walker@^0.6.1: version "0.6.1" @@ -9810,15 +9666,15 @@ eventemitter3@^3.1.0: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== -eventemitter3@^4.0.0, eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== events@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + version "3.1.0" + resolved "https://registry.npmjs.org/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== eventsource@^1.0.5, eventsource@^1.0.7: version "1.0.7" @@ -9869,10 +9725,10 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.0, execa@^4.0.2, execa@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" - integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== +execa@^4.0.0, execa@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/execa/-/execa-4.0.2.tgz#ad87fb7b2d9d564f70d2b62d511bee41d5cbb240" + integrity sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -10084,9 +9940,9 @@ fast-glob@^2.0.2, fast-glob@^2.2.6: micromatch "^3.1.10" fast-glob@^3.0.3, fast-glob@^3.1.1: - version "3.2.4" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + version "3.2.2" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" + integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -10145,13 +10001,13 @@ fastparse@^1.1.2: integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: - version "1.8.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" - integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + version "1.6.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz#4570c74f2ded173e71cf0beb08ac70bb85826791" + integrity sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw== dependencies: reusify "^1.0.4" -fault@^1.0.0: +fault@^1.0.0, fault@^1.0.2: version "1.0.4" resolved "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== @@ -10179,19 +10035,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fbjs@^0.8.9: - version "0.8.17" - resolved "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -10199,10 +10042,10 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -fecha@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" - integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg== +fecha@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" + integrity sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg== fetch-readablestream@^0.2.0: version "0.2.0" @@ -10210,9 +10053,9 @@ fetch-readablestream@^0.2.0: integrity sha512-qu4mXWf4wus4idBIN/kVH+XSer8IZ9CwHP+Pd7DL7TuKNC1hP7ykon4kkBjwJF3EMX2WsFp4hH7gU7CyL7ucXw== figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + version "3.5.1" + resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== figures@^1.7.0: version "1.7.0" @@ -10429,11 +10272,6 @@ fn-name@~3.0.0: resolved "https://registry.npmjs.org/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c" integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA== -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== - follow-redirects@1.5.10: version "1.5.10" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" @@ -10653,17 +10491,17 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + version "1.2.12" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" + integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== dependencies: bindings "^1.5.0" nan "^2.12.1" fsevents@^2.1.2, fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + version "2.1.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== function-bind@^1.1.1: version "1.1.1" @@ -10753,11 +10591,6 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - get-pkg-repo@^1.0.0: version "1.4.0" resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" @@ -10797,9 +10630,9 @@ get-stream@^4.0.0, get-stream@^4.1.0: pump "^3.0.0" get-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + version "5.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== dependencies: pump "^3.0.0" @@ -10855,9 +10688,9 @@ git-semver-tags@^2.0.3: semver "^6.0.0" git-up@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c" - integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ== + version "4.0.1" + resolved "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" + integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== dependencies: is-ssh "^1.3.0" parse-url "^5.0.0" @@ -11196,40 +11029,40 @@ graphql-extensions@^0.12.4: apollo-server-env "^2.4.5" apollo-server-types "^0.5.1" -graphql-language-service-interface@^2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/graphql-language-service-interface/-/graphql-language-service-interface-2.4.1.tgz#62aca7880469d0f9079aec22a9b297cf78994f52" - integrity sha512-cKT0ia7xNVpkLlI0vuwxVpPVIXwy02ah4I+N6s4mxFKVgo+lPlX9r933EWX6t1P1vzGJmNf+dip2dK3gHg2bBw== +graphql-language-service-interface@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/graphql-language-service-interface/-/graphql-language-service-interface-2.4.0.tgz#4e2e63242c76197c4f56c61122db68187ea566b3" + integrity sha512-r7DQPyhCFY5TlpEukdh9tekJ9hAc7MD9TdOsb5CfAPlsIb1/faVVo2Ty19PxGSYDxygXjwpKLOQD0LqqFuw63A== dependencies: - graphql-language-service-parser "^1.6.1" - graphql-language-service-types "^1.6.1" - graphql-language-service-utils "^2.4.1" + graphql-language-service-parser "^1.6.0" + graphql-language-service-types "^1.6.0" + graphql-language-service-utils "^2.4.0" vscode-languageserver-types "^3.15.1" -graphql-language-service-parser@^1.6.1: - version "1.6.2" - resolved "https://registry.npmjs.org/graphql-language-service-parser/-/graphql-language-service-parser-1.6.2.tgz#e139c37318e358c99786dc84f94bd1745135812a" - integrity sha512-7CwFkvuOjyrzwk+Ox4hPH839NOGnFHbzlWD08nsRxRTqth71LkHWS1ADVFxvBv49C1kXFmLSsCMhi4PH1meozQ== +graphql-language-service-parser@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/graphql-language-service-parser/-/graphql-language-service-parser-1.6.0.tgz#53a97619461ed41ae237b9070e7e20cfaca56118" + integrity sha512-tkfYXl6WBECWNcsyw7O09c0oCMrxqr3JGyDNvdISDSDhvk8EwEk+AOweBEJkycJwoiv1lVlM+EdLfj7dzw4/6w== -graphql-language-service-types@^1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/graphql-language-service-types/-/graphql-language-service-types-1.6.1.tgz#2f3933426e47d1979a977f88738ea2cb1414c765" - integrity sha512-ag3m5b7aje7ZBSuLVQE/gt2iDL9WEfzotZfLyskUDOonhHKniQ8BfmSQ/pF9F6zrdVjtZ8VRr5nes1sEYvvwKQ== +graphql-language-service-types@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/graphql-language-service-types/-/graphql-language-service-types-1.6.0.tgz#32529bb9d2e3b8ae9dd6d9646e15481ac5dfe9ad" + integrity sha512-7y4pkhTL+MtarC8CeHpvRYVc6pkT6ITdQXs+Gr7OClnk4Lz5nQEK0eO29kUdd0jEnYfHyh5iqhnL5Owfy+wT0A== -graphql-language-service-utils@^2.4.0, graphql-language-service-utils@^2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/graphql-language-service-utils/-/graphql-language-service-utils-2.4.1.tgz#37d3ffdb603fc8b54f11e7d57b4ca04660247c2b" - integrity sha512-fqYSrjJ3YXHwY9eYUz5nesLwLfo8csbR/hS4Xz8wDZCeqkD20UzjVfnbF1Q0SjtKFlDtEfnG9hJvHZEJXZCF3A== +graphql-language-service-utils@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/graphql-language-service-utils/-/graphql-language-service-utils-2.4.0.tgz#d4992a1968860abc43a118de498fec84361a4b87" + integrity sha512-aLa+8iqb7AJYgdcawsKH8/KLc14DHcRsnveshOm8hN6bBVT0YiQP6mEfJoci741O74uaDF2zj1J3c02vorichw== dependencies: - graphql-language-service-types "^1.6.1" + graphql-language-service-types "^1.6.0" graphql-language-service@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-3.0.1.tgz#1253a5cb3affe7c272bbcfadd89c1f0eb78ece2f" - integrity sha512-79EGvEECgn1HIX0VBh3pXqetqgdtRHfkNTws0mcirCtFowwqt+QZAKKBNKVLY2vMya9wNVLDWUvzl0FF5wbBTA== + version "3.0.0" + resolved "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-3.0.0.tgz#953c3bbf4cc35ff9a7bd54e428bca17832367490" + integrity sha512-ySPrbecxtjQtzIFdCIOoSJzaco9dQvZK+wZN/tTjcSEEWh3fgMYXmctAG+WddJiZg3AB7I4Xsb2AsO5yFBbLHg== dependencies: - graphql-language-service-interface "^2.4.1" - graphql-language-service-types "^1.6.1" + graphql-language-service-interface "^2.4.0" + graphql-language-service-types "^1.6.0" graphql-subscriptions@^1.0.0: version "1.1.0" @@ -11239,9 +11072,9 @@ graphql-subscriptions@^1.0.0: iterall "^1.2.1" graphql-tag@^2.9.2: - version "2.11.0" - resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd" - integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA== + version "2.10.4" + resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.4.tgz#2f301a98219be8b178a6453bb7e33b79b66d8f83" + integrity sha512-O7vG5BT3w6Sotc26ybcvLKNTdfr4GfsIVMD+LdYqXCeJIYPRyp8BIsDOUtxw7S1PYvRw5vH3278J2EDezR6mfA== graphql-tools@^4.0.0: version "4.0.8" @@ -11295,11 +11128,11 @@ gzip-size@5.1.1: pify "^4.0.1" handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + version "2.0.0" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== -handlebars@^4.7.3, handlebars@^4.7.6: +handlebars@^4.4.0, handlebars@^4.7.3: version "4.7.6" resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== @@ -11317,18 +11150,13 @@ har-schema@^2.0.0: integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + version "5.1.3" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== dependencies: - ajv "^6.12.3" + ajv "^6.5.5" har-schema "^2.0.0" -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - harmony-reflect@^1.4.6: version "1.6.1" resolved "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" @@ -11410,13 +11238,12 @@ has@^1.0.0, has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + version "3.0.4" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" + inherits "^2.0.1" + safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -11452,9 +11279,9 @@ headers-utils@^1.1.9, headers-utils@^1.2.0: integrity sha512-4/BMXcWrJErw7JpM87gF8MNEXcIMLzepYZjNRv/P9ctgupl2Ywa3u1PgHtNhSRq84bHH9Ndlkdy7bSi+bZ9I9A== helmet@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/helmet/-/helmet-4.1.0.tgz#6f3a34e8f18502d6e52518428b23aa4ddaf84b38" - integrity sha512-KWy75fYN8hOG2Rhl8e5B3WhOzb0by1boQum85TiddIE9iu6gV+TXbUjVC17wfej0o/ZUpqB9kxM0NFCZRMzf+Q== + version "4.0.0" + resolved "https://registry.npmjs.org/helmet/-/helmet-4.0.0.tgz#34c187894ed001834f997c688f2b2df19846b193" + integrity sha512-HyoRKKHhWhO6+EBfgRLkuZR4/+NXc1nJB7x0bWwW89i9eoPciK0qUqyZNOA/zowpgrW9C4+J5toqMkZrpBOlkg== hex-color-regex@^1.1.0: version "1.1.0" @@ -11466,6 +11293,11 @@ highlight.js@^10.1.1, highlight.js@~10.1.0: resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.1.2.tgz#c20db951ba1c22c055010648dfffd7b2a968e00c" integrity sha512-Q39v/Mn5mfBlMff9r+zzA+gWxRsCRKwEMvYTiisLr/XUiFI/4puWt0Ojdko3R3JCNWGdOWaA5g/Yxqa23kC5AA== +highlight.js@~9.15.0, highlight.js@~9.15.1: + version "9.15.10" + resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.10.tgz#7b18ed75c90348c045eef9ed08ca1319a2219ad2" + integrity sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw== + history@^4.9.0: version "4.10.1" resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" @@ -11563,14 +11395,14 @@ html-entities@^1.2.0, html-entities@^1.3.1: integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + version "2.0.1" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.1.tgz#beed86b5d2b921e92533aa11bce6d8e3b583dee7" + integrity sha512-hNX23TjWwD3q56HpWjUHOKj1+4KKlnjv9PcmBUYKVpga+2cnb9nDx/B1o0yO4n+RZXZdiNxzx6B24C9aNMTkkQ== html-minifier-terser@^5.0.1: - version "5.1.1" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + version "5.0.4" + resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.0.4.tgz#e8cc02748acb983bd7912ea9660bd31c0702ec32" + integrity sha512-fHwmKQ+GzhlqdxEtwrqLT7MSuheiA+rif5/dZgbz3GjoMXJzcRzy1L9NXoiiyxrnap+q5guSiv8Tz5lrh9g42g== dependencies: camel-case "^4.1.1" clean-css "^4.2.3" @@ -11581,14 +11413,14 @@ html-minifier-terser@^5.0.1: terser "^4.6.3" html-to-react@^1.3.4: - version "1.4.3" - resolved "https://registry.npmjs.org/html-to-react/-/html-to-react-1.4.3.tgz#1430a1cb581ef29533892ec70a2fdc4554b17ffd" - integrity sha512-txe09A3vxW8yEZGJXJ1is5gGDfBEVACmZDSgwDyH5EsfRdOubBwBCg63ZThZP0xBn0UE4FyvMXZXmohusCxDcg== + version "1.4.2" + resolved "https://registry.npmjs.org/html-to-react/-/html-to-react-1.4.2.tgz#7b628ab56cd63a52f2d0b79d0fa838a51f088a57" + integrity sha512-TdTfxd95sRCo6QL8admCkE7mvNNrXtGoVr1dyS+7uvc8XCqAymnf/6ckclvnVbQNUo2Nh21VPwtfEHd0khiV7g== dependencies: domhandler "^3.0" - htmlparser2 "^4.1.0" + htmlparser2 "^4.0" lodash.camelcase "^4.3.0" - ramda "^0.27" + ramda "^0.26" html-webpack-plugin@^4.2.1, html-webpack-plugin@^4.3.0: version "4.4.1" @@ -11624,7 +11456,7 @@ htmlparser2@^3.3.0: inherits "^2.0.1" readable-stream "^3.1.1" -htmlparser2@^4.1.0: +htmlparser2@^4.0, htmlparser2@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== @@ -11692,10 +11524,10 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= http-proxy-agent@^2.1.0: version "2.1.0" @@ -11793,24 +11625,17 @@ husky@^4.2.3: which-pm-runs "^1.0.0" hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + version "1.0.3" + resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" + integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== -iconv-lite@0.4.24, iconv-lite@^0.4.13, iconv-lite@^0.4.21, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.13, iconv-lite@^0.4.21, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -11863,9 +11688,9 @@ ignore@^4.0.3, ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.1, ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + version "5.1.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== immer@1.10.0: version "1.10.0" @@ -12099,16 +11924,16 @@ internal-slot@^1.0.2: side-channel "^1.0.2" interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + version "1.2.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== interpret@^2.0.0, interpret@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -invariant@^2.0.0, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: +invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -12214,10 +12039,10 @@ is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5: resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== is-ci@^2.0.0: version "2.0.0" @@ -12286,9 +12111,9 @@ is-directory@^0.3.1: integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + version "2.0.0" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" + integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== is-dom@^1.0.9, is-dom@^1.1.0: version "1.1.0" @@ -12406,11 +12231,6 @@ is-module@^1.0.0: resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= -is-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" - integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= - is-npm@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" @@ -12486,34 +12306,31 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-4.1.1.tgz#1a14d6452cbd50790edc7fdaa0aed5a40a35ebb5" - integrity sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA== +is-plain-object@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" + integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== + dependencies: + isobject "^4.0.0" is-potential-custom-element-name@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -is-promise@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - is-promise@^2.1, is-promise@^2.1.0: version "2.2.2" resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== is-reference@^1.1.2: - version "1.2.1" - resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + version "1.1.4" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" + integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== dependencies: - "@types/estree" "*" + "@types/estree" "0.0.39" -is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.1: +is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== @@ -12548,13 +12365,13 @@ is-set@^2.0.1: integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== is-ssh@^1.3.0: - version "1.3.2" - resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" - integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ== + version "1.3.1" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" + integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== dependencies: protocols "^1.1.0" -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -12681,14 +12498,6 @@ isobject@^4.0.0: resolved "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - isomorphic-form-data@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isomorphic-form-data/-/isomorphic-form-data-2.0.0.tgz#9f6adf1c4c61ae3aefd8f110ab60fb9b143d6cec" @@ -12771,9 +12580,9 @@ jake@^10.6.1: minimatch "^3.0.4" jenkins@^0.28.0: - version "0.28.1" - resolved "https://registry.npmjs.org/jenkins/-/jenkins-0.28.1.tgz#f7951798ee5d2bb501a831979b6b5ecc1a922a64" - integrity sha512-gcC4QUrP4VzdqOMHoVzh36XlJprxJkI2HGLQSY7w84KoCTVNDcR/8O00tYyXp9vrZOx4wl5zCXLVKMgH2IoyJQ== + version "0.28.0" + resolved "https://registry.npmjs.org/jenkins/-/jenkins-0.28.0.tgz#72d6fcc452145403b34f6d4ecbd877ee1ab77fca" + integrity sha512-EGzzZcyFwXBCPZZoDNvZTPmZOqaHALfAStNfCF37oh+Mc6G/e0MwIuQjx5kMEynTXR9bF5EwLiuMTiTf5kHk5g== dependencies: papi "^0.29.0" @@ -12836,7 +12645,7 @@ jest-css-modules@^2.1.0: dependencies: identity-obj-proxy "3.0.0" -jest-diff@^25.2.1: +jest-diff@^25.1.0, jest-diff@^25.2.1: version "25.5.0" resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== @@ -12915,7 +12724,7 @@ jest-fetch-mock@^3.0.3: cross-fetch "^3.0.4" promise-polyfill "^8.1.3" -jest-get-type@^25.2.6: +jest-get-type@^25.1.0, jest-get-type@^25.2.6: version "25.2.6" resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== @@ -12978,6 +12787,16 @@ jest-leak-detector@^26.4.2: jest-get-type "^26.3.0" pretty-format "^26.4.2" +jest-matcher-utils@^25.1.0: + version "25.1.0" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.1.0.tgz#fa5996c45c7193a3c24e73066fc14acdee020220" + integrity sha512-KGOAFcSFbclXIFE7bS4C53iYobKI20ZWleAdAFun4W1Wz1Kkej8Ng6RRbhL8leaEvIOjGXhGf/a1JjO8bkxIWQ== + dependencies: + chalk "^3.0.0" + jest-diff "^25.1.0" + jest-get-type "^25.1.0" + pretty-format "^25.1.0" + jest-matcher-utils@^26.4.2: version "26.4.2" resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.4.2.tgz#fa81f3693f7cb67e5fc1537317525ef3b85f4b06" @@ -13130,7 +12949,7 @@ jest-snapshot@^26.4.2: pretty-format "^26.4.2" semver "^7.3.2" -jest-util@26.x, jest-util@^26.3.0: +jest-util@^26.3.0: version "26.3.0" resolved "https://registry.npmjs.org/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e" integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw== @@ -13185,29 +13004,13 @@ jest@^26.0.1: import-local "^3.0.2" jest-cli "^26.4.2" -joi@^17.1.1: - version "17.2.1" - resolved "https://registry.npmjs.org/joi/-/joi-17.2.1.tgz#e5140fdf07e8fecf9bc977c2832d1bdb1e3f2a0a" - integrity sha512-YT3/4Ln+5YRpacdmfEfrrKh50/kkgX3LgBltjqnlMPIYiZ4hxXZuVJcxmsvxsdeHg9soZfE3qXxHC2tMpCCBOA== - dependencies: - "@hapi/address" "^4.1.0" - "@hapi/formula" "^2.0.0" - "@hapi/hoek" "^9.0.0" - "@hapi/pinpoint" "^2.0.0" - "@hapi/topo" "^5.0.0" - jose@^1.27.1: - version "1.28.0" - resolved "https://registry.npmjs.org/jose/-/jose-1.28.0.tgz#0803f8c71f43cd293a9d931c555c30531f5ca5dc" - integrity sha512-JmfDRzt/HSj8ipd9TsDtEHoLUnLYavG+7e8F6s1mx2jfVSfXOTaFQsJUydbjJpTnTDHP1+yKL9Ke7ktS/a0Eiw== + version "1.27.1" + resolved "https://registry.npmjs.org/jose/-/jose-1.27.1.tgz#a1de2ecb5b3ae1ae28f0d9d0cc536349ada27ec8" + integrity sha512-VyHM6IJPw0TTGqHVNlPWg16/ASDPAmcChcLqSb3WNBvwWFoWPeFqlmAUCm8/oIG1GjZwAlUDuRKFfycowarcVA== dependencies: "@panva/asn1.js" "^1.0.0" -joycon@^2.2.5: - version "2.2.5" - resolved "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615" - integrity sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ== - js-cookie@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" @@ -13279,9 +13082,9 @@ jsdom@11.12.0: xml-name-validator "^3.0.0" jsdom@^16.2.2: - version "16.4.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + version "16.2.2" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.2.2.tgz#76f2f7541646beb46a938f5dc476b88705bedf2b" + integrity sha512-pDFQbcYtKBHxRaP55zGXCJWgFHkDAYbKcsXEK/3Icu9nKYZkutUXfLBwbD+09XDutkYSHcgfQLZ0qvpAAm9mvg== dependencies: abab "^2.0.3" acorn "^7.1.1" @@ -13303,7 +13106,7 @@ jsdom@^16.2.2: tough-cookie "^3.0.1" w3c-hr-time "^1.0.2" w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" + webidl-conversions "^6.0.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" @@ -13358,11 +13161,6 @@ json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-bet resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz#371873c5ffa44304a6ba12419bcfa95f404ae081" - integrity sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q== - json-pointer@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.0.tgz#8e500550a6aac5464a473377da57aa6cc22828d7" @@ -13486,9 +13284,9 @@ jsonparse@^1.2.0: integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsonpointer@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc" - integrity sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg== + version "4.0.1" + resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= jspdf-autotable@3.5.3: version "3.5.3" @@ -13518,81 +13316,80 @@ jsprim@^1.2.2: verror "1.10.0" jss-plugin-camel-case@^10.0.3: - version "10.4.0" - resolved "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.4.0.tgz#46c75ff7fd61c304984c21af5817823f0f501ceb" - integrity sha512-9oDjsQ/AgdBbMyRjc06Kl3P8lDCSEts2vYZiPZfGAxbGCegqE4RnMob3mDaBby5H9vL9gWmyyImhLRWqIkRUCw== + version "10.1.1" + resolved "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.1.1.tgz#8e73ecc4f1d0f8dfe4dd31f6f9f2782588970e78" + integrity sha512-MDIaw8FeD5uFz1seQBKz4pnvDLnj5vIKV5hXSVdMaAVq13xR6SVTVWkIV/keyTs5txxTvzGJ9hXoxgd1WTUlBw== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.4.0" + jss "10.1.1" jss-plugin-default-unit@^10.0.3: - version "10.4.0" - resolved "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.4.0.tgz#2b10f01269eaea7f36f0f5fd1cfbfcc76ed42854" - integrity sha512-BYJ+Y3RUYiMEgmlcYMLqwbA49DcSWsGgHpVmEEllTC8MK5iJ7++pT9TnKkKBnNZZxTV75ycyFCR5xeLSOzVm4A== + version "10.1.1" + resolved "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.1.1.tgz#2df86016dfe73085eead843f5794e3890e9c5c47" + integrity sha512-UkeVCA/b3QEA4k0nIKS4uWXDCNmV73WLHdh2oDGZZc3GsQtlOCuiH3EkB/qI60v2MiCq356/SYWsDXt21yjwdg== dependencies: "@babel/runtime" "^7.3.1" - jss "10.4.0" + jss "10.1.1" jss-plugin-global@^10.0.3: - version "10.4.0" - resolved "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.4.0.tgz#19449425a94e4e74e113139b629fd44d3577f97d" - integrity sha512-b8IHMJUmv29cidt3nI4bUI1+Mo5RZE37kqthaFpmxf5K7r2aAegGliAw4hXvA70ca6ckAoXMUl4SN/zxiRcRag== + version "10.1.1" + resolved "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.1.1.tgz#36b0d6d9facb74dfd99590643708a89260747d14" + integrity sha512-VBG3wRyi3Z8S4kMhm8rZV6caYBegsk+QnQZSVmrWw6GVOT/Z4FA7eyMu5SdkorDlG/HVpHh91oFN56O4R9m2VA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.4.0" + jss "10.1.1" jss-plugin-nested@^10.0.3: - version "10.4.0" - resolved "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.4.0.tgz#017d0c02c0b6b454fd9d7d3fc33470a15eea9fd1" - integrity sha512-cKgpeHIxAP0ygeWh+drpLbrxFiak6zzJ2toVRi/NmHbpkNaLjTLgePmOz5+67ln3qzJiPdXXJB1tbOyYKAP4Pw== + version "10.1.1" + resolved "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.1.1.tgz#5c3de2b8bda344de1ebcef3a4fd30870a29a8a8c" + integrity sha512-ozEu7ZBSVrMYxSDplPX3H82XHNQk2DQEJ9TEyo7OVTPJ1hEieqjDFiOQOxXEj9z3PMqkylnUbvWIZRDKCFYw5Q== dependencies: "@babel/runtime" "^7.3.1" - jss "10.4.0" + jss "10.1.1" tiny-warning "^1.0.2" jss-plugin-props-sort@^10.0.3: - version "10.4.0" - resolved "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.4.0.tgz#7110bf0b6049cc2080b220b506532bf0b70c0e07" - integrity sha512-j/t0R40/2fp+Nzt6GgHeUFnHVY2kPGF5drUVlgkcwYoHCgtBDOhTTsOfdaQFW6sHWfoQYgnGV4CXdjlPiRrzwA== + version "10.1.1" + resolved "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.1.1.tgz#34bddcbfaf9430ec8ccdf92729f03bb10caf1785" + integrity sha512-g/joK3eTDZB4pkqpZB38257yD4LXB0X15jxtZAGbUzcKAVUHPl9Jb47Y7lYmiGsShiV4YmQRqG1p2DHMYoK91g== dependencies: "@babel/runtime" "^7.3.1" - jss "10.4.0" + jss "10.1.1" jss-plugin-rule-value-function@^10.0.3: - version "10.4.0" - resolved "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.4.0.tgz#7cff4a91e84973536fa49b6ebbdbf7f339b01c82" - integrity sha512-w8504Cdfu66+0SJoLkr6GUQlEb8keHg8ymtJXdVHWh0YvFxDG2l/nS93SI5Gfx0fV29dO6yUugXnKzDFJxrdFQ== + version "10.1.1" + resolved "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.1.1.tgz#be00dac6fc394aaddbcef5860b9eca6224d96382" + integrity sha512-ClV1lvJ3laU9la1CUzaDugEcwnpjPTuJ0yGy2YtcU+gG/w9HMInD5vEv7xKAz53Bk4WiJm5uLOElSEshHyhKNw== dependencies: "@babel/runtime" "^7.3.1" - jss "10.4.0" - tiny-warning "^1.0.2" + jss "10.1.1" jss-plugin-vendor-prefixer@^10.0.3: - version "10.4.0" - resolved "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.4.0.tgz#2a78f3c5d57d1e024fe7ad7c41de34d04e72ecc0" - integrity sha512-DpF+/a+GU8hMh/948sBGnKSNfKkoHg2p9aRFUmyoyxgKjOeH9n74Ht3Yt8lOgdZsuWNJbPrvaa3U4PXKwxVpTQ== + version "10.1.1" + resolved "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.1.1.tgz#8348b20749f790beebab3b6a8f7075b07c2cfcfd" + integrity sha512-09MZpQ6onQrhaVSF6GHC4iYifQ7+4YC/tAP6D4ZWeZotvCMq1mHLqNKRIaqQ2lkgANjlEot2JnVi1ktu4+L4pw== dependencies: "@babel/runtime" "^7.3.1" - css-vendor "^2.0.8" - jss "10.4.0" + css-vendor "^2.0.7" + jss "10.1.1" -jss@10.4.0, jss@^10.0.3: - version "10.4.0" - resolved "https://registry.npmjs.org/jss/-/jss-10.4.0.tgz#473a6fbe42e85441020a07e9519dac1e8a2e79ca" - integrity sha512-l7EwdwhsDishXzqTc3lbsbyZ83tlUl5L/Hb16pHCvZliA9lRDdNBZmHzeJHP0sxqD0t1mrMmMR8XroR12JBYzw== +jss@10.1.1, jss@^10.0.3: + version "10.1.1" + resolved "https://registry.npmjs.org/jss/-/jss-10.1.1.tgz#450b27d53761af3e500b43130a54cdbe157ea332" + integrity sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ== dependencies: "@babel/runtime" "^7.3.1" - csstype "^3.0.2" + csstype "^2.6.5" is-in-browser "^1.1.3" tiny-warning "^1.0.2" -jsx-ast-utils@^2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" - integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== +jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" + integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== dependencies: - array-includes "^3.1.1" + array-includes "^3.0.3" object.assign "^4.1.0" jwt-decode@2.2.0: @@ -13645,7 +13442,7 @@ kind-of@^5.0.0: resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -13683,22 +13480,12 @@ knex@^0.21.1: uuid "^7.0.3" v8flags "^3.2.0" -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - -language-subtag-registry@~0.3.2: - version "0.3.20" - resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz#a00a37121894f224f763268e431c55556b0c0755" - integrity sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg== - -language-tags@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= +kuler@1.0.x: + version "1.0.1" + resolved "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz#ef7c784f36c9fb6e16dd3150d152677b2b0228a6" + integrity sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ== dependencies: - language-subtag-registry "~0.3.2" + colornames "^1.1.1" latest-version@^5.0.0: version "5.1.0" @@ -13824,19 +13611,19 @@ linkify-it@^2.0.0: uc.micro "^1.0.1" lint-staged@^10.1.0: - version "10.2.13" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-10.2.13.tgz#b9c504683470edfc464b7d3fe3845a5a1efcd814" - integrity sha512-conwlukNV6aL9SiMWjFtDp5exeDnTMekdNPDZsKGnpfQuHcO0E3L3Bbf58lcR+M7vk6LpCilxDAVks/DDVBYlA== + version "10.2.11" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-10.2.11.tgz#713c80877f2dc8b609b05bc59020234e766c9720" + integrity sha512-LRRrSogzbixYaZItE2APaS4l2eJMjjf5MbclRZpLJtcQJShcvUzKXsNeZgsLIZ0H0+fg2tL4B59fU9wHIHtFIA== dependencies: - chalk "^4.1.0" - cli-truncate "^2.1.0" - commander "^6.0.0" - cosmiconfig "^7.0.0" + chalk "^4.0.0" + cli-truncate "2.1.0" + commander "^5.1.0" + cosmiconfig "^6.0.0" debug "^4.1.1" dedent "^0.7.0" - enquirer "^2.3.6" - execa "^4.0.3" - listr2 "^2.6.0" + enquirer "^2.3.5" + execa "^4.0.1" + listr2 "^2.1.0" log-symbols "^4.0.0" micromatch "^4.0.2" normalize-path "^3.0.0" @@ -13873,18 +13660,18 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" -listr2@^2.6.0: - version "2.6.2" - resolved "https://registry.npmjs.org/listr2/-/listr2-2.6.2.tgz#4912eb01e1e2dd72ec37f3895a56bf2622d6f36a" - integrity sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA== +listr2@^2.1.0: + version "2.1.3" + resolved "https://registry.npmjs.org/listr2/-/listr2-2.1.3.tgz#f527e197de12ad8c488c566921fa2da34cbc67f6" + integrity sha512-6oy3QhrZAlJGrG8oPcRp1hix1zUpb5AvyvZ5je979HCyf48tIj3Hn1TG5+rfyhz30t7HfySH/OIaVbwrI2kruA== dependencies: - chalk "^4.1.0" + chalk "^4.0.0" cli-truncate "^2.1.0" figures "^3.2.0" indent-string "^4.0.0" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.2" + rxjs "^6.5.5" through "^2.3.8" listr@^0.14.3: @@ -13999,7 +13786,7 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash-es@^4.17.11, lodash-es@^4.2.1: +lodash-es@^4.17.11: version "4.17.15" resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== @@ -14146,21 +13933,21 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -logform@^2.1.1, logform@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" - integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg== +logform@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz#957155ebeb67a13164069825ce67ddb5bb2dd360" + integrity sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ== dependencies: colors "^1.2.1" fast-safe-stringify "^2.0.4" - fecha "^4.2.0" + fecha "^2.3.3" ms "^2.1.1" triple-beam "^1.3.0" loglevel@^1.6.7, loglevel@^1.6.8: - version "1.7.0" - resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" - integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + version "1.6.8" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== loglevelnext@^1.0.1: version "1.0.5" @@ -14175,7 +13962,7 @@ long@^4.0.0: resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -14207,6 +13994,14 @@ lowercase-keys@^2.0.0: resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowlight@1.12.1: + version "1.12.1" + resolved "https://registry.npmjs.org/lowlight/-/lowlight-1.12.1.tgz#014acf8dd73a370e02ff1cc61debcde3bb1681eb" + integrity sha512-OqaVxMGIESnawn+TU/QMV5BJLbUghUfjDWPAtFqDYDmDtr4FnB+op8xM+pR7nKlauHNUHXGt0VgWatFB8voS5w== + dependencies: + fault "^1.0.2" + highlight.js "~9.15.0" + lowlight@^1.14.0: version "1.14.0" resolved "https://registry.npmjs.org/lowlight/-/lowlight-1.14.0.tgz#83ebc143fec0f9e6c0d3deffe01be129ce56b108" @@ -14237,9 +14032,9 @@ lru-queue@0.1: es5-ext "~0.10.2" macos-release@^2.2.0: - version "2.4.1" - resolved "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" - integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== + version "2.3.0" + resolved "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" + integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== magic-string@^0.25.2: version "0.25.7" @@ -14264,9 +14059,9 @@ make-dir@^2.0.0, make-dir@^2.1.0: semver "^5.6.0" make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + version "3.0.2" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" + integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== dependencies: semver "^6.0.0" @@ -14510,22 +14305,20 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" -meow@^7.0.0: - version "7.1.1" - resolved "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" - integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA== +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^2.5.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.13.1" - yargs-parser "^18.1.3" + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" merge-deep@^3.0.2: version "3.0.2" @@ -14547,9 +14340,9 @@ merge-stream@^2.0.0: integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + version "1.3.0" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== merge@^1.2.1: version "1.2.1" @@ -14571,6 +14364,14 @@ microevent.ts@~0.1.1: resolved "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== +micromatch@4.x, micromatch@^4.0.0, micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -14590,14 +14391,6 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -14636,9 +14429,9 @@ mime@1.6.0, mime@^1.4.1: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.3.1, mime@^2.4.4: - version "2.4.6" - resolved "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + version "2.4.4" + resolved "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== mimic-fn@^1.0.0: version "1.2.0" @@ -14673,9 +14466,9 @@ min-document@^2.19.0: dom-walk "^0.1.0" min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + version "1.0.0" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256" + integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY= mini-create-react-context@^0.4.0: version "0.4.0" @@ -14712,15 +14505,6 @@ minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - minimist-options@^3.0.1: version "3.0.2" resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" @@ -14749,9 +14533,9 @@ minipass-flush@^1.0.5: minipass "^3.0.0" minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + version "1.2.2" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" + integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== dependencies: minipass "^3.0.0" @@ -14764,9 +14548,9 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: yallist "^3.0.0" minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + version "3.1.1" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== dependencies: yallist "^4.0.0" @@ -14823,9 +14607,9 @@ mixin-object@^2.0.1: is-extendable "^0.1.1" mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + version "0.5.2" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b" + integrity sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g== mkdirp-promise@^5.0.1: version "5.0.1" @@ -15035,9 +14819,9 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= needle@^2.2.1: - version "2.5.0" - resolved "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz#e6fc4b3cc6c25caed7554bd613a5cf0bac8c31c0" - integrity sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA== + version "2.4.1" + resolved "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz#14af48732463d7475696f937626b1b993247a56a" + integrity sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g== dependencies: debug "^3.2.6" iconv-lite "^0.4.4" @@ -15049,9 +14833,9 @@ negotiator@0.6.2: integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + version "2.6.1" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== next-tick@1: version "1.1.0" @@ -15084,9 +14868,9 @@ node-dir@^0.1.10: minimatch "^3.0.2" node-fetch-npm@^2.0.2: - version "2.0.4" - resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" - integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + version "2.0.3" + resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.3.tgz#efae4aacb0500444e449a51fc1467397775ebc38" + integrity sha512-DgwoKEsqLnFZtk3ap7GWBHcHwnUhsNmQqEDcdjfQ8GofLEFJ081NAd4Uin3R7RFZBWVJCwHISw1oaEqPgSLloA== dependencies: encoding "^0.1.11" json-parse-better-errors "^1.0.0" @@ -15130,9 +14914,9 @@ node-gyp@^4.0.0: which "1" node-gyp@^5.0.2: - version "5.1.1" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" - integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== + version "5.1.0" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" + integrity sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw== dependencies: env-paths "^2.2.0" glob "^7.1.4" @@ -15234,7 +15018,7 @@ node-pre-gyp@^0.13.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.52, node-releases@^1.1.60: +node-releases@^1.1.52, node-releases@^1.1.58: version "1.1.60" resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== @@ -15248,9 +15032,9 @@ node-request-interceptor@^0.2.5: headers-utils "^1.2.0" node-request-interceptor@^0.3.5: - version "0.3.6" - resolved "https://registry.npmjs.org/node-request-interceptor/-/node-request-interceptor-0.3.6.tgz#c411065a424b17a17503ecfce11a6a2a2f5d9a87" - integrity sha512-pN8Tt43XuLamN+bspAZ9tEMGDp1bOfaxluYop1/qmNRQmM5BOelFqr4jRvARD6y/7iuhLjOEjMQgy5HweXN7Kg== + version "0.3.5" + resolved "https://registry.npmjs.org/node-request-interceptor/-/node-request-interceptor-0.3.5.tgz#4b26159617829c9a70643012c0fdc3ae4c78ae43" + integrity sha512-lBwA3v00hxCW2xhhZHZ1ab5JMHoAnzgtbeaUXqTufRh7mpAG93ZOChj0btMDB1VZd+CKhCbtigsxCjmerKa2+w== dependencies: "@open-draft/until" "^1.0.3" debug "^4.1.1" @@ -15387,9 +15171,9 @@ npm-bundled@^1.0.1: npm-normalize-package-bin "^1.0.1" npm-lifecycle@^3.1.2: - version "3.1.5" - resolved "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" - integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== + version "3.1.4" + resolved "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" + integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== dependencies: byline "^5.0.0" graceful-fs "^4.1.15" @@ -15513,18 +15297,15 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0, object-inspect@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-is@^1.0.1: - version "1.1.2" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" - integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" + version "1.0.2" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -15563,13 +15344,14 @@ object.defaults@^1.1.0: for-own "^1.0.0" isobject "^3.0.0" -object.entries@^1.1.0, object.entries@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== +object.entries@^1.1.0, object.entries@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" + integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.5" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" has "^1.0.3" "object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.2: @@ -15654,12 +15436,10 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" +one-time@0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e" + integrity sha1-+M33eISCb+Tf+T46nMN7HkSAdC4= onetime@^1.0.0: version "1.1.0" @@ -15674,9 +15454,9 @@ onetime@^2.0.0: mimic-fn "^1.0.0" onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + version "5.1.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: mimic-fn "^2.1.0" @@ -15696,9 +15476,9 @@ openapi-sampler@^1.0.0-beta.15: json-pointer "^0.6.0" opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== + version "2.0.2" + resolved "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" + integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== opn@^5.5.0: version "5.5.0" @@ -15731,24 +15511,10 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@*: - version "5.0.0" - resolved "https://registry.npmjs.org/ora/-/ora-5.0.0.tgz#4f0b34f2994877b49b452a707245ab1e9f6afccb" - integrity sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw== - dependencies: - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.4.0" - is-interactive "^1.0.0" - log-symbols "^4.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -ora@^4.0.3: - version "4.1.1" - resolved "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" - integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== +ora@*, ora@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/ora/-/ora-4.0.4.tgz#e8da697cc5b6a47266655bf68e0fb588d29a545d" + integrity sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww== dependencies: chalk "^3.0.0" cli-cursor "^3.1.0" @@ -15927,11 +15693,11 @@ p-queue@^4.0.0: eventemitter3 "^3.1.0" p-queue@^6.3.0: - version "6.6.1" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.1.tgz#578891ada028a61371ec2692b26614d1b7d2b10a" - integrity sha512-miQiSxLYPYBxGkrldecZC18OTLjdUqnlRebGzPRiVxB8mco7usCmm7hFuxiTvp93K18JnLtE4KMMycjAu/cQQg== + version "6.4.0" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.4.0.tgz#5050b379393ea1814d6f9613a654f687d92c0466" + integrity sha512-X7ddxxiQ+bLR/CUt3/BVKrGcJDNxBr0pEEFKHHB6vTPWNUhgDv36GpIH18RmGM3YGPpBT+JWGjDDqsVGuF0ERw== dependencies: - eventemitter3 "^4.0.4" + eventemitter3 "^4.0.0" p-timeout "^3.1.0" p-reduce@^1.0.0: @@ -16024,18 +15790,19 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== dependencies: - asn1.js "^5.2.0" + asn1.js "^4.0.0" browserify-aes "^1.0.0" + create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-entities@^1.1.0: +parse-entities@^1.1.0, parse-entities@^1.1.2: version "1.2.2" resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== @@ -16089,13 +15856,13 @@ parse-json@^4.0.0: json-parse-better-errors "^1.0.1" parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + version "5.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" + json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" parse-package-name@^0.1.0: @@ -16109,22 +15876,17 @@ parse-passwd@^1.0.0: integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= parse-path@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa" - integrity sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w== + version "4.0.1" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" + integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== dependencies: is-ssh "^1.3.0" protocols "^1.4.0" -parse-srcset@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" - integrity sha1-8r0iH2zJcKk42IVWq8WJyqqiveE= - parse-url@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" - integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA== + version "5.0.1" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" + integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== dependencies: is-ssh "^1.3.0" normalize-url "^3.3.0" @@ -16240,9 +16002,9 @@ passport-okta-oauth@^0.0.1: uid2 "0.0.3" passport-saml@^1.3.3: - version "1.3.4" - resolved "https://registry.npmjs.org/passport-saml/-/passport-saml-1.3.4.tgz#d973a8525fd61df841669405d0750ae04a3f85d4" - integrity sha512-FYkRAt3pbmUpm/FsH97U/xYDnd1+z3FuGYe3IUOQPRgyoDg2ub8LYofst4UU49u65aAWHHSfXk6S3CdSMllq3A== + version "1.3.3" + resolved "https://registry.npmjs.org/passport-saml/-/passport-saml-1.3.3.tgz#cbea1a2b21ff32b3bc4bfd84dc39c3a370df9935" + integrity sha512-54ecY/A6UEsyCehJws6a+J6THvwtYnGl9cnAUxx5DjsuKgZrDs0tSy58K4hCk1XG/LOcdQSF1TR3xlRXgTULhA== dependencies: debug "^3.1.0" passport-strategy "*" @@ -16388,9 +16150,9 @@ pause@0.0.1: integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10= pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + version "3.0.17" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -16483,9 +16245,9 @@ pg@^6.1.0: semver "4.3.2" pg@^8.3.0: - version "8.3.3" - resolved "https://registry.npmjs.org/pg/-/pg-8.3.3.tgz#0338631ca3c39b4fb425b699d494cab17f5bb7eb" - integrity sha512-wmUyoQM/Xzmo62wgOdQAn5tl7u+IA1ZYK7qbuppi+3E+Gj4hlUxVHjInulieWrd0SfHi/ADriTb5ILJ/lsJrSg== + version "8.3.0" + resolved "https://registry.npmjs.org/pg/-/pg-8.3.0.tgz#941383300d38eef51ecb88a0188cec441ab64d81" + integrity sha512-jQPKWHWxbI09s/Z9aUvoTbvGgoj98AU7FDCcQ7kdejupn/TcNpx56v2gaOTzXkzOajmOEJEdi9eTh9cA2RVAjQ== dependencies: buffer-writer "2.0.0" packet-reader "1.0.0" @@ -16641,9 +16403,9 @@ posix-character-classes@^0.1.0: integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-calc@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.3.tgz#d65cca92a3c52bf27ad37a5f732e0587b74f1623" - integrity sha512-IB/EAEmZhIMEIhG7Ov4x+l47UaXOS1n2f4FBUk/aKllQhtSCxWhTzn0nJgkqN7fo/jcWySvWTSB6Syk9L+31bA== + version "7.0.2" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" + integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== dependencies: postcss "^7.0.27" postcss-selector-parser "^6.0.2" @@ -16697,9 +16459,9 @@ postcss-discard-overridden@^4.0.1: postcss "^7.0.0" postcss-flexbugs-fixes@^4.1.0: - version "4.2.1" - resolved "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" - integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.0.tgz#662b3dcb6354638b9213a55eed8913bcdc8d004a" + integrity sha512-QRE0n3hpkxxS/OGvzOa+PDuy4mh/Jg4o9ui22/ko5iGYOG3M5dfJabjnAZjTdh2G9F85c7Hv8hWcEDEKW/xceQ== dependencies: postcss "^7.0.26" @@ -16806,14 +16568,14 @@ postcss-modules-local-by-default@1.2.0: postcss "^6.0.1" postcss-modules-local-by-default@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + version "3.0.2" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" + integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== dependencies: icss-utils "^4.1.1" - postcss "^7.0.32" + postcss "^7.0.16" postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" + postcss-value-parser "^4.0.0" postcss-modules-scope@1.1.0: version "1.1.0" @@ -17010,12 +16772,12 @@ postcss-value-parser@^3.0.0: resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -"postcss@5 - 7", postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: +"postcss@5 - 7", postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.32" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== @@ -17058,9 +16820,9 @@ postgres-bytea@~1.0.0: integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU= postgres-date@~1.0.0, postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + version "1.0.5" + resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.5.tgz#710b27de5f27d550f6e80b5d34f7ba189213c2ee" + integrity sha512-pdau6GRPERdAYUQwkBnGKxEfPyhVZXG/JiS44iZWiNdSOWE09N2lUgN6yshuq6fVSon4Pm0VMXd1srUUkLe9iA== postgres-interval@^1.1.0: version "1.2.0" @@ -17095,9 +16857,9 @@ prettier@^2.0.5, prettier@~2.0.5: integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== pretty-bytes@^5.3.0: - version "5.4.0" - resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.4.0.tgz#b5efc2638cfc0a5e8c369bb0418abb4b386c7c6d" - integrity sha512-ctjMzsPQfGSyThWQ9//I6egmiEL/F0VgHKW4atxRd1V8+CPm0J/hihZJp0nb0GDRLUpICyCZTG1f/lE/42f/VQ== + version "5.3.0" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" + integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg== pretty-error@^2.1.1: version "2.1.1" @@ -17107,7 +16869,7 @@ pretty-error@^2.1.1: renderkid "^2.0.1" utila "~0.4" -pretty-format@^25.2.1, pretty-format@^25.5.0: +pretty-format@^25.1.0, pretty-format@^25.2.1, pretty-format@^25.5.0: version "25.5.0" resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== @@ -17132,14 +16894,21 @@ pretty-hrtime@^1.0.3: resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -prismjs@^1.21.0, prismjs@~1.21.0: +prismjs@^1.21.0, prismjs@^1.8.4, prismjs@~1.21.0: version "1.21.0" resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.21.0.tgz#36c086ec36b45319ec4218ee164c110f9fc015a3" integrity sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw== optionalDependencies: clipboard "^2.0.0" -private@~0.1.5: +prismjs@~1.17.0: + version "1.17.1" + resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" + integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== + optionalDependencies: + clipboard "^2.0.0" + +private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -17214,13 +16983,6 @@ promise.series@^0.2.0: resolved "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" integrity sha1-LMfr6Vn8OmYZwEq029yeRS2GS70= -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - promise@^8.0.3: version "8.1.0" resolved "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" @@ -17260,14 +17022,14 @@ prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, react-is "^16.8.1" property-expr@^2.0.2: - version "2.0.4" - resolved "https://registry.npmjs.org/property-expr/-/property-expr-2.0.4.tgz#37b925478e58965031bb612ec5b3260f8241e910" - integrity sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg== + version "2.0.2" + resolved "https://registry.npmjs.org/property-expr/-/property-expr-2.0.2.tgz#fff2a43919135553a3bc2fdd94bdb841965b2330" + integrity sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g== property-information@^5.0.0: - version "5.5.0" - resolved "https://registry.npmjs.org/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943" - integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA== + version "5.4.0" + resolved "https://registry.npmjs.org/property-information/-/property-information-5.4.0.tgz#16e08f13f4e5c4a7be2e4ec431c01c4f8dba869a" + integrity sha512-nmMWAm/3vKFGmmOWOcdLjgq/Hlxa+hsuR/px1Lp/UGEyc5A22A6l78Shc2C0E71sPmAqglni+HrS7L7VJ7AUCA== dependencies: xtend "^4.0.0" @@ -17277,9 +17039,9 @@ proto-list@~1.2.1: integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= protocols@^1.1.0, protocols@^1.4.0: - version "1.4.8" - resolved "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" - integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== + version "1.4.7" + resolved "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" + integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== protoduck@^5.0.1: version "5.0.1" @@ -17314,9 +17076,9 @@ psl@^1.1.28: integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pstree.remy@^1.1.7: - version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + version "1.1.7" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" + integrity sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A== public-encrypt@^4.0.0: version "4.0.3" @@ -17429,9 +17191,9 @@ querystring@0.2.0, querystring@^0.2.0: integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + version "2.1.1" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== quick-lru@^1.0.0: version "1.1.0" @@ -17470,12 +17232,7 @@ ramda@^0.25.0: resolved "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" integrity sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ== -ramda@^0.27: - version "0.27.1" - resolved "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" - integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== - -ramda@~0.26.1: +ramda@^0.26, ramda@~0.26.1: version "0.26.1" resolved "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== @@ -17689,9 +17446,9 @@ react-double-scrollbar@0.0.15: integrity sha1-6RWrjLO5WYdwdfSUNt6/2wQoj+Q= react-draggable@^4.0.3: - version "4.4.3" - resolved "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" - integrity sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w== + version "4.2.0" + resolved "https://registry.npmjs.org/react-draggable/-/react-draggable-4.2.0.tgz#40cc5209082ca7d613104bf6daf31372cc0e1114" + integrity sha512-5wFq//gEoeTYprnd4ze8GrFc+Rbnx+9RkOMR3vk4EbWxj02U6L6T3yrlKeiw4X5CtjD2ma2+b3WujghcXNRzkw== dependencies: classnames "^2.2.5" prop-types "^15.6.0" @@ -17706,20 +17463,20 @@ react-fast-compare@^2.0.4: resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== -react-fast-compare@^3.0.1, react-fast-compare@^3.1.1: +react-fast-compare@^3.1.1: version "3.2.0" resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== react-helmet-async@^1.0.2: - version "1.0.6" - resolved "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.0.6.tgz#11c15c74e79b3f66670c73779bef3e0e352b1d4e" - integrity sha512-t+bhAI4NgxfEv8ez4r77cLfR4O4Z55E/FH2DT+uiE4U7yfWgAk7OAOi7IxHxuYEVLI26bqjZvlVCkpC5/5AoNA== + version "1.0.4" + resolved "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.0.4.tgz#079ef10b7fefcaee6240fefd150711e62463cc97" + integrity sha512-KTGHE9sz8N7+fCkZ2a3vzXH9eIkiTNhL2NhKR7XzzQl3WsGlCHh76arauJUIiGdfhjeMp7DY7PkASAmYFXeJYg== dependencies: - "@babel/runtime" "^7.9.2" + "@babel/runtime" "^7.3.4" invariant "^2.2.4" prop-types "^15.7.2" - react-fast-compare "^3.0.1" + react-fast-compare "^2.0.4" shallowequal "^1.1.0" react-helmet@6.1.0: @@ -17793,7 +17550,7 @@ react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-i resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-lazylog@^4.5.2, react-lazylog@^4.5.3: +react-lazylog@^4.5.2: version "4.5.3" resolved "https://registry.npmjs.org/react-lazylog/-/react-lazylog-4.5.3.tgz#289e24995b5599e75943556ac63f5e2c04d0001e" integrity sha512-lyov32A/4BqihgXgtNXTHCajXSXkYHPlIEmV8RbYjHIMxCFSnmtdg4kDCI3vATz7dURtiFTvrw5yonHnrS+NNg== @@ -17808,7 +17565,7 @@ react-lazylog@^4.5.2, react-lazylog@^4.5.3: text-encoding-utf-8 "^1.0.1" whatwg-fetch "^2.0.4" -react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -17857,22 +17614,23 @@ react-popper@^1.3.7: typed-styles "^0.0.7" warning "^4.0.2" -react-redux@=4.4.10: - version "4.4.10" - resolved "https://registry.npmjs.org/react-redux/-/react-redux-4.4.10.tgz#ad57bd1db00c2d0aa7db992b360ce63dd0b80ec5" - integrity sha512-tjL0Bmpkj75Td0k+lXlF8Fc8a9GuXFv/3ahUOCXExWs/jhsKiQeTffdH0j5byejCGCRL4tvGFYlrwBF1X/Aujg== +react-redux@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/react-redux/-/react-redux-5.1.2.tgz#b19cf9e21d694422727bf798e934a916c4080f57" + integrity sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q== dependencies: - create-react-class "^15.5.1" + "@babel/runtime" "^7.1.2" hoist-non-react-statics "^3.3.0" - invariant "^2.0.0" - lodash "^4.17.11" - loose-envify "^1.4.0" - prop-types "^15.7.2" + invariant "^2.2.4" + loose-envify "^1.1.0" + prop-types "^15.6.1" + react-is "^16.6.0" + react-lifecycles-compat "^3.0.0" react-redux@^7.1.1: - version "7.2.1" - resolved "https://registry.npmjs.org/react-redux/-/react-redux-7.2.1.tgz#8dedf784901014db2feca1ab633864dee68ad985" - integrity sha512-T+VfD/bvgGTUA74iW9d2i5THrDQWbweXP0AVNI8tNd1Rk5ch1rnMiJkDD67ejw7YBKM4+REvcvqRuWJb7BLuEg== + version "7.2.0" + resolved "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d" + integrity sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA== dependencies: "@babel/runtime" "^7.5.5" hoist-non-react-statics "^3.3.0" @@ -17953,18 +17711,7 @@ react-string-replace@^0.4.1: dependencies: lodash "^4.17.4" -react-syntax-highlighter@=13.5.0: - version "13.5.0" - resolved "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-13.5.0.tgz#c0f3fd826a52b2a6ce5786d4ce60c3e0665b65c0" - integrity sha512-2nKo8spFxe9shcjbdUiqxkrf/IMDqKUZLx7JVIxEJ17P+fYFGL4CRsZZC66UPeQ2o/f29eKu31CrkKGCK1RHuA== - dependencies: - "@babel/runtime" "^7.3.1" - highlight.js "^10.1.1" - lowlight "^1.14.0" - prismjs "^1.21.0" - refractor "^3.1.0" - -react-syntax-highlighter@^12.2.1: +react-syntax-highlighter@=12.2.1, react-syntax-highlighter@^12.2.1: version "12.2.1" resolved "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-12.2.1.tgz#14d78352da1c1c3f93c6698b70ec7c706b83493e" integrity sha512-CTsp0ZWijwKRYFg9xhkWD4DSpQqE4vb2NKVMdPAkomnILSmsNBHE0n5GuI5zB+PU3ySVvXvdt9jo+ViD9XibCA== @@ -18058,15 +17805,15 @@ react-use@^15.3.3: tslib "^2.0.0" react-virtualized@^9.21.0: - version "9.22.2" - resolved "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.22.2.tgz#217a870bad91e5438f46f01a009e1d8ce1060a5a" - integrity sha512-5j4h4FhxTdOpBKtePSs1yk6LDNT4oGtUwjT7Nkh61Z8vv3fTG/XeOf8J4li1AYaexOwTXnw0HFVxsV0GBUqwRw== + version "9.21.2" + resolved "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.21.2.tgz#02e6df65c1e020c8dbf574ec4ce971652afca84e" + integrity sha512-oX7I7KYiUM7lVXQzmhtF4Xg/4UA5duSA+/ZcAvdWlTLFCoFYq1SbauJT5gZK9cZS/wdYR6TPGpX/dqzvTqQeBA== dependencies: - "@babel/runtime" "^7.7.2" - clsx "^1.0.4" - dom-helpers "^5.1.3" - loose-envify "^1.4.0" - prop-types "^15.7.2" + babel-runtime "^6.26.0" + clsx "^1.0.1" + dom-helpers "^5.0.0" + loose-envify "^1.3.0" + prop-types "^15.6.0" react-lifecycles-compat "^3.0.4" react-wait@^0.3.0: @@ -18098,14 +17845,16 @@ read-cmd-shim@^1.0.1: graceful-fs "^4.1.2" "read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.1.2" - resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" - integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== + version "2.1.1" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== dependencies: glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" + json-parse-better-errors "^1.0.1" normalize-package-data "^2.0.0" npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" read-package-tree@^5.1.6: version "5.3.1" @@ -18202,7 +17951,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@^2.3.7, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -18215,7 +17964,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0: version "3.6.0" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -18305,17 +18054,7 @@ redux-immutable@3.1.0: dependencies: immutable "^3.8.1" -redux@=3.7.2: - version "3.7.2" - resolved "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" - integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== - dependencies: - lodash "^4.2.1" - lodash-es "^4.2.1" - loose-envify "^1.1.0" - symbol-observable "^1.0.3" - -redux@^4.0.4: +redux@^4.0.4, redux@^4.0.5: version "4.0.5" resolved "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== @@ -18323,6 +18062,15 @@ redux@^4.0.4: loose-envify "^1.4.0" symbol-observable "^1.2.0" +refractor@^2.4.1: + version "2.10.1" + resolved "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" + integrity sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw== + dependencies: + hastscript "^5.0.0" + parse-entities "^1.1.2" + prismjs "~1.17.0" + refractor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/refractor/-/refractor-3.1.0.tgz#b05a43c8a1b4fccb30001ffcbd5cd781f7f06f78" @@ -18340,9 +18088,9 @@ regenerate-unicode-properties@^8.2.0: regenerate "^1.4.0" regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + version "1.4.0" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== regenerator-runtime@^0.11.0: version "0.11.1" @@ -18355,11 +18103,12 @@ regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0 integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + version "0.14.4" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== dependencies: "@babel/runtime" "^7.8.4" + private "^0.1.8" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -18382,7 +18131,7 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regexpu-core@^4.7.0: +regexpu-core@^4.6.0, regexpu-core@^4.7.0: version "4.7.0" resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== @@ -18395,9 +18144,9 @@ regexpu-core@^4.7.0: unicode-match-property-value-ecmascript "^1.2.0" registry-auth-token@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" - integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== + version "4.1.1" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" + integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA== dependencies: rc "^1.2.8" @@ -18409,9 +18158,9 @@ registry-url@^5.0.0: rc "^1.2.8" regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + version "0.5.1" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.4: version "0.6.4" @@ -18508,19 +18257,19 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: - lodash "^4.17.19" + lodash "^4.17.15" request-promise-native@^1.0.5, request-promise-native@^1.0.8: - version "1.0.9" - resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + version "1.0.8" + resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== dependencies: - request-promise-core "1.1.4" + request-promise-core "1.1.3" stealthy-require "^1.1.1" tough-cookie "^2.3.3" @@ -18639,7 +18388,7 @@ resolve@1.15.1: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.3.2: version "1.17.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -18763,13 +18512,11 @@ rollup-plugin-dts@1.4.11: "@babel/code-frame" "^7.10.4" rollup-plugin-esbuild@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-2.4.2.tgz#631f272a06d349b5d7719ed20bae4fedd3ba756f" - integrity sha512-GJOaC2onOPcCN0w7tYv60Thg3ciX40YRubeGyS/DRo862udAiFuQGTIBSyNX20EWyvYLZmZ967ziGdzUJtIaAg== + version "2.3.0" + resolved "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-2.3.0.tgz#7c107d4508af80d30966a148b306cb7d5b36b258" + integrity sha512-lNbWDRaClwXauaIybuaiOBRWgxcp3GkZu0UUix9yH/OHFgVohKmzlU0NtNbvfbxAcfEooyuBRAv6YCaJl1Mbpw== dependencies: "@rollup/pluginutils" "^3.1.0" - joycon "^2.2.5" - strip-json-comments "^3.1.1" rollup-plugin-image-files@^1.4.2: version "1.4.2" @@ -18839,9 +18586,9 @@ rollup@0.64.1: "@types/node" "*" rollup@2.23.x: - version "2.23.1" - resolved "https://registry.npmjs.org/rollup/-/rollup-2.23.1.tgz#d458d28386dc7660c2e8a4978bea6f9494046c20" - integrity sha512-Heyl885+lyN/giQwxA8AYT2GY3U+gOlTqVLrMQYno8Z1X9lAOpfXPiKiZCyPc25e9BLJM3Zlh957dpTlO4pa8A== + version "2.23.0" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.23.0.tgz#b7ab1fee0c0e60132fd0553c4df1e9cdacfada9d" + integrity sha512-vLNmZFUGVwrnqNAJ/BvuLk1MtWzu4IuoqsH9UWK5AIdO3rt8/CSiJNvPvCIvfzrbNsqKbNzPAG1V2O4eTe2XZg== optionalDependencies: fsevents "~2.1.2" @@ -18866,9 +18613,11 @@ rtl-css-js@^1.9.0: "@babel/runtime" "^7.1.2" run-async@^2.2.0, run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + version "2.4.0" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" + integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== + dependencies: + is-promise "^2.1.0" run-parallel@^1.1.9: version "1.1.9" @@ -18882,7 +18631,7 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.5.3, rxjs@^6.5.5, rxjs@^6.6.0, rxjs@^6.6.2: +rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.5.3, rxjs@^6.5.5, rxjs@^6.6.0: version "6.6.2" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== @@ -18900,14 +18649,14 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + version "5.2.0" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== safe-identifier@^0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb" - integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w== + version "0.4.1" + resolved "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.1.tgz#b6516bf72594f03142b5f914f4c01842ccb1b678" + integrity sha512-73tOz5TXsq3apuCc3vC8c9QRhhdNZGiBhHmPPjqpH4TO5oCDqk8UIsDcSs/RG6dYcFAkOOva0pqHS3u7hh7XXA== safe-regex@^1.1.0: version "1.1.0" @@ -18916,7 +18665,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -18937,14 +18686,16 @@ sane@^4.0.3: walker "~1.0.5" sanitize-html@^1.27.0: - version "1.27.4" - resolved "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.27.4.tgz#3864e7562fc708cefabcb0d51bbacde3411504cb" - integrity sha512-VvY1hxVvMXzSos/LzqeBl9/KYu3mkEOtl5NMwz6jER318dSHDCig0AOjZOtnoCwAC3HMs9LhfWkPCmQGttb4ng== + version "1.27.0" + resolved "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.27.0.tgz#42104a2d59f1a48b616b5165ad5349824861e580" + integrity sha512-U1btucGeYVpg0GoK43jPpe/bDCV4cBOGuxzv5NBd0bOjyZdMKY0n98S/vNlO1wVwre0VCj8H3hbzE7gD2+RjKA== dependencies: + chalk "^2.4.1" htmlparser2 "^4.1.0" lodash "^4.17.15" - parse-srcset "^1.0.2" postcss "^7.0.27" + srcset "^2.0.1" + xtend "^4.0.1" sax@>=0.6.0, sax@^1.1.4, sax@^1.2.4, sax@~1.2.4: version "1.2.4" @@ -19077,6 +18828,11 @@ serialize-error@^2.1.0: resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -19152,7 +18908,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -19253,12 +19009,12 @@ shortid@^2.2.14: nanoid "^2.1.0" side-channel@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" - integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== + version "1.0.2" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== dependencies: - es-abstract "^1.18.0-next.0" - object-inspect "^1.8.0" + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" @@ -19434,7 +19190,7 @@ source-list-map@^2.0.0: resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-resolve@^0.5.0: +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== @@ -19445,14 +19201,6 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.19" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -19502,22 +19250,22 @@ spawn-command@^0.0.2-1: integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.1.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.2.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + version "3.0.0" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" @@ -19596,6 +19344,11 @@ sqlite3@^4.2.0: nan "^2.12.1" node-pre-gyp "^0.11.0" +srcset@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/srcset/-/srcset-2.0.1.tgz#8f842d357487eb797f413d9c309de7a5149df5ac" + integrity sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ== + ssh2-streams@~0.4.10: version "0.4.10" resolved "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.10.tgz#48ef7e8a0e39d8f2921c30521d56dacb31d23a34" @@ -19676,9 +19429,9 @@ stackblur-canvas@^1.4.1: integrity sha1-hJqm+UsnL/JvZHH6QTDtH35HlVs= stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + version "1.1.1" + resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.1.1.tgz#ffef0a3318b1b60c3b58564989aca5660729ec71" + integrity sha512-0PlYhdKh6AfFxRyK/v+6/k+/mMfyiEBbTM5L94D0ZytQnJ166wuwoTYLHFWGbs2dpA8Rgq763KGWmN1EQEYHRQ== stacktrace-gps@^3.0.4: version "3.0.4" @@ -19698,9 +19451,9 @@ stacktrace-js@^2.0.0: stacktrace-gps "^3.0.4" start-server-and-test@^1.10.11: - version "1.11.3" - resolved "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.11.3.tgz#d293d2cff2c2fa0a46bbcf6b292716dbc8042d01" - integrity sha512-7r2lvcnJPECSG+ydMzk1wLt3MdzsHnYj+kXgKyzbvTXul5XYEmYJJ3K7YUGNgo5w/vnZb8L/AZMyg1C17qBdzg== + version "1.11.2" + resolved "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.11.2.tgz#9144b7b6f25197148f159f261ae80119afbb17d5" + integrity sha512-rk1zS5WQvdbc8slE5hPtzfji1dFSnBAfm+vSjToZNrBvozHJvuAG80xE5u8N4tQjg3Ej1Crjc19J++r28HGJgg== dependencies: bluebird "3.7.2" check-more-types "2.24.0" @@ -19708,7 +19461,7 @@ start-server-and-test@^1.10.11: execa "3.4.0" lazy-ass "1.6.0" ps-tree "1.2.0" - wait-on "5.2.0" + wait-on "5.1.0" start-server-webpack-plugin@^2.2.5: version "2.2.5" @@ -19749,9 +19502,9 @@ stoppable@^1.1.0: integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== store2@^2.7.1: - version "2.12.0" - resolved "https://registry.npmjs.org/store2/-/store2-2.12.0.tgz#e1f1b7e1a59b6083b2596a8d067f6ee88fd4d3cf" - integrity sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw== + version "2.10.0" + resolved "https://registry.npmjs.org/store2/-/store2-2.10.0.tgz#46b82bb91878daf1b0d56dec2f1d41e54d5103cf" + integrity sha512-tWEpK0snS2RPUq1i3R6OahfJNjWCQYNxq0+by1amCSuw0mXtymJpzmZIeYpA1UAa+7B0grCpNYIbDcd7AgTbFg== storybook-dark-mode@^1.0.2: version "1.0.2" @@ -19903,39 +19656,21 @@ string.prototype.padstart@^3.0.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -string.prototype.trimend@^1.0.0, string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimleft@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" - integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== + version "2.1.1" + resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimstart "^1.0.0" + function-bind "^1.1.1" string.prototype.trimright@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" - integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== + version "2.1.1" + resolved "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimend "^1.0.0" - -string.prototype.trimstart@^1.0.0, string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" + function-bind "^1.1.1" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -20034,10 +19769,10 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== strip-json-comments@~2.0.1: version "2.0.1" @@ -20099,10 +19834,10 @@ stylis@3.5.0: resolved "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz#016fa239663d77f868fef5b67cf201c4b7c701e1" integrity sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw== -subscriptions-transport-ws@0.9.18, subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.16: - version "0.9.18" - resolved "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz#bcf02320c911fbadb054f7f928e51c6041a37b97" - integrity sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA== +subscriptions-transport-ws@0.9.17, subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.16: + version "0.9.17" + resolved "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.17.tgz#e30e40f0caae0d2781903c01a8cb51b6e2682098" + integrity sha512-hNHi2N80PBz4T0V0QhnnsMGvG3XDFDS9mS6BhZ3R12T6EBywC8d/uJscsga0cVO4DKtXCkCRrWm2sOYrbOdhEA== dependencies: backo2 "^1.0.2" eventemitter3 "^3.1.0" @@ -20173,9 +19908,9 @@ supports-color@^6.1.0: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + version "7.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== dependencies: has-flag "^4.0.0" @@ -20232,9 +19967,9 @@ swagger-client@=3.10.12: url "~0.11.0" swagger-ui-react@^3.31.1: - version "3.32.5" - resolved "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-3.32.5.tgz#866369dcefd0741ff8c35f3e8743e5a48a04f18f" - integrity sha512-p1/NU1stVf6RRj/+mGRMMNwB18UTDFSK0s7LLCxXLCK4ml6yeyHjeOY/T997B29ZPprOLmzJJdMzWEz2m+4jQg== + version "3.31.1" + resolved "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-3.31.1.tgz#1770cfa1dc390f79887d641ea35ee654f4bf7d80" + integrity sha512-bGpNzizMT/7N4LTdw6yx+t3rpsEoalrn0VIfhUzv9zXVrUTl+3AKPLHpLBr0r4NvzvaZLrYuSjkatnLfngJ4vg== dependencies: "@babel/runtime-corejs2" "^7.10.4" "@braintree/sanitize-url" "^4.0.0" @@ -20260,9 +19995,9 @@ swagger-ui-react@^3.31.1: react-immutable-pure-component "^1.1.1" react-inspector "^2.3.0" react-motion "^0.5.2" - react-redux "=4.4.10" - react-syntax-highlighter "=13.5.0" - redux "=3.7.2" + react-redux "^5.1.2" + react-syntax-highlighter "=12.2.1" + redux "^4.0.5" redux-immutable "3.1.0" remarkable "^2.0.1" reselect "^4.0.0" @@ -20274,13 +20009,13 @@ swagger-ui-react@^3.31.1: zenscroll "^4.0.2" swr@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/swr/-/swr-0.3.1.tgz#b673f32a470418a785d962c86bd96ec555986dd0" - integrity sha512-g9JrXXMo54CSc+DU+KS0S8+5r6cpeBmBmVLhCu23ifQL9u0KKirkJpNX3Za3eOttmUuRQLXA8N1YPpoc8ejdpA== + version "0.3.0" + resolved "https://registry.npmjs.org/swr/-/swr-0.3.0.tgz#69602953dd50ab07fe60c920fd63199256645675" + integrity sha512-3p0p5TWH0qiaKAph5wBkMwqe2WjNseITfjmdVoNzjqRZGn/gnpRi6whMDjhMVb/vp/yyDtKWPlyjid8QZH+UhA== dependencies: fast-deep-equal "2.0.1" -symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.1.0, symbol-observable@^1.2.0: +symbol-observable@^1.0.4, symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -20352,9 +20087,9 @@ tar-stream@^1.1.2: xtend "^4.0.0" tar-stream@^2.0.0: - version "2.1.3" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" - integrity sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== + version "2.1.2" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325" + integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q== dependencies: bl "^4.0.1" end-of-stream "^1.4.1" @@ -20444,15 +20179,15 @@ terminal-link@^2.0.0: supports-hyperlinks "^2.0.0" terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + version "1.4.3" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^4.0.0" + serialize-javascript "^2.1.2" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" @@ -20531,9 +20266,9 @@ thenify-all@^1.0.0: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + version "3.3.0" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= dependencies: any-promise "^1.0.0" @@ -20543,9 +20278,9 @@ throat@^5.0.0: integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== throttle-debounce@^2.0.1, throttle-debounce@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz#fd31865e66502071e411817e241465b3e9c372e2" - integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== + version "2.2.1" + resolved "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.2.1.tgz#fbd933ae6793448816f7d5b3cae259d464c98137" + integrity sha512-i9hAVld1f+woAiyNGqWelpDD5W1tpMroL3NofTz9xzwq6acWBlO2dC8k5EFSZepU6oOINtV5Q3aSPoRg7o4+fA== throttleit@^1.0.0: version "1.0.0" @@ -20561,11 +20296,10 @@ through2@^2.0.0, through2@^2.0.2: xtend "~4.0.1" through2@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + version "3.0.1" + resolved "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" + integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== dependencies: - inherits "^2.0.4" readable-stream "2 || 3" through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: @@ -20647,13 +20381,6 @@ tmp@~0.1.0: dependencies: rimraf "^2.6.3" -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - tmpl@1.0.x: version "1.0.4" resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -20799,11 +20526,6 @@ trim-newlines@^2.0.0: resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= -trim-newlines@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" - integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== - trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" @@ -20850,9 +20572,9 @@ ts-essentials@^2.0.3: integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + version "0.1.10" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.10.tgz#b68a49e37e90a05797e590f08494dd528bf383cf" + integrity sha512-UJYuKET7ez7ry0CnvfY6fPIUIZDw+UI3qvTUQeS2MyI4TgEeWAUBqy185LeaHcdJ9zG2dgFpPJU/AecXU0Afug== ts-invariant@^0.4.0: version "0.4.4" @@ -20862,26 +20584,25 @@ ts-invariant@^0.4.0: tslib "^1.9.3" ts-jest@^26.0.0: - version "26.3.0" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-26.3.0.tgz#6b2845045347dce394f069bb59358253bc1338a9" - integrity sha512-Jq2uKfx6bPd9+JDpZNMBJMdMQUC3sJ08acISj8NXlVgR2d5OqslEHOR2KHMgwymu8h50+lKIm0m0xj/ioYdW2Q== + version "26.1.1" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-26.1.1.tgz#b98569b8a4d4025d966b3d40c81986dd1c510f8d" + integrity sha512-Lk/357quLg5jJFyBQLnSbhycnB3FPe+e9i7ahxokyXxAYoB0q1pPmqxxRPYr4smJic1Rjcf7MXDBhZWgxlli0A== dependencies: - "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" - jest-util "26.x" json5 "2.x" lodash.memoize "4.x" make-error "1.x" + micromatch "4.x" mkdirp "1.x" semver "7.x" yargs-parser "18.x" ts-loader@^7.0.4: - version "7.0.5" - resolved "https://registry.npmjs.org/ts-loader/-/ts-loader-7.0.5.tgz#789338fb01cb5dc0a33c54e50558b34a73c9c4c5" - integrity sha512-zXypEIT6k3oTc+OZNx/cqElrsbBtYqDknf48OZos0NQ3RTt045fBIU8RRSu+suObBzYB355aIPGOe/3kj9h7Ig== + version "7.0.4" + resolved "https://registry.npmjs.org/ts-loader/-/ts-loader-7.0.4.tgz#5d9b95227de5afb91fdd9668f8920eb193cfe0cc" + integrity sha512-5du6OQHl+4ZjO4crEyoYUyWSrmmo7bAO+inkaILZ68mvahqrfoa4nn0DRmpQ4ruT4l+cuJCgF0xD7SBIyLeeow== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -20921,14 +20642,14 @@ tslib@1.10.0: integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: - version "1.13.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + version "1.11.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== -tslib@^2.0.0, tslib@^2.0.1, tslib@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" - integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== +tslib@^2.0.0, tslib@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" + integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== tsutils@^3.17.1: version "3.17.1" @@ -20983,11 +20704,6 @@ type-fest@^0.11.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - type-fest@^0.3.0: version "0.3.1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" @@ -21017,9 +20733,9 @@ type@^1.0.1: integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" - integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + version "2.0.0" + resolved "https://registry.npmjs.org/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== typed-styles@^0.0.7: version "0.0.7" @@ -21043,20 +20759,18 @@ typescript@^3.9.3: resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== -ua-parser-js@^0.7.18: - version "0.7.21" - resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" - integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== - uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.10.3" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.3.tgz#f0d2f99736c14de46d2d24649ba328be3e71c3bf" - integrity sha512-Lh00i69Uf6G74mvYpHCI9KVVXLcHW/xu79YTvH7Mkc9zyKUeSPz0owW0dguj0Scavns3ZOh3wY63J0Zb97Za2g== + version "3.8.0" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" + integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ== + dependencies: + commander "~2.20.3" + source-map "~0.6.1" uid-number@0.0.6: version "0.0.6" @@ -21217,10 +20931,12 @@ universal-user-agent@^4.0.0: dependencies: os-name "^3.1.0" -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== +universal-user-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" + integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q== + dependencies: + os-name "^3.1.0" universalify@^0.1.0: version "0.1.2" @@ -21268,9 +20984,9 @@ upath@^1.1.1, upath@^1.2.0: integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== update-notifier@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.1.tgz#895fc8562bbe666179500f9f2cebac4f26323746" - integrity sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg== + version "4.1.0" + resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" + integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== dependencies: boxen "^4.2.0" chalk "^3.0.0" @@ -21287,9 +21003,9 @@ update-notifier@^4.0.0: xdg-basedir "^4.0.0" uri-js@^4.2.1, uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + version "4.2.2" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" @@ -21434,9 +21150,9 @@ uuid@^8.0.0, uuid@^8.2.0, uuid@^8.3.0: integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + version "2.1.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== v8-to-istanbul@^5.0.1: version "5.0.1" @@ -21574,13 +21290,13 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -wait-on@5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/wait-on/-/wait-on-5.2.0.tgz#6711e74422523279714a36d52cf49fb47c9d9597" - integrity sha512-U1D9PBgGw2XFc6iZqn45VBubw02VsLwnZWteQ1au4hUVHasTZuFSKRzlTB2dqgLhji16YVI8fgpEpwUdCr8B6g== +wait-on@5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/wait-on/-/wait-on-5.1.0.tgz#b697f21c6fea0908b9c7ad6ed56ace4736768b66" + integrity sha512-JM0kgaE+V0nCDvSl72iM05W8NDt2E2M56WC5mzR7M+T+k6xjt2yYpyom+xA8RasSunFGzbxIpAXbVzXqtweAnA== dependencies: + "@hapi/joi" "^17.1.1" axios "^0.19.2" - joi "^17.1.1" lodash "^4.17.19" minimist "^1.2.5" rxjs "^6.5.5" @@ -21653,7 +21369,7 @@ webidl-conversions@^5.0.0: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== -webidl-conversions@^6.1.0: +webidl-conversions@^6.0.0: version "6.1.0" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== @@ -21793,17 +21509,17 @@ websocket-driver@0.6.5: websocket-extensions ">=0.1.1" websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + version "0.7.3" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== dependencies: - http-parser-js ">=0.5.1" + http-parser-js ">=0.4.0 <0.4.11" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: version "0.1.4" - resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== websocket@1.0.31: @@ -21824,11 +21540,6 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" -whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0, whatwg-fetch@^3.4.0: - version "3.4.0" - resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.0.tgz#e11de14f4878f773fbebcde8871b2c0699af8b30" - integrity sha512-rsum2ulz2iuZH08mJkT0Yi6JnKhwdw4oeyMjokgxd+mmqYSd9cPpOQf01TIWgjxG/U4+QR+AwKq6lSbXVxkyoQ== - whatwg-fetch@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" @@ -21871,13 +21582,13 @@ whatwg-url@^7.0.0: webidl-conversions "^4.0.2" whatwg-url@^8.0.0: - version "8.2.1" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.2.1.tgz#ed73417230784b281fb2a32c3c501738b46167c3" - integrity sha512-ZmVCr6nfBeaMxEHALLEGy0LszYjpJqf6PVNQUQ1qd9Et+q7Jpygd4rGGDXgHjD8e99yLFseD69msHDM4YwPZ4A== + version "8.1.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz#c628acdcf45b82274ce7281ee31dd3c839791771" + integrity sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw== dependencies: lodash.sortby "^4.7.0" tr46 "^2.0.2" - webidl-conversions "^6.1.0" + webidl-conversions "^5.0.0" which-module@^1.0.0: version "1.0.0" @@ -21928,34 +21639,34 @@ window-size@^0.2.0: integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= windows-release@^3.1.0: - version "3.3.3" - resolved "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" - integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== + version "3.2.0" + resolved "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" + integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== dependencies: execa "^1.0.0" -winston-transport@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" - integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw== +winston-transport@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz#df68c0c202482c448d9b47313c07304c2d7c2c66" + integrity sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A== dependencies: - readable-stream "^2.3.7" + readable-stream "^2.3.6" triple-beam "^1.2.0" winston@^3.2.1: - version "3.3.3" - resolved "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" - integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== + version "3.2.1" + resolved "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz#63061377976c73584028be2490a1846055f77f07" + integrity sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw== dependencies: - "@dabh/diagnostics" "^2.0.2" - async "^3.1.0" - is-stream "^2.0.0" - logform "^2.2.0" - one-time "^1.0.0" - readable-stream "^3.4.0" + async "^2.6.1" + diagnostics "^1.1.1" + is-stream "^1.1.0" + logform "^2.1.1" + one-time "0.0.4" + readable-stream "^3.1.1" stack-trace "0.0.x" triple-beam "^1.3.0" - winston-transport "^4.4.0" + winston-transport "^4.3.0" word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" @@ -22093,9 +21804,9 @@ ws@^6.0.0, ws@^6.1.2, ws@^6.2.1: async-limiter "~1.0.0" ws@^7.2.3: - version "7.3.1" - resolved "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + version "7.3.0" + resolved "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" + integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== x-is-string@^0.1.0: version "0.1.0" @@ -22175,10 +21886,17 @@ xpath@0.0.27: resolved "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92" integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ== +xregexp@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" + integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== + dependencies: + "@babel/runtime-corejs3" "^7.8.3" + xss@^1.0.6: - version "1.0.8" - resolved "https://registry.npmjs.org/xss/-/xss-1.0.8.tgz#32feb87feb74b3dcd3d404b7a68ababf10700535" - integrity sha512-3MgPdaXV8rfQ/pNn16Eio6VXYPTkqwa0vc7GkiymmY/DqR1SE/7VPAAVZz1GJsJFrllMYO3RHfEaiUGjab6TNw== + version "1.0.7" + resolved "https://registry.npmjs.org/xss/-/xss-1.0.7.tgz#a554cbd5e909324bd6893fb47fff441ad54e2a95" + integrity sha512-A9v7tblGvxu8TWXQC9rlpW96a+LN1lyw6wyhpTmmGW+FwRMactchBR3ROKSi33UPCUcUHSu8s9YP6F+K3Mw//w== dependencies: commander "^2.20.3" cssfilter "0.0.10" @@ -22223,7 +21941,7 @@ yaml@*, yaml@^1.10.0, yaml@^1.7.2, yaml@^1.9.2: resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@18.x, yargs-parser@^18.1.2, yargs-parser@^18.1.3: +yargs-parser@18.x, yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -22231,6 +21949,13 @@ yargs-parser@18.x, yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" From 5c9e1da0a9d3820545c18cbaf60c06b2861869d0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 12 Sep 2020 16:06:10 +0200 Subject: [PATCH 127/303] github/workflows: remove global yarn cache from windows build --- .github/workflows/e2e-win.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.github/workflows/e2e-win.yml b/.github/workflows/e2e-win.yml index b4ea1e350f..5bab1b1299 100644 --- a/.github/workflows/e2e-win.yml +++ b/.github/workflows/e2e-win.yml @@ -27,25 +27,12 @@ jobs: steps: - uses: actions/checkout@v2 - # Beginning of yarn setup, keep in sync between all workflows, see ci.yml - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - registry-url: https://registry.npmjs.org/ # Needed for auth - - name: find location of global yarn cache - id: yarn-cache - run: echo "::set-output name=dir::$(yarn cache dir)" - - name: cache global yarn cache - uses: actions/cache@v2 - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - name: yarn install run: yarn install --frozen-lockfile - # End of yarn setup - run: yarn tsc - name: yarn build From b4d4af50d8cc0d7e1d2e6eb04e0a165b71f0e678 Mon Sep 17 00:00:00 2001 From: NetPenguins Date: Sat, 12 Sep 2020 10:26:19 -0400 Subject: [PATCH 128/303] prettier misconfigured --- .../src/api/GithubActionsClient.ts | 6 +- .../WorkflowRunDetails/WorkflowRunDetails.tsx | 31 ++- .../WorkflowRunLogs/WorkflowRunLogs.tsx | 200 ++++++++++-------- .../useDownloadWorkflowRunLogs.ts | 36 ++-- 4 files changed, 150 insertions(+), 123 deletions(-) diff --git a/plugins/github-actions/src/api/GithubActionsClient.ts b/plugins/github-actions/src/api/GithubActionsClient.ts index 6b22150ec0..94fb774537 100644 --- a/plugins/github-actions/src/api/GithubActionsClient.ts +++ b/plugins/github-actions/src/api/GithubActionsClient.ts @@ -114,11 +114,13 @@ export class GithubActionsClient implements GithubActionsApi { repo: string; runId: number; }): Promise { - const workflow = await new Octokit({ auth: token }).actions.downloadJobLogsForWorkflowRun({ + const workflow = await new Octokit({ + auth: token, + }).actions.downloadJobLogsForWorkflowRun({ owner, repo, job_id: runId, }); return workflow.data; } -}; +} diff --git a/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx b/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx index fb4f7d7f77..fd2cc69376 100644 --- a/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx +++ b/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx @@ -112,7 +112,15 @@ const StepView = ({ step }: { step: Step }) => { ); }; -const JobListItem = ({ job, className, entity }: { job: Job; className: string; entity: Entity }) => { +const JobListItem = ({ + job, + className, + entity, +}: { + job: Job; + className: string; + entity: Entity; +}) => { const classes = useStyles(); return ( @@ -137,20 +145,11 @@ const JobListItem = ({ job, className, entity }: { job: Job; className: string;
- {job.status === "queued" || job.status === "in_progress" ? - - : - - } - + {job.status === 'queued' || job.status === 'in_progress' ? ( + + ) : ( + + )} ); }; @@ -233,7 +232,7 @@ export const WorkflowRunDetails = ({ entity }: { entity: Entity }) => { {jobs.loading ? ( ) : ( - + )} diff --git a/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx b/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx index 804914fd3b..390f35d516 100644 --- a/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx +++ b/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx @@ -14,18 +14,18 @@ * limitations under the License. */ -import { - Accordion, - AccordionSummary, - CircularProgress, - Fade, - LinearProgress, - makeStyles, - Modal, - Theme, - Tooltip, - Typography, - Zoom +import { + Accordion, + AccordionSummary, + CircularProgress, + Fade, + LinearProgress, + makeStyles, + Modal, + Theme, + Tooltip, + Typography, + Zoom, } from '@material-ui/core'; import React, { Suspense } from 'react'; @@ -39,57 +39,74 @@ import { Entity } from '@backstage/catalog-model'; const LazyLog = React.lazy(() => import('react-lazylog/build/LazyLog')); const useStyles = makeStyles(() => ({ - button: { - order: -1, - marginRight: 0, - marginLeft: '-20px', - }, - modal: { - display: 'flex', - alignItems: 'center', - width: '85%', - height: '85%', - justifyContent: 'center', - margin: 'auto' - }, - normalLog:{ - height: '75vh', - width: '100%' - }, - modalLog:{ - height: '100%', - width: '100%' - } - })); + button: { + order: -1, + marginRight: 0, + marginLeft: '-20px', + }, + modal: { + display: 'flex', + alignItems: 'center', + width: '85%', + height: '85%', + justifyContent: 'center', + margin: 'auto', + }, + normalLog: { + height: '75vh', + width: '100%', + }, + modalLog: { + height: '100%', + width: '100%', + }, +})); -const DisplayLog = ({ jobLogs, className }: { jobLogs: any; className: string }) =>{ - return( - }> -
- { - if(line.toLocaleLowerCase().includes("error") - || line.toLocaleLowerCase().includes("failed") - || line.toLocaleLowerCase().includes("failure")) - { - return - } - return line; - }} - /> -
-
- ) -} +const DisplayLog = ({ + jobLogs, + className, +}: { + jobLogs: any; + className: string; +}) => { + return ( + }> +
+ { + if ( + line.toLocaleLowerCase().includes('error') || + line.toLocaleLowerCase().includes('failed') || + line.toLocaleLowerCase().includes('failure') + ) { + return ( + + ); + } + return line; + }} + /> +
+
+ ); +}; /** - * A component for Run Logs visualization. + * A component for Run Logs visualization. */ -export const WorkflowRunLogs = ({ entity, runId, inProgress }:{ entity: Entity, runId: string, inProgress: boolean }) => { +export const WorkflowRunLogs = ({ + entity, + runId, + inProgress, +}: { + entity: Entity; + runId: string; + inProgress: boolean; +}) => { const classes = useStyles(); const projectName = useProjectName(entity); @@ -106,42 +123,47 @@ export const WorkflowRunLogs = ({ entity, runId, inProgress }:{ entity: Entity, }; return ( - - + } aria-controls={`panel-${name}-content`} id={`panel-${name}-header`} IconButtonProps={{ - className: classes.button, + className: classes.button, }} + > + + {jobLogs.loading ? : 'Job Log'} + + + { + event.stopPropagation(); + handleOpen(); + }} + style={{ marginLeft: 'auto' }} + /> + + event.stopPropagation()} + open={open} + onClose={handleClose} > - - {jobLogs.loading ? : "Job Log"} - - - { - event.stopPropagation() - handleOpen() - }} - style={{marginLeft: 'auto'}} - /> - - event.stopPropagation()} - open={open} - onClose={handleClose} - > - - - - - - {jobLogs.value && } + + + + + + {jobLogs.value && ( + + )} ); }; diff --git a/plugins/github-actions/src/components/WorkflowRunLogs/useDownloadWorkflowRunLogs.ts b/plugins/github-actions/src/components/WorkflowRunLogs/useDownloadWorkflowRunLogs.ts index 5cf8d57227..734f617b1f 100644 --- a/plugins/github-actions/src/components/WorkflowRunLogs/useDownloadWorkflowRunLogs.ts +++ b/plugins/github-actions/src/components/WorkflowRunLogs/useDownloadWorkflowRunLogs.ts @@ -18,19 +18,23 @@ import { useApi, githubAuthApiRef } from '@backstage/core'; import { useAsync } from 'react-use'; import { githubActionsApiRef } from '../../api'; -export const useDownloadWorkflowRunLogs = (repo: string, owner: string, id: string) => { - const api = useApi(githubActionsApiRef); - const auth = useApi(githubAuthApiRef); - const details = useAsync(async () => { - const token = await auth.getAccessToken(['repo']); - return repo && owner - ? api.downloadJobLogsForWorkflowRun({ - token, - owner, - repo, - runId: parseInt(id, 10), - }) - : Promise.reject('No repo/owner provided'); - }, [repo, owner, id]); - return details; - }; +export const useDownloadWorkflowRunLogs = ( + repo: string, + owner: string, + id: string, +) => { + const api = useApi(githubActionsApiRef); + const auth = useApi(githubAuthApiRef); + const details = useAsync(async () => { + const token = await auth.getAccessToken(['repo']); + return repo && owner + ? api.downloadJobLogsForWorkflowRun({ + token, + owner, + repo, + runId: parseInt(id, 10), + }) + : Promise.reject('No repo/owner provided'); + }, [repo, owner, id]); + return details; +}; From fe64f992f6b00237c6d519eefdf72703dcf3aca4 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sat, 12 Sep 2020 23:50:59 +0200 Subject: [PATCH 129/303] Add Authentication section in Getting Started Closes https://github.com/spotify/backstage/issues/2415 --- docs/getting-started/running-backstage-locally.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/getting-started/running-backstage-locally.md b/docs/getting-started/running-backstage-locally.md index 8b19910c8f..63caf292f5 100644 --- a/docs/getting-started/running-backstage-locally.md +++ b/docs/getting-started/running-backstage-locally.md @@ -58,6 +58,17 @@ yarn start That starts up the frontend on port 3000, and should automatically open a browser window showing it. +## Authentication + +When Backstage starts, you can choose to enter as a Guest user and start +exploring. + +But you can also set up any of the available authentication methods. The easiest +option will be GitHub. To setup GitHub authentication in Backstage, see +[these instructions](https://github.com/spotify/backstage/tree/master/plugins/auth-backend#github). + +--- + Congratulations! That should be it. Let us know how it went [on discord](https://discord.gg/EBHEGzX), file issues for any [feature](https://github.com/spotify/backstage/issues/new?labels=help+wanted&template=feature_template.md) From 841dc867eed94d75065bdf57fe268017488c79af Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sat, 12 Sep 2020 23:51:29 +0200 Subject: [PATCH 130/303] Docs: Remove unnecessary back to docs link --- docs/getting-started/running-backstage-locally.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/getting-started/running-backstage-locally.md b/docs/getting-started/running-backstage-locally.md index 63caf292f5..7df6325452 100644 --- a/docs/getting-started/running-backstage-locally.md +++ b/docs/getting-started/running-backstage-locally.md @@ -89,5 +89,3 @@ instance of Backstage with your own plugins. - [Create a Backstage Plugin](../plugins/create-a-plugin.md) - [Structure of a Plugin](../plugins/structure-of-a-plugin.md) - [Utility APIs](../api/utility-apis.md) - -[Back to Docs](../README.md) From ea4884ed9719573f55de9949c5c8589d27d607c9 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sat, 12 Sep 2020 23:52:34 +0200 Subject: [PATCH 131/303] Docs: Link to nvm repository for users to install --- docs/getting-started/running-backstage-locally.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started/running-backstage-locally.md b/docs/getting-started/running-backstage-locally.md index 7df6325452..08d2ab385b 100644 --- a/docs/getting-started/running-backstage-locally.md +++ b/docs/getting-started/running-backstage-locally.md @@ -4,8 +4,8 @@ title: Running Backstage Locally --- First make sure you are using NodeJS with an Active LTS Release, currently v12. -This is made easy with a version manager such as nvm which allows for version -switching. +This is made easy with a version manager such as +[nvm](https://github.com/nvm-sh/nvm) which allows for version switching. ```bash # Checking your version From 155f6d3e391eb931c4f6e8016cd5d44af83e931a Mon Sep 17 00:00:00 2001 From: Alex Landovskis Date: Sat, 12 Sep 2020 18:34:32 -0400 Subject: [PATCH 132/303] app-config.yaml: Add missing config for GithubReaderProcessor. --- app-config.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app-config.yaml b/app-config.yaml index 5b704f9b8e..9fdf7a28ee 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -57,6 +57,10 @@ catalog: rules: - allow: [Component, API, Group, Template, Location] processors: + github: + privateToken: + $secret: + env: GITHUB_PRIVATE_TOKEN githubApi: privateToken: $secret: From a737bc2eeb243b82ab3f76c705893e749e06088a Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sun, 13 Sep 2020 14:11:43 +0200 Subject: [PATCH 133/303] TechDocs: Automatically add new Issues/PRs to GitHub project board (#2443) * TechDocs: Automatically add new Issues/PRs to GitHub project board * Merge two separate jobs into one --- .github/workflows/techdocs-project-board.yml | 53 ++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .github/workflows/techdocs-project-board.yml diff --git a/.github/workflows/techdocs-project-board.yml b/.github/workflows/techdocs-project-board.yml new file mode 100644 index 0000000000..b389cf6bf5 --- /dev/null +++ b/.github/workflows/techdocs-project-board.yml @@ -0,0 +1,53 @@ +name: Automatically add new TechDocs Issues and PRs to the GitHub project board +# Development of TechDocs in Backstage is managed by this Kanban board - https://github.com/spotify/backstage/projects/5 +# New issues with TechDocs in their title or docs-like-code label will be added to the board. + +on: + issues: + types: [opened, reopened, labeled, edited] + pull_request: + types: [opened, reopened, labeled, edited] + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + assign_issue_or_pr_to_project: + runs-on: ubuntu-latest + name: Triage + steps: + - name: Assign new issue to Incoming based on its title. + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + contains(github.event.issue.title, 'TechDocs') || + contains(github.event.issue.title, 'techdocs') || + contains(github.event.issue.title, 'Techdocs') + with: + project: 'https://github.com/spotify/backstage/projects/5' + column_name: 'Incoming' + + - name: Assign new issue to Incoming based on its label. + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + contains(github.event.issue.labels.*.name, 'docs-like-code') + with: + project: 'https://github.com/spotify/backstage/projects/5' + column_name: 'Incoming' + + - name: Assign new PR to Incoming based on its title. + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + contains(github.event.pull_request.title, 'TechDocs') || + contains(github.event.pull_request.title, 'techdocs') || + contains(github.event.pull_request.title, 'Techdocs') + with: + project: 'https://github.com/spotify/backstage/projects/5' + column_name: 'Incoming' + + - name: Assign new PR to Incoming based on its label. + uses: srggrs/assign-one-project-github-action@1.2.0 + if: | + contains(github.event.pull_request.labels.*.name, 'docs-like-code') + with: + project: 'https://github.com/spotify/backstage/projects/5' + column_name: 'Incoming' From 247e7b347177c12775eadf9aad06c40b6d481124 Mon Sep 17 00:00:00 2001 From: Taras Mankovski Date: Sat, 12 Sep 2020 06:49:29 -0400 Subject: [PATCH 134/303] Add @changesets/cli as a dependency & init changesets --- .changeset/README.md | 8 + .changeset/config.json | 10 + package.json | 3 + yarn.lock | 514 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 527 insertions(+), 8 deletions(-) create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000000..4f3b76b096 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/master/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000000..4066833db6 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@1.3.0/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "linked": [], + "access": "restricted", + "baseBranch": "master", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/package.json b/package.json index c64b7f6951..0a41add8c6 100644 --- a/package.json +++ b/package.json @@ -66,5 +66,8 @@ "transformModules": [ "@kyma-project/asyncapi-react" ] + }, + "dependencies": { + "@changesets/cli": "2.10.2" } } diff --git a/yarn.lock b/yarn.lock index 11bb8a3fd8..dc4766cd31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1103,7 +1103,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.11.2" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== @@ -1153,6 +1153,188 @@ resolved "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-4.1.1.tgz#671b3cfdbcc40d1449036ce586e882ab6150828e" integrity sha512-epVksusKVEpwBs2vRg3SWssxn9KXs9CxEYNOcgeSRLRjq070ABj5bLPxkmtQpVeSPCHj8kfAE9J6z2WsLr4wZg== +"@changesets/apply-release-plan@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-4.0.0.tgz#e78efb56a4e459a8dab814ba43045f2ace0f27c9" + integrity sha512-MrcUd8wIlQ4S/PznzqJVsmnEpUGfPEkCGF54iqt8G05GEqi/zuxpoTfebcScpj5zeiDyxFIcA9RbeZ3pvJJxoA== + dependencies: + "@babel/runtime" "^7.4.4" + "@changesets/config" "^1.2.0" + "@changesets/get-version-range-type" "^0.3.2" + "@changesets/git" "^1.0.5" + "@changesets/types" "^3.1.0" + "@manypkg/get-packages" "^1.0.1" + fs-extra "^7.0.1" + lodash.startcase "^4.4.0" + outdent "^0.5.0" + prettier "^1.18.2" + resolve-from "^5.0.0" + semver "^5.4.1" + +"@changesets/assemble-release-plan@^3.0.0", "@changesets/assemble-release-plan@^3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-3.0.1.tgz#cd501d0c57d435a594fc7bb630fa589d5b75c2a0" + integrity sha512-PChmYuibH8RPiebMIzuYZ/DFS8ehf7yq+X5X0rJklg2njP3zYWJX7nlctpnBhZ0zpgvP2IgrtUigoVGNkv5m/Q== + dependencies: + "@babel/runtime" "^7.10.4" + "@changesets/errors" "^0.1.4" + "@changesets/get-dependents-graph" "^1.1.3" + "@changesets/types" "^3.1.0" + "@manypkg/get-packages" "^1.0.1" + semver "^5.4.1" + +"@changesets/cli@2.10.2": + version "2.10.2" + resolved "https://registry.npmjs.org/@changesets/cli/-/cli-2.10.2.tgz#85a7a8d8aca2ef682c671f352645bc75c72f9b85" + integrity sha512-m4YwTmT0ElOuBD3GCbbT75EWmdU4uCFARE4X+Ml1/knc4Z/MEzOjV0bi0/9eHACcQIMNg7rdB6f4vXtHiQU6bA== + dependencies: + "@babel/runtime" "^7.10.4" + "@changesets/apply-release-plan" "^4.0.0" + "@changesets/assemble-release-plan" "^3.0.1" + "@changesets/config" "^1.3.0" + "@changesets/errors" "^0.1.4" + "@changesets/get-dependents-graph" "^1.1.3" + "@changesets/get-release-plan" "^2.0.0" + "@changesets/git" "^1.0.6" + "@changesets/logger" "^0.0.5" + "@changesets/pre" "^1.0.4" + "@changesets/read" "^0.4.6" + "@changesets/types" "^3.1.1" + "@changesets/write" "^0.1.3" + "@manypkg/get-packages" "^1.0.1" + "@types/semver" "^6.0.0" + boxen "^1.3.0" + chalk "^2.1.0" + enquirer "^2.3.0" + external-editor "^3.1.0" + fs-extra "^7.0.1" + human-id "^1.0.2" + is-ci "^2.0.0" + meow "^5.0.0" + outdent "^0.5.0" + p-limit "^2.2.0" + preferred-pm "^3.0.0" + semver "^5.4.1" + spawndamnit "^2.0.0" + term-size "^2.1.0" + tty-table "^2.7.0" + +"@changesets/config@^1.2.0", "@changesets/config@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@changesets/config/-/config-1.3.0.tgz#82fcbf572b00ba16636be9ea45167983f1fc203b" + integrity sha512-IeAHmN5kI7OywBUNJXsk/v4vcXDDscwgTe/K5D3FSng5QTvzbgiMAe5K1iwBxBvuT4u/33n89kxSJdg4TTTFfA== + dependencies: + "@changesets/errors" "^0.1.4" + "@changesets/get-dependents-graph" "^1.1.3" + "@changesets/logger" "^0.0.5" + "@changesets/types" "^3.1.0" + "@manypkg/get-packages" "^1.0.1" + fs-extra "^7.0.1" + +"@changesets/errors@^0.1.4": + version "0.1.4" + resolved "https://registry.npmjs.org/@changesets/errors/-/errors-0.1.4.tgz#f79851746c43679a66b383fdff4c012f480f480d" + integrity sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q== + dependencies: + extendable-error "^0.1.5" + +"@changesets/get-dependents-graph@^1.1.3": + version "1.1.3" + resolved "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.1.3.tgz#da959c43ce98f3a990a6b8d9c1f894bcc1b629c7" + integrity sha512-cTbySXwSv9yWp4Pp5R/b5Qv23wJgFaFCqUbsI3IJ2pyPl0vMaODAZS8NI1nNK2XSxGIg1tw+dWNSR4PlrKBSVQ== + dependencies: + "@changesets/types" "^3.0.0" + "@manypkg/get-packages" "^1.0.1" + chalk "^2.1.0" + fs-extra "^7.0.1" + semver "^5.4.1" + +"@changesets/get-release-plan@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-2.0.0.tgz#570dbd0abcdd4169a73e8332ec139a01130f3b72" + integrity sha512-MHbgXMhkfWhXH1zUefrdtQ8IR+H46lAcKthKjptV28k0qGEcDk7KriYLukJ6BNkWiZkkZ/aycaivbNDclF9zaw== + dependencies: + "@babel/runtime" "^7.4.4" + "@changesets/assemble-release-plan" "^3.0.0" + "@changesets/config" "^1.2.0" + "@changesets/pre" "^1.0.4" + "@changesets/read" "^0.4.6" + "@changesets/types" "^3.1.0" + "@manypkg/get-packages" "^1.0.1" + +"@changesets/get-version-range-type@^0.3.2": + version "0.3.2" + resolved "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz#8131a99035edd11aa7a44c341cbb05e668618c67" + integrity sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg== + +"@changesets/git@^1.0.5", "@changesets/git@^1.0.6": + version "1.0.6" + resolved "https://registry.npmjs.org/@changesets/git/-/git-1.0.6.tgz#057e627e5d3fcb74bf6c18d7284e130ba5a7632e" + integrity sha512-e0M06XuME3W5lGhz+CO0vLc60u+hLk/pYjOx/6GXEWuQrwtGgeycFIfRgRt8qTs664o1oKtVHBbd7ItpoWgFfA== + dependencies: + "@babel/runtime" "^7.10.4" + "@changesets/errors" "^0.1.4" + "@changesets/types" "^3.1.1" + "@manypkg/get-packages" "^1.0.1" + is-subdir "^1.1.1" + spawndamnit "^2.0.0" + +"@changesets/logger@^0.0.5": + version "0.0.5" + resolved "https://registry.npmjs.org/@changesets/logger/-/logger-0.0.5.tgz#68305dd5a643e336be16a2369cb17cdd8ed37d4c" + integrity sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw== + dependencies: + chalk "^2.1.0" + +"@changesets/parse@^0.3.6": + version "0.3.6" + resolved "https://registry.npmjs.org/@changesets/parse/-/parse-0.3.6.tgz#8c2c8480fc07d2db2c37469d4a8df10906a989c6" + integrity sha512-0XPd/es9CfogI7XIqDr7I2mWzm++xX2s9GZsij3GajPYd7ouEsgJyNatPooxNtqj6ZepkiD6uqlqbeBUyj/A0Q== + dependencies: + "@changesets/types" "^3.0.0" + js-yaml "^3.13.1" + +"@changesets/pre@^1.0.4": + version "1.0.5" + resolved "https://registry.npmjs.org/@changesets/pre/-/pre-1.0.5.tgz#91e5e3b31b4a85ce37de72f6511a786f62f29b51" + integrity sha512-p43aAQY3aijhDnBLCriPao5YArlRjD4mSHRJq9PsBhljVLWqQQXcn6seSd77d+bD1tATLhB8tQ2eYoxMtMydXQ== + dependencies: + "@babel/runtime" "^7.4.4" + "@changesets/errors" "^0.1.4" + "@changesets/types" "^3.0.0" + "@manypkg/get-packages" "^1.0.1" + fs-extra "^7.0.1" + +"@changesets/read@^0.4.6": + version "0.4.6" + resolved "https://registry.npmjs.org/@changesets/read/-/read-0.4.6.tgz#1c03e709a870a070fc95490ffa696297d23458f7" + integrity sha512-rOd8dsF/Lgyy2SYlDalb3Ts/meDI2AcKPXYhSXIW3k6+ZLlj6Pt+nmgV5Ut8euyH7loibklNTDemfvMffF4xig== + dependencies: + "@babel/runtime" "^7.4.4" + "@changesets/git" "^1.0.5" + "@changesets/logger" "^0.0.5" + "@changesets/parse" "^0.3.6" + "@changesets/types" "^3.0.0" + chalk "^2.1.0" + fs-extra "^7.0.1" + p-filter "^2.1.0" + +"@changesets/types@^3.0.0", "@changesets/types@^3.1.0", "@changesets/types@^3.1.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@changesets/types/-/types-3.1.1.tgz#447481380c42044a8788e46c0dbdf592b338b62f" + integrity sha512-XWGEGWXhM92zvBWiQt2sOwhjTt8eCQbrsRbqkv4WYwW3Zsl4qPpvhHsNt845S42dJXrxgjWvId+jxFQocCayNQ== + +"@changesets/write@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@changesets/write/-/write-0.1.3.tgz#00ae575af50274773d7493e77fb96838a08ad8ad" + integrity sha512-q79rbwlVmTNKP9O6XxcMDj81CEOn/kQHbTFdRleW0tFUv98S1EyEAE9vLPPzO6WnQipHnaozxB1zMhHy0aQn8Q== + dependencies: + "@babel/runtime" "^7.4.4" + "@changesets/types" "^3.0.0" + fs-extra "^7.0.1" + human-id "^1.0.2" + prettier "^1.18.2" + "@cnakazawa/watch@^1.0.3": version "1.0.4" resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" @@ -2473,6 +2655,27 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" +"@manypkg/find-root@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz#a62d8ed1cd7e7d4c11d9d52a8397460b5d4ad29f" + integrity sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA== + dependencies: + "@babel/runtime" "^7.5.5" + "@types/node" "^12.7.1" + find-up "^4.1.0" + fs-extra "^8.1.0" + +"@manypkg/get-packages@^1.0.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.1.tgz#7c7e72d0061ab2e61d2ce4da58ce91290a60ac8d" + integrity sha512-J6VClfQSVgR6958eIDTGjfdCrELy1eT+SHeoSMomnvRQVktZMnEA5edIr5ovRFNw5y+Bk/jyoevPzGYod96mhw== + dependencies: + "@babel/runtime" "^7.5.5" + "@manypkg/find-root" "^1.1.0" + fs-extra "^8.1.0" + globby "^11.0.0" + read-yaml-file "^1.1.0" + "@material-icons/font@^1.0.2": version "1.0.3" resolved "https://registry.npmjs.org/@material-icons/font/-/font-1.0.3.tgz#f722e5a69a03f20ef47d015cb69420bebeeaabe5" @@ -4417,6 +4620,11 @@ resolved "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz#be0d375933c3d15ef2380dafb3b0350ea7021129" integrity sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ== +"@types/node@^12.7.1": + version "12.12.58" + resolved "https://registry.npmjs.org/@types/node/-/node-12.12.58.tgz#46dae9b2b9ee5992818c8f7cee01ff4ce03ab44c" + integrity sha512-Be46CNIHWAagEfINOjmriSxuv7IVcqbGe+sDSg2SYCEz/0CRBy7LRASGfRbD8KZkqoePU73Wsx3UvOSFcq/9hA== + "@types/node@^13.7.2": version "13.13.15" resolved "https://registry.npmjs.org/@types/node/-/node-13.13.15.tgz#fe1cc3aa465a3ea6858b793fd380b66c39919766" @@ -4686,6 +4894,11 @@ "@types/node" "*" rollup "^0.63.4" +"@types/semver@^6.0.0": + version "6.2.1" + resolved "https://registry.npmjs.org/@types/semver/-/semver-6.2.1.tgz#a236185670a7860f1597cf73bea2e16d001461ba" + integrity sha512-+beqKQOh9PYxuHvijhVl+tIHvT6tuwOrE9m14zd+MT2A38KoKZhh7pYJ0SNleLtwDsiIxHDsIk9bv01oOxvSvA== + "@types/serve-handler@^6.1.0": version "6.1.0" resolved "https://registry.npmjs.org/@types/serve-handler/-/serve-handler-6.1.0.tgz#6952aaf864e542297ce8a2480b3e0d9ea59de7f6" @@ -5339,6 +5552,13 @@ alphanum-sort@^1.0.0: resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + ansi-align@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" @@ -5351,6 +5571,11 @@ ansi-colors@^3.0.0, ansi-colors@^3.2.1: resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -6385,6 +6610,13 @@ better-opn@^2.0.0: dependencies: open "^7.0.3" +better-path-resolve@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz#13a35a1104cdd48a7b74bf8758f96a1ee613f99d" + integrity sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g== + dependencies: + is-windows "^1.0.0" + bfj@^7.0.2: version "7.0.2" resolved "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" @@ -6487,6 +6719,19 @@ bowser@^1.7.3: resolved "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== +boxen@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + boxen@^4.1.0, boxen@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" @@ -6532,6 +6777,13 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" +breakword@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/breakword/-/breakword-1.0.5.tgz#fd420a417f55016736b5b615161cae1c8f819810" + integrity sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg== + dependencies: + wcwidth "^1.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -6928,7 +7180,7 @@ camelcase@^3.0.0: resolved "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= -camelcase@^4.1.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -7163,6 +7415,11 @@ clean-stack@^2.0.0: resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + cli-boxes@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" @@ -7937,6 +8194,15 @@ cross-spawn@7.0.1: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -8249,6 +8515,31 @@ csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.5, csstype@^2.5.7, csstype@^2.6.5, resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== +csv-generate@^3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/csv-generate/-/csv-generate-3.2.4.tgz#440dab9177339ee0676c9e5c16f50e2b3463c019" + integrity sha512-qNM9eqlxd53TWJeGtY1IQPj90b563Zx49eZs8e0uMyEvPgvNVmX1uZDtdzAcflB3PniuH9creAzcFOdyJ9YGvA== + +csv-parse@^4.8.8: + version "4.12.0" + resolved "https://registry.npmjs.org/csv-parse/-/csv-parse-4.12.0.tgz#fd42d6291bbaadd51d3009f6cadbb3e53b4ce026" + integrity sha512-wPQl3H79vWLPI8cgKFcQXl0NBgYYEqVnT1i6/So7OjMpsI540oD7p93r3w6fDSyPvwkTepG05F69/7AViX2lXg== + +csv-stringify@^5.3.6: + version "5.5.1" + resolved "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.5.1.tgz#f42cdd379b0f7f142933a11f674b1a91ebd0fcd0" + integrity sha512-HM0/86Ks8OwFbaYLd495tqTs1NhscZL52dC4ieKYumy8+nawQYC0xZ63w1NqLf0M148T2YLYqowoImc1giPn0g== + +csv@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/csv/-/csv-5.3.2.tgz#50b344e25dfbb8c62684a1bcec18c22468b2161e" + integrity sha512-odDyucr9OgJTdGM2wrMbJXbOkJx3nnUX3Pt8SFOwlAMOpsUQlz1dywvLMXJWX/4Ib0rjfOsaawuuwfI5ucqBGQ== + dependencies: + csv-generate "^3.2.4" + csv-parse "^4.8.8" + csv-stringify "^5.3.6" + stream-transform "^2.0.1" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -9156,6 +9447,13 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.3.0: memory-fs "^0.5.0" tapable "^1.0.0" +enquirer@^2.3.0: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + enquirer@^2.3.5: version "2.3.5" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.5.tgz#3ab2b838df0a9d8ab9e7dff235b0e8712ef92381" @@ -9712,6 +10010,19 @@ execa@3.4.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -9869,7 +10180,12 @@ extend@3.0.2, extend@^3.0.0, extend@~3.0.2: resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: +extendable-error@^0.1.5: + version "0.1.7" + resolved "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96" + integrity sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg== + +external-editor@^3.0.3, external-editor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== @@ -10212,6 +10528,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + find-versions@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" @@ -10219,6 +10543,14 @@ find-versions@^3.2.0: dependencies: semver-regex "^2.0.0" +find-yarn-workspace-root2@1.2.16: + version "1.2.16" + resolved "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" + integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== + dependencies: + micromatch "^4.0.2" + pkg-dir "^4.2.0" + findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" @@ -10452,7 +10784,7 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^7.0.0: +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -10622,6 +10954,11 @@ get-stdin@^6.0.0: resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -10978,7 +11315,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -11596,6 +11933,11 @@ https-proxy-agent@^2.2.3: agent-base "^4.3.0" debug "^3.1.0" +human-id@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3" + integrity sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw== + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -12386,6 +12728,13 @@ 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-subdir@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-subdir/-/is-subdir-1.1.1.tgz#423e66902f9c5f159b9cc4826c820df083059538" + integrity sha512-VYpq0S7gPBVkkmfwkvGnx1EL9UVIo87NQyNcgMiNUdQCws3CJm5wj2nB+XPL7zigvjxhuZgp3bl2yBcKkSIj1w== + dependencies: + better-path-resolve "1.0.0" + is-svg@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" @@ -13036,7 +13385,7 @@ js-tokens@^3.0.2: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.8.3: +js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.6.1, js-yaml@^3.8.3: version "3.14.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -13731,6 +14080,16 @@ load-json-file@^5.3.0: strip-bom "^3.0.0" type-fest "^0.3.0" +load-yaml-file@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" + integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw== + dependencies: + graceful-fs "^4.1.5" + js-yaml "^3.13.0" + pify "^4.0.1" + strip-bom "^3.0.0" + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -13786,6 +14145,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash-es@^4.17.11: version "4.17.15" resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" @@ -13856,6 +14222,11 @@ lodash.sortby@^4.7.0: resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + integrity sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg= + lodash.template@^4.0.2, lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -14010,6 +14381,14 @@ lowlight@^1.14.0: fault "^1.0.0" highlight.js "~10.1.0" +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.0.0, lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -14606,6 +14985,11 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" +mixme@^0.3.1: + version "0.3.5" + resolved "https://registry.npmjs.org/mixme/-/mixme-0.3.5.tgz#304652cdaf24a3df0487205e61ac6162c6906ddd" + integrity sha512-SyV9uPETRig5ZmYev0ANfiGeB+g6N2EnqqEfBbCGmmJ6MgZ3E4qv5aPbnHVdZ60KAHHXV+T3sXopdrnIXQdmjQ== + mkdirp-classic@^0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b" @@ -15575,6 +15959,11 @@ ospath@^1.2.2: resolved "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= +outdent@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" + integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q== + overlayscrollbars@^1.10.2: version "1.13.0" resolved "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.0.tgz#1edb436328133b94877b558f77966d5497ca36a7" @@ -15602,6 +15991,13 @@ p-event@^4.0.0: dependencies: p-timeout "^3.1.0" +p-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" + integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== + dependencies: + p-map "^2.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -15654,6 +16050,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map-series@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" @@ -16831,6 +17234,16 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" +preferred-pm@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.2.tgz#bbdbef1014e34a7490349bf70d6d244b8d57a5e1" + integrity sha512-yGIxyBkK/OWOppgCXfOeOXOeNrddyK1DzqS6XpOokRZb2ogXTpHRhKDTO7d0pjF/2p2sV9pEkKL4e0tNZI1y2A== + dependencies: + find-up "^5.0.0" + find-yarn-workspace-root2 "1.2.16" + path-exists "^4.0.0" + which-pm "2.0.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -16851,6 +17264,11 @@ prepend-http@^2.0.0: resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +prettier@^1.18.2: + version "1.19.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + prettier@^2.0.5, prettier@~2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" @@ -17070,6 +17488,11 @@ ps-tree@1.2.0: dependencies: event-stream "=3.3.4" +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + psl@^1.1.28: version "1.8.0" resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" @@ -17944,6 +18367,16 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +read-yaml-file@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz#9362bbcbdc77007cc8ea4519fe1c0b821a7ce0d8" + integrity sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA== + dependencies: + graceful-fs "^4.1.5" + js-yaml "^3.6.1" + pify "^4.0.1" + strip-bom "^3.0.0" + read@1, read@~1.0.1: version "1.0.7" resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" @@ -19104,6 +19537,17 @@ smart-buffer@^4.1.0: resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== +smartwrap@^1.2.3: + version "1.2.5" + resolved "https://registry.npmjs.org/smartwrap/-/smartwrap-1.2.5.tgz#45ee3e09ac234e5f7f17c16e916f511834f3cd23" + integrity sha512-bzWRwHwu0RnWjwU7dFy7tF68pDAx/zMSu3g7xr9Nx5J0iSImYInglwEVExyHLxXljy6PWMjkSAbwF7t2mPnRmg== + dependencies: + breakword "^1.0.5" + grapheme-splitter "^1.0.4" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + yargs "^15.1.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -19249,6 +19693,14 @@ spawn-command@^0.0.2-1: resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= +spawndamnit@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad" + integrity sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA== + dependencies: + cross-spawn "^5.1.0" + signal-exit "^3.0.2" + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -19553,6 +20005,13 @@ stream-shift@^1.0.0: resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +stream-transform@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/stream-transform/-/stream-transform-2.0.2.tgz#3cb7a14c802eb39bc40caaab0535e584f3a65caf" + integrity sha512-J+D5jWPF/1oX+r9ZaZvEXFbu7znjxSkbNAHJ9L44bt/tCVuOEWZlDqU9qJk7N2xBU1S+K2DPpSKeR/MucmCA1Q== + dependencies: + mixme "^0.3.1" + stream@^0.0.2: version "0.0.2" resolved "https://registry.npmjs.org/stream/-/stream-0.0.2.tgz#7f5363f057f6592c5595f00bc80a27f5cec1f0ef" @@ -19602,7 +20061,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -20165,6 +20624,13 @@ temp-write@^3.4.0: temp-dir "^1.0.0" uuid "^3.0.1" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + term-size@^2.1.0: version "2.2.0" resolved "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" @@ -20663,6 +21129,18 @@ tty-browserify@0.0.0: resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +tty-table@^2.7.0: + version "2.8.13" + resolved "https://registry.npmjs.org/tty-table/-/tty-table-2.8.13.tgz#d484a416381973eaebbdf19c79136b390e5c6d70" + integrity sha512-eVV/+kB6fIIdx+iUImhXrO22gl7f6VmmYh0Zbu6C196fe1elcHXd7U6LcLXu0YoVPc2kNesWiukYcdK8ZmJ6aQ== + dependencies: + chalk "^3.0.0" + csv "^5.3.1" + smartwrap "^1.2.3" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + yargs "^15.1.0" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -21605,6 +22083,14 @@ which-pm-runs@^1.0.0: resolved "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= +which-pm@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" + integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w== + dependencies: + load-yaml-file "^0.2.0" + path-exists "^4.0.0" + which@1, which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -21626,6 +22112,13 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + widest-line@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" @@ -21921,6 +22414,11 @@ yaeti@^0.0.6: resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -22013,7 +22511,7 @@ yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.1.0, yargs@^15.3.1, yargs@^15.4.1: version "15.4.1" resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== From cee29bbd2bdcae1df5bf6d7211f88d4de4eb9639 Mon Sep 17 00:00:00 2001 From: Taras Mankovski Date: Sat, 12 Sep 2020 07:08:22 -0400 Subject: [PATCH 135/303] Linking all of the packages so they're released together --- .changeset/config.json | 53 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/.changeset/config.json b/.changeset/config.json index 4066833db6..02236339b9 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -2,8 +2,57 @@ "$schema": "https://unpkg.com/@changesets/config@1.3.0/schema.json", "changelog": "@changesets/cli/changelog", "commit": false, - "linked": [], - "access": "restricted", + "linked": [ + [ + "example-app", + "@backstage/backend-common", + "example-backend", + "@backstage/catalog-model", + "@backstage/cli-common", + "@backstage/cli", + "@backstage/config-loader", + "@backstage/config", + "@backstage/core-api", + "@backstage/core", + "@backstage/create-app", + "@backstage/dev-utils", + "docgen", + "e2e-test", + "storybook", + "@techdocs/cli", + "@backstage/test-utils-core", + "@backstage/test-utils", + "@backstage/theme", + "@backstage/plugin-api-docs", + "@backstage/plugin-app-backend", + "@backstage/plugin-auth-backend", + "@backstage/plugin-catalog-backend", + "@backstage/plugin-catalog", + "@backstage/plugin-circleci", + "@backstage/plugin-gcp-projects", + "@backstage/plugin-github-actions", + "@backstage/plugin-gitops-profiles", + "@backstage/plugin-graphiql", + "@backstage/plugin-graphql-backend", + "@backstage/plugin-identity-backend", + "@backstage/plugin-jenkins", + "@backstage/plugin-lighthouse", + "@backstage/plugin-newrelic", + "@backstage/plugin-proxy-backend", + "@backstage/plugin-register-component", + "@backstage/plugin-rollbar-backend", + "@backstage/plugin-rollbar", + "@backstage/plugin-scaffolder-backend", + "@backstage/plugin-scaffolder", + "@backstage/plugin-sentry-backend", + "@backstage/plugin-sentry", + "@backstage/plugin-tech-radar", + "@backstage/plugin-techdocs-backend", + "@backstage/plugin-techdocs", + "@backstage/plugin-welcome" + ] + ], + "access": "public", "baseBranch": "master", "updateInternalDependencies": "patch", "ignore": [] From 5b5928a52e4b8297650a7e3a84b9a5502bccaa9d Mon Sep 17 00:00:00 2001 From: Taras Mankovski Date: Sat, 12 Sep 2020 07:27:18 -0400 Subject: [PATCH 136/303] Add changeset workflow --- .github/workflows/changeset.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/changeset.yml diff --git a/.github/workflows/changeset.yml b/.github/workflows/changeset.yml new file mode 100644 index 0000000000..c6a004b3e8 --- /dev/null +++ b/.github/workflows/changeset.yml @@ -0,0 +1,19 @@ +name: Changeset + +on: + push: + branches: + - master + +jobs: + create-release-pr: + name: Create Changeset PR + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Install Dependencies + run: yarn + - name: Create Release Pull Request + uses: changesets/action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 10eafce72aab0588cd057e35d8ac9a4902eb6bf5 Mon Sep 17 00:00:00 2001 From: Taras Mankovski Date: Sun, 13 Sep 2020 09:57:53 -0400 Subject: [PATCH 137/303] Add --frozen-lockfile on yarn install --- .github/workflows/changeset.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/changeset.yml b/.github/workflows/changeset.yml index c6a004b3e8..5f12776beb 100644 --- a/.github/workflows/changeset.yml +++ b/.github/workflows/changeset.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/checkout@v1 - name: Install Dependencies - run: yarn + run: yarn --frozen-lockfile - name: Create Release Pull Request uses: changesets/action@master env: From 2617d8e36cb10a2ff47584d5681d8e67427363b8 Mon Sep 17 00:00:00 2001 From: Taras Mankovski Date: Sun, 13 Sep 2020 10:00:52 -0400 Subject: [PATCH 138/303] @changeset/cli to dev dependencies --- package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/package.json b/package.json index 0a41add8c6..17c3ee83b8 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ }, "version": "1.0.0", "devDependencies": { + "@changesets/cli": "2.10.2", "@spotify/eslint-config-oss": "^1.0.1", "@spotify/prettier-config": "^8.0.0", "concurrently": "^5.2.0", @@ -66,8 +67,5 @@ "transformModules": [ "@kyma-project/asyncapi-react" ] - }, - "dependencies": { - "@changesets/cli": "2.10.2" } } From cdb5510b2fe2c2689da0509b137246d07bd172d4 Mon Sep 17 00:00:00 2001 From: Taras Mankovski Date: Sun, 13 Sep 2020 10:05:59 -0400 Subject: [PATCH 139/303] Fix formatting of changeset workflow --- .github/workflows/changeset.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/changeset.yml b/.github/workflows/changeset.yml index 5f12776beb..ac7872ea93 100644 --- a/.github/workflows/changeset.yml +++ b/.github/workflows/changeset.yml @@ -10,10 +10,10 @@ jobs: name: Create Changeset PR runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - name: Install Dependencies - run: yarn --frozen-lockfile - - name: Create Release Pull Request - uses: changesets/action@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v1 + - name: Install Dependencies + run: yarn --frozen-lockfile + - name: Create Release Pull Request + uses: changesets/action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From fc7b1325adbefb329962a13ab30ae222053814fd Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 13 Sep 2020 21:40:28 +0200 Subject: [PATCH 140/303] CHANGELOG: update until 47800 + bump to alpha.21 --- CHANGELOG.md | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f9235172b..294c57815e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,13 +6,40 @@ If you encounter issues while upgrading to a newer version, don't hesitate to re ## Next Release +### @backstage/core + +- Introduced initial version of an inverted app/plugin relationship, where plugins export components for apps to use, instead registering themselves directly into the app. This enables more fine-grained control of plugin features, and also composition of plugins such as catalog pages with additional cards and tabs. This breaks the use of `RouteRef`s, and there will be more changes related to this in the future, but this change lays the initial foundation. See `packages/app` and followup PRs for how to update plugins for this change. [#2076](https://github.com/spotify/backstage/pull/2076) +- Switch to an automatic dependency injection mechanism for all Utility APIs, allowing plugins to ship default implementations of their APIs. See [https://backstage.io/docs/api/utility-apis](https://backstage.io/docs/api/utility-apis). [#2285](https://github.com/spotify/backstage/pull/2285) + > Collect changes for the next release below +### @backstage/cli + +- Change `backstage-cli backend:build-image` to forward all args to `docker image build`, instead of just tag. Also add `--build` flag for building all dependent packages before packaging the workspace for the docker build. [#2299](https://github.com/spotify/backstage/pull/2299) + +### @backstage/create-app + +- Change root `tsc` output dir to `dist-types`, in order to allow for standalone plugin repos. [#2278](https://github.com/spotify/backstage/pull/2278) + +## v0.1.1-alpha.21 + +- Added many more frontend plugins to the template along with the sidebar. [#1942](https://github.com/spotify/backstage/pull/1942), [#2084](https://github.com/spotify/backstage/pull/2084) + +### @backstage/core + - Material-UI: Bumped to 4.11.0, which is the version that create-app will resolve to, because we wanted to get the renaming of ExpansionPanel to Accordion into place. This gets rid of a lot of console deprecation warnings in newly scaffolded apps. +### @backstage/cli + +- Set `NODE_ENV` to `test` when running test. [#2214](https://github.com/spotify/backstage/pull/2214) + +- Fix for backend plugins names requiring to be prefixed with `@backstage` to build. [#2224](https://github.com/spotify/backstage/pull/2224) + +### @backstage/backend-common + - The backend plugin [service builder](https://github.com/spotify/backstage/blob/master/packages/backend-common/src/service/lib/ServiceBuilderImpl.ts) no longer adds `express.json()` automatically to all routes. While convenient @@ -22,14 +49,31 @@ If you encounter issues while upgrading to a newer version, don't hesitate to re still had to cater to that manually. We therefore decided to let plugins add `express.json()` themselves if they happen to deal with JSON data. +### @backstage/catalog-backend + +- Add rules configuration for catalog location and entity kinds. The default rules should cover most use-cases, but you may need to allow specific entity kinds when using things like Template or Group entities. [#2118](https://github.com/spotify/backstage/pull/2118) + ## v0.1.1-alpha.20 -- Includes https://github.com/spotify/backstage/pull/2097 to resolve issues with create-plugin command. +### @backstage/cli + +- Use config files according to `NODE_ENV` when serving and building frontend packages. [#2077](https://github.com/spotify/backstage/pull/2077) + +- Pin `rollup-plugin-dts` to avoid a later broken version. [#2097](https://github.com/spotify/backstage/pull/2097) ## v0.1.1-alpha.19 +### @backstage/backend-common + +- Allow listen host and port to be configured separately, in order to support PORT environment variables. [#1950](https://github.com/spotify/backstage/pull/1950) + +### @backstage/core + +- Added new `DiscoveryApi` for discovering backend endpoint in the frontend, and use in most plugins. See [packages/app/src/apis.ts](https://github.com/spotify/backstage/blob/master/packages/app/src/apis.ts) for how to register in your app. [#2074](https://github.com/spotify/backstage/pull/2074) + ### @backstage/create-app +- Added catalog and scaffolder frontend plugins to the template along with the sidebar. [#1942](https://github.com/spotify/backstage/pull/1942), [#2084](https://github.com/spotify/backstage/pull/2084) - Many plugins have been added to the catalog and will for now be required to be added to separate apps as well. This will be solved as [#1536](https://github.com/spotify/backstage/issues/1536) gets sorted out, but for now you may need to install some plugins just to get pages to work. ### @backstage/catalog-backend From a4038cd646eb5dba0618f31b7b5d503eb2ea2e55 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sun, 13 Sep 2020 22:39:21 +0200 Subject: [PATCH 141/303] Codecov: Disable comments --- .codecov.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .codecov.yml diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 0000000000..69cb76019a --- /dev/null +++ b/.codecov.yml @@ -0,0 +1 @@ +comment: false From 595c5ce98af6b13b09cae496c2b2246e8f98f9f2 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sun, 13 Sep 2020 22:40:20 +0200 Subject: [PATCH 142/303] Codecov: Set threshold of coverage change to 2% This is 2 percent points. So, if coverage drops from 50% to 47.9%, codecov github check will fail. --- .codecov.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.codecov.yml b/.codecov.yml index 69cb76019a..1ca69c2b9f 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -1 +1,8 @@ comment: false + +coverage: + status: + project: + default: + threshold: 2% + target: auto From 2c68f25de642ac1ab62b8473a32e65dce44b55bd Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sun, 13 Sep 2020 22:46:51 +0200 Subject: [PATCH 143/303] Codecov: Add reference documentation links in config --- .codecov.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.codecov.yml b/.codecov.yml index 1ca69c2b9f..f7bc56c7c1 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -1,8 +1,8 @@ -comment: false +comment: false # Ref: https://docs.codecov.io/docs/pull-request-comments coverage: status: project: default: - threshold: 2% + threshold: 2% # Ref: https://docs.codecov.io/docs/codecovyml-reference#coveragestatus target: auto From 2b5f7c5248f5615a59657c5f03f1b70efe7126d7 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Sun, 13 Sep 2020 23:07:50 +0200 Subject: [PATCH 144/303] Codecov: Reset threshold to 0%. It is harmless. --- .codecov.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codecov.yml b/.codecov.yml index f7bc56c7c1..bbe2ee8e93 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -4,5 +4,5 @@ coverage: status: project: default: - threshold: 2% # Ref: https://docs.codecov.io/docs/codecovyml-reference#coveragestatus + threshold: 0% # Ref: https://docs.codecov.io/docs/codecovyml-reference#coveragestatus target: auto From 678a9c90ded2ee3173ddfda75a8c2f1154d07632 Mon Sep 17 00:00:00 2001 From: Andrew Thauer <6507159+andrewthauer@users.noreply.github.com> Date: Sun, 13 Sep 2020 22:01:07 -0400 Subject: [PATCH 145/303] feat: add graphql api type --- .../software-catalog/descriptor-format.md | 1 + .../catalog-model/examples/swapi-graphql.yaml | 1174 +++++++++++++++++ plugins/api-docs/README.md | 5 +- plugins/api-docs/package.json | 2 + .../catalog/EntityPageApi/EntityPageApi.tsx | 8 +- .../ApiDefinitionCard/ApiDefinitionCard.tsx | 13 +- .../ApiEntityPage/ApiEntityPage.tsx | 1 + .../GraphQlDefinitionWidget.tsx | 66 + .../GraphQlDefinitionWidget/index.ts | 17 + yarn.lock | 2 +- 10 files changed, 1282 insertions(+), 7 deletions(-) create mode 100644 packages/catalog-model/examples/swapi-graphql.yaml create mode 100644 plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.tsx create mode 100644 plugins/api-docs/src/components/GraphQlDefinitionWidget/index.ts diff --git a/docs/features/software-catalog/descriptor-format.md b/docs/features/software-catalog/descriptor-format.md index fa4b8c23da..bf01f1972c 100644 --- a/docs/features/software-catalog/descriptor-format.md +++ b/docs/features/software-catalog/descriptor-format.md @@ -471,6 +471,7 @@ Describes the following entity kind: An API describes an interface that can be exposed by a component. The API can be defined in different formats, like [OpenAPI](https://swagger.io/specification/), [AsyncAPI](https://www.asyncapi.com/docs/specifications/latest/), +[GraphQL](https://graphql.org/learn/schema/), [gRPC](https://developers.google.com/protocol-buffers), or other formats. Descriptor files for this kind may look as follows. diff --git a/packages/catalog-model/examples/swapi-graphql.yaml b/packages/catalog-model/examples/swapi-graphql.yaml new file mode 100644 index 0000000000..152d9c0afa --- /dev/null +++ b/packages/catalog-model/examples/swapi-graphql.yaml @@ -0,0 +1,1174 @@ +apiVersion: backstage.io/v1alpha1 +kind: API +metadata: + name: starwars-graphql + description: SWAPI GraphQL Schema +spec: + type: graphql + definition: | + schema { + query: Root + } + + """A single film.""" + type Film implements Node { + """The title of this film.""" + title: String + + """The episode number of this film.""" + episodeID: Int + + """The opening paragraphs at the beginning of this film.""" + openingCrawl: String + + """The name of the director of this film.""" + director: String + + """The name(s) of the producer(s) of this film.""" + producers: [String] + + """The ISO 8601 date format of film release at original creator country.""" + releaseDate: String + speciesConnection(after: String, first: Int, before: String, last: Int): FilmSpeciesConnection + starshipConnection(after: String, first: Int, before: String, last: Int): FilmStarshipsConnection + vehicleConnection(after: String, first: Int, before: String, last: Int): FilmVehiclesConnection + characterConnection(after: String, first: Int, before: String, last: Int): FilmCharactersConnection + planetConnection(after: String, first: Int, before: String, last: Int): FilmPlanetsConnection + + """The ISO 8601 date format of the time that this resource was created.""" + created: String + + """The ISO 8601 date format of the time that this resource was edited.""" + edited: String + + """The ID of an object""" + id: ID! + } + + """A connection to a list of items.""" + type FilmCharactersConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [FilmCharactersEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + characters: [Person] + } + + """An edge in a connection.""" + type FilmCharactersEdge { + """The item at the end of the edge""" + node: Person + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type FilmPlanetsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [FilmPlanetsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + planets: [Planet] + } + + """An edge in a connection.""" + type FilmPlanetsEdge { + """The item at the end of the edge""" + node: Planet + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type FilmsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [FilmsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + films: [Film] + } + + """An edge in a connection.""" + type FilmsEdge { + """The item at the end of the edge""" + node: Film + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type FilmSpeciesConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [FilmSpeciesEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + species: [Species] + } + + """An edge in a connection.""" + type FilmSpeciesEdge { + """The item at the end of the edge""" + node: Species + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type FilmStarshipsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [FilmStarshipsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + starships: [Starship] + } + + """An edge in a connection.""" + type FilmStarshipsEdge { + """The item at the end of the edge""" + node: Starship + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type FilmVehiclesConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [FilmVehiclesEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + vehicles: [Vehicle] + } + + """An edge in a connection.""" + type FilmVehiclesEdge { + """The item at the end of the edge""" + node: Vehicle + + """A cursor for use in pagination""" + cursor: String! + } + + """An object with an ID""" + interface Node { + """The id of the object.""" + id: ID! + } + + """Information about pagination in a connection.""" + type PageInfo { + """When paginating forwards, are there more items?""" + hasNextPage: Boolean! + + """When paginating backwards, are there more items?""" + hasPreviousPage: Boolean! + + """When paginating backwards, the cursor to continue.""" + startCursor: String + + """When paginating forwards, the cursor to continue.""" + endCursor: String + } + + """A connection to a list of items.""" + type PeopleConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [PeopleEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + people: [Person] + } + + """An edge in a connection.""" + type PeopleEdge { + """The item at the end of the edge""" + node: Person + + """A cursor for use in pagination""" + cursor: String! + } + + """An individual person or character within the Star Wars universe.""" + type Person implements Node { + """The name of this person.""" + name: String + + """ + The birth year of the person, using the in-universe standard of BBY or ABY - + Before the Battle of Yavin or After the Battle of Yavin. The Battle of Yavin is + a battle that occurs at the end of Star Wars episode IV: A New Hope. + """ + birthYear: String + + """ + The eye color of this person. Will be "unknown" if not known or "n/a" if the + person does not have an eye. + """ + eyeColor: String + + """ + The gender of this person. Either "Male", "Female" or "unknown", + "n/a" if the person does not have a gender. + """ + gender: String + + """ + The hair color of this person. Will be "unknown" if not known or "n/a" if the + person does not have hair. + """ + hairColor: String + + """The height of the person in centimeters.""" + height: Int + + """The mass of the person in kilograms.""" + mass: Float + + """The skin color of this person.""" + skinColor: String + + """A planet that this person was born on or inhabits.""" + homeworld: Planet + filmConnection(after: String, first: Int, before: String, last: Int): PersonFilmsConnection + + """The species that this person belongs to, or null if unknown.""" + species: Species + starshipConnection(after: String, first: Int, before: String, last: Int): PersonStarshipsConnection + vehicleConnection(after: String, first: Int, before: String, last: Int): PersonVehiclesConnection + + """The ISO 8601 date format of the time that this resource was created.""" + created: String + + """The ISO 8601 date format of the time that this resource was edited.""" + edited: String + + """The ID of an object""" + id: ID! + } + + """A connection to a list of items.""" + type PersonFilmsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [PersonFilmsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + films: [Film] + } + + """An edge in a connection.""" + type PersonFilmsEdge { + """The item at the end of the edge""" + node: Film + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type PersonStarshipsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [PersonStarshipsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + starships: [Starship] + } + + """An edge in a connection.""" + type PersonStarshipsEdge { + """The item at the end of the edge""" + node: Starship + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type PersonVehiclesConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [PersonVehiclesEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + vehicles: [Vehicle] + } + + """An edge in a connection.""" + type PersonVehiclesEdge { + """The item at the end of the edge""" + node: Vehicle + + """A cursor for use in pagination""" + cursor: String! + } + + """ + A large mass, planet or planetoid in the Star Wars Universe, at the time of + 0 ABY. + """ + type Planet implements Node { + """The name of this planet.""" + name: String + + """The diameter of this planet in kilometers.""" + diameter: Int + + """ + The number of standard hours it takes for this planet to complete a single + rotation on its axis. + """ + rotationPeriod: Int + + """ + The number of standard days it takes for this planet to complete a single orbit + of its local star. + """ + orbitalPeriod: Int + + """ + A number denoting the gravity of this planet, where "1" is normal or 1 standard + G. "2" is twice or 2 standard Gs. "0.5" is half or 0.5 standard Gs. + """ + gravity: String + + """The average population of sentient beings inhabiting this planet.""" + population: Float + + """The climates of this planet.""" + climates: [String] + + """The terrains of this planet.""" + terrains: [String] + + """ + The percentage of the planet surface that is naturally occuring water or bodies + of water. + """ + surfaceWater: Float + residentConnection(after: String, first: Int, before: String, last: Int): PlanetResidentsConnection + filmConnection(after: String, first: Int, before: String, last: Int): PlanetFilmsConnection + + """The ISO 8601 date format of the time that this resource was created.""" + created: String + + """The ISO 8601 date format of the time that this resource was edited.""" + edited: String + + """The ID of an object""" + id: ID! + } + + """A connection to a list of items.""" + type PlanetFilmsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [PlanetFilmsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + films: [Film] + } + + """An edge in a connection.""" + type PlanetFilmsEdge { + """The item at the end of the edge""" + node: Film + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type PlanetResidentsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [PlanetResidentsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + residents: [Person] + } + + """An edge in a connection.""" + type PlanetResidentsEdge { + """The item at the end of the edge""" + node: Person + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type PlanetsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [PlanetsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + planets: [Planet] + } + + """An edge in a connection.""" + type PlanetsEdge { + """The item at the end of the edge""" + node: Planet + + """A cursor for use in pagination""" + cursor: String! + } + + type Root { + allFilms(after: String, first: Int, before: String, last: Int): FilmsConnection + film(id: ID, filmID: ID): Film + allPeople(after: String, first: Int, before: String, last: Int): PeopleConnection + person(id: ID, personID: ID): Person + allPlanets(after: String, first: Int, before: String, last: Int): PlanetsConnection + planet(id: ID, planetID: ID): Planet + allSpecies(after: String, first: Int, before: String, last: Int): SpeciesConnection + species(id: ID, speciesID: ID): Species + allStarships(after: String, first: Int, before: String, last: Int): StarshipsConnection + starship(id: ID, starshipID: ID): Starship + allVehicles(after: String, first: Int, before: String, last: Int): VehiclesConnection + vehicle(id: ID, vehicleID: ID): Vehicle + + """Fetches an object given its ID""" + node( + """The ID of an object""" + id: ID! + ): Node + } + + """A type of person or character within the Star Wars Universe.""" + type Species implements Node { + """The name of this species.""" + name: String + + """The classification of this species, such as "mammal" or "reptile".""" + classification: String + + """The designation of this species, such as "sentient".""" + designation: String + + """The average height of this species in centimeters.""" + averageHeight: Float + + """The average lifespan of this species in years, null if unknown.""" + averageLifespan: Int + + """ + Common eye colors for this species, null if this species does not typically + have eyes. + """ + eyeColors: [String] + + """ + Common hair colors for this species, null if this species does not typically + have hair. + """ + hairColors: [String] + + """ + Common skin colors for this species, null if this species does not typically + have skin. + """ + skinColors: [String] + + """The language commonly spoken by this species.""" + language: String + + """A planet that this species originates from.""" + homeworld: Planet + personConnection(after: String, first: Int, before: String, last: Int): SpeciesPeopleConnection + filmConnection(after: String, first: Int, before: String, last: Int): SpeciesFilmsConnection + + """The ISO 8601 date format of the time that this resource was created.""" + created: String + + """The ISO 8601 date format of the time that this resource was edited.""" + edited: String + + """The ID of an object""" + id: ID! + } + + """A connection to a list of items.""" + type SpeciesConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [SpeciesEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + species: [Species] + } + + """An edge in a connection.""" + type SpeciesEdge { + """The item at the end of the edge""" + node: Species + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type SpeciesFilmsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [SpeciesFilmsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + films: [Film] + } + + """An edge in a connection.""" + type SpeciesFilmsEdge { + """The item at the end of the edge""" + node: Film + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type SpeciesPeopleConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [SpeciesPeopleEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + people: [Person] + } + + """An edge in a connection.""" + type SpeciesPeopleEdge { + """The item at the end of the edge""" + node: Person + + """A cursor for use in pagination""" + cursor: String! + } + + """A single transport craft that has hyperdrive capability.""" + type Starship implements Node { + """The name of this starship. The common name, such as "Death Star".""" + name: String + + """ + The model or official name of this starship. Such as "T-65 X-wing" or "DS-1 + Orbital Battle Station". + """ + model: String + + """ + The class of this starship, such as "Starfighter" or "Deep Space Mobile + Battlestation" + """ + starshipClass: String + + """The manufacturers of this starship.""" + manufacturers: [String] + + """The cost of this starship new, in galactic credits.""" + costInCredits: Float + + """The length of this starship in meters.""" + length: Float + + """The number of personnel needed to run or pilot this starship.""" + crew: String + + """The number of non-essential people this starship can transport.""" + passengers: String + + """ + The maximum speed of this starship in atmosphere. null if this starship is + incapable of atmosphering flight. + """ + maxAtmospheringSpeed: Int + + """The class of this starships hyperdrive.""" + hyperdriveRating: Float + + """ + The Maximum number of Megalights this starship can travel in a standard hour. + A "Megalight" is a standard unit of distance and has never been defined before + within the Star Wars universe. This figure is only really useful for measuring + the difference in speed of starships. We can assume it is similar to AU, the + distance between our Sun (Sol) and Earth. + """ + MGLT: Int + + """The maximum number of kilograms that this starship can transport.""" + cargoCapacity: Float + + """ + The maximum length of time that this starship can provide consumables for its + entire crew without having to resupply. + """ + consumables: String + pilotConnection(after: String, first: Int, before: String, last: Int): StarshipPilotsConnection + filmConnection(after: String, first: Int, before: String, last: Int): StarshipFilmsConnection + + """The ISO 8601 date format of the time that this resource was created.""" + created: String + + """The ISO 8601 date format of the time that this resource was edited.""" + edited: String + + """The ID of an object""" + id: ID! + } + + """A connection to a list of items.""" + type StarshipFilmsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [StarshipFilmsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + films: [Film] + } + + """An edge in a connection.""" + type StarshipFilmsEdge { + """The item at the end of the edge""" + node: Film + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type StarshipPilotsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [StarshipPilotsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + pilots: [Person] + } + + """An edge in a connection.""" + type StarshipPilotsEdge { + """The item at the end of the edge""" + node: Person + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type StarshipsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [StarshipsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + starships: [Starship] + } + + """An edge in a connection.""" + type StarshipsEdge { + """The item at the end of the edge""" + node: Starship + + """A cursor for use in pagination""" + cursor: String! + } + + """A single transport craft that does not have hyperdrive capability""" + type Vehicle implements Node { + """ + The name of this vehicle. The common name, such as "Sand Crawler" or "Speeder + bike". + """ + name: String + + """ + The model or official name of this vehicle. Such as "All-Terrain Attack + Transport". + """ + model: String + + """The class of this vehicle, such as "Wheeled" or "Repulsorcraft".""" + vehicleClass: String + + """The manufacturers of this vehicle.""" + manufacturers: [String] + + """The cost of this vehicle new, in Galactic Credits.""" + costInCredits: Float + + """The length of this vehicle in meters.""" + length: Float + + """The number of personnel needed to run or pilot this vehicle.""" + crew: String + + """The number of non-essential people this vehicle can transport.""" + passengers: String + + """The maximum speed of this vehicle in atmosphere.""" + maxAtmospheringSpeed: Int + + """The maximum number of kilograms that this vehicle can transport.""" + cargoCapacity: Float + + """ + The maximum length of time that this vehicle can provide consumables for its + entire crew without having to resupply. + """ + consumables: String + pilotConnection(after: String, first: Int, before: String, last: Int): VehiclePilotsConnection + filmConnection(after: String, first: Int, before: String, last: Int): VehicleFilmsConnection + + """The ISO 8601 date format of the time that this resource was created.""" + created: String + + """The ISO 8601 date format of the time that this resource was edited.""" + edited: String + + """The ID of an object""" + id: ID! + } + + """A connection to a list of items.""" + type VehicleFilmsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [VehicleFilmsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + films: [Film] + } + + """An edge in a connection.""" + type VehicleFilmsEdge { + """The item at the end of the edge""" + node: Film + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type VehiclePilotsConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [VehiclePilotsEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + pilots: [Person] + } + + """An edge in a connection.""" + type VehiclePilotsEdge { + """The item at the end of the edge""" + node: Person + + """A cursor for use in pagination""" + cursor: String! + } + + """A connection to a list of items.""" + type VehiclesConnection { + """Information to aid in pagination.""" + pageInfo: PageInfo! + + """A list of edges.""" + edges: [VehiclesEdge] + + """ + A count of the total number of objects in this connection, ignoring pagination. + This allows a client to fetch the first five objects by passing "5" as the + argument to "first", then fetch the total count so it could display "5 of 83", + for example. + """ + totalCount: Int + + """ + A list of all of the objects returned in the connection. This is a convenience + field provided for quickly exploring the API; rather than querying for + "{ edges { node } }" when no edge data is needed, this field can be be used + instead. Note that when clients like Relay need to fetch the "cursor" field on + the edge to enable efficient pagination, this shortcut cannot be used, and the + full "{ edges { node } }" version should be used instead. + """ + vehicles: [Vehicle] + } + + """An edge in a connection.""" + type VehiclesEdge { + """The item at the end of the edge""" + node: Vehicle + + """A cursor for use in pagination""" + cursor: String! + } diff --git a/plugins/api-docs/README.md b/plugins/api-docs/README.md index db78b60373..17f354e997 100644 --- a/plugins/api-docs/README.md +++ b/plugins/api-docs/README.md @@ -14,8 +14,9 @@ The plugin provides a standalone list of APIs, as well as an integration into th Right now, the following API formats are supported: -- [OpenAPI](https://swagger.io/specification/) 2 & 3, -- [AsyncAPI](https://www.asyncapi.com/docs/specifications/latest/), +- [OpenAPI](https://swagger.io/specification/) 2 & 3 +- [AsyncAPI](https://www.asyncapi.com/docs/specifications/latest/) +- [GraphQL](https://graphql.org/learn/schema/) Other formats are displayed as plain text, but this can easily be extented. diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index a913316925..25e5c6b900 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -29,6 +29,8 @@ "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.45", + "graphiql": "^1.0.0-alpha.10", + "graphql": "^15.3.0", "react": "^16.13.1", "react-dom": "^16.13.1", "react-router": "6.0.0-beta.0", diff --git a/plugins/api-docs/src/catalog/EntityPageApi/EntityPageApi.tsx b/plugins/api-docs/src/catalog/EntityPageApi/EntityPageApi.tsx index f26691d58c..5383fc0570 100644 --- a/plugins/api-docs/src/catalog/EntityPageApi/EntityPageApi.tsx +++ b/plugins/api-docs/src/catalog/EntityPageApi/EntityPageApi.tsx @@ -16,7 +16,7 @@ import { ComponentEntity, Entity } from '@backstage/catalog-model'; import { Progress } from '@backstage/core'; -import React, { FC } from 'react'; +import React from 'react'; import { Grid } from '@material-ui/core'; import { ApiDefinitionCard, @@ -24,7 +24,11 @@ import { useComponentApiNames, } from '../../components'; -export const EntityPageApi: FC<{ entity: Entity }> = ({ entity }) => { +type Props = { + entity: Entity; +}; + +export const EntityPageApi = ({ entity }: Props) => { const apiNames = useComponentApiNames(entity as ComponentEntity); const { apiEntities, loading } = useComponentApiEntities({ diff --git a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx index 5650b0745f..055363ae1f 100644 --- a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx +++ b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionCard.tsx @@ -15,12 +15,13 @@ */ import { ApiEntity } from '@backstage/catalog-model'; -import { TabbedCard, CardTab } from '@backstage/core'; +import { CardTab, TabbedCard } from '@backstage/core'; +import { Alert } from '@material-ui/lab'; import React from 'react'; import { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget'; -import { Alert } from '@material-ui/lab'; import { OpenApiDefinitionWidget } from '../OpenApiDefinitionWidget'; import { AsyncApiDefinitionWidget } from '../AsyncApiDefinitionWidget'; +import { GraphQlDefinitionWidget } from '../GraphQlDefinitionWidget'; type ApiDefinitionWidget = { type: string; @@ -47,6 +48,14 @@ export function defaultDefinitionWidgets(): ApiDefinitionWidget[] { ), }, + { + type: 'graphql', + title: 'GraphQL', + rawLanguage: 'graphql', + component: definition => ( + + ), + }, ]; } diff --git a/plugins/api-docs/src/components/ApiEntityPage/ApiEntityPage.tsx b/plugins/api-docs/src/components/ApiEntityPage/ApiEntityPage.tsx index aa0df3f20f..b7e9996cc0 100644 --- a/plugins/api-docs/src/components/ApiEntityPage/ApiEntityPage.tsx +++ b/plugins/api-docs/src/components/ApiEntityPage/ApiEntityPage.tsx @@ -34,6 +34,7 @@ import { useAsync } from 'react-use'; import { ApiDefinitionCard } from '../ApiDefinitionCard'; const REDIRECT_DELAY = 1000; + function headerProps( kind: string, namespace: string | undefined, diff --git a/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.tsx b/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.tsx new file mode 100644 index 0000000000..7e01df1460 --- /dev/null +++ b/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinitionWidget.tsx @@ -0,0 +1,66 @@ +/* + * Copyright 2020 Spotify AB + * + * 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. + */ + +import React, { Suspense } from 'react'; +import { buildSchema } from 'graphql'; +import { makeStyles } from '@material-ui/core/styles'; +import { Progress } from '@backstage/core'; +import { BackstageTheme } from '@backstage/theme'; + +const GraphiQL = React.lazy(() => import('graphiql')); + +const useStyles = makeStyles(() => ({ + root: { + height: '100%', + display: 'flex', + flexFlow: 'column nowrap', + }, + graphiQlWrapper: { + flex: 1, + '@global': { + '.graphiql-container': { + boxSizing: 'initial', + height: '100%', + minHeight: '600px', + flex: '1 1 auto', + }, + }, + }, +})); + +type Props = { + definition: any; +}; + +export const GraphQlDefinitionWidget = ({ definition }: Props) => { + const classes = useStyles(); + const schema = buildSchema(definition); + + return ( + }> +
+
+ Promise.resolve(null) as any} + schema={schema} + docExplorerOpen + defaultSecondaryEditorOpen={false} + /> +
+
+
+ ); +}; diff --git a/plugins/api-docs/src/components/GraphQlDefinitionWidget/index.ts b/plugins/api-docs/src/components/GraphQlDefinitionWidget/index.ts new file mode 100644 index 0000000000..b60545de15 --- /dev/null +++ b/plugins/api-docs/src/components/GraphQlDefinitionWidget/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2020 Spotify AB + * + * 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 { GraphQlDefinitionWidget } from './GraphQlDefinitionWidget'; diff --git a/yarn.lock b/yarn.lock index 11bb8a3fd8..38f5d6c799 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17550,7 +17550,7 @@ react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-i resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-lazylog@^4.5.2: +react-lazylog@^4.5.2, react-lazylog@^4.5.3: version "4.5.3" resolved "https://registry.npmjs.org/react-lazylog/-/react-lazylog-4.5.3.tgz#289e24995b5599e75943556ac63f5e2c04d0001e" integrity sha512-lyov32A/4BqihgXgtNXTHCajXSXkYHPlIEmV8RbYjHIMxCFSnmtdg4kDCI3vATz7dURtiFTvrw5yonHnrS+NNg== From 42ebe8bdb15f18183d98e29cabaad8053fa5aee0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2020 07:59:32 +0200 Subject: [PATCH 146/303] chore(deps-dev): bump docusaurus in /microsite (#2455) Bumps [docusaurus](https://github.com/facebook/docusaurus) from 2.0.0-alpha.63 to 2.0.0-alpha.64. - [Release notes](https://github.com/facebook/docusaurus/releases) - [Changelog](https://github.com/facebook/docusaurus/blob/master/CHANGELOG-2.x.md) - [Commits](https://github.com/facebook/docusaurus/compare/v2.0.0-alpha.63...v2.0.0-alpha.64) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- microsite/package.json | 2 +- microsite/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/microsite/package.json b/microsite/package.json index 25598c18b4..734f1e4d49 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -13,7 +13,7 @@ "rename-version": "docusaurus-rename-version" }, "devDependencies": { - "docusaurus": "^2.0.0-alpha.61", + "docusaurus": "^2.0.0-alpha.64", "js-yaml": "^3.14.0" } } diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 422959d3fd..84b5d50d60 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2228,10 +2228,10 @@ dir-glob@2.0.0: arrify "^1.0.1" path-type "^3.0.0" -docusaurus@^2.0.0-alpha.61: - version "2.0.0-alpha.63" - resolved "https://registry.npmjs.org/docusaurus/-/docusaurus-2.0.0-alpha.63.tgz#40402d47b18c42b62e93beb78ce06e000cb88312" - integrity sha512-R19pAqcTemJMt7Qykd7ogB2i6R86vbE4/vA/l5/Uuh7xg7ixSKOVZ5M7d9uSoX5jCALOwEyp5iJdleznXUVwAw== +docusaurus@^2.0.0-alpha.64: + version "2.0.0-alpha.64" + resolved "https://registry.yarnpkg.com/docusaurus/-/docusaurus-2.0.0-alpha.64.tgz#7833960e9d338403894a27b79058aa4076a676d3" + integrity sha512-ARCx0GwAvc5qx7AHvRVZidZuoDTfaaGXzgmkU23NahU6jzO/aK2Q1bH8IKNEQ5C2JuDerQ/hHDh80N20ijk82g== dependencies: "@babel/core" "^7.9.0" "@babel/plugin-proposal-class-properties" "^7.8.3" From d6b0c80afdbc0e31d607f919e4609f5433616955 Mon Sep 17 00:00:00 2001 From: Oliver Sand Date: Mon, 14 Sep 2020 08:01:24 +0200 Subject: [PATCH 147/303] fix(catalog): remove unused components (#2430) This allows to resolve some circular dependencies. --- plugins/catalog/package.json | 3 - .../components/EntityPageCi/EntityPageCi.tsx | 39 ------------ .../EntityPageOverview/EntityPageOverview.tsx | 61 ------------------- 3 files changed, 103 deletions(-) delete mode 100644 plugins/catalog/src/components/EntityPageCi/EntityPageCi.tsx delete mode 100644 plugins/catalog/src/components/EntityPageOverview/EntityPageOverview.tsx diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index dca8b6adee..e1b52795d3 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -23,10 +23,7 @@ "dependencies": { "@backstage/catalog-model": "^0.1.1-alpha.21", "@backstage/core": "^0.1.1-alpha.21", - "@backstage/plugin-github-actions": "^0.1.1-alpha.21", - "@backstage/plugin-jenkins": "^0.1.1-alpha.21", "@backstage/plugin-scaffolder": "^0.1.1-alpha.21", - "@backstage/plugin-sentry": "^0.1.1-alpha.21", "@backstage/plugin-techdocs": "^0.1.1-alpha.21", "@backstage/theme": "^0.1.1-alpha.21", "@material-ui/core": "^4.11.0", diff --git a/plugins/catalog/src/components/EntityPageCi/EntityPageCi.tsx b/plugins/catalog/src/components/EntityPageCi/EntityPageCi.tsx deleted file mode 100644 index 0974e6bb83..0000000000 --- a/plugins/catalog/src/components/EntityPageCi/EntityPageCi.tsx +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ - -// TODO(shmidt-i): move to the app -import { Entity } from '@backstage/catalog-model'; -import { Content } from '@backstage/core'; -import { - LatestWorkflowsForBranchCard, - GITHUB_ACTIONS_ANNOTATION, -} from '@backstage/plugin-github-actions'; -import { Grid } from '@material-ui/core'; -import React, { FC } from 'react'; - -export const EntityPageCi: FC<{ entity: Entity }> = ({ entity }) => { - return ( - - - {entity.metadata?.annotations?.[GITHUB_ACTIONS_ANNOTATION] && ( - - - - )} - - - ); -}; diff --git a/plugins/catalog/src/components/EntityPageOverview/EntityPageOverview.tsx b/plugins/catalog/src/components/EntityPageOverview/EntityPageOverview.tsx deleted file mode 100644 index c43e83edaa..0000000000 --- a/plugins/catalog/src/components/EntityPageOverview/EntityPageOverview.tsx +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2020 Spotify AB - * - * 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. - */ - -// TODO(shmidt-i): move to the app -import { Entity } from '@backstage/catalog-model'; -import { Content } from '@backstage/core'; -import { - LatestWorkflowRunCard, - GITHUB_ACTIONS_ANNOTATION, -} from '@backstage/plugin-github-actions'; -import { - JenkinsBuildsWidget, - JenkinsLastBuildWidget, -} from '@backstage/plugin-jenkins'; -import { Grid } from '@material-ui/core'; -import React, { FC } from 'react'; -import { AboutCard } from '../AboutCard'; - -export const EntityPageOverview: FC<{ entity: Entity }> = ({ entity }) => { - return ( - - - - - - {entity.metadata?.annotations?.[ - 'backstage.io/jenkins-github-folder' - ] && ( - - - - )} - {entity.metadata?.annotations?.[ - 'backstage.io/jenkins-github-folder' - ] && ( - - - - )} - {entity.metadata?.annotations?.[GITHUB_ACTIONS_ANNOTATION] && ( - - - - )} - - - ); -}; From 7f8f8f75726e0b864e423862d3ca96a92a8d860a Mon Sep 17 00:00:00 2001 From: Fabian Chong Date: Mon, 14 Sep 2020 14:40:02 +0800 Subject: [PATCH 148/303] un-escape var --- packages/cli/templates/default-plugin/package.json.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index 120563c38a..251521e0c7 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -6,7 +6,7 @@ "license": "Apache-2.0", "private": {{privatePackage}}, "publishConfig": { - {{registryURL}} + {{{registryURL}}} "access": "public", "main": "dist/index.esm.js", "types": "dist/index.d.ts" From 8a0adf950a235a1851bcc6d05e9607e0d2124894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Sun, 13 Sep 2020 10:37:11 +0200 Subject: [PATCH 149/303] Update mkdocs.yml etc --- microsite/sidebars.json | 1 + mkdocs.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 7b4c852f4d..5d24361215 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -42,6 +42,7 @@ "features/software-catalog/installation", "features/software-catalog/system-model", "features/software-catalog/descriptor-format", + "features/software-catalog/well-known-annotations", "features/software-catalog/extending-the-model", "features/software-catalog/external-integrations", "features/software-catalog/software-catalog-api" diff --git a/mkdocs.yml b/mkdocs.yml index 10cd7df9b2..d2a844b571 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -30,6 +30,7 @@ nav: - Overview: 'features/software-catalog/index.md' - System model: 'features/software-catalog/system-model.md' - YAML File Format: 'features/software-catalog/descriptor-format.md' + - Well-known Annotations: 'features/software-catalog/well-known-annotations.md' - Configuration: 'features/software-catalog/configuration.md' - Extending the model: 'features/software-catalog/extending-the-model.md' - External integrations: 'features/software-catalog/external-integrations.md' From f90d645461bf82f5745c262e042671c6b04cb362 Mon Sep 17 00:00:00 2001 From: Fabian Chong Date: Mon, 14 Sep 2020 15:50:18 +0800 Subject: [PATCH 150/303] fix plugin:diff --- .../cli/src/commands/create-plugin/createPlugin.ts | 10 +++++----- packages/cli/src/commands/plugin/diff.ts | 2 ++ packages/cli/templates/default-plugin/package.json.hbs | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/commands/create-plugin/createPlugin.ts b/packages/cli/src/commands/create-plugin/createPlugin.ts index 398009ca8f..f022f4fe9e 100644 --- a/packages/cli/src/commands/create-plugin/createPlugin.ts +++ b/packages/cli/src/commands/create-plugin/createPlugin.ts @@ -224,7 +224,7 @@ export default async (cmd: Command) => { } const answers: Answers = await inquirer.prompt(questions); - const packageName = cmd.scope + const name = cmd.scope ? `@${cmd.scope.replace(/^@/, '')}/plugin-${answers.id}` : `plugin-${answers.id}`; const scopeName = cmd.scope ? `@${cmd.scope.replace(/^@/, '')}` : ''; @@ -261,7 +261,7 @@ export default async (cmd: Command) => { version, backstageVersion, scopeName, - packageName, + name, privatePackage, registryURL, }); @@ -274,10 +274,10 @@ export default async (cmd: Command) => { if (await fs.pathExists(appPackage)) { Task.section('Adding plugin as dependency in app'); - await addPluginDependencyToApp(paths.targetRoot, packageName, version); + await addPluginDependencyToApp(paths.targetRoot, name, version); Task.section('Import plugin in app'); - await addPluginToApp(paths.targetRoot, answers.id, packageName); + await addPluginToApp(paths.targetRoot, answers.id, name); } if (ownerIds && ownerIds.length) { @@ -289,7 +289,7 @@ export default async (cmd: Command) => { } Task.log(); - Task.log(`🥇 Successfully created ${chalk.cyan(`${packageName}`)}`); + Task.log(`🥇 Successfully created ${chalk.cyan(`${name}`)}`); Task.log(); Task.exit(); } catch (error) { diff --git a/packages/cli/src/commands/plugin/diff.ts b/packages/cli/src/commands/plugin/diff.ts index 99af093f2c..064c72c448 100644 --- a/packages/cli/src/commands/plugin/diff.ts +++ b/packages/cli/src/commands/plugin/diff.ts @@ -65,9 +65,11 @@ export default async (cmd: Command) => { const { version } = await fs.readJson(paths.resolveTargetRoot('lerna.json')); const data = await readPluginData(); + const privatePackage = false; const templateFiles = await diffTemplateFiles('default-plugin', { version, backstageVersion, + privatePackage, ...data, }); await handleAllFiles(fileHandlers, templateFiles, promptFunc); diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index 251521e0c7..ed1a56d605 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -1,5 +1,5 @@ { - "name": "{{packageName}}", + "name": "{{name}}", "version": "{{version}}", "main": "src/index.ts", "types": "src/index.ts", From 6cc089abaebec7b64a74a1966fab3d6b7785c0d4 Mon Sep 17 00:00:00 2001 From: Fabian Chong Date: Mon, 14 Sep 2020 15:56:52 +0800 Subject: [PATCH 151/303] remove console.log --- packages/cli/src/commands/create-plugin/createPlugin.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/cli/src/commands/create-plugin/createPlugin.ts b/packages/cli/src/commands/create-plugin/createPlugin.ts index f022f4fe9e..8c2a9eeb98 100644 --- a/packages/cli/src/commands/create-plugin/createPlugin.ts +++ b/packages/cli/src/commands/create-plugin/createPlugin.ts @@ -240,8 +240,6 @@ export default async (cmd: Command) => { const pluginDir = (await fs.pathExists(paths.resolveTargetRoot('lerna.json'))) ? paths.resolveTargetRoot('plugins', answers.id) : paths.resolveTargetRoot(answers.id); - console.log(await paths.resolveTargetRoot('lerna.json')); - console.log(await pluginDir); const ownerIds = parseOwnerIds(answers.owner); const version = backstageVersion; From 9888418d413fef92cd7b878169c93bed7ae29dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 14 Sep 2020 16:43:20 +0200 Subject: [PATCH 152/303] missing yarn.lock updates again (#2456) * missing yarn.lock updates again * yarn.lock: sync the sync Co-authored-by: Patrik Oldsberg --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 11bb8a3fd8..38f5d6c799 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17550,7 +17550,7 @@ react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-i resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-lazylog@^4.5.2: +react-lazylog@^4.5.2, react-lazylog@^4.5.3: version "4.5.3" resolved "https://registry.npmjs.org/react-lazylog/-/react-lazylog-4.5.3.tgz#289e24995b5599e75943556ac63f5e2c04d0001e" integrity sha512-lyov32A/4BqihgXgtNXTHCajXSXkYHPlIEmV8RbYjHIMxCFSnmtdg4kDCI3vATz7dURtiFTvrw5yonHnrS+NNg== From 398d7eb91ef5764ad0d56371bbb2ce537ef9a1ba Mon Sep 17 00:00:00 2001 From: Sebastian Qvarfordt Date: Mon, 14 Sep 2020 16:57:37 +0200 Subject: [PATCH 153/303] TechDocs: Fix building if you already have a corrupt git tmp folder (#2457) * Fix building if you already have a corrupt git tmp folder * Logging the error we get before trying to recover --- plugins/techdocs-backend/src/helpers.ts | 33 ++++++++++++++----- .../techdocs-backend/src/service/helpers.ts | 2 +- .../src/techdocs/stages/prepare/dir.ts | 5 ++- .../src/techdocs/stages/prepare/github.ts | 2 +- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/plugins/techdocs-backend/src/helpers.ts b/plugins/techdocs-backend/src/helpers.ts index 25d7f593c2..14f4d490ba 100644 --- a/plugins/techdocs-backend/src/helpers.ts +++ b/plugins/techdocs-backend/src/helpers.ts @@ -24,6 +24,7 @@ import defaultBranch from 'default-branch'; import { Entity } from '@backstage/catalog-model'; import { InputError } from '@backstage/backend-common'; import { RemoteProtocol } from './techdocs/stages/prepare/types'; +import { Logger } from 'winston'; export type ParsedLocationAnnotation = { type: RemoteProtocol; @@ -110,6 +111,7 @@ export const getGitHubRepositoryTempFolder = async ( export const checkoutGithubRepository = async ( repoUrl: string, + logger: Logger, ): Promise => { const parsedGitLocation = parseGitUrl(repoUrl); const repositoryTmpPath = await getGitHubRepositoryTempFolder(repoUrl); @@ -119,14 +121,23 @@ export const checkoutGithubRepository = async ( const token = process.env.GITHUB_PRIVATE_TOKEN || ''; if (fs.existsSync(repositoryTmpPath)) { - const repository = await Repository.open(repositoryTmpPath); - const currentBranchName = (await repository.getCurrentBranch()).shorthand(); - await repository.fetch('origin'); - await repository.mergeBranches( - currentBranchName, - `origin/${currentBranchName}`, - ); - return repositoryTmpPath; + try { + const repository = await Repository.open(repositoryTmpPath); + const currentBranchName = ( + await repository.getCurrentBranch() + ).shorthand(); + await repository.fetch('origin'); + await repository.mergeBranches( + currentBranchName, + `origin/${currentBranchName}`, + ); + return repositoryTmpPath; + } catch (e) { + logger.info( + `Found error "${e.message}" in cached repository "${repoUrl}" when getting latest changes. Removing cached repository.`, + ); + fs.removeSync(repositoryTmpPath); + } } if (user && token) { @@ -143,8 +154,12 @@ export const checkoutGithubRepository = async ( export const getLastCommitTimestamp = async ( repositoryUrl: string, + logger: Logger, ): Promise => { - const repositoryLocation = await checkoutGithubRepository(repositoryUrl); + const repositoryLocation = await checkoutGithubRepository( + repositoryUrl, + logger, + ); const repository = await Repository.open(repositoryLocation); const commit = await repository.getReferenceCommit('HEAD'); diff --git a/plugins/techdocs-backend/src/service/helpers.ts b/plugins/techdocs-backend/src/service/helpers.ts index 0fc4f41b3d..60c76e6384 100644 --- a/plugins/techdocs-backend/src/service/helpers.ts +++ b/plugins/techdocs-backend/src/service/helpers.ts @@ -110,7 +110,7 @@ export class DocsBuilder { // Should probably be broken out and handled per type later. Doing this for now since we only support github age checks if (type === 'github') { - const lastCommit = await getLastCommitTimestamp(target); + const lastCommit = await getLastCommitTimestamp(target, this.logger); const storageTimeStamp = buildMetadataStorage.getTimestamp(); // Check if documentation source is newer than what we have diff --git a/plugins/techdocs-backend/src/techdocs/stages/prepare/dir.ts b/plugins/techdocs-backend/src/techdocs/stages/prepare/dir.ts index a9eda943c6..5fd4abb4bd 100644 --- a/plugins/techdocs-backend/src/techdocs/stages/prepare/dir.ts +++ b/plugins/techdocs-backend/src/techdocs/stages/prepare/dir.ts @@ -43,7 +43,10 @@ export class DirectoryPreparer implements PreparerBase { switch (type) { case 'github': { const parsedGitLocation = parseGitUrl(target); - const repoLocation = await checkoutGithubRepository(target); + const repoLocation = await checkoutGithubRepository( + target, + this.logger, + ); return path.dirname( path.join(repoLocation, parsedGitLocation.filepath), diff --git a/plugins/techdocs-backend/src/techdocs/stages/prepare/github.ts b/plugins/techdocs-backend/src/techdocs/stages/prepare/github.ts index 7b9fc7fbe2..03b0adcb88 100644 --- a/plugins/techdocs-backend/src/techdocs/stages/prepare/github.ts +++ b/plugins/techdocs-backend/src/techdocs/stages/prepare/github.ts @@ -43,7 +43,7 @@ export class GithubPreparer implements PreparerBase { } try { - const repoPath = await checkoutGithubRepository(target); + const repoPath = await checkoutGithubRepository(target, this.logger); const parsedGitLocation = parseGitUrl(target); return path.join(repoPath, parsedGitLocation.filepath); From b86d408fa7eb4bc79dd71fd6036ea4a7beea3a89 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 14 Sep 2020 17:06:29 +0200 Subject: [PATCH 154/303] plugins/newrelic: make public --- plugins/newrelic/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 9c9d609c04..38a47bc0fc 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -4,7 +4,7 @@ "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", - "private": true, + "private": false, "publishConfig": { "access": "public", "main": "dist/index.esm.js", From d36f3bc5d84874372192efab33568e723374f3f6 Mon Sep 17 00:00:00 2001 From: David Tuite Date: Tue, 15 Sep 2020 05:42:13 +0100 Subject: [PATCH 155/303] Assorted scaffolder form help text improvements (#2467) * Prompt the user for a description in templates The text "Description of the component" was a little redundant since the label already says "Description". This description text hints to the user why they should bother adding an informative description. * Inform user about lowercase, url-safe constraint Create React App scaffolding fails when a name with spaces or other non-url-safe chars are provided. Instead of making the user wait for a failure, Backstage should tell them about this constraint up front. --- .../sample-templates/create-react-app/template.yaml | 4 ++-- .../sample-templates/docs-template/template.yaml | 2 +- .../sample-templates/react-ssr-template/template.yaml | 2 +- .../sample-templates/springboot-grpc-template/template.yaml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/scaffolder-backend/sample-templates/create-react-app/template.yaml b/plugins/scaffolder-backend/sample-templates/create-react-app/template.yaml index a377d60ccc..2c8b3b3d6d 100644 --- a/plugins/scaffolder-backend/sample-templates/create-react-app/template.yaml +++ b/plugins/scaffolder-backend/sample-templates/create-react-app/template.yaml @@ -22,11 +22,11 @@ spec: component_id: title: Name type: string - description: Unique name of the component + description: Unique name of the component. Lowercase, URL-safe characters only. description: title: Description type: string - description: Description of the component + description: Help others understand what this website is for. use_typescript: title: Use Typescript type: boolean diff --git a/plugins/scaffolder-backend/sample-templates/docs-template/template.yaml b/plugins/scaffolder-backend/sample-templates/docs-template/template.yaml index 65d44d1b8a..b4bd45d163 100644 --- a/plugins/scaffolder-backend/sample-templates/docs-template/template.yaml +++ b/plugins/scaffolder-backend/sample-templates/docs-template/template.yaml @@ -25,5 +25,5 @@ spec: description: title: Description type: string - description: Description of the component + description: Help others understand what these docs are about. diff --git a/plugins/scaffolder-backend/sample-templates/react-ssr-template/template.yaml b/plugins/scaffolder-backend/sample-templates/react-ssr-template/template.yaml index ee051de6e0..a667e6e6b6 100644 --- a/plugins/scaffolder-backend/sample-templates/react-ssr-template/template.yaml +++ b/plugins/scaffolder-backend/sample-templates/react-ssr-template/template.yaml @@ -24,4 +24,4 @@ spec: description: title: Description type: string - description: Description of the component + description: Help others understand what this website is for. diff --git a/plugins/scaffolder-backend/sample-templates/springboot-grpc-template/template.yaml b/plugins/scaffolder-backend/sample-templates/springboot-grpc-template/template.yaml index 32b9383855..8b89298a0e 100644 --- a/plugins/scaffolder-backend/sample-templates/springboot-grpc-template/template.yaml +++ b/plugins/scaffolder-backend/sample-templates/springboot-grpc-template/template.yaml @@ -25,7 +25,7 @@ spec: description: title: Description type: string - description: Description of the component + description: Help others understand what this service does. http_port: title: Port type: integer From 111fbb9e0fcea84532e63838a9d09232478c357d Mon Sep 17 00:00:00 2001 From: Fabian Chong Date: Tue, 15 Sep 2020 13:30:18 +0800 Subject: [PATCH 156/303] fix plugin:diff --- .../commands/create-plugin/createPlugin.ts | 8 ++++---- packages/cli/src/commands/plugin/diff.ts | 20 +++++++++++++------ .../templates/default-plugin/package.json.hbs | 3 ++- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/packages/cli/src/commands/create-plugin/createPlugin.ts b/packages/cli/src/commands/create-plugin/createPlugin.ts index 8c2a9eeb98..8241f68b8c 100644 --- a/packages/cli/src/commands/create-plugin/createPlugin.ts +++ b/packages/cli/src/commands/create-plugin/createPlugin.ts @@ -228,10 +228,10 @@ export default async (cmd: Command) => { ? `@${cmd.scope.replace(/^@/, '')}/plugin-${answers.id}` : `plugin-${answers.id}`; const scopeName = cmd.scope ? `@${cmd.scope.replace(/^@/, '')}` : ''; - const registryURL = + const npmRegistry = cmd.npmRegistry && cmd.scope - ? `"${scopeName}:registry": "${cmd.npmRegistry}",` - : null; + ? `"${scopeName}:registry": "${cmd.npmRegistry}"` + : ''; const privatePackage = cmd.private === false ? false : true; const appPackage = paths.resolveTargetRoot('packages/app'); @@ -261,7 +261,7 @@ export default async (cmd: Command) => { scopeName, name, privatePackage, - registryURL, + npmRegistry, }); Task.section('Moving to final location'); diff --git a/packages/cli/src/commands/plugin/diff.ts b/packages/cli/src/commands/plugin/diff.ts index 064c72c448..f5dfa670b7 100644 --- a/packages/cli/src/commands/plugin/diff.ts +++ b/packages/cli/src/commands/plugin/diff.ts @@ -30,6 +30,9 @@ import { version as backstageVersion } from '../../lib/version'; export type PluginData = { id: string; name: string; + privatePackage: string; + version: string; + npmRegistry: string; }; const fileHandlers = [ @@ -62,14 +65,9 @@ export default async (cmd: Command) => { promptFunc = yesPromptFunc; } - const { version } = await fs.readJson(paths.resolveTargetRoot('lerna.json')); - const data = await readPluginData(); - const privatePackage = false; const templateFiles = await diffTemplateFiles('default-plugin', { - version, backstageVersion, - privatePackage, ...data, }); await handleAllFiles(fileHandlers, templateFiles, promptFunc); @@ -79,9 +77,19 @@ export default async (cmd: Command) => { // Reads templating data from the existing plugin async function readPluginData(): Promise { let name: string; + let privatePackage: string; + let version: string; + let npmRegistry: string; try { const pkg = require(paths.resolveTarget('package.json')); name = pkg.name; + privatePackage = pkg.private; + version = pkg.version; + const scope = name.split('/')[0]; + if (`${scope}:registry` in pkg.publishConfig) { + const registryURL = pkg.publishConfig[`${scope}:registry`]; + npmRegistry = `"${scope}:registry" : "${registryURL}"`; + } else npmRegistry = ''; } catch (error) { throw new Error(`Failed to read target package, ${error}`); } @@ -98,5 +106,5 @@ async function readPluginData(): Promise { const id = pluginIdMatch[1]; - return { id, name }; + return { id, name, privatePackage, version, npmRegistry }; } diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index ed1a56d605..1a969f9712 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -6,7 +6,8 @@ "license": "Apache-2.0", "private": {{privatePackage}}, "publishConfig": { - {{{registryURL}}} +{{#if npmRegistry}} {{{npmRegistry}}}, +{{/if}} "access": "public", "main": "dist/index.esm.js", "types": "dist/index.d.ts" From fdef95557017e324edb468c21c79d77c0288d2d3 Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Sat, 12 Sep 2020 21:27:26 +0100 Subject: [PATCH 157/303] scaffolder: Add support for granting access on create --- .../__mocks__/@octokit/rest/index.ts | 4 ++ .../scaffolder/stages/publish/github.test.ts | 49 ++++++++++++++++++- .../src/scaffolder/stages/publish/github.ts | 22 +++++++++ .../components/TemplatePage/TemplatePage.tsx | 7 ++- 4 files changed, 80 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts b/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts index a302bc5931..e0e9efa479 100644 --- a/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/__mocks__/@octokit/rest/index.ts @@ -18,10 +18,14 @@ export const mockGithubClient = { repos: { createInOrg: jest.fn(), createForAuthenticatedUser: jest.fn(), + addCollaborator: jest.fn(), }, users: { getByUsername: jest.fn(), }, + teams: { + addOrUpdateRepoPermissionsInOrg: jest.fn(), + }, }; export class Octokit { diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts index 718c01438c..86effd0ea5 100644 --- a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.test.ts @@ -30,6 +30,7 @@ const { mockGithubClient } = require('@octokit/rest') as { mockGithubClient: { repos: jest.Mocked; users: jest.Mocked; + teams: jest.Mocked; }; }; @@ -76,6 +77,7 @@ describe('GitHub Publisher', () => { values: { storePath: 'blam/test', owner: 'bob', + access: 'blam/team', }, directory: '/tmp/test', }); @@ -84,6 +86,15 @@ describe('GitHub Publisher', () => { org: 'blam', name: 'test', }); + expect( + mockGithubClient.teams.addOrUpdateRepoPermissionsInOrg, + ).toHaveBeenCalledWith({ + org: 'blam', + team_slug: 'team', + owner: 'blam', + repo: 'test', + permission: 'admin', + }); }); it('should use octokit to create a repo in the authed user if the organisation property is not set', async () => { @@ -102,6 +113,7 @@ describe('GitHub Publisher', () => { values: { storePath: 'blam/test', owner: 'bob', + access: 'blam', }, directory: '/tmp/test', }); @@ -111,14 +123,49 @@ describe('GitHub Publisher', () => { ).toHaveBeenCalledWith({ name: 'test', }); + expect(mockGithubClient.repos.addCollaborator).not.toHaveBeenCalled(); + }); + }); + + it('should invite other user in the authed user', async () => { + mockGithubClient.repos.createForAuthenticatedUser.mockResolvedValue({ + data: { + clone_url: 'mockclone', + }, + } as OctokitResponse); + mockGithubClient.users.getByUsername.mockResolvedValue({ + data: { + type: 'User', + }, + } as OctokitResponse); + + await publisher.publish({ + values: { + storePath: 'blam/test', + owner: 'bob', + access: 'bob', + }, + directory: '/tmp/test', + }); + + expect( + mockGithubClient.repos.createForAuthenticatedUser, + ).toHaveBeenCalledWith({ + name: 'test', + }); + expect(mockGithubClient.repos.addCollaborator).toHaveBeenCalledWith({ + owner: 'blam', + repo: 'test', + username: 'bob', + permission: 'admin', }); }); describe('publish: createGitDirectory', () => { const values = { - isOrg: true, storePath: 'blam/test', owner: 'lols', + access: 'lols', }; const mockDir = '/tmp/test/dir'; diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts index f3306e3662..09cb720ebe 100644 --- a/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts +++ b/plugins/scaffolder-backend/src/scaffolder/stages/publish/github.ts @@ -44,6 +44,7 @@ export class GithubPublisher implements PublisherBase { values: RequiredTemplateValues & Record, ) { const [owner, name] = values.storePath.split('/'); + const access = values.access as string; const user = await this.client.users.getByUsername({ username: owner }); @@ -54,6 +55,27 @@ export class GithubPublisher implements PublisherBase { const { data } = await repoCreationPromise; + if (access.match(new RegExp(`${owner}/.+`))) { + const [, team] = access.split('/'); + await this.client.teams.addOrUpdateRepoPermissionsInOrg({ + org: owner, + team_slug: team, + owner, + repo: name, + permission: 'admin', + }); + } else { + // no need to add access if it's the person who own's the personal account + if (access !== owner) { + await this.client.repos.addCollaborator({ + owner, + repo: name, + username: access, + permission: 'admin', + }); + } + } + return data?.clone_url; } diff --git a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx index 1ed0504894..60f74e4cbe 100644 --- a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx +++ b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx @@ -54,7 +54,7 @@ const useTemplate = ( const OWNER_REPO_SCHEMA = { $schema: 'http://json-schema.org/draft-07/schema#' as const, - required: ['storePath', 'owner'], + required: ['storePath', 'owner', 'access'], properties: { owner: { type: 'string' as const, @@ -67,6 +67,11 @@ const OWNER_REPO_SCHEMA = { title: 'Store path', description: 'GitHub store path in org/repo format', }, + access: { + type: 'string' as const, + title: 'Access', + description: 'Who should have access, in user or owner/team format', + }, }, }; From 06b2c9ea6e92acd0ac517aad8e84b89310500728 Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Tue, 15 Sep 2020 08:42:41 +0100 Subject: [PATCH 158/303] Add docs link --- packages/create-app/templates/default-app/app-config.yaml.hbs | 1 + 1 file changed, 1 insertion(+) 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 062b9b2e60..424b461392 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -30,6 +30,7 @@ backend: password: $secret: env: POSTGRES_PASSWORD + # https://node-postgres.com/features/ssl ssl: #ca: # if you have a CA file and want to verify it you can uncomment this section # $secret: From ec39c956a408a69cfc1a6e1081190db3dd1239ff Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Tue, 15 Sep 2020 08:42:54 +0100 Subject: [PATCH 159/303] Restore app-config.yaml.hbs --- .../create-app/templates/default-app/app-config.yaml.hbs | 7 ------- 1 file changed, 7 deletions(-) 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 424b461392..bdd933e810 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -30,13 +30,6 @@ backend: password: $secret: env: POSTGRES_PASSWORD - # https://node-postgres.com/features/ssl - ssl: - #ca: # if you have a CA file and want to verify it you can uncomment this section - # $secret: - # file: /ca/server.crt - $secret: - env: POSTGRES_SSL_OPTIONS {{/if}} proxy: From cccdf8d32ae36888dd3cf162dc4885e9177c6d5b Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Tue, 15 Sep 2020 08:43:59 +0100 Subject: [PATCH 160/303] Revert "Restore app-config.yaml.hbs" This reverts commit ec39c956a408a69cfc1a6e1081190db3dd1239ff. --- .../create-app/templates/default-app/app-config.yaml.hbs | 7 +++++++ 1 file changed, 7 insertions(+) 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 bdd933e810..424b461392 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -30,6 +30,13 @@ backend: password: $secret: env: POSTGRES_PASSWORD + # https://node-postgres.com/features/ssl + ssl: + #ca: # if you have a CA file and want to verify it you can uncomment this section + # $secret: + # file: /ca/server.crt + $secret: + env: POSTGRES_SSL_OPTIONS {{/if}} proxy: From 563d3b004dda157a5811524076bc738c0a8defb8 Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Tue, 15 Sep 2020 08:44:59 +0100 Subject: [PATCH 161/303] Update app-config.yaml.hbs --- packages/create-app/templates/default-app/app-config.yaml.hbs | 1 + 1 file changed, 1 insertion(+) 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 424b461392..16a4fbaae5 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -15,6 +15,7 @@ backend: connection: ':memory:' {{/if}} {{#if dbTypePG}} + # config options: https://node-postgres.com/api/client database: client: pg connection: From 4fc24933b1e425045261a093817c2d72ead989c7 Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Tue, 15 Sep 2020 09:04:48 +0100 Subject: [PATCH 162/303] Update packages/create-app/templates/default-app/app-config.yaml.hbs --- packages/create-app/templates/default-app/app-config.yaml.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 16a4fbaae5..57091b3d3a 100644 --- a/packages/create-app/templates/default-app/app-config.yaml.hbs +++ b/packages/create-app/templates/default-app/app-config.yaml.hbs @@ -37,7 +37,7 @@ backend: # $secret: # file: /ca/server.crt $secret: - env: POSTGRES_SSL_OPTIONS + env: POSTGRES_SSL_OPTIONS # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions {{/if}} proxy: From 57ae0825d80c1688630abd61b7a070e99f2ce8bd Mon Sep 17 00:00:00 2001 From: David Tuite Date: Tue, 15 Sep 2020 14:00:23 +0100 Subject: [PATCH 163/303] Fix scaffolder catalog link (#2471) This was incorrectly linking to a relative path which ended up being something like `/create/docs-template/Component/my-component`. --- .../scaffolder/src/components/JobStatusModal/JobStatusModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder/src/components/JobStatusModal/JobStatusModal.tsx b/plugins/scaffolder/src/components/JobStatusModal/JobStatusModal.tsx index 102e93f91d..87b70a9553 100644 --- a/plugins/scaffolder/src/components/JobStatusModal/JobStatusModal.tsx +++ b/plugins/scaffolder/src/components/JobStatusModal/JobStatusModal.tsx @@ -72,7 +72,7 @@ export const JobStatusModal = ({ {entity && (