diff --git a/packages/gatsby-theme/src/components/index.d.ts b/packages/gatsby-theme/src/components/index.d.ts
index 55b1dd2..35a4cb8 100644
--- a/packages/gatsby-theme/src/components/index.d.ts
+++ b/packages/gatsby-theme/src/components/index.d.ts
@@ -1,2 +1,2 @@
declare module 'gatsby-mdx';
-declare module 'prismjs/components/prism-core';
\ No newline at end of file
+declare module 'prismjs/components/prism-core';
diff --git a/packages/gatsby-theme/src/components/listing.tsx b/packages/gatsby-theme/src/components/listing.tsx
index b335b4b..ae3bae8 100644
--- a/packages/gatsby-theme/src/components/listing.tsx
+++ b/packages/gatsby-theme/src/components/listing.tsx
@@ -1,8 +1,8 @@
-import { Link } from "gatsby";
-import * as React from "react";
-import { styled } from "../styles";
-import { useAllTutorialQuery } from "../hooks/useAllTutorialQuery";
-import { getTutorialSlug } from "../utils/getTutorialSlug";
+import { Link } from 'gatsby';
+import * as React from 'react';
+import { styled } from '../styles';
+import { useAllTutorialQuery } from '../hooks/useAllTutorialQuery';
+import { getTutorialSlug } from '../utils/getTutorialSlug';
const Post = styled.article`
box-shadow: 0 0.3rem 1rem rgba(25, 17, 34, 0.05);
diff --git a/packages/gatsby-theme/src/components/shared/base.d.ts b/packages/gatsby-theme/src/components/shared/base.d.ts
index efad115..8d89b04 100644
--- a/packages/gatsby-theme/src/components/shared/base.d.ts
+++ b/packages/gatsby-theme/src/components/shared/base.d.ts
@@ -8,9 +8,9 @@
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.9
-import * as React from "react";
-import * as StyledComponents from "styled-components";
-import * as StyledSystem from "styled-system";
+import * as React from 'react';
+import * as StyledComponents from 'styled-components';
+import * as StyledSystem from 'styled-system';
export {};
diff --git a/packages/gatsby-theme/src/components/shared/styledHelpers.tsx b/packages/gatsby-theme/src/components/shared/styledHelpers.tsx
index e01c4af..181c2a5 100644
--- a/packages/gatsby-theme/src/components/shared/styledHelpers.tsx
+++ b/packages/gatsby-theme/src/components/shared/styledHelpers.tsx
@@ -1,4 +1,4 @@
-import { styled } from "../../styles";
+import { styled } from '../../styles';
export const Content = styled.div`
max-width: ${p => p.theme.middleContainerWidth}px;
diff --git a/packages/gatsby-theme/src/components/templates/Tutorial.tsx b/packages/gatsby-theme/src/components/templates/Tutorial.tsx
index df3321e..17c7aa7 100644
--- a/packages/gatsby-theme/src/components/templates/Tutorial.tsx
+++ b/packages/gatsby-theme/src/components/templates/Tutorial.tsx
@@ -19,10 +19,13 @@ const TutorialLayout: React.FunctionComponent
= ({
return null;
}
const { pageTitle } = data!.mdx!.frontmatter!;
- const tutorialTitle = optionalChaining(() => data!.tutorialTitle!.frontmatter!.tutorialTitle!);
- const chapters = optionalChaining(() => data!.pageTitles!.edges!.map(
- a => a.node!.frontmatter!.pageTitle!,
- )) || [];
+ const tutorialTitle = optionalChaining(
+ () => data!.tutorialTitle!.frontmatter!.tutorialTitle!,
+ );
+ const chapters =
+ optionalChaining(() =>
+ data!.pageTitles!.edges!.map(a => a.node!.frontmatter!.pageTitle!),
+ ) || [];
const { location } = props;
return (
diff --git a/packages/gatsby-theme/src/hooks/useLayoutQuery.ts b/packages/gatsby-theme/src/hooks/useLayoutQuery.ts
index 287f2ce..a834a05 100644
--- a/packages/gatsby-theme/src/hooks/useLayoutQuery.ts
+++ b/packages/gatsby-theme/src/hooks/useLayoutQuery.ts
@@ -1,6 +1,6 @@
-import { graphql, useStaticQuery } from "gatsby";
+import { graphql, useStaticQuery } from 'gatsby';
-import { LayoutInformationQuery } from "src/graphqlTypes";
+import { LayoutInformationQuery } from 'src/graphqlTypes';
export const useLayoutQuery = () => {
const { site }: LayoutInformationQuery = useStaticQuery(graphql`
diff --git a/packages/gatsby-theme/src/index.d.ts b/packages/gatsby-theme/src/index.d.ts
index ea9b473..442872d 100644
--- a/packages/gatsby-theme/src/index.d.ts
+++ b/packages/gatsby-theme/src/index.d.ts
@@ -1 +1 @@
-declare module 'gatsby-mdx/mdx-renderer';
\ No newline at end of file
+declare module 'gatsby-mdx/mdx-renderer';
diff --git a/packages/gatsby-theme/src/pages/callback.tsx b/packages/gatsby-theme/src/pages/callback.tsx
index ada6220..dfb0419 100644
--- a/packages/gatsby-theme/src/pages/callback.tsx
+++ b/packages/gatsby-theme/src/pages/callback.tsx
@@ -2,25 +2,25 @@ import * as React from 'react';
function getParameterByName(name: string, url: string) {
if (!url) url = window.location.href;
- name = name.replace(/[\[\]]/g, "\\$&");
- var regex = new RegExp("[?&]" + name + "(=([^]*)|&|#|$)"),
+ name = name.replace(/[\[\]]/g, '\\$&');
+ var regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
- if (!results[2]) return "";
- return decodeURIComponent(results[2].replace(/\+/g, " "));
+ if (!results[2]) return '';
+ return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
function Callback() {
- let githubCode = getParameterByName("code", window.location.href);
+ let githubCode = getParameterByName('code', window.location.href);
let targetWindow = window.opener;
- targetWindow.postMessage(githubCode, "*");
+ targetWindow.postMessage(githubCode, '*');
}
export default class AuthCallback extends React.Component {
componentDidMount() {
- Callback()
+ Callback();
}
render() {
- return null
+ return null;
}
}
diff --git a/packages/gatsby-theme/src/styles/global.ts b/packages/gatsby-theme/src/styles/global.ts
index 8320e88..0ec7761 100644
--- a/packages/gatsby-theme/src/styles/global.ts
+++ b/packages/gatsby-theme/src/styles/global.ts
@@ -1,6 +1,6 @@
-import { createGlobalStyle } from "./styled";
+import { createGlobalStyle } from './styled';
-import normalize from "./normalize";
+import normalize from './normalize';
export const GlobalStyles = createGlobalStyle`
${normalize}
diff --git a/packages/gatsby-theme/src/styles/mobile.ts b/packages/gatsby-theme/src/styles/mobile.ts
index d6c8533..dff3ebc 100644
--- a/packages/gatsby-theme/src/styles/mobile.ts
+++ b/packages/gatsby-theme/src/styles/mobile.ts
@@ -1,4 +1,4 @@
-import { css } from ".";
+import { css } from '.';
export const mobile = (inner: any) => css`
@media (max-width: ${p => p.theme.breakpoints[1]}) {
diff --git a/packages/gatsby-theme/src/styles/normalize.ts b/packages/gatsby-theme/src/styles/normalize.ts
index 68cdd92..df66a7f 100644
--- a/packages/gatsby-theme/src/styles/normalize.ts
+++ b/packages/gatsby-theme/src/styles/normalize.ts
@@ -1,5 +1,5 @@
-import { css } from "styled-components";
-import { theme } from "./theme";
+import { css } from 'styled-components';
+import { theme } from './theme';
export default css`
/*! modern-normalize | MIT License | https://github.com/sindresorhus/modern-normalize */
@@ -54,9 +54,9 @@ export default css`
*/
body {
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
- Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
- "Segoe UI Symbol";
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
+ Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
+ 'Segoe UI Symbol';
}
/**
@@ -177,9 +177,9 @@ export default css`
*/
button,
- [type="button"],
- [type="reset"],
- [type="submit"] {
+ [type='button'],
+ [type='reset'],
+ [type='submit'] {
-webkit-appearance: button;
}
@@ -188,9 +188,9 @@ export default css`
*/
button::-moz-focus-inner,
- [type="button"]::-moz-focus-inner,
- [type="reset"]::-moz-focus-inner,
- [type="submit"]::-moz-focus-inner {
+ [type='button']::-moz-focus-inner,
+ [type='reset']::-moz-focus-inner,
+ [type='submit']::-moz-focus-inner {
border-style: none;
padding: 0;
}
@@ -200,9 +200,9 @@ export default css`
*/
button:-moz-focusring,
- [type="button"]:-moz-focusring,
- [type="reset"]:-moz-focusring,
- [type="submit"]:-moz-focusring {
+ [type='button']:-moz-focusring,
+ [type='reset']:-moz-focusring,
+ [type='submit']:-moz-focusring {
outline: 1px dotted ButtonText;
}
@@ -235,8 +235,8 @@ export default css`
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
- [type="number"]::-webkit-inner-spin-button,
- [type="number"]::-webkit-outer-spin-button {
+ [type='number']::-webkit-inner-spin-button,
+ [type='number']::-webkit-outer-spin-button {
height: auto;
}
@@ -245,7 +245,7 @@ export default css`
* 2. Correct the outline style in Safari.
*/
- [type="search"] {
+ [type='search'] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
@@ -254,7 +254,7 @@ export default css`
* Remove the inner padding in Chrome and Safari on macOS.
*/
- [type="search"]::-webkit-search-decoration {
+ [type='search']::-webkit-search-decoration {
-webkit-appearance: none;
}
diff --git a/packages/gatsby-theme/src/styles/theme/ThemeInterface.ts b/packages/gatsby-theme/src/styles/theme/ThemeInterface.ts
index 9f669c2..f572b94 100644
--- a/packages/gatsby-theme/src/styles/theme/ThemeInterface.ts
+++ b/packages/gatsby-theme/src/styles/theme/ThemeInterface.ts
@@ -1,7 +1,7 @@
-import { Colors, Sizes, ZIndex, Shadows } from "./index";
+import { Colors, Sizes, ZIndex, Shadows } from './index';
export interface ThemeInterface extends Sizes, ZIndex {
- mode: "light" | "dark";
+ mode: 'light' | 'dark';
colors: Colors;
shadows: Shadows;
}
diff --git a/packages/gatsby-theme/src/styles/theme/index.ts b/packages/gatsby-theme/src/styles/theme/index.ts
index 0cd08d6..53aebe9 100644
--- a/packages/gatsby-theme/src/styles/theme/index.ts
+++ b/packages/gatsby-theme/src/styles/theme/index.ts
@@ -1,4 +1,4 @@
-import { ThemeInterface } from "./ThemeInterface";
+import { ThemeInterface } from './ThemeInterface';
// Guide
// [C] means `Component`
@@ -18,8 +18,8 @@ export interface Shadows {
}
const shadows: Shadows = {
- small: "0px 2px 4px rgba(38, 38, 38, 0.15)",
- large: "0px 4px 8px rgba(38, 38, 38, 0.15);"
+ small: '0px 2px 4px rgba(38, 38, 38, 0.15)',
+ large: '0px 4px 8px rgba(38, 38, 38, 0.15);',
};
export interface ZIndex {
@@ -37,7 +37,7 @@ const zIndex: ZIndex = {
drawer: 1200,
modal: 1300,
snackbar: 1400,
- tooltip: 1500
+ tooltip: 1500,
};
export interface Colors {
@@ -56,32 +56,32 @@ export interface Colors {
export const darkColors: Colors = {
//// Colors
- primary: "#e00082",
- primaryDark1: "#a4036f",
- primaryLight1: "#EB7BBC",
- secondary: "#172a3a",
- secondaryDark1: "rgb(0, 0, 0)",
- secondaryLight1: "rgba(23, 42, 58, .5)",
- info: "#2a7ed2",
- infoLight1: "#C2DCF2",
- infoDark1: "#2a7ed2",
- lightGray: "rgb(244, 244, 244)",
- white: "#fff"
+ primary: '#e00082',
+ primaryDark1: '#a4036f',
+ primaryLight1: '#EB7BBC',
+ secondary: '#172a3a',
+ secondaryDark1: 'rgb(0, 0, 0)',
+ secondaryLight1: 'rgba(23, 42, 58, .5)',
+ info: '#2a7ed2',
+ infoLight1: '#C2DCF2',
+ infoDark1: '#2a7ed2',
+ lightGray: 'rgb(244, 244, 244)',
+ white: '#fff',
};
export const lightColors: Colors = {
//// Colors
- primary: "#e00082",
- primaryDark1: "#082333",
- primaryLight1: "#EB7BBC",
- secondary: "#082333",
- secondaryDark1: "#082333",
- secondaryLight1: "#082333",
- info: "#0F7AD8",
- infoLight1: "#459BF2",
- infoDark1: "#2a7ed2",
- lightGray: "#f9f9f9",
- white: "#fff"
+ primary: '#e00082',
+ primaryDark1: '#082333',
+ primaryLight1: '#EB7BBC',
+ secondary: '#082333',
+ secondaryDark1: '#082333',
+ secondaryLight1: '#082333',
+ info: '#0F7AD8',
+ infoLight1: '#459BF2',
+ infoDark1: '#2a7ed2',
+ lightGray: '#f9f9f9',
+ white: '#fff',
};
export interface Sizes {
@@ -105,7 +105,7 @@ export interface Sizes {
export const sizes: Sizes = {
///// Sizes
- breakpoints: ["40em", "52em", "64em"],
+ breakpoints: ['40em', '52em', '64em'],
// Radius
radii: [4, 6, 8],
// [C] Container
@@ -124,20 +124,20 @@ export const sizes: Sizes = {
32,
64,
128,
- 256
+ 256,
],
// Font
fontSizes: [12, 14, 16, 20, 28, 32, 48, 64],
fontWeights: [300, 400, 600, 700],
fontStackMono:
- "SFMono-Regular, 'Roboto Mono', Consolas, 'Liberation Mono', Menlo, Courier, monospace"
+ "SFMono-Regular, 'Roboto Mono', Consolas, 'Liberation Mono', Menlo, Courier, monospace",
};
export const theme: ThemeInterface = {
- mode: "dark",
+ mode: 'dark',
colors: darkColors,
shadows,
...sizes,
- ...zIndex
+ ...zIndex,
};
diff --git a/packages/gatsby-theme/src/styles/typography.ts b/packages/gatsby-theme/src/styles/typography.ts
index aad26c4..82f4e0c 100644
--- a/packages/gatsby-theme/src/styles/typography.ts
+++ b/packages/gatsby-theme/src/styles/typography.ts
@@ -1,45 +1,45 @@
/* tslint:disable */
-import Typography, { TypographyOptions } from "typography";
-import { theme as styledTheme } from "./theme";
+import Typography, { TypographyOptions } from 'typography';
+import { theme as styledTheme } from './theme';
const options: TypographyOptions = {
baseFontSize: `${styledTheme.fontSizes[2]}px`,
baseLineHeight: 1.625,
headerFontFamily: [
- "Rubik",
- "-apple-system",
- "BlinkMacSystemFont",
- "Segoe UI",
- "Roboto",
- "Helvetica",
- "Arial",
- "sans-serif",
- "Apple Color Emoji",
- "Segoe UI Emoji",
- "Segoe UI Symbol"
+ 'Rubik',
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ 'Segoe UI',
+ 'Roboto',
+ 'Helvetica',
+ 'Arial',
+ 'sans-serif',
+ 'Apple Color Emoji',
+ 'Segoe UI Emoji',
+ 'Segoe UI Symbol',
],
bodyFontFamily: [
- "Open Sans",
- "-apple-system",
- "BlinkMacSystemFont",
- "Segoe UI",
- "Roboto",
- "Helvetica",
- "Arial",
- "sans-serif",
- "Apple Color Emoji",
- "Segoe UI Emoji",
- "Segoe UI Symbol"
+ 'Open Sans',
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ 'Segoe UI',
+ 'Roboto',
+ 'Helvetica',
+ 'Arial',
+ 'sans-serif',
+ 'Apple Color Emoji',
+ 'Segoe UI Emoji',
+ 'Segoe UI Symbol',
],
googleFonts: [
{
- name: "Open Sans",
- styles: ["300", "400", "600", "700"]
+ name: 'Open Sans',
+ styles: ['300', '400', '600', '700'],
},
{
- name: "Source Code Pro",
- styles: ["300", "400", "600", "700"]
- }
+ name: 'Source Code Pro',
+ styles: ['300', '400', '600', '700'],
+ },
],
scaleRatio: 2,
bodyColor: styledTheme.colors.secondaryLight1,
@@ -54,12 +54,12 @@ const options: TypographyOptions = {
paddingBottom: `calc(${rhythm(1 / 4)} - 1px)`,
marginBottom: rhythm(3 / 4),
marginTop: rhythm(1.5),
- headerWeight: styledTheme.fontWeights[3]
+ headerWeight: styledTheme.fontWeights[3],
},
h2: {
paddingBottom: `calc(${rhythm(1 / 3)} - 1px)`,
marginBottom: rhythm(1 / 3),
- marginTop: rhythm(1.3)
+ marginTop: rhythm(1.3),
},
h3: {},
h4: {},
@@ -70,31 +70,31 @@ const options: TypographyOptions = {
// '"Source Code Pro", "SFMono-Regular", Consolas,"Roboto Mono","Droid Sans Mono","Liberation Mono",Menlo,Courier,monospace',
// fontWeight: '400',
// },
- "h3,h4,h5,h6": {
+ 'h3,h4,h5,h6': {
marginBottom: rhythm(1 / 2),
- marginTop: rhythm(1)
+ marginTop: rhythm(1),
},
- "ol,ul": {
- marginLeft: rhythm(1.25)
+ 'ol,ul': {
+ marginLeft: rhythm(1.25),
},
// children ol, ul
- "li>ol,li>ul": {
- marginLeft: rhythm(1.25)
+ 'li>ol,li>ul': {
+ marginLeft: rhythm(1.25),
},
a: {
color: styledTheme.colors.primary,
- textDecoration: "none"
+ textDecoration: 'none',
},
- "a:hover,a:active": {
- color: styledTheme.colors.primary
+ 'a:hover,a:active': {
+ color: styledTheme.colors.primary,
},
blockquote: {
borderLeft: `4px solid ${styledTheme.colors.lightGray}`,
marginTop: 0,
marginRight: 0,
marginLeft: 0,
- paddingLeft: `calc(${rhythm(1 / 2)} - 1px)`
- }
+ paddingLeft: `calc(${rhythm(1 / 2)} - 1px)`,
+ },
// "tt,code": {
// borderRadius: "3px",
// fontFamily:
@@ -110,7 +110,7 @@ const options: TypographyOptions = {
// "pre code:before,pre code:after,pre tt:before,pre tt:after": {
// content: "none"
// }
- })
+ }),
};
const typography = new Typography(options);
diff --git a/packages/server/prisma/seed.ts b/packages/server/prisma/seed.ts
index 3dac5c1..82e53b4 100644
--- a/packages/server/prisma/seed.ts
+++ b/packages/server/prisma/seed.ts
@@ -31,4 +31,4 @@ async function main() {
// })
}
-main().catch(e => console.error(e))
+main().catch(e => console.error(e));
diff --git a/packages/server/src/config.ts b/packages/server/src/config.ts
index 6e70130..c99f318 100644
--- a/packages/server/src/config.ts
+++ b/packages/server/src/config.ts
@@ -1,12 +1,12 @@
export type Config = {
github: {
- CLIENT_ID: string
- CLIENT_SECRET: string
- }
+ CLIENT_ID: string;
+ CLIENT_SECRET: string;
+ };
jwt: {
- SECRET: string
- }
-}
+ SECRET: string;
+ };
+};
// https://github.com/login/oauth/authorize?client_id=2f9502dd9f0f44ca2e3b&redirect_uri=http://localhost:8000
const config: Config = {
github: {
@@ -18,6 +18,6 @@ const config: Config = {
jwt: {
SECRET: process.env.GQL_JWT_SECRET || 'helloworld',
},
-}
+};
-export default config
+export default config;
diff --git a/packages/server/src/context.ts b/packages/server/src/context.ts
index b40c4d9..35bb068 100644
--- a/packages/server/src/context.ts
+++ b/packages/server/src/context.ts
@@ -1,10 +1,10 @@
-import { prisma, Prisma } from '../.yoga/prisma-client'
-import { yogaContext } from 'yoga'
+import { prisma, Prisma } from '../.yoga/prisma-client';
+import { yogaContext } from 'yoga';
import { getUserId } from './utils';
export interface Context {
- prisma: Prisma
- req: any
+ prisma: Prisma;
+ req: any;
currentUserId?: string;
}
@@ -12,7 +12,7 @@ export default yogaContext(({ req }) => {
const context = {
req,
prisma,
- currentUserId: null
+ currentUserId: null,
} as Context;
try {
context.currentUserId = getUserId(context);
@@ -20,4 +20,4 @@ export default yogaContext(({ req }) => {
// no user
}
return context;
-})
+});
diff --git a/packages/server/src/github.ts b/packages/server/src/github.ts
index 18d17bf..cb194d7 100644
--- a/packages/server/src/github.ts
+++ b/packages/server/src/github.ts
@@ -1,72 +1,69 @@
-import * as fetch from 'isomorphic-fetch'
+import * as fetch from 'isomorphic-fetch';
import config from './config';
export interface GithubUser {
- login: string;
- id: number;
- node_id: string;
- avatar_url: string;
- gravatar_id: string;
- url: string;
- html_url: string;
- followers_url: string;
- following_url: string;
- gists_url: string;
- starred_url: string;
- subscriptions_url: string;
- organizations_url: string;
- repos_url: string;
- events_url: string;
- received_events_url: string;
- type: string;
- site_admin: boolean;
- name: string;
- company: string;
- blog: string;
- location: string;
- email: string;
- hireable?: any;
- bio: string;
- public_repos: number;
- public_gists: number;
- followers: number;
- following: number;
- created_at: string;
- updated_at: string;
+ login: string;
+ id: number;
+ node_id: string;
+ avatar_url: string;
+ gravatar_id: string;
+ url: string;
+ html_url: string;
+ followers_url: string;
+ following_url: string;
+ gists_url: string;
+ starred_url: string;
+ subscriptions_url: string;
+ organizations_url: string;
+ repos_url: string;
+ events_url: string;
+ received_events_url: string;
+ type: string;
+ site_admin: boolean;
+ name: string;
+ company: string;
+ blog: string;
+ location: string;
+ email: string;
+ hireable?: any;
+ bio: string;
+ public_repos: number;
+ public_gists: number;
+ followers: number;
+ following: number;
+ created_at: string;
+ updated_at: string;
}
export async function getGithubToken(githubCode: string): Promise {
- const endpoint = 'https://github.com/login/oauth/access_token'
- const data = await fetch(endpoint, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'Accept': 'application/json'
- },
- body: JSON.stringify({
- client_id: config.github.CLIENT_ID,
- client_secret: config.github.CLIENT_SECRET,
- code: githubCode,
- })
- })
- .then(response => response.json())
+ const endpoint = 'https://github.com/login/oauth/access_token';
+ const data = await fetch(endpoint, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Accept: 'application/json',
+ },
+ body: JSON.stringify({
+ client_id: config.github.CLIENT_ID,
+ client_secret: config.github.CLIENT_SECRET,
+ code: githubCode,
+ }),
+ }).then(response => response.json());
- if (data.error) {
- throw new Error(JSON.stringify(data.error))
- }
+ if (data.error) {
+ throw new Error(JSON.stringify(data.error));
+ }
- return data.access_token
+ return data.access_token;
}
-
export async function getGithubUser(githubToken: string): Promise {
- const endpoint = `https://api.github.com/user?access_token=${githubToken}`
- const data = await fetch(endpoint)
- .then(response => response.json())
+ const endpoint = `https://api.github.com/user?access_token=${githubToken}`;
+ const data = await fetch(endpoint).then(response => response.json());
- if (data.error) {
- throw new Error(JSON.stringify(data.error))
- }
+ if (data.error) {
+ throw new Error(JSON.stringify(data.error));
+ }
- return data
+ return data;
}
diff --git a/packages/server/src/graphql/Mutation.ts b/packages/server/src/graphql/Mutation.ts
index f766ac1..27ef907 100644
--- a/packages/server/src/graphql/Mutation.ts
+++ b/packages/server/src/graphql/Mutation.ts
@@ -1,5 +1,4 @@
-import { prismaObjectType } from 'yoga'
-
+import { prismaObjectType } from 'yoga';
export const Mutation = prismaObjectType({
name: 'Mutation',
@@ -8,6 +7,6 @@ export const Mutation = prismaObjectType({
// use `t.primaFields(['fieldName', ...])` to hide, customize, or select specific fields
// This removes all fields from the underlying Mutation object type
- t.prismaFields([])
+ t.prismaFields([]);
},
-})
+});
diff --git a/packages/server/src/graphql/PayloadInterface.ts b/packages/server/src/graphql/PayloadInterface.ts
index 6f673e8..7f6fc20 100644
--- a/packages/server/src/graphql/PayloadInterface.ts
+++ b/packages/server/src/graphql/PayloadInterface.ts
@@ -1,4 +1,4 @@
-import { interfaceType } from 'yoga'
+import { interfaceType } from 'yoga';
export const PayloadInterface = interfaceType({
name: 'PayloadInterface',
@@ -6,11 +6,11 @@ export const PayloadInterface = interfaceType({
definition: t => {
t.string('code', {
nullable: true,
- })
- t.boolean('success')
+ });
+ t.boolean('success');
t.string('message', {
nullable: true,
- })
- t.resolveType(() => null)
+ });
+ t.resolveType(() => null);
},
-})
+});
diff --git a/packages/server/src/graphql/Query.ts b/packages/server/src/graphql/Query.ts
index e2bc8e9..bf34aaa 100644
--- a/packages/server/src/graphql/Query.ts
+++ b/packages/server/src/graphql/Query.ts
@@ -1,5 +1,4 @@
-import { prismaObjectType } from 'yoga'
-
+import { prismaObjectType } from 'yoga';
export const Query = prismaObjectType({
name: 'Query',
@@ -8,6 +7,6 @@ export const Query = prismaObjectType({
// use `t.primaFields(['fieldName', ...])` to hide, customize, or select specific fields
// This removes all fields from the underlying Query object type
- t.prismaFields([])
+ t.prismaFields([]);
},
-})
+});
diff --git a/packages/server/src/graphql/Tutorial.ts b/packages/server/src/graphql/Tutorial.ts
index 41e9afc..431f7c0 100644
--- a/packages/server/src/graphql/Tutorial.ts
+++ b/packages/server/src/graphql/Tutorial.ts
@@ -5,15 +5,15 @@ import {
idArg,
intArg,
stringArg,
-} from 'yoga'
-import { getUserTutorial } from './UserTutorial'
+} from 'yoga';
+import { getUserTutorial } from './UserTutorial';
export const Tutorial = prismaObjectType({
name: 'Tutorial',
definition(t) {
// If you wish you customize/hide fields, call `t.prismaFields(['id', ...])` with the desired field names
// If you wish to add custom fields on top of prisma's ones, use t.field/string/int...
- t.prismaFields(['*'])
+ t.prismaFields(['*']);
t.int('numberOfStudents', {
resolve: async (parent, args, ctx) => {
return (await ctx.prisma
@@ -25,9 +25,9 @@ export const Tutorial = prismaObjectType({
currentChapter_gt: 0,
},
})
- .aggregate()).count
+ .aggregate()).count;
},
- })
+ });
t.int('upvotes', {
resolve: async (parent, args, ctx) => {
return (await ctx.prisma
@@ -39,9 +39,9 @@ export const Tutorial = prismaObjectType({
upvoted: true,
},
})
- .aggregate()).count
+ .aggregate()).count;
},
- })
+ });
t.field('viewerUserTutorial', {
type: 'UserTutorial',
description:
@@ -53,11 +53,11 @@ export const Tutorial = prismaObjectType({
userId: ctx.currentUserId,
},
ctx,
- )
+ );
},
- })
+ });
},
-})
+});
export const tutorial = queryField('tutorial', {
type: 'Tutorial',
@@ -69,9 +69,9 @@ export const tutorial = queryField('tutorial', {
resolve: (_, args, ctx) => {
return ctx.prisma.tutorial({
id: args.id,
- })
+ });
},
-})
+});
export const tutorials = queryField('tutorials', {
type: 'Tutorial',
nullable: true,
@@ -82,9 +82,9 @@ export const tutorials = queryField('tutorials', {
resolve: (_, args, ctx) => {
return ctx.prisma.tutorials({
first: args.first,
- })
+ });
},
-})
+});
export const upsertTutorial = mutationField('upsertTutorial', {
type: Tutorial,
@@ -105,22 +105,22 @@ export const upsertTutorial = mutationField('upsertTutorial', {
where: {
gatsbyID: gatsbyID,
},
- })
- let upsertedTutorial
+ });
+ let upsertedTutorial;
if (existingTutorial.length) {
upsertedTutorial = await ctx.prisma.updateTutorial({
where: {
gatsbyID: gatsbyID,
},
data: { gatsbyID, name, numberofChapters },
- })
+ });
} else {
upsertedTutorial = await ctx.prisma.createTutorial({
gatsbyID,
name,
numberofChapters,
- })
+ });
}
- return upsertedTutorial
+ return upsertedTutorial;
},
-})
+});
diff --git a/packages/server/src/graphql/User.ts b/packages/server/src/graphql/User.ts
index aee63d2..a38ff9b 100644
--- a/packages/server/src/graphql/User.ts
+++ b/packages/server/src/graphql/User.ts
@@ -1,10 +1,10 @@
-import { prismaObjectType } from 'yoga'
+import { prismaObjectType } from 'yoga';
export const User = prismaObjectType({
name: 'User',
definition(t) {
// If you wish you customize/hide fields, call `t.prismaFields(['id', ...])` with the desired field names
// If you wish to add custom fields on top of prisma's ones, use t.field/string/int...
- t.prismaFields(['*'])
+ t.prismaFields(['*']);
},
-})
+});
diff --git a/packages/server/src/graphql/UserTutorial.ts b/packages/server/src/graphql/UserTutorial.ts
index 58385b6..c2fd983 100644
--- a/packages/server/src/graphql/UserTutorial.ts
+++ b/packages/server/src/graphql/UserTutorial.ts
@@ -1,31 +1,31 @@
-import { prismaObjectType, objectType, mutationField, idArg } from 'yoga'
-import { PayloadInterface } from './PayloadInterface'
-import { authorizeUser } from './auth'
-import { Context } from '../context'
+import { prismaObjectType, objectType, mutationField, idArg } from 'yoga';
+import { PayloadInterface } from './PayloadInterface';
+import { authorizeUser } from './auth';
+import { Context } from '../context';
import {
UserTutorial as UserTutorialType,
UserTutorialCreateInput,
-} from '../../.yoga/prisma-client'
+} from '../../.yoga/prisma-client';
export const UserTutorial = prismaObjectType({
name: 'UserTutorial',
definition(t) {
// If you wish you customize/hide fields, call `t.prismaFields(['id', ...])` with the desired field names
// If you wish to add custom fields on top of prisma's ones, use t.field/string/int...
- t.prismaFields(['*'])
+ t.prismaFields(['*']);
},
-})
+});
export const UserTutorialPayload = objectType({
name: 'UserTutorialPayload',
definition: type => {
- type.implements(PayloadInterface)
+ type.implements(PayloadInterface);
type.field('userTutorial', {
type: UserTutorial,
nullable: true,
- })
+ });
},
-})
+});
export const upvoteTutorial = mutationField('upvoteTutorial', {
type: UserTutorialPayload,
@@ -37,14 +37,14 @@ export const upvoteTutorial = mutationField('upvoteTutorial', {
},
authorize: authorizeUser(),
resolve: async (_, { tutorialId }, ctx) => {
- const userId = ctx.currentUserId
+ const userId = ctx.currentUserId;
const existingUserTutorial = await getUserTutorial(
{
userId,
tutorialId,
},
ctx,
- )
+ );
let upsertedUserTutorial = await upsertUserTutorial(
{
userId,
@@ -55,15 +55,15 @@ export const upvoteTutorial = mutationField('upvoteTutorial', {
},
},
ctx,
- )
+ );
return {
code: '200',
success: true,
message: null,
userTutorial: upsertedUserTutorial,
- }
+ };
},
-})
+});
export const bookmarkTutorial = mutationField('bookmarkTutorial', {
type: UserTutorialPayload,
@@ -75,14 +75,14 @@ export const bookmarkTutorial = mutationField('bookmarkTutorial', {
},
authorize: authorizeUser(),
resolve: async (_, { tutorialId }, ctx) => {
- const userId = ctx.currentUserId
+ const userId = ctx.currentUserId;
const existingUserTutorial = await getUserTutorial(
{
userId,
tutorialId,
},
ctx,
- )
+ );
let upsertedUserTutorial = await upsertUserTutorial(
{
userId,
@@ -95,34 +95,34 @@ export const bookmarkTutorial = mutationField('bookmarkTutorial', {
},
},
ctx,
- )
+ );
return {
code: '200',
success: true,
message: null,
userTutorial: upsertedUserTutorial,
- }
+ };
},
-})
+});
async function upsertUserTutorial(
args: {
- userTutorialId?: string
- updates: UserTutorialCreateInput
- userId: string
- tutorialId: any
+ userTutorialId?: string;
+ updates: UserTutorialCreateInput;
+ userId: string;
+ tutorialId: any;
},
ctx: Context,
): Promise {
- const { userTutorialId, updates, userId, tutorialId } = args
- let upsertedUserTutorial
+ const { userTutorialId, updates, userId, tutorialId } = args;
+ let upsertedUserTutorial;
if (userTutorialId) {
upsertedUserTutorial = await ctx.prisma.updateUserTutorial({
where: {
id: userTutorialId,
},
data: updates,
- })
+ });
} else {
upsertedUserTutorial = await ctx.prisma.createUserTutorial({
...updates,
@@ -136,16 +136,16 @@ async function upsertUserTutorial(
id: tutorialId,
},
},
- })
+ });
}
- return upsertedUserTutorial
+ return upsertedUserTutorial;
}
export async function getUserTutorial(
args: { userId: string; tutorialId: any },
ctx: Context,
): Promise {
- const { userId, tutorialId } = args
+ const { userId, tutorialId } = args;
const existingUserTutorials = await ctx.prisma.userTutorials({
first: 1,
where: {
@@ -156,9 +156,9 @@ export async function getUserTutorial(
id: tutorialId,
},
},
- })
+ });
if (existingUserTutorials.length > 0) {
- return existingUserTutorials[0]
+ return existingUserTutorials[0];
}
- return null
+ return null;
}
diff --git a/packages/server/src/graphql/Viewer.ts b/packages/server/src/graphql/Viewer.ts
index 38b48b5..f8277a2 100644
--- a/packages/server/src/graphql/Viewer.ts
+++ b/packages/server/src/graphql/Viewer.ts
@@ -1,33 +1,33 @@
-import { queryField, objectType } from 'yoga'
+import { queryField, objectType } from 'yoga';
export const Viewer = objectType({
name: 'Viewer',
definition: t => {
- t.id('id')
+ t.id('id');
t.field('user', {
type: 'User',
resolve: async (parent, _, ctx) => {
- const { id } = parent
- return await ctx.prisma.user({ id })
+ const { id } = parent;
+ return await ctx.prisma.user({ id });
},
- })
+ });
},
-})
+});
export const viewer = queryField('viewer', {
type: Viewer,
nullable: true,
resolve: (_, args, ctx) => {
try {
- const id = ctx.currentUserId
+ const id = ctx.currentUserId;
if (!id) {
- return null
+ return null;
}
return {
id,
- }
+ };
} catch (e) {
- return null
+ return null;
}
},
-})
+});
diff --git a/packages/server/src/graphql/auth.ts b/packages/server/src/graphql/auth.ts
index c0c8786..21056b5 100644
--- a/packages/server/src/graphql/auth.ts
+++ b/packages/server/src/graphql/auth.ts
@@ -1,22 +1,22 @@
-import { mutationField, stringArg, objectType } from 'yoga'
-import * as jwt from 'jsonwebtoken'
-import { getGithubToken, getGithubUser, GithubUser } from '../github'
-import { Context } from '../context'
-import { User } from '../../.yoga/prisma-client'
-import config from '../config'
-import { PayloadInterface } from './PayloadInterface'
-import { AuthorizeResolver } from 'nexus/dist/core'
+import { mutationField, stringArg, objectType } from 'yoga';
+import * as jwt from 'jsonwebtoken';
+import { getGithubToken, getGithubUser, GithubUser } from '../github';
+import { Context } from '../context';
+import { User } from '../../.yoga/prisma-client';
+import config from '../config';
+import { PayloadInterface } from './PayloadInterface';
+import { AuthorizeResolver } from 'nexus/dist/core';
export const AuthenticateUserPayload = objectType({
name: 'AuthenticateUserPayload',
definition: t => {
- t.implements(PayloadInterface)
+ t.implements(PayloadInterface);
t.field('user', {
type: 'User',
- })
- t.string('token')
+ });
+ t.string('token');
},
-})
+});
export const authenticate = mutationField('authenticate', {
type: AuthenticateUserPayload,
@@ -28,12 +28,12 @@ export const authenticate = mutationField('authenticate', {
}),
},
resolve: async (_, { githubCode }, ctx) => {
- const githubToken = await getGithubToken(githubCode)
- const githubUser = await getGithubUser(githubToken)
- let user = await getPrismaUser(ctx, githubUser.id.toString())
+ const githubToken = await getGithubToken(githubCode);
+ const githubUser = await getGithubUser(githubToken);
+ let user = await getPrismaUser(ctx, githubUser.id.toString());
if (!user) {
- user = await createPrismaUser(ctx, githubUser)
+ user = await createPrismaUser(ctx, githubUser);
}
return {
@@ -42,9 +42,9 @@ export const authenticate = mutationField('authenticate', {
code: null,
token: jwt.sign({ userId: user.id }, config.jwt.SECRET),
user,
- }
+ };
},
-})
+});
// Helpers -------------------------------------------------------------------
@@ -52,7 +52,7 @@ async function getPrismaUser(
ctx: Context,
githubUserId: string,
): Promise {
- return await ctx.prisma.user({ githubUserId })
+ return await ctx.prisma.user({ githubUserId });
}
async function createPrismaUser(
@@ -66,8 +66,8 @@ async function createPrismaUser(
githubHandle: githubUser.login,
bio: githubUser.bio,
avatarUrl: githubUser.avatar_url,
- })
- return user
+ });
+ return user;
}
export const authorizeUser = (): AuthorizeResolver => (
@@ -76,7 +76,7 @@ export const authorizeUser = (): AuthorizeResolver => (
ctx,
) => {
if (ctx.currentUserId) {
- return true
+ return true;
}
- return false
-}
+ return false;
+};
diff --git a/packages/server/src/utils.ts b/packages/server/src/utils.ts
index fd6d564..84df401 100644
--- a/packages/server/src/utils.ts
+++ b/packages/server/src/utils.ts
@@ -1,22 +1,22 @@
-import * as jwt from 'jsonwebtoken'
-import { Context } from "./context";
+import * as jwt from 'jsonwebtoken';
+import { Context } from './context';
import config from './config';
export function getUserId(ctx: Context) {
- const Authorization = ctx.req.get('Authorization')
- if (Authorization) {
- const token = Authorization.replace('Bearer ', '')
- const { userId } = jwt.verify(token, config.jwt.SECRET!) as {
- userId: string
- }
- return userId
- }
+ const Authorization = ctx.req.get('Authorization');
+ if (Authorization) {
+ const token = Authorization.replace('Bearer ', '');
+ const { userId } = jwt.verify(token, config.jwt.SECRET!) as {
+ userId: string;
+ };
+ return userId;
+ }
- throw new AuthError()
+ throw new AuthError();
}
export class AuthError extends Error {
- constructor() {
- super('Not authorized')
- }
+ constructor() {
+ super('Not authorized');
+ }
}
diff --git a/yarn.lock b/yarn.lock
index 860ce9f..9c43c79 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1504,6 +1504,11 @@
version "7.10.6"
resolved "https://registry.yarnpkg.com/@types/node/-/node-7.10.6.tgz#c42137f0f2f6458bf0c898d65f48c5f600911475"
+"@types/normalize-package-data@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
+ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
+
"@types/prettier@1.16.3", "@types/prettier@^1.13.2":
version "1.16.3"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.16.3.tgz#141bdf4dcbaac06fd2b3f05e233ff23b66866f9f"
@@ -2397,6 +2402,11 @@ array-differ@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
+array-differ@^2.0.3:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1"
+ integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==
+
array-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
@@ -2436,7 +2446,7 @@ array-reduce@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
-array-union@^1.0.1:
+array-union@^1.0.1, array-union@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
dependencies:
@@ -5867,6 +5877,13 @@ find-up@^3.0.0:
dependencies:
locate-path "^3.0.0"
+find-up@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz#c367f8024de92efb75f2d4906536d24682065c3a"
+ integrity sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q==
+ dependencies:
+ locate-path "^5.0.0"
+
find-versions@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.1.0.tgz#10161f29cf3eb4350dec10a29bdde75bff0df32d"
@@ -6455,6 +6472,11 @@ get-stdin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+get-stdin@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6"
+ integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==
+
get-stream@3.0.0, get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
@@ -7309,6 +7331,22 @@ https-proxy-agent@^2.2.1:
agent-base "^4.1.0"
debug "^3.1.0"
+husky@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.npmjs.org/husky/-/husky-2.4.1.tgz#dd00f9646f8693b93f7b3a12ba4be00be0eff7ab"
+ integrity sha512-ZRwMWHr7QruR22dQ5l3rEGXQ7rAQYsJYqaeCd+NyOsIFczAtqaApZQP3P4HwLZjCtFbm3SUNYoKuoBXX3AYYfw==
+ dependencies:
+ cosmiconfig "^5.2.0"
+ execa "^1.0.0"
+ find-up "^3.0.0"
+ get-stdin "^7.0.0"
+ is-ci "^2.0.0"
+ pkg-dir "^4.1.0"
+ please-upgrade-node "^3.1.1"
+ read-pkg "^5.1.1"
+ run-node "^1.0.0"
+ slash "^3.0.0"
+
hyperlinker@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e"
@@ -7354,7 +7392,7 @@ ignore-walk@^3.0.1:
dependencies:
minimatch "^3.0.4"
-ignore@^3.3.5:
+ignore@^3.3.5, ignore@^3.3.7:
version "3.3.10"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
@@ -8903,6 +8941,13 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
lockfile@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609"
@@ -9708,6 +9753,11 @@ mozjpeg@^6.0.0:
bin-wrapper "^4.0.0"
logalot "^2.1.0"
+mri@^1.1.0:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a"
+ integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -9736,6 +9786,16 @@ multimatch@^2.1.0:
arrify "^1.0.0"
minimatch "^3.0.0"
+multimatch@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b"
+ integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==
+ dependencies:
+ array-differ "^2.0.3"
+ array-union "^1.0.2"
+ arrify "^1.0.1"
+ minimatch "^3.0.4"
+
mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
@@ -9972,7 +10032,7 @@ nopt@^4.0.1:
abbrev "1"
osenv "^0.1.4"
-normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
dependencies:
@@ -10377,7 +10437,7 @@ p-limit@^1.1.0:
dependencies:
p-try "^1.0.0"
-p-limit@^2.0.0:
+p-limit@^2.0.0, p-limit@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2"
dependencies:
@@ -10395,6 +10455,13 @@ p-locate@^3.0.0:
dependencies:
p-limit "^2.0.0"
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
p-map-series@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
@@ -10824,6 +10891,20 @@ pkg-dir@^3.0.0:
dependencies:
find-up "^3.0.0"
+pkg-dir@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+please-upgrade-node@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac"
+ integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==
+ dependencies:
+ semver-compare "^1.0.0"
+
pluralize@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
@@ -11278,6 +11359,18 @@ pretty-format@^24.0.0, pretty-format@^24.7.0:
ansi-styles "^3.2.0"
react-is "^16.8.4"
+pretty-quick@^1.11.0:
+ version "1.11.0"
+ resolved "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.11.0.tgz#d0bf997f3eb7de3d1bac5ffeb9c335f404d844c8"
+ integrity sha512-hy0yOSnqVykrgoHcCcB72p3B5ERQJcjQI6ExeSGSTFE2cDrPwCQtFb3kXA1F+jUPrbt7orra8U+fjS/Emjgpuw==
+ dependencies:
+ chalk "^2.3.0"
+ execa "^0.8.0"
+ find-up "^2.1.0"
+ ignore "^3.3.7"
+ mri "^1.1.0"
+ multimatch "^3.0.0"
+
prism-react-renderer@^0.1.0, prism-react-renderer@^0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-0.1.6.tgz#c9216baa234fab1c234209fcdaf0cd23a01c50a9"
@@ -11941,6 +12034,16 @@ read-pkg@^3.0.0:
normalize-package-data "^2.3.2"
path-type "^3.0.0"
+read-pkg@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5"
+ integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^4.0.0"
+ type-fest "^0.4.1"
+
read@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
@@ -12486,6 +12589,11 @@ run-async@^2.2.0:
dependencies:
is-promise "^2.1.0"
+run-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"
+ integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==
+
run-queue@^1.0.0, run-queue@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
@@ -12627,6 +12735,11 @@ selfsigned@^1.10.4:
dependencies:
node-forge "0.7.5"
+semver-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
semver-diff@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
@@ -12872,6 +12985,11 @@ slash@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
slice-ansi@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
@@ -13977,6 +14095,11 @@ type-fest@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+type-fest@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8"
+ integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==
+
type-is@^1.6.16, type-is@~1.6.16, type-is@~1.6.17:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"