1
mirror of https://github.com/jakejarvis/jarv.is.git synced 2025-10-30 03:56:01 -04:00

use @octokit/graphql instead of plain graphql for /api/projects

This commit is contained in:
2021-07-14 07:26:07 -04:00
parent 38ba41ca0b
commit 9c26cd7bff
9 changed files with 270 additions and 227 deletions

View File

@@ -1,19 +1,17 @@
/// <reference types="./types/hits" />
import * as Sentry from "@sentry/node";
import * as Tracing from "@sentry/tracing"; // eslint-disable-line @typescript-eslint/no-unused-vars
import { VercelRequest, VercelResponse } from "@vercel/node";
import { Client, query as q } from "faunadb";
import fetch from "node-fetch";
import parser from "fast-xml-parser";
import { decode } from "html-entities";
import type { PageStats, OverallStats } from "./types/hits";
const baseUrl = "https://jarv.is/";
Sentry.init({
dsn: process.env.SENTRY_DSN || "",
environment: process.env.NODE_ENV || process.env.VERCEL_ENV || process.env.SENTRY_ENVIRONMENT || "",
tracesSampleRate: 1.0,
});
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types

View File

@@ -1,19 +1,13 @@
/// <reference types="./types/projects" />
import * as Sentry from "@sentry/node";
import * as Tracing from "@sentry/tracing"; // eslint-disable-line @typescript-eslint/no-unused-vars
import { VercelRequest, VercelResponse } from "@vercel/node";
import { graphql, GraphQlQueryResponseData } from "@octokit/graphql";
import { encode } from "html-entities";
import { GraphQLClient } from "graphql-request";
import { gql } from "graphql-tag";
const username = "jakejarvis";
const endpoint = "https://api.github.com/graphql";
import type { Repository } from "./types/projects";
Sentry.init({
dsn: process.env.SENTRY_DSN || "",
environment: process.env.NODE_ENV || process.env.VERCEL_ENV || process.env.SENTRY_ENVIRONMENT || "",
tracesSampleRate: 1.0,
});
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
@@ -27,19 +21,21 @@ export default async (req: VercelRequest, res: VercelResponse) => {
throw new Error("GitHub API credentials aren't set.");
}
// default to latest repos
let sortBy = "PUSHED_AT";
// get most popular repos (/projects/?top)
if (typeof req.query.top !== "undefined") sortBy = "STARGAZERS";
const repos = await fetchRepos(sortBy, 16);
let result;
if (typeof req.query.top !== "undefined") {
// get most popular repos (/projects/?top)
result = await fetchRepos("STARGAZERS");
} else {
// default to latest repos
result = await fetchRepos("PUSHED_AT");
}
// let Vercel edge and browser cache results for 15 mins
res.setHeader("Cache-Control", "public, max-age=900, s-maxage=900, stale-while-revalidate");
res.setHeader("Access-Control-Allow-Methods", "GET");
res.setHeader("Access-Control-Allow-Origin", "*");
res.status(200).json(repos);
res.status(200).json(result);
} catch (error) {
console.error(error);
@@ -52,58 +48,53 @@ export default async (req: VercelRequest, res: VercelResponse) => {
}
};
const fetchRepos = async (sort: string, limit: number): Promise<Repository[]> => {
// https://docs.github.com/en/graphql/guides/forming-calls-with-graphql
const client = new GraphQLClient(endpoint, {
headers: {
Authorization: `Bearer ${process.env.GH_PUBLIC_TOKEN}`,
Accept: "application/vnd.github.v3+json",
},
});
const fetchRepos = async (sort: string): Promise<Repository[]> => {
// https://docs.github.com/en/graphql/reference/objects#repository
const query = gql`
query ($sort: String, $limit: Int) {
user(login: "${username}") {
repositories(
first: $limit,
isLocked: false,
isFork: false,
ownerAffiliations: OWNER,
privacy: PUBLIC,
orderBy: {
field: $sort,
direction: DESC
}
) {
edges {
node {
name
url
description
pushedAt
stargazerCount
forkCount
primaryLanguage {
const { user } = await graphql<GraphQlQueryResponseData>(
`
query ($username: String!, $sort: String, $limit: Int) {
user(login: $username) {
repositories(
first: $limit
isLocked: false
isFork: false
ownerAffiliations: OWNER
privacy: PUBLIC
orderBy: { field: $sort, direction: DESC }
) {
edges {
node {
name
color
url
description
pushedAt
stargazerCount
forkCount
primaryLanguage {
name
color
}
}
}
}
}
}
`,
{
username: "jakejarvis",
limit: 16,
sort: sort,
headers: {
authorization: `token ${process.env.GH_PUBLIC_TOKEN}`,
},
}
`;
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const response = await client.request(query, { sort, limit });
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
const currentRepos: Repository[] = response.user.repositories.edges.map(
({ node: repo }: { [key: string]: Repository }) => ({
...repo,
description: encode(repo.description),
})
);
return currentRepos;
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
const repos: Repository[] = user.repositories.edges.map(({ node: repo }: { [key: string]: Repository }) => ({
...repo,
description: encode(repo.description),
}));
return repos;
};

View File

@@ -1,14 +1,13 @@
/// <reference types="./types/tracks" />
// Fetches my Spotify most-played tracks or currently playing track.
// Heavily inspired by @leerob: https://leerob.io/snippets/spotify
import * as Sentry from "@sentry/node";
import * as Tracing from "@sentry/tracing"; // eslint-disable-line @typescript-eslint/no-unused-vars
import { VercelRequest, VercelResponse } from "@vercel/node";
import fetch from "node-fetch";
import * as queryString from "query-string";
import type { Track, TrackSchema, Activity } from "./types/tracks";
const { SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET, SPOTIFY_REFRESH_TOKEN } = process.env;
const basic = Buffer.from(`${SPOTIFY_CLIENT_ID}:${SPOTIFY_CLIENT_SECRET}`).toString("base64");
@@ -23,7 +22,6 @@ const TOP_TRACKS_ENDPOINT = `https://api.spotify.com/v1/me/top/tracks?time_range
Sentry.init({
dsn: process.env.SENTRY_DSN || "",
environment: process.env.NODE_ENV || process.env.VERCEL_ENV || process.env.SENTRY_ENVIRONMENT || "",
tracesSampleRate: 1.0,
});
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
@@ -104,20 +102,13 @@ const getNowPlaying = async (): Promise<Track> => {
const active: Activity = await response.json();
if (active.is_playing === true && active.item) {
const isPlaying = active.is_playing;
const artist = active.item.artists.map((_artist) => _artist.name).join(", ");
const title = active.item.name;
const album = active.item.album.name;
const imageUrl = active.item.album.images[0].url;
const songUrl = active.item.external_urls.spotify;
return {
isPlaying,
artist,
title,
album,
imageUrl,
songUrl,
isPlaying: active.is_playing,
artist: active.item.artists.map((_artist) => _artist.name).join(", "),
title: active.item.name,
album: active.item.album.name,
imageUrl: active.item.album.images[0].url,
songUrl: active.item.external_urls.spotify,
};
} else {
return { isPlaying: false };

8
api/types/hits.d.ts vendored
View File

@@ -1,12 +1,12 @@
type PageStats = {
export type PageStats = {
slug: string;
hits: number;
title?: string;
url?: string;
date?: string;
slug: string;
hits: number;
};
type OverallStats = {
export type OverallStats = {
total: {
hits: number;
};

View File

@@ -1,11 +1,10 @@
type Repository = {
import type { Language } from "@octokit/graphql-schema";
export type Repository = {
name: string;
url: string;
description: string;
primaryLanguage?: {
color: string;
name: string;
};
primaryLanguage?: Language;
stargazerCount: number;
forkCount: number;
pushedAt: string;

View File

@@ -1,4 +1,4 @@
type TrackSchema = {
export type TrackSchema = {
name: string;
artists: Array<{
name: string;
@@ -15,7 +15,7 @@ type TrackSchema = {
};
};
type Track = {
export type Track = {
isPlaying: boolean;
artist?: string;
title?: string;
@@ -24,7 +24,7 @@ type Track = {
songUrl?: string;
};
type Activity = {
export type Activity = {
is_playing: boolean;
item?: TrackSchema;
};

View File

@@ -32,8 +32,9 @@
"@fontsource/comic-neue": "4.5.0",
"@fontsource/inter": "4.5.0",
"@fontsource/roboto-mono": "4.5.0",
"@sentry/node": "^6.8.0",
"@sentry/tracing": "^6.8.0",
"@octokit/graphql": "^4.6.4",
"@octokit/graphql-schema": "^10.53.0",
"@sentry/node": "^6.9.0",
"cross-fetch": "3.1.4",
"dayjs": "1.10.6",
"dotenv": "^10.0.0",
@@ -58,14 +59,14 @@
"@types/node-fetch": "^2.5.11",
"@types/numeral": "^2.0.1",
"@types/twemoji": "^12.1.2",
"@typescript-eslint/eslint-plugin": "^4.28.2",
"@typescript-eslint/parser": "^4.28.2",
"@typescript-eslint/eslint-plugin": "^4.28.3",
"@typescript-eslint/parser": "^4.28.3",
"@vercel/node": "^1.11.1",
"autoprefixer": "^10.3.0",
"autoprefixer": "^10.3.1",
"babel-loader": "^8.2.2",
"clean-css": "^5.1.3",
"copy-webpack-plugin": "^9.0.1",
"css-loader": "^5.2.6",
"css-loader": "^5.2.7",
"css-minimizer-webpack-plugin": "^3.0.2",
"del": "^6.0.0",
"eslint": "~7.30.0",
@@ -80,7 +81,7 @@
"gulp-html-minifier-terser": "^6.0.1",
"gulp-imagemin": "^7.1.0",
"hugo-extended": "0.84.3",
"lint-staged": "^11.0.0",
"lint-staged": "^11.0.1",
"markdownlint-cli": "~0.27.1",
"mini-css-extract-plugin": "^2.1.0",
"npm-run-all": "^4.1.5",
@@ -107,7 +108,6 @@
"stylelint-scss": "~3.19.0",
"terser": "^5.7.1",
"terser-webpack-plugin": "^5.1.4",
"tslib": "^2.3.0",
"typescript": "^4.3.5",
"webpack": "^5.44.0",
"webpack-assets-manifest": "^5.0.6",

View File

@@ -3,19 +3,14 @@
"target": "esnext",
"lib": [
"esnext",
"es2020"
"es2018"
],
"module": "es2020",
"module": "commonjs",
"moduleResolution": "node",
"importHelpers": true,
"esModuleInterop": true,
"isolatedModules": true,
"alwaysStrict": true,
"strict": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noEmit": true,
"noImplicitReturns": true,
"noImplicitThis": true,

309
yarn.lock
View File

@@ -1005,72 +1005,131 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
"@sentry/core@6.8.0":
version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.8.0.tgz#bfac76844deee9126460c18dc6166015992efdc3"
integrity sha512-vJzWt/znEB+JqVwtwfjkRrAYRN+ep+l070Ti8GhJnvwU4IDtVlV3T/jVNrj6rl6UChcczaJQMxVxtG5x0crlAA==
"@octokit/endpoint@^6.0.1":
version "6.0.12"
resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658"
integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==
dependencies:
"@sentry/hub" "6.8.0"
"@sentry/minimal" "6.8.0"
"@sentry/types" "6.8.0"
"@sentry/utils" "6.8.0"
"@octokit/types" "^6.0.3"
is-plain-object "^5.0.0"
universal-user-agent "^6.0.0"
"@octokit/graphql-schema@^10.53.0":
version "10.53.0"
resolved "https://registry.yarnpkg.com/@octokit/graphql-schema/-/graphql-schema-10.53.0.tgz#3095f1e2c4533ab102d13e184a6ae36dce2db49e"
integrity sha512-rClyCtBsxF0qFReGY8TW3UPQREKDjlOnm+6MPNo1tfFO68qd/o8TlPnpm/rHZVYg8Djnse5IRSt71PJboPvAaA==
dependencies:
graphql "^15.0.0"
graphql-tag "^2.10.3"
"@octokit/graphql@^4.6.4":
version "4.6.4"
resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.4.tgz#0c3f5bed440822182e972317122acb65d311a5ed"
integrity sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==
dependencies:
"@octokit/request" "^5.6.0"
"@octokit/types" "^6.0.3"
universal-user-agent "^6.0.0"
"@octokit/openapi-types@^8.3.0":
version "8.3.0"
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-8.3.0.tgz#8bc912edae8c03e002882cf1e29b595b7da9b441"
integrity sha512-ZFyQ30tNpoATI7o+Z9MWFUzUgWisB8yduhcky7S4UYsRijgIGSnwUKzPBDGzf/Xkx1DuvUtqzvmuFlDSqPJqmQ==
"@octokit/request-error@^2.1.0":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677"
integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==
dependencies:
"@octokit/types" "^6.0.3"
deprecation "^2.0.0"
once "^1.4.0"
"@octokit/request@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672"
integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==
dependencies:
"@octokit/endpoint" "^6.0.1"
"@octokit/request-error" "^2.1.0"
"@octokit/types" "^6.16.1"
is-plain-object "^5.0.0"
node-fetch "^2.6.1"
universal-user-agent "^6.0.0"
"@octokit/types@^6.0.3", "@octokit/types@^6.16.1":
version "6.19.0"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.19.0.tgz#e2b6fedb10c8b53cf4574aa5d1a8a5611295297a"
integrity sha512-9wdZFiJfonDyU6DjIgDHxAIn92vdSUBOwAXbO2F9rOFt6DJwuAkyGLu1CvdJPphCbPBoV9iSDMX7y4fu0v6AtA==
dependencies:
"@octokit/openapi-types" "^8.3.0"
"@sentry/core@6.9.0":
version "6.9.0"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.9.0.tgz#43b25290f3b1eb2c23f665e1c0fcbadd06d06012"
integrity sha512-oFX2qQcMLujCeIuCQGlhpTUIOXiU5n6V2lqDnvMXUV8gKpplBPalwdlR9bgbSi+VO8u7LjHR1IKM0RAPWgNHWw==
dependencies:
"@sentry/hub" "6.9.0"
"@sentry/minimal" "6.9.0"
"@sentry/types" "6.9.0"
"@sentry/utils" "6.9.0"
tslib "^1.9.3"
"@sentry/hub@6.8.0":
version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.8.0.tgz#cb0f8509093919ed3c1ef98ef8cf63dc102a6524"
integrity sha512-hFrI2Ss1fTov7CH64FJpigqRxH7YvSnGeqxT9Jc1BL7nzW/vgCK+Oh2mOZbosTcrzoDv+lE8ViOnSN3w/fo+rg==
"@sentry/hub@6.9.0":
version "6.9.0"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.9.0.tgz#21068e12769cc745825e8d122c7e81858f609708"
integrity sha512-5mors7ojbo7G85ZmoVPQBgFBMONAJwyZfV0LNLy14GenoaVNuxTPyvAQiJb1FYq+x6YZ3CvqGX6r74KRKQU87w==
dependencies:
"@sentry/types" "6.8.0"
"@sentry/utils" "6.8.0"
"@sentry/types" "6.9.0"
"@sentry/utils" "6.9.0"
tslib "^1.9.3"
"@sentry/minimal@6.8.0":
version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.8.0.tgz#d6c3e4c96f231367aeb2b8a87a83b53d28e7c6db"
integrity sha512-MRxUKXiiYwKjp8mOQMpTpEuIby1Jh3zRTU0cmGZtfsZ38BC1JOle8xlwC4FdtOH+VvjSYnPBMya5lgNHNPUJDQ==
"@sentry/minimal@6.9.0":
version "6.9.0"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.9.0.tgz#e6201eb237753994be83ec33866e3fdae9a79bf3"
integrity sha512-GBZ6wG2Rc1wInYEl2BZTZc/t57O1Da876ifLsSPpEQAEnGWbqZWb8RLjZskH09ZIL/K4XCIDDi5ySzN8kFUWJw==
dependencies:
"@sentry/hub" "6.8.0"
"@sentry/types" "6.8.0"
"@sentry/hub" "6.9.0"
"@sentry/types" "6.9.0"
tslib "^1.9.3"
"@sentry/node@^6.8.0":
version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.8.0.tgz#d39b45c2b9d33c0cf8859da70d08e25ae58c7dbc"
integrity sha512-DPUtDd1rRbDJys+aZdQTScKy2Xxo4m8iSQPxzfwFROsLmzE7XhDoriDwM+l1BpiZYIhxUU2TLxDyVzmdc/TMAw==
"@sentry/node@^6.9.0":
version "6.9.0"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.9.0.tgz#653c4386a1984b208eb0ff41379b33d178cbe731"
integrity sha512-hYb5NFS/3piGzGyV7V0pe7Z7ijEiFJb3Ey3iPbbje0aREUD8aUI7OVSJBctRLqEBQNCX9wX8fCHf5QNxRTUeqA==
dependencies:
"@sentry/core" "6.8.0"
"@sentry/hub" "6.8.0"
"@sentry/tracing" "6.8.0"
"@sentry/types" "6.8.0"
"@sentry/utils" "6.8.0"
"@sentry/core" "6.9.0"
"@sentry/hub" "6.9.0"
"@sentry/tracing" "6.9.0"
"@sentry/types" "6.9.0"
"@sentry/utils" "6.9.0"
cookie "^0.4.1"
https-proxy-agent "^5.0.0"
lru_map "^0.3.3"
tslib "^1.9.3"
"@sentry/tracing@6.8.0", "@sentry/tracing@^6.8.0":
version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.8.0.tgz#5baa4f2e66cd2e6851c213213017850f67e65f4b"
integrity sha512-3gDkQnmOuOjHz5rY7BOatLEUksANU3efR8wuBa2ujsPQvoLSLFuyZpRjPPsxuUHQOqAYIbSNAoDloXECvQeHjw==
"@sentry/tracing@6.9.0":
version "6.9.0"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.9.0.tgz#5dff993af253ee31e62c5f84ab21b008df7d0841"
integrity sha512-gogVTypolhPazXr3Lue8HgzBg5Sy1cQpEp5Iq9LtECs+TlOlxJ+S+P+EIjEZ0f1AHVu706jr5cY2G2Shluli9g==
dependencies:
"@sentry/hub" "6.8.0"
"@sentry/minimal" "6.8.0"
"@sentry/types" "6.8.0"
"@sentry/utils" "6.8.0"
"@sentry/hub" "6.9.0"
"@sentry/minimal" "6.9.0"
"@sentry/types" "6.9.0"
"@sentry/utils" "6.9.0"
tslib "^1.9.3"
"@sentry/types@6.8.0":
version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.8.0.tgz#97fd531a0ed1e75e65b4a24b26509fb7c15eb7b8"
integrity sha512-PbSxqlh6Fd5thNU5f8EVYBVvX+G7XdPA+ThNb2QvSK8yv3rIf0McHTyF6sIebgJ38OYN7ZFK7vvhC/RgSAfYTA==
"@sentry/types@6.9.0":
version "6.9.0"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.9.0.tgz#ef1a541c4240df6a7c6f5f31d7cdddd7d92c15f1"
integrity sha512-v52HJqLoLapEnqS2NdVtUXPvT+aezQgNXQkp8hiQ3RUdTm5cffwBVG7wlbpE6OsOOIZxd6p1zKylFkwCypiIIA==
"@sentry/utils@6.8.0":
version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.8.0.tgz#0ffafa5b69fe0cdeabad5c4a6cc68a426eaa6b37"
integrity sha512-OYlI2JNrcWKMdvYbWNdQwR4QBVv2V0y5wK0U6f53nArv6RsyO5TzwRu5rMVSIZofUUqjoE5hl27jqnR+vpUrsA==
"@sentry/utils@6.9.0":
version "6.9.0"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.9.0.tgz#6bf0bf290a6d37a27078b7c1331a06d8a7e313c5"
integrity sha512-PimDr6KAi4cCp5hQZ8Az2/pDcdfhTu7WAU30Dd9MZwknpHSTmD4G6QvkdrB5er6kMMnNQOC7rMo6w/Do3m6X3w==
dependencies:
"@sentry/types" "6.8.0"
"@sentry/types" "6.9.0"
tslib "^1.9.3"
"@sindresorhus/is@^0.7.0":
@@ -1099,9 +1158,9 @@
unist-util-find-all-after "^3.0.2"
"@szmarczak/http-timer@^4.0.5":
version "4.0.5"
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152"
integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==
version "4.0.6"
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
dependencies:
defer-to-connect "^2.0.0"
@@ -1129,9 +1188,9 @@
"@types/estree" "*"
"@types/eslint@*":
version "7.2.14"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.14.tgz#088661518db0c3c23089ab45900b99dd9214b92a"
integrity sha512-pESyhSbUOskqrGcaN+bCXIQDyT5zTaRWfj5ZjjSlMatgGjIn3QQPfocAu4WSabUR7CGyLZ2CQaZyISOEX7/saw==
version "7.28.0"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a"
integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==
dependencies:
"@types/estree" "*"
"@types/json-schema" "*"
@@ -1264,73 +1323,73 @@
dependencies:
"@types/yargs-parser" "*"
"@typescript-eslint/eslint-plugin@^4.28.2":
version "4.28.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz#7a8320f00141666813d0ae43b49ee8244f7cf92a"
integrity sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw==
"@typescript-eslint/eslint-plugin@^4.28.3":
version "4.28.3"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.3.tgz#36cdcd9ca6f9e5cb49b9f61b970b1976708d084b"
integrity sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg==
dependencies:
"@typescript-eslint/experimental-utils" "4.28.2"
"@typescript-eslint/scope-manager" "4.28.2"
"@typescript-eslint/experimental-utils" "4.28.3"
"@typescript-eslint/scope-manager" "4.28.3"
debug "^4.3.1"
functional-red-black-tree "^1.0.1"
regexpp "^3.1.0"
semver "^7.3.5"
tsutils "^3.21.0"
"@typescript-eslint/experimental-utils@4.28.2":
version "4.28.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz#4ebdec06a10888e9326e1d51d81ad52a361bd0b0"
integrity sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ==
"@typescript-eslint/experimental-utils@4.28.3":
version "4.28.3"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.3.tgz#976f8c1191b37105fd06658ed57ddfee4be361ca"
integrity sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw==
dependencies:
"@types/json-schema" "^7.0.7"
"@typescript-eslint/scope-manager" "4.28.2"
"@typescript-eslint/types" "4.28.2"
"@typescript-eslint/typescript-estree" "4.28.2"
"@typescript-eslint/scope-manager" "4.28.3"
"@typescript-eslint/types" "4.28.3"
"@typescript-eslint/typescript-estree" "4.28.3"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
"@typescript-eslint/parser@^4.28.2":
version "4.28.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.2.tgz#6aff11bf4b91eb67ca7517962eede951e9e2a15d"
integrity sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w==
"@typescript-eslint/parser@^4.28.3":
version "4.28.3"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.3.tgz#95f1d475c08268edffdcb2779993c488b6434b44"
integrity sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ==
dependencies:
"@typescript-eslint/scope-manager" "4.28.2"
"@typescript-eslint/types" "4.28.2"
"@typescript-eslint/typescript-estree" "4.28.2"
"@typescript-eslint/scope-manager" "4.28.3"
"@typescript-eslint/types" "4.28.3"
"@typescript-eslint/typescript-estree" "4.28.3"
debug "^4.3.1"
"@typescript-eslint/scope-manager@4.28.2":
version "4.28.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz#451dce90303a3ce283750111495d34c9c204e510"
integrity sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A==
"@typescript-eslint/scope-manager@4.28.3":
version "4.28.3"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz#c32ad4491b3726db1ba34030b59ea922c214e371"
integrity sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ==
dependencies:
"@typescript-eslint/types" "4.28.2"
"@typescript-eslint/visitor-keys" "4.28.2"
"@typescript-eslint/types" "4.28.3"
"@typescript-eslint/visitor-keys" "4.28.3"
"@typescript-eslint/types@4.28.2":
version "4.28.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.2.tgz#e6b9e234e0e9a66c4d25bab881661e91478223b5"
integrity sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA==
"@typescript-eslint/types@4.28.3":
version "4.28.3"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.3.tgz#8fffd436a3bada422c2c1da56060a0566a9506c7"
integrity sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA==
"@typescript-eslint/typescript-estree@4.28.2":
version "4.28.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz#680129b2a285289a15e7c6108c84739adf3a798c"
integrity sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg==
"@typescript-eslint/typescript-estree@4.28.3":
version "4.28.3"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz#253d7088100b2a38aefe3c8dd7bd1f8232ec46fb"
integrity sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w==
dependencies:
"@typescript-eslint/types" "4.28.2"
"@typescript-eslint/visitor-keys" "4.28.2"
"@typescript-eslint/types" "4.28.3"
"@typescript-eslint/visitor-keys" "4.28.3"
debug "^4.3.1"
globby "^11.0.3"
is-glob "^4.0.1"
semver "^7.3.5"
tsutils "^3.21.0"
"@typescript-eslint/visitor-keys@4.28.2":
version "4.28.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz#bf56a400857bb68b59b311e6d0a5fbef5c3b5130"
integrity sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w==
"@typescript-eslint/visitor-keys@4.28.3":
version "4.28.3"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz#26ac91e84b23529968361045829da80a4e5251c4"
integrity sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg==
dependencies:
"@typescript-eslint/types" "4.28.2"
"@typescript-eslint/types" "4.28.3"
eslint-visitor-keys "^2.0.0"
"@vercel/node@^1.11.1":
@@ -1913,10 +1972,10 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
autoprefixer@^10.3.0:
version "10.3.0"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.3.0.tgz#c60803dce9268f7fe0a5e5c1fe48a74356d7b864"
integrity sha512-BzVzdjs47nT3MphTddr8eSsPVEIUCF96X6iC8V5iEB8RtxrU+ybtdhHV5rsqRqOsoyh/acQaYs7YupHPUECgmg==
autoprefixer@^10.3.1:
version "10.3.1"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.3.1.tgz#954214821d3aa06692406c6a0a9e9d401eafbed2"
integrity sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==
dependencies:
browserslist "^4.16.6"
caniuse-lite "^1.0.30001243"
@@ -2375,9 +2434,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001166, caniuse-lite@^1.0.30001179, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001243:
version "1.0.30001243"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz#d9250155c91e872186671c523f3ae50cfc94a3aa"
integrity sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==
version "1.0.30001244"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001244.tgz#a6dc49ad5fa02d81d04373ec3f5ceabc3da06abf"
integrity sha512-Wb4UFZPkPoJoKKVfELPWytRzpemjP/s0pe22NriANru1NoI+5bGNxzKtk7edYL8rmCWTfQO8eRiF0pn1Dqzx7Q==
caw@^2.0.0, caw@^2.0.1:
version "2.0.1"
@@ -2914,10 +2973,10 @@ css-declaration-sorter@^6.0.3:
dependencies:
timsort "^0.3.0"
css-loader@^5.2.6:
version "5.2.6"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.6.tgz#c3c82ab77fea1f360e587d871a6811f4450cc8d1"
integrity sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==
css-loader@^5.2.7:
version "5.2.7"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae"
integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==
dependencies:
icss-utils "^5.1.0"
loader-utils "^2.0.0"
@@ -3328,6 +3387,11 @@ dependency-graph@^0.9.0:
resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318"
integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==
deprecation@^2.0.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
@@ -3569,9 +3633,9 @@ ee-first@1.1.1:
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
electron-to-chromium@^1.3.723:
version "1.3.772"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.772.tgz#fd1ed39f9f3149f62f581734e4f026e600369479"
integrity sha512-X/6VRCXWALzdX+RjCtBU6cyg8WZgoxm9YA02COmDOiNJEZ59WkQggDbWZ4t/giHi/3GS+cvdrP6gbLISANAGYA==
version "1.3.775"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.775.tgz#046517d1f2cea753e06fff549995b9dc45e20082"
integrity sha512-EGuiJW4yBPOTj2NtWGZcX93ZE8IGj33HJAx4d3ouE2zOfW2trbWU+t1e0yzLr1qQIw81++txbM3BH52QwSRE6Q==
emoji-regex@^7.0.1:
version "7.0.3"
@@ -4942,14 +5006,14 @@ graphql-request@^3.4.0:
extract-files "^9.0.0"
form-data "^3.0.0"
graphql-tag@^2.12.5:
graphql-tag@^2.10.3, graphql-tag@^2.12.5:
version "2.12.5"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.5.tgz#5cff974a67b417747d05c8d9f5f3cb4495d0db8f"
integrity sha512-5xNhP4063d16Pz3HBtKprutsPrmHZi5IdUGOWRxA2B6VF7BIRGOHZ5WQvDmJXZuPcBg7rYwaFxvQYjqkSdR3TQ==
dependencies:
tslib "^2.1.0"
graphql@^15.5.1:
graphql@^15.0.0, graphql@^15.5.1:
version "15.5.1"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.1.tgz#f2f84415d8985e7b84731e7f3536f8bb9d383aad"
integrity sha512-FeTRX67T3LoE3LWAxxOlW2K3Bz+rMYAC18rRguK4wgXaTZMiJwSUwDmPFo3UadAKbzirKIg5Qy+sNJXbpPRnQw==
@@ -5669,9 +5733,9 @@ is-color-stop@^1.1.0:
rgba-regex "^1.0.0"
is-core-module@^2.2.0, is-core-module@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
version "2.5.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491"
integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==
dependencies:
has "^1.0.3"
@@ -6310,10 +6374,10 @@ linkify-it@^3.0.1:
dependencies:
uc.micro "^1.0.1"
lint-staged@^11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.0.0.tgz#24d0a95aa316ba28e257f5c4613369a75a10c712"
integrity sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==
lint-staged@^11.0.1:
version "11.0.1"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.0.1.tgz#1b8ae8ed5a52ed87252db95fe008c2618c85f55a"
integrity sha512-RkTA1ulE6jAGFskxpGAwxfVRXjHp7D9gFg/+KMARUWMPiVFP0t28Em2u0gL8sA0w3/ck3TC57F2v2RNeQ5XPnw==
dependencies:
chalk "^4.1.1"
cli-truncate "^2.1.0"
@@ -7255,9 +7319,9 @@ object-copy@^0.1.0:
kind-of "^3.0.3"
object-inspect@^1.10.3:
version "1.10.3"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
version "1.11.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"
integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==
object-is@^1.0.1:
version "1.1.5"
@@ -10126,7 +10190,7 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0:
tslib@^2.0.3, tslib@^2.1.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
@@ -10370,6 +10434,11 @@ unist-util-stringify-position@^2.0.0:
dependencies:
"@types/unist" "^2.0.2"
universal-user-agent@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
universalify@^0.1.0, universalify@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"