1
0
mirror of https://github.com/kremalicious/portfolio.git synced 2024-12-22 17:23:22 +01:00

add prettier-plugin-sort-imports

This commit is contained in:
Matthias Kretschmann 2023-01-29 03:58:06 +00:00
parent 539eb20359
commit 730174f34c
Signed by: m
GPG Key ID: 606EEEF3C479A91F
36 changed files with 330 additions and 94 deletions

View File

@ -2,5 +2,16 @@
"semi": false, "semi": false,
"singleQuote": true, "singleQuote": true,
"trailingComma": "none", "trailingComma": "none",
"tabWidth": 2 "tabWidth": 2,
"importOrder": [
"^(react/(.*)$)|^(react$)",
"^(next/(.*)$)|^(next$)",
"<THIRD_PARTY_MODULES>",
"^[./]"
],
"importOrderSeparation": false,
"importOrderSortSpecifiers": true,
"importOrderBuiltinModulesToTop": true,
"importOrderMergeDuplicateImports": true,
"importOrderCombineTypeAndValueImports": true
} }

225
package-lock.json generated
View File

@ -28,6 +28,7 @@
"@svgr/webpack": "^6.5.1", "@svgr/webpack": "^6.5.1",
"@testing-library/jest-dom": "^5.16.5", "@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0", "@testing-library/react": "^13.4.0",
"@trivago/prettier-plugin-sort-imports": "^4.0.0",
"@types/jest": "^29.2.6", "@types/jest": "^29.2.6",
"@types/js-yaml": "^4.0.5", "@types/js-yaml": "^4.0.5",
"@types/sharp": "^0.31.1", "@types/sharp": "^0.31.1",
@ -3822,6 +3823,124 @@
"node": ">= 10" "node": ">= 10"
} }
}, },
"node_modules/@trivago/prettier-plugin-sort-imports": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.0.0.tgz",
"integrity": "sha512-Tyuk5ZY4a0e2MNFLdluQO9F6d1awFQYXVVujEPFfvKPPXz8DADNHzz73NMhwCSXGSuGGZcA/rKOyZBrxVNMxaA==",
"dev": true,
"dependencies": {
"@babel/core": "7.17.8",
"@babel/generator": "7.17.7",
"@babel/parser": "7.18.9",
"@babel/traverse": "7.17.3",
"@babel/types": "7.17.0",
"javascript-natural-sort": "0.7.1",
"lodash": "4.17.21"
},
"peerDependencies": {
"@vue/compiler-sfc": "3.x",
"prettier": "2.x"
}
},
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/core": {
"version": "7.17.8",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz",
"integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.16.7",
"@babel/generator": "^7.17.7",
"@babel/helper-compilation-targets": "^7.17.7",
"@babel/helper-module-transforms": "^7.17.7",
"@babel/helpers": "^7.17.8",
"@babel/parser": "^7.17.8",
"@babel/template": "^7.16.7",
"@babel/traverse": "^7.17.3",
"@babel/types": "^7.17.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.1.2",
"semver": "^6.3.0"
},
"engines": {
"node": ">=6.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/babel"
}
},
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/generator": {
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz",
"integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==",
"dev": true,
"dependencies": {
"@babel/types": "^7.17.0",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser": {
"version": "7.18.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
"integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse": {
"version": "7.17.3",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz",
"integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.16.7",
"@babel/generator": "^7.17.3",
"@babel/helper-environment-visitor": "^7.16.7",
"@babel/helper-function-name": "^7.16.7",
"@babel/helper-hoist-variables": "^7.16.7",
"@babel/helper-split-export-declaration": "^7.16.7",
"@babel/parser": "^7.17.3",
"@babel/types": "^7.17.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/types": {
"version": "7.17.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
"integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.16.7",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@trysound/sax": { "node_modules/@trysound/sax": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
@ -4245,6 +4364,81 @@
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
} }
}, },
"node_modules/@vue/compiler-core": {
"version": "3.2.45",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
"integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
"dev": true,
"peer": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.2.45",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
"integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
"dev": true,
"peer": true,
"dependencies": {
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.2.45",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz",
"integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==",
"dev": true,
"peer": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.45",
"@vue/compiler-dom": "3.2.45",
"@vue/compiler-ssr": "3.2.45",
"@vue/reactivity-transform": "3.2.45",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7",
"postcss": "^8.1.10",
"source-map": "^0.6.1"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.2.45",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
"integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
"dev": true,
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"node_modules/@vue/reactivity-transform": {
"version": "3.2.45",
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz",
"integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==",
"dev": true,
"peer": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
}
},
"node_modules/@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==",
"dev": true,
"peer": true
},
"node_modules/@yaireo/relative-time": { "node_modules/@yaireo/relative-time": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/@yaireo/relative-time/-/relative-time-1.0.2.tgz", "resolved": "https://registry.npmjs.org/@yaireo/relative-time/-/relative-time-1.0.2.tgz",
@ -6474,6 +6668,13 @@
"node": ">=4.0" "node": ">=4.0"
} }
}, },
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true,
"peer": true
},
"node_modules/esutils": { "node_modules/esutils": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@ -7888,6 +8089,12 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/javascript-natural-sort": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz",
"integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==",
"dev": true
},
"node_modules/jest": { "node_modules/jest": {
"version": "29.3.1", "version": "29.3.1",
"resolved": "https://registry.npmjs.org/jest/-/jest-29.3.1.tgz", "resolved": "https://registry.npmjs.org/jest/-/jest-29.3.1.tgz",
@ -9386,6 +9593,16 @@
"lz-string": "bin/bin.js" "lz-string": "bin/bin.js"
} }
}, },
"node_modules/magic-string": {
"version": "0.25.9",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
"dev": true,
"peer": true,
"dependencies": {
"sourcemap-codec": "^1.4.8"
}
},
"node_modules/make-dir": { "node_modules/make-dir": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@ -12191,6 +12408,14 @@
"source-map": "^0.6.0" "source-map": "^0.6.0"
} }
}, },
"node_modules/sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"deprecated": "Please use @jridgewell/sourcemap-codec instead",
"dev": true,
"peer": true
},
"node_modules/space-separated-tokens": { "node_modules/space-separated-tokens": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",

View File

@ -43,6 +43,7 @@
"@svgr/webpack": "^6.5.1", "@svgr/webpack": "^6.5.1",
"@testing-library/jest-dom": "^5.16.5", "@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0", "@testing-library/react": "^13.4.0",
"@trivago/prettier-plugin-sort-imports": "^4.0.0",
"@types/jest": "^29.2.6", "@types/jest": "^29.2.6",
"@types/js-yaml": "^4.0.5", "@types/js-yaml": "^4.0.5",
"@types/sharp": "^0.31.1", "@types/sharp": "^0.31.1",

View File

@ -1,4 +1,4 @@
import { useEffect, useState, MouseEvent } from 'react' import { MouseEvent, useEffect, useState } from 'react'
import Link from 'next/link' import Link from 'next/link'
import Button from '../Button' import Button from '../Button'
import styles from './index.module.css' import styles from './index.module.css'

View File

@ -1,7 +1,7 @@
import { useReducedMotion, LazyMotion, domAnimation, m } from 'framer-motion' import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion'
import { moveInBottom, getAnimationProps } from '../Transitions'
import styles from './index.module.css'
import meta from '../../../_content/meta.json' import meta from '../../../_content/meta.json'
import { getAnimationProps, moveInBottom } from '../Transitions'
import styles from './index.module.css'
export default function Availability() { export default function Availability() {
const shouldReduceMotion = useReducedMotion() const shouldReduceMotion = useReducedMotion()

View File

@ -1,9 +1,9 @@
import LogoUnit from '../LogoUnit'
import Networks from '../Networks'
import styles from './index.module.css'
import meta from '../../../_content/meta.json' import meta from '../../../_content/meta.json'
import resume from '../../../_content/resume.json' import resume from '../../../_content/resume.json'
import LogoUnit from '../LogoUnit'
import Networks from '../Networks'
import Vcard from '../Vcard' import Vcard from '../Vcard'
import styles from './index.module.css'
export default function Footer() { export default function Footer() {
const year = new Date().getFullYear() const year = new Date().getFullYear()

View File

@ -1,4 +1,4 @@
import { render, screen, act } from '@testing-library/react' import { act, render, screen } from '@testing-library/react'
import Header from '.' import Header from '.'
describe('Header', () => { describe('Header', () => {

View File

@ -1,9 +1,9 @@
import Networks from '../Networks' import { Suspense } from 'react'
import dynamic from 'next/dynamic'
import Availability from '../Availability' import Availability from '../Availability'
import LogoUnit from '../LogoUnit' import LogoUnit from '../LogoUnit'
import Networks from '../Networks'
import styles from './index.module.css' import styles from './index.module.css'
import dynamic from 'next/dynamic'
import { Suspense } from 'react'
const DynamicLocation = dynamic(() => import('../Location'), { const DynamicLocation = dynamic(() => import('../Location'), {
suspense: true suspense: true

View File

@ -1,5 +1,4 @@
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import Icon from '.' import Icon from '.'
describe('Icon', () => { describe('Icon', () => {

View File

@ -2,28 +2,28 @@
// import * as Feather from 'react-feather' // import * as Feather from 'react-feather'
import { import {
ArrowDownCircle, ArrowDownCircle,
Edit,
GitHub,
Twitter,
Rss,
Sun,
Moon,
Compass,
FileText,
Key,
Image,
Mail,
MapPin,
Globe,
Briefcase,
Award, Award,
BookOpen, BookOpen,
Star, Briefcase,
Info,
Dribbble,
ChevronDown,
Check, Check,
Monitor ChevronDown,
Compass,
Dribbble,
Edit,
FileText,
GitHub,
Globe,
Image,
Info,
Key,
Mail,
MapPin,
Monitor,
Moon,
Rss,
Star,
Sun,
Twitter
} from 'react-feather' } from 'react-feather'
import Mastodon from '../../images/mastodon.svg' import Mastodon from '../../images/mastodon.svg'
import styles from './index.module.css' import styles from './index.module.css'

View File

@ -1,9 +1,9 @@
import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion'
import { getAnimationProps, moveInTop } from '../Transitions'
import styles from './index.module.css'
import { useLocation } from '../../hooks/useLocation'
import RelativeTime from '@yaireo/relative-time' import RelativeTime from '@yaireo/relative-time'
import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion'
import { useLocation } from '../../hooks/useLocation'
import { getAnimationProps, moveInTop } from '../Transitions'
import { Flag } from './Flag' import { Flag } from './Flag'
import styles from './index.module.css'
export default function Location() { export default function Location() {
const { now, next } = useLocation() const { now, next } = useLocation()

View File

@ -1,8 +1,8 @@
import Link from 'next/link' import Link from 'next/link'
import { useRouter } from 'next/router'
import resume from '../../../_content/resume.json'
import Logo from '../../images/logo.svg' import Logo from '../../images/logo.svg'
import styles from './index.module.css' import styles from './index.module.css'
import resume from '../../../_content/resume.json'
import { useRouter } from 'next/router'
type Props = { type Props = {
small?: boolean small?: boolean

View File

@ -1,4 +1,4 @@
import { render, act } from '@testing-library/react' import { act, render } from '@testing-library/react'
import Meta from '.' import Meta from '.'
describe('Meta', () => { describe('Meta', () => {

View File

@ -1,7 +1,7 @@
import { LazyMotion, domAnimation, m } from 'framer-motion'
import Icon from '../Icon' import Icon from '../Icon'
import styles from './index.module.css'
import { LazyMotion, m, domAnimation } from 'framer-motion'
import { moveInTop } from '../Transitions' import { moveInTop } from '../Transitions'
import styles from './index.module.css'
export const NetworkLink = ({ name, url }: { name: string; url: string }) => { export const NetworkLink = ({ name, url }: { name: string; url: string }) => {
const linkClasses = const linkClasses =

View File

@ -1,8 +1,8 @@
import styles from './index.module.css'
import resume from '../../../_content/resume.json'
import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion' import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion'
import resume from '../../../_content/resume.json'
import { getAnimationProps } from '../Transitions' import { getAnimationProps } from '../Transitions'
import { NetworkLink } from './NetworkLink' import { NetworkLink } from './NetworkLink'
import styles from './index.module.css'
type Props = { type Props = {
label: string label: string

View File

@ -1,11 +1,11 @@
import ProjectTechstack from './Techstack' import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion'
import ProjectLinks from './Links'
import type ImageType from '../../interfaces/image' import type ImageType from '../../interfaces/image'
import type ProjectType from '../../interfaces/project' import type ProjectType from '../../interfaces/project'
import ProjectImage from '../ProjectImage' import ProjectImage from '../ProjectImage'
import styles from './index.module.css'
import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion'
import { getAnimationProps, moveInBottom, moveInTop } from '../Transitions' import { getAnimationProps, moveInBottom, moveInTop } from '../Transitions'
import ProjectLinks from './Links'
import ProjectTechstack from './Techstack'
import styles from './index.module.css'
const containerVariants = { const containerVariants = {
enter: { enter: {

View File

@ -1,12 +1,12 @@
import { useEffect, useState } from 'react'
import Image from 'next/image'
import { import {
domAnimation,
LazyMotion, LazyMotion,
domAnimation,
m, m,
useAnimation, useAnimation,
useReducedMotion useReducedMotion
} from 'framer-motion' } from 'framer-motion'
import Image from 'next/image'
import { useState, useEffect } from 'react'
import ImageType from '../../interfaces/image' import ImageType from '../../interfaces/image'
import { getAnimationProps } from '../Transitions' import { getAnimationProps } from '../Transitions'
import styles from './index.module.css' import styles from './index.module.css'

View File

@ -1,8 +1,8 @@
import { forwardRef, ForwardedRef } from 'react' import { ForwardedRef, forwardRef } from 'react'
import Link from 'next/link' import Link from 'next/link'
import ProjectType from '../../interfaces/project'
import ProjectImage from '../ProjectImage' import ProjectImage from '../ProjectImage'
import styles from './index.module.css' import styles from './index.module.css'
import ProjectType from '../../interfaces/project'
export const Project = forwardRef( export const Project = forwardRef(
( (

View File

@ -1,7 +1,7 @@
import { useEffect, createRef } from 'react' import { createRef, useEffect } from 'react'
import styles from './index.module.css'
import ProjectType from '../../interfaces/project' import ProjectType from '../../interfaces/project'
import { Project } from './Project' import { Project } from './Project'
import styles from './index.module.css'
type Props = { type Props = {
projects: { slug: string }[] projects: { slug: string }[]

View File

@ -1,7 +1,7 @@
import Link from 'next/link' import Link from 'next/link'
import styles from './index.module.css'
import ProjectImage from '../ProjectImage'
import ImageType from '../../interfaces/image' import ImageType from '../../interfaces/image'
import ProjectImage from '../ProjectImage'
import styles from './index.module.css'
type Props = { type Props = {
title: string title: string

View File

@ -1,5 +1,5 @@
import ProjectPreview from '../ProjectPreview'
import ProjectType from '../../interfaces/project' import ProjectType from '../../interfaces/project'
import ProjectPreview from '../ProjectPreview'
import styles from './index.module.css' import styles from './index.module.css'
type Props = { type Props = {

View File

@ -1,7 +1,7 @@
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import Repository from '../Repository'
import repos from '../../../tests/__fixtures__/repos.json' import repos from '../../../tests/__fixtures__/repos.json'
import Repo from '../../interfaces/repo' import Repo from '../../interfaces/repo'
import Repository from '../Repository'
describe('Repository', () => { describe('Repository', () => {
it('renders correctly', () => { it('renders correctly', () => {

View File

@ -1,7 +1,7 @@
import Icon from '../Icon'
import * as Select from '@radix-ui/react-select' import * as Select from '@radix-ui/react-select'
import { getIconName } from './index' import Icon from '../Icon'
import styles from './Item.module.css' import styles from './Item.module.css'
import { getIconName } from './index'
export function Item({ theme }: { theme: string }) { export function Item({ theme }: { theme: string }) {
return ( return (

View File

@ -1,4 +1,4 @@
import { render, fireEvent, cleanup, waitFor } from '@testing-library/react' import { cleanup, fireEvent, render, waitFor } from '@testing-library/react'
import ThemeSwitch from '.' import ThemeSwitch from '.'
describe('ThemeSwitch', () => { describe('ThemeSwitch', () => {

View File

@ -1,10 +1,10 @@
import Icon from '../Icon' import { useEffect, useState } from 'react'
import styles from './index.module.css' import Head from 'next/head'
import * as Select from '@radix-ui/react-select' import * as Select from '@radix-ui/react-select'
import { useTheme } from 'next-themes' import { useTheme } from 'next-themes'
import Head from 'next/head' import Icon from '../Icon'
import { useState, useEffect } from 'react'
import { Item } from './Item' import { Item } from './Item'
import styles from './index.module.css'
export function getIconName(theme: string) { export function getIconName(theme: string) {
return theme === 'light' ? 'Sun' : theme === 'dark' ? 'Moon' : 'Monitor' return theme === 'light' ? 'Sun' : theme === 'dark' ? 'Moon' : 'Monitor'

View File

@ -1,6 +1,6 @@
import { constructVcard, toDataURL, init } from './_utils'
import meta from '../../../_content/meta.json' import meta from '../../../_content/meta.json'
import resume from '../../../_content/resume.json' import resume from '../../../_content/resume.json'
import { constructVcard, init, toDataURL } from './_utils'
const metaMock = { const metaMock = {
...meta, ...meta,

View File

@ -1,4 +1,4 @@
import { render, fireEvent, waitFor, screen } from '@testing-library/react' import { fireEvent, render, screen, waitFor } from '@testing-library/react'
import Vcard from '.' import Vcard from '.'
describe('Vcard', () => { describe('Vcard', () => {

View File

@ -1,4 +1,4 @@
import { render, screen, act } from '@testing-library/react' import { act, render, screen } from '@testing-library/react'
import Site from '.' import Site from '.'
describe('Site', () => { describe('Site', () => {

View File

@ -1,13 +1,13 @@
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import ThemeSwitch from '../../components/ThemeSwitch'
import Header from '../../components/Header'
import Footer from '../../components/Footer'
import MetaFavicon from '../../components/Meta/Favicon'
import meta from '../../../_content/meta.json'
import HostnameCheck from '../../components/HostnameCheck'
import styles from './index.module.css'
import Script from 'next/script' import Script from 'next/script'
import meta from '../../../_content/meta.json'
import Footer from '../../components/Footer'
import Header from '../../components/Header'
import HostnameCheck from '../../components/HostnameCheck'
import MetaFavicon from '../../components/Meta/Favicon'
import ThemeSwitch from '../../components/ThemeSwitch'
import { UMAMI_SCRIPT_URL, UMAMI_WEBSITE_ID } from '../../lib/umami' import { UMAMI_SCRIPT_URL, UMAMI_WEBSITE_ID } from '../../lib/umami'
import styles from './index.module.css'
const isProduction = process.env.NODE_ENV === 'production' const isProduction = process.env.NODE_ENV === 'production'

View File

@ -1,6 +1,6 @@
import fs from 'fs' import fs from 'fs'
import { join } from 'path'
import yaml from 'js-yaml' import yaml from 'js-yaml'
import { join } from 'path'
import sharp from 'sharp' import sharp from 'sharp'
import type ImageType from '../interfaces/image' import type ImageType from '../interfaces/image'
import type ProjectType from '../interfaces/project' import type ProjectType from '../interfaces/project'

View File

@ -1,3 +1,6 @@
import data from '../../_content/repos.json'
import Repo from '../interfaces/repo'
// //
// Get GitHub repos // Get GitHub repos
// //
@ -5,9 +8,6 @@ if (!process.env.GITHUB_TOKEN) {
throw new Error('Missing GitHub environment variable') throw new Error('Missing GitHub environment variable')
} }
import data from '../../_content/repos.json'
import Repo from '../interfaces/repo'
const gitHubConfig = { const gitHubConfig = {
headers: { headers: {
'User-Agent': 'kremalicious/portfolio', 'User-Agent': 'kremalicious/portfolio',

View File

@ -1,6 +1,6 @@
import { remark } from 'remark' import { remark } from 'remark'
import html from 'remark-html'
import gfm from 'remark-gfm' import gfm from 'remark-gfm'
import html from 'remark-html'
export async function markdownToHtml(markdown: string) { export async function markdownToHtml(markdown: string) {
const result = await remark().use(gfm).use(html).process(markdown) const result = await remark().use(gfm).use(html).process(markdown)

View File

@ -1,14 +1,14 @@
import { GetStaticPaths, GetStaticProps } from 'next/types' import { GetStaticPaths, GetStaticProps } from 'next/types'
import resume from '../../_content/resume.json'
import Project from '../components/Project'
import ProjectNav from '../components/ProjectNav'
import type ProjectType from '../interfaces/project'
import Page from '../layouts/Page'
import { import {
getProjectBySlug,
getAllProjects, getAllProjects,
getProjectBySlug,
getProjectSlugs getProjectSlugs
} from '../lib/content' } from '../lib/content'
import type ProjectType from '../interfaces/project'
import Project from '../components/Project'
import resume from '../../_content/resume.json'
import ProjectNav from '../components/ProjectNav'
import Page from '../layouts/Page'
type Props = { type Props = {
project: ProjectType project: ProjectType

View File

@ -1,7 +1,7 @@
import type { AppProps } from 'next/app' import type { AppProps } from 'next/app'
import '../styles/global.css'
import Site from '../layouts/Site'
import { ThemeProvider } from 'next-themes' import { ThemeProvider } from 'next-themes'
import Site from '../layouts/Site'
import '../styles/global.css'
export default function MyApp({ Component, pageProps, router }: AppProps) { export default function MyApp({ Component, pageProps, router }: AppProps) {
return ( return (

View File

@ -1,4 +1,4 @@
import { Html, Head, Main, NextScript } from 'next/document' import { Head, Html, Main, NextScript } from 'next/document'
import Typekit from '../components/Typekit' import Typekit from '../components/Typekit'
export default function Document() { export default function Document() {

View File

@ -1,13 +1,13 @@
import { getAllProjects } from '../lib/content' import { GetStaticProps } from 'next/types'
import Project from '../interfaces/project'
import meta from '../../_content/meta.json' import meta from '../../_content/meta.json'
import resume from '../../_content/resume.json' import resume from '../../_content/resume.json'
import Projects from '../components/Projects' import Projects from '../components/Projects'
import { GetStaticProps } from 'next/types'
import { getGithubRepos } from '../lib/github'
import Repo from '../interfaces/repo'
import Repositories from '../components/Repositories' import Repositories from '../components/Repositories'
import Project from '../interfaces/project'
import Repo from '../interfaces/repo'
import Page from '../layouts/Page' import Page from '../layouts/Page'
import { getAllProjects } from '../lib/content'
import { getGithubRepos } from '../lib/github'
type Props = { type Props = {
projects: Project[] projects: Project[]