chore: set up tslint (#60)

chore: set up tslint
This commit is contained in:
Jean-Philippe Sirois
2019-08-19 00:00:27 -04:00
committed by GitHub
29 changed files with 211 additions and 55 deletions
+1 -1
View File
@@ -1 +1 @@
src/generated/* linguist-vendored generated/* linguist-vendored
+1 -1
View File
@@ -2,7 +2,7 @@ overwrite: true
schema: "http://localhost:8000/___graphql" schema: "http://localhost:8000/___graphql"
documents: "src/**/*.graphql" documents: "src/**/*.graphql"
generates: generates:
src/generated/graphql.ts: generated/graphql.ts:
plugins: plugins:
- "typescript" - "typescript"
- "typescript-operations" - "typescript-operations"
View File
+111
View File
@@ -5274,6 +5274,12 @@
} }
} }
}, },
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"diffie-hellman": { "diffie-hellman": {
"version": "5.0.3", "version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@@ -16611,6 +16617,106 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
}, },
"tslint": {
"version": "5.18.0",
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz",
"integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"builtin-modules": "^1.1.1",
"chalk": "^2.3.0",
"commander": "^2.12.1",
"diff": "^3.2.0",
"glob": "^7.1.1",
"js-yaml": "^3.13.1",
"minimatch": "^3.0.4",
"mkdirp": "^0.5.1",
"resolve": "^1.3.2",
"semver": "^5.3.0",
"tslib": "^1.8.0",
"tsutils": "^2.29.0"
},
"dependencies": {
"builtin-modules": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
"dev": true
}
}
},
"tslint-config-prettier": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz",
"integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==",
"dev": true
},
"tslint-eslint-rules": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz",
"integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==",
"dev": true,
"requires": {
"doctrine": "0.7.2",
"tslib": "1.9.0",
"tsutils": "^3.0.0"
},
"dependencies": {
"doctrine": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz",
"integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=",
"dev": true,
"requires": {
"esutils": "^1.1.6",
"isarray": "0.0.1"
}
},
"esutils": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz",
"integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=",
"dev": true
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
"dev": true
},
"tslib": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
"integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==",
"dev": true
},
"tsutils": {
"version": "3.17.1",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
"integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
"dev": true,
"requires": {
"tslib": "^1.8.1"
}
}
}
},
"tslint-react-hooks": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tslint-react-hooks/-/tslint-react-hooks-2.2.1.tgz",
"integrity": "sha512-bqIg2uZe+quJMfSOGc4OOZ4awo6TP1ejGDGS6IKg2WIrS0XnWfhUJ99i3B8rUpnZhuD4vRSvyYIbXPUmEqQxxQ==",
"dev": true
},
"tsutils": {
"version": "2.29.0",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
"integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
"dev": true,
"requires": {
"tslib": "^1.8.1"
}
},
"tty-browserify": { "tty-browserify": {
"version": "0.0.0", "version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
@@ -16661,6 +16767,11 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
}, },
"typescript": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"ua-parser-js": { "ua-parser-js": {
"version": "0.7.20", "version": "0.7.20",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz",
+9 -2
View File
@@ -21,6 +21,8 @@
"develop": "gatsby develop", "develop": "gatsby develop",
"fetch-users": "node ./scripts/fetchUsers.js", "fetch-users": "node ./scripts/fetchUsers.js",
"format": "prettier --write src/**/*.{js,jsx}", "format": "prettier --write src/**/*.{js,jsx}",
"lint": "tslint -c tslint.json '{src,scripts}/**/*.{js,ts,tsx}'",
"lint:fix": "npm run lint -- --fix",
"serve": "gatsby serve", "serve": "gatsby serve",
"start": "npm run develop", "start": "npm run develop",
"test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\"" "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\""
@@ -49,7 +51,8 @@
"react-helmet": "^5.2.1", "react-helmet": "^5.2.1",
"react-highlight": "^0.12.0", "react-highlight": "^0.12.0",
"react-perfect-scrollbar": "^1.5.3", "react-perfect-scrollbar": "^1.5.3",
"styled-components": "^4.3.2" "styled-components": "^4.3.2",
"typescript": "^3.5.3"
}, },
"devDependencies": { "devDependencies": {
"@graphql-codegen/cli": "^1.4.0", "@graphql-codegen/cli": "^1.4.0",
@@ -65,6 +68,10 @@
"@types/styled-components": "^4.1.18", "@types/styled-components": "^4.1.18",
"babel-plugin-styled-components": "^1.10.6", "babel-plugin-styled-components": "^1.10.6",
"discord.js": "^11.5.1", "discord.js": "^11.5.1",
"prettier": "^1.18.2" "prettier": "^1.18.2",
"tslint": "^5.18.0",
"tslint-config-prettier": "^1.18.0",
"tslint-eslint-rules": "^5.4.0",
"tslint-react-hooks": "^2.2.1"
} }
} }
+2 -2
View File
@@ -33,9 +33,9 @@ module.exports = {
const avatar = target ? target.avatar : this.getDefaultAvatar(hash) const avatar = target ? target.avatar : this.getDefaultAvatar(hash)
return { return {
name,
hash,
avatar, avatar,
hash,
name,
} }
}, },
resolveAuthors(users, authors) { resolveAuthors(users, authors) {
+5 -1
View File
@@ -22,6 +22,7 @@ const writeS = (content, dest) => {
} }
client.once("ready", async () => { client.once("ready", async () => {
// tslint:disable-next-line no-console
console.log("Bot ready, fetching user list...") console.log("Bot ready, fetching user list...")
const tph = client.guilds.get(TPH) const tph = client.guilds.get(TPH)
if (!tph) { if (!tph) {
@@ -29,16 +30,19 @@ client.once("ready", async () => {
} }
const guild = await tph.fetchMembers() const guild = await tph.fetchMembers()
const memberInfo = guild.members.map(member => ({ const memberInfo = guild.members.map(member => ({
identifier: `${member.user.username}#${member.user.discriminator}`,
avatar: member.user.displayAvatarURL, avatar: member.user.displayAvatarURL,
identifier: `${member.user.username}#${member.user.discriminator}`,
})) }))
const wrs = fs.createWriteStream(DESTINATION) const wrs = fs.createWriteStream(DESTINATION)
// tslint:disable-next-line no-console
console.log(`Fetched ${memberInfo.length} users, writing to ${DESTINATION}`) console.log(`Fetched ${memberInfo.length} users, writing to ${DESTINATION}`)
writeS(memberInfo, wrs).on("finish", () => { writeS(memberInfo, wrs).on("finish", () => {
// tslint:disable-next-line no-console
console.log("Finished writing list") console.log("Finished writing list")
process.exit(0) process.exit(0)
}) })
}) })
// tslint:disable-next-line no-console
console.log("Attempting to log in...") console.log("Attempting to log in...")
client.login(process.env.BOT_TOKEN) client.login(process.env.BOT_TOKEN)
+4 -4
View File
@@ -1,21 +1,21 @@
import React, { useState } from "react" import React, { useState } from "react"
interface SidebarProviderProps { interface ISidebarProviderProps {
children: React.ReactNode children: React.ReactNode
} }
export interface SidebarContextInterface { export interface ISidebarContextInterface {
current: number current: number
setCurrent: (index: number) => void setCurrent: (index: number) => void
} }
export const SidebarContext = React.createContext<SidebarContextInterface | null>( export const SidebarContext = React.createContext<ISidebarContextInterface | null>(
null null
) )
export function SidebarProvider({ export function SidebarProvider({
children, children,
}: SidebarProviderProps): JSX.Element { }: ISidebarProviderProps): JSX.Element {
const [current, setCurrent] = useState(0) const [current, setCurrent] = useState(0)
function selectFirstLevel(index: number) { function selectFirstLevel(index: number) {
+1 -1
View File
@@ -1,6 +1,6 @@
import React from "react" import React from "react"
import * as SC from "./styles"
import { Container } from "../Container" import { Container } from "../Container"
import * as SC from "./styles"
export function Footer() { export function Footer() {
return ( return (
+1 -1
View File
@@ -1,7 +1,7 @@
import { Link } from "gatsby" import { Link } from "gatsby"
import React, { PropsWithChildren } from "react" import React, { PropsWithChildren } from "react"
import { Container } from "../Container"
import logo from "../../images/tph-logo.png" import logo from "../../images/tph-logo.png"
import { Container } from "../Container"
import * as SC from "./styles" import * as SC from "./styles"
function MenuItem({ children, to }: PropsWithChildren<{ to: string }>) { function MenuItem({ children, to }: PropsWithChildren<{ to: string }>) {
+4 -4
View File
@@ -5,16 +5,16 @@
* See: https://www.gatsbyjs.org/docs/use-static-query/ * See: https://www.gatsbyjs.org/docs/use-static-query/
*/ */
import { graphql, useStaticQuery } from "gatsby"
import React, { PropsWithChildren } from "react" import React, { PropsWithChildren } from "react"
import { useStaticQuery, graphql } from "gatsby"
import Scrollbar from "react-perfect-scrollbar"
import "react-perfect-scrollbar/dist/css/styles.css"
import { GlobalStyles } from "../../globalStyles"
import { Container } from "../Container" import { Container } from "../Container"
import { Footer } from "../Footer" import { Footer } from "../Footer"
import { Header } from "../Header" import { Header } from "../Header"
import { GlobalStyles } from "../../globalStyles"
import * as SC from "./styles" import * as SC from "./styles"
import Scrollbar from "react-perfect-scrollbar"
import "react-perfect-scrollbar/dist/css/styles.css"
export function Layout({ children }: PropsWithChildren<{}>) { export function Layout({ children }: PropsWithChildren<{}>) {
const data = useStaticQuery(graphql` const data = useStaticQuery(graphql`
+4 -4
View File
@@ -1,12 +1,12 @@
import React from "react"
import * as SC from "./styles"
import Prism from "prismjs" import Prism from "prismjs"
import "prismjs/components/prism-python"
import "prismjs/components/prism-markup-templating" import "prismjs/components/prism-markup-templating"
import "prismjs/components/prism-php" import "prismjs/components/prism-php"
import "prismjs/components/prism-python"
import "prismjs/plugins/line-numbers/prism-line-numbers.css" import "prismjs/plugins/line-numbers/prism-line-numbers.css"
import React from "react"
import * as SC from "./styles"
interface MarkdownProps { interface IMarkdownProps {
content: string content: string
} }
+3 -3
View File
@@ -1,11 +1,11 @@
import React from "react" import React from "react"
import { IFileOrFolder } from "../ResourcesSidebar/index"
import ChevronUp from "../../icons/chevron-up.svg" import ChevronUp from "../../icons/chevron-up.svg"
import { traversePaths } from "../../utils" import { traversePaths } from "../../utils"
import { IFileOrFolder } from "../ResourcesSidebar/index"
import * as SC from "./styles" import * as SC from "./styles"
interface ResourceBreadcrumbProps { interface IResourceBreadcrumbProps {
relativePath: any relativePath: any
} }
@@ -24,7 +24,7 @@ function flatten([
return flatten([...currNode.children, ...previousNodes, currNode]) return flatten([...currNode.children, ...previousNodes, currNode])
} }
export function ResourceBreadcrumb({ relativePath }: ResourceBreadcrumbProps) { export function ResourceBreadcrumb({ relativePath }: IResourceBreadcrumbProps) {
const paths = relativePath.split("/") const paths = relativePath.split("/")
const breadcrumbItems = flatten([traversePaths(paths)]) const breadcrumbItems = flatten([traversePaths(paths)])
+1 -1
View File
@@ -1,5 +1,5 @@
import styled from "styled-components"
import { Link } from "gatsby" import { Link } from "gatsby"
import styled from "styled-components"
export const ResourceBreadcrumbWrapper = styled.div` export const ResourceBreadcrumbWrapper = styled.div`
display: flex; display: flex;
+2 -2
View File
@@ -1,11 +1,11 @@
import React, { Fragment } from "react" import React, { Fragment } from "react"
import { StackedAvatars } from "../StackedAvatars"
import ChevronUp from "../../icons/chevron-up.svg" import ChevronUp from "../../icons/chevron-up.svg"
import { ResourceBreadcrumb } from "../ResourceBreadcrumb" import { ResourceBreadcrumb } from "../ResourceBreadcrumb"
import { StackedAvatars } from "../StackedAvatars"
import * as SC from "./styles" import * as SC from "./styles"
interface ResourceHeaderProps { interface IResourceHeaderProps {
relativePath: any relativePath: any
title: any title: any
authors: any authors: any
+1 -1
View File
@@ -1,5 +1,5 @@
import styled, { css } from "styled-components"
import { Link } from "gatsby" import { Link } from "gatsby"
import styled, { css } from "styled-components"
import { fontFamily, modularScale } from "../../design/typography" import { fontFamily, modularScale } from "../../design/typography"
export const ResourceHeaderWrapper = styled.div` export const ResourceHeaderWrapper = styled.div`
+1 -1
View File
@@ -8,9 +8,9 @@
import React, { PropsWithChildren } from "react" import React, { PropsWithChildren } from "react"
import { GlobalStyles } from "../../globalStyles" import { GlobalStyles } from "../../globalStyles"
import { SidebarProvider } from "../../SidebarProvider"
import { ResourcesSidebar } from "../ResourcesSidebar" import { ResourcesSidebar } from "../ResourcesSidebar"
import * as SC from "./styles" import * as SC from "./styles"
import { SidebarProvider } from "../../SidebarProvider"
export function ResourcesLayout({ children }: PropsWithChildren<{}>) { export function ResourcesLayout({ children }: PropsWithChildren<{}>) {
return ( return (
+5 -5
View File
@@ -1,10 +1,10 @@
import React, { useState, PropsWithChildren } from "react" import { graphql, Link, useStaticQuery } from "gatsby"
import { useStaticQuery, graphql, Link } from "gatsby" import React, { PropsWithChildren, useState } from "react"
import useBuildTree from "./useBuildTree"
import useSidebar from "./../../hooks/useSidebar"
import Banner from "../../images/tph-banner.svg"
import TriangleDown from "../../icons/triangle-down.svg" import TriangleDown from "../../icons/triangle-down.svg"
import Banner from "../../images/tph-banner.svg"
import useSidebar from "./../../hooks/useSidebar"
import * as SC from "./styles" import * as SC from "./styles"
import useBuildTree from "./useBuildTree"
export interface IFile { export interface IFile {
title: string title: string
+1 -1
View File
@@ -1,5 +1,5 @@
import styled from "styled-components"
import { Link } from "gatsby" import { Link } from "gatsby"
import styled from "styled-components"
import ChevronUp from "../../icons/chevron-up.svg" import ChevronUp from "../../icons/chevron-up.svg"
export const ResourcesSidebarWrapper = styled.div` export const ResourcesSidebarWrapper = styled.div`
@@ -1,13 +1,13 @@
import partition from "ramda/es/partition"
import chain from "ramda/es/chain" import chain from "ramda/es/chain"
import partition from "ramda/es/partition"
import { traversePaths } from "../../utils" import { traversePaths } from "../../utils"
import { import {
IFileOrFolder,
IFile,
IFolder,
IAllResourcesQuery, IAllResourcesQuery,
IFile,
IFileOrFolder,
IFileQuery, IFileQuery,
IFolder,
} from "./index" } from "./index"
function generateFolder({ function generateFolder({
@@ -44,7 +44,7 @@ function generateFile({
} }
function join([head, ...tail]: IFileOrFolder[]): IFileOrFolder[] { function join([head, ...tail]: IFileOrFolder[]): IFileOrFolder[] {
if (!head) return [] if (!head) { return [] }
const [similarFs, remaining] = partition( const [similarFs, remaining] = partition(
obj => obj.title === head.title && obj.type === head.type, obj => obj.title === head.title && obj.type === head.type,
@@ -1,14 +1,14 @@
import React, { PropsWithChildren } from "react" import React, { PropsWithChildren } from "react"
import * as SC from "./styles" import * as SC from "./styles"
export interface ResourcesSidebarSectionProps { export interface IResourcesSidebarSectionProps {
readonly title: string readonly title: string
} }
export function ResourcesSidebarSection({ export function ResourcesSidebarSection({
title, title,
children, children,
}: PropsWithChildren<ResourcesSidebarSectionProps>) { }: PropsWithChildren<IResourcesSidebarSectionProps>) {
return ( return (
<div> <div>
<SC.SidebarTitle>{title}</SC.SidebarTitle> <SC.SidebarTitle>{title}</SC.SidebarTitle>
+3 -3
View File
@@ -1,8 +1,8 @@
import { graphql, useStaticQuery } from "gatsby"
import React from "react" import React from "react"
import Helmet from "react-helmet" import Helmet from "react-helmet"
import { useStaticQuery, graphql } from "gatsby"
interface SEOProps { interface ISEOProps {
readonly description?: string readonly description?: string
readonly lang?: string readonly lang?: string
readonly meta?: any[] readonly meta?: any[]
@@ -16,7 +16,7 @@ export function SEO({
meta = [], meta = [],
keywords = [], keywords = [],
title, title,
}: SEOProps) { }: ISEOProps) {
const { site } = useStaticQuery( const { site } = useStaticQuery(
graphql` graphql`
query { query {
+2 -2
View File
@@ -2,11 +2,11 @@ import React from "react"
import * as SC from "./styles" import * as SC from "./styles"
interface StackedAvatarsProps { interface IStackedAvatarsProps {
authors: any authors: any
} }
export function StackedAvatars({ authors }: StackedAvatarsProps) { export function StackedAvatars({ authors }: IStackedAvatarsProps) {
return ( return (
<SC.StackedAvatarsWrapper count={authors.length}> <SC.StackedAvatarsWrapper count={authors.length}>
{authors.map((author, index) => ( {authors.map((author, index) => (
+2 -2
View File
@@ -1,7 +1,7 @@
import React, { Fragment } from "react"
import { graphql } from "gatsby" import { graphql } from "gatsby"
import React, { Fragment } from "react"
import { MarkdownRemark, Query } from "../../generated/graphql"
import { Markdown } from "../components/Markdown" import { Markdown } from "../components/Markdown"
import { MarkdownRemark, Query } from "../generated/graphql"
import { SEO } from "../components/SEO" import { SEO } from "../components/SEO"
function AboutPage({ data }: ComponentQuery<{ md: MarkdownRemark }>) { function AboutPage({ data }: ComponentQuery<{ md: MarkdownRemark }>) {
+1 -1
View File
@@ -1,5 +1,5 @@
import React, { Fragment } from "react"
import { Link } from "gatsby" import { Link } from "gatsby"
import React, { Fragment } from "react"
import { SEO } from "../components/SEO" import { SEO } from "../components/SEO"
+2 -2
View File
@@ -1,7 +1,7 @@
import React, { Fragment } from "react"
import { graphql } from "gatsby" import { graphql } from "gatsby"
import React, { Fragment } from "react"
import { MarkdownRemark, Query } from "../../generated/graphql"
import { Markdown } from "../components/Markdown" import { Markdown } from "../components/Markdown"
import { MarkdownRemark, Query } from "../generated/graphql"
import { SEO } from "../components/SEO" import { SEO } from "../components/SEO"
function RulesPage({ data }: ComponentQuery<{ md: MarkdownRemark }>) { function RulesPage({ data }: ComponentQuery<{ md: MarkdownRemark }>) {
+2 -2
View File
@@ -1,8 +1,8 @@
import React, { Fragment } from "react"
import { graphql } from "gatsby" import { graphql } from "gatsby"
import React, { Fragment } from "react"
import { Markdown } from "../components/Markdown" import { Markdown } from "../components/Markdown"
import { SEO } from "../components/SEO"
import { ResourceHeader } from "../components/ResourceHeader" import { ResourceHeader } from "../components/ResourceHeader"
import { SEO } from "../components/SEO"
// @todo maybe find alternative type for data // @todo maybe find alternative type for data
function LanguagePost({ data }: any) { function LanguagePost({ data }: any) {
+1 -1
View File
@@ -2,7 +2,7 @@ import { IFileOrFolder } from "../components/ResourcesSidebar/index"
export function traversePaths( export function traversePaths(
[head, ...tail]: string[], [head, ...tail]: string[],
basePath = "/resources" basePath: string = "/resources"
): IFileOrFolder { ): IFileOrFolder {
const path = basePath + "/" + head const path = basePath + "/" + head
const isFile = !tail.length const isFile = !tail.length
+34
View File
@@ -0,0 +1,34 @@
{
"defaultSeverity": "error",
"extends": [
"tslint:latest",
"tslint-config-prettier",
"tslint-eslint-rules",
"tslint-react-hooks"
],
"linterOptions": {
"exclude": ["node_modules"]
},
"rules": {
"no-constant-condition": true,
"no-console": false,
"interface-name": [true, "always-prefix"],
"object-curly-spacing": true,
"object-literal-sort-keys": false,
"member-access": [true, "no-public"],
"no-var-keyword": true,
"typedef": [
true,
"parameter",
"property-declaration",
"member-variable-declaration"
],
"no-eval": true,
"no-parameter-reassignment": true,
"no-submodule-imports": false,
"react-hooks-nesting": "error"
},
"rulesDirectory": ["node_modules/tslint-eslint-rules/dist/rules"]
}