From 109dc9c2aaadfb52122f42d12eb2dbdf9d811945 Mon Sep 17 00:00:00 2001 From: Rohit Date: Tue, 11 Jun 2019 15:21:48 -0700 Subject: [PATCH 1/2] Prettified everything! --- .prettierignore | 5 + oss | 2 +- packages/gatsby-theme/images.d.ts | 8 +- packages/gatsby-theme/index.ts | 2 +- .../src/assets/icons/GraphQLConf.tsx | 5 +- .../src/assets/icons/LinkArrow.tsx | 5 +- .../gatsby-theme/src/components/Chapter.tsx | 7 +- .../gatsby-theme/src/components/Loader.tsx | 8 +- .../gatsby-theme/src/components/index.d.ts | 2 +- .../gatsby-theme/src/components/listing.tsx | 10 +- .../src/components/shared/base.d.ts | 6 +- .../src/components/shared/styledHelpers.tsx | 2 +- .../src/components/templates/Tutorial.tsx | 11 +- .../gatsby-theme/src/hooks/useLayoutQuery.ts | 4 +- packages/gatsby-theme/src/index.d.ts | 2 +- packages/gatsby-theme/src/pages/callback.tsx | 16 +-- packages/gatsby-theme/src/styles/global.ts | 4 +- packages/gatsby-theme/src/styles/mobile.ts | 2 +- packages/gatsby-theme/src/styles/normalize.ts | 36 +++--- .../src/styles/theme/ThemeInterface.ts | 4 +- .../gatsby-theme/src/styles/theme/index.ts | 62 +++++----- .../gatsby-theme/src/styles/typography.ts | 86 ++++++------- packages/server/prisma/seed.ts | 2 +- packages/server/src/config.ts | 16 +-- packages/server/src/context.ts | 12 +- packages/server/src/github.ts | 113 +++++++++--------- packages/server/src/graphql/Mutation.ts | 7 +- .../server/src/graphql/PayloadInterface.ts | 12 +- packages/server/src/graphql/Query.ts | 7 +- packages/server/src/graphql/Tutorial.ts | 40 +++---- packages/server/src/graphql/User.ts | 6 +- packages/server/src/graphql/UserTutorial.ts | 66 +++++----- packages/server/src/graphql/Viewer.ts | 22 ++-- packages/server/src/graphql/auth.ts | 48 ++++---- packages/server/src/utils.ts | 28 ++--- 35 files changed, 335 insertions(+), 333 deletions(-) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..ca4f4ce --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +package.json +package-lock.json +**/node_modules/** +**/.yoga/** +**/dist/** \ No newline at end of file diff --git a/oss b/oss index 8ff8d79..9f885e5 160000 --- a/oss +++ b/oss @@ -1 +1 @@ -Subproject commit 8ff8d79d5b1a8ab92ba98cfa74b77fff2d350f47 +Subproject commit 9f885e5fc42d002f43c61c5974a5b4c6af34ae38 diff --git a/packages/gatsby-theme/images.d.ts b/packages/gatsby-theme/images.d.ts index f6a4076..dc46791 100644 --- a/packages/gatsby-theme/images.d.ts +++ b/packages/gatsby-theme/images.d.ts @@ -1,4 +1,4 @@ -declare module '*.png' -declare module '*.jpg' -declare module '*.jpeg' -declare module '*.gif' +declare module '*.png'; +declare module '*.jpg'; +declare module '*.jpeg'; +declare module '*.gif'; diff --git a/packages/gatsby-theme/index.ts b/packages/gatsby-theme/index.ts index 0cd3478..bd7b39a 100644 --- a/packages/gatsby-theme/index.ts +++ b/packages/gatsby-theme/index.ts @@ -1,2 +1,2 @@ // no-op -export * from './src/components/shared/base'; \ No newline at end of file +export * from './src/components/shared/base'; diff --git a/packages/gatsby-theme/src/assets/icons/GraphQLConf.tsx b/packages/gatsby-theme/src/assets/icons/GraphQLConf.tsx index 59f077f..d88d0b4 100644 --- a/packages/gatsby-theme/src/assets/icons/GraphQLConf.tsx +++ b/packages/gatsby-theme/src/assets/icons/GraphQLConf.tsx @@ -1,6 +1,6 @@ -import * as React from 'react' +import * as React from 'react'; -export default () => +export default () => ( +); diff --git a/packages/gatsby-theme/src/assets/icons/LinkArrow.tsx b/packages/gatsby-theme/src/assets/icons/LinkArrow.tsx index ca3e2df..89c5205 100644 --- a/packages/gatsby-theme/src/assets/icons/LinkArrow.tsx +++ b/packages/gatsby-theme/src/assets/icons/LinkArrow.tsx @@ -1,6 +1,6 @@ -import * as React from 'react' +import * as React from 'react'; -export default () => +export default () => ( fill="#000" /> +); diff --git a/packages/gatsby-theme/src/components/Chapter.tsx b/packages/gatsby-theme/src/components/Chapter.tsx index 68a8003..b6cc3c5 100644 --- a/packages/gatsby-theme/src/components/Chapter.tsx +++ b/packages/gatsby-theme/src/components/Chapter.tsx @@ -17,11 +17,9 @@ type Tutorial = { type FrontMatter = { pageTitle: string | null; description: string | null; -} +}; -const Chapter: React.FunctionComponent = ({ - num, tutorial -}) => { +const Chapter: React.FunctionComponent = ({ num, tutorial }) => { return ( @@ -31,7 +29,6 @@ const Chapter: React.FunctionComponent = ({ {tutorial.frontmatter.pageTitle} {tutorial.frontmatter.description} - diff --git a/packages/gatsby-theme/src/components/Loader.tsx b/packages/gatsby-theme/src/components/Loader.tsx index a68ff85..9bb8481 100644 --- a/packages/gatsby-theme/src/components/Loader.tsx +++ b/packages/gatsby-theme/src/components/Loader.tsx @@ -169,10 +169,10 @@ export const CenteredLoader: React.SFC<{ height?: string }> = ({ height }) => { return (
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'); + } } From 6144d14b7915624364c50790f54e1415b9c4d41a Mon Sep 17 00:00:00 2001 From: Rohit Date: Tue, 11 Jun 2019 15:24:11 -0700 Subject: [PATCH 2/2] added pre-commit hooks --- package.json | 11 ++++- yarn.lock | 131 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 136 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 61d139e..f0c5502 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,14 @@ }, "devDependencies": { "apollo": "^2.10.0", + "husky": "^2.4.1", "now": "^15.3.0", - "npm-run-all": "^4.1.5" + "npm-run-all": "^4.1.5", + "pretty-quick": "^1.11.0" + }, + "husky": { + "hooks": { + "pre-commit": "pretty-quick --staged" + } } -} \ No newline at end of file +} 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"