1
0
mirror of https://github.com/kremalicious/blog.git synced 2024-11-24 10:58:13 +01:00

add prettier-plugin-sort-imports

This commit is contained in:
Matthias Kretschmann 2023-01-29 21:58:19 +00:00
parent fee0ad95ad
commit 2a21ac3228
Signed by: m
GPG Key ID: 606EEEF3C479A91F
72 changed files with 622 additions and 156 deletions

10
.editorconfig Normal file
View File

@ -0,0 +1,10 @@
# editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

View File

@ -1,12 +1,12 @@
import * as Gatsby from 'gatsby'
import '@testing-library/jest-dom/extend-expect' import '@testing-library/jest-dom/extend-expect'
import avatar from './__fixtures__/avatar.json'
import github from './__fixtures__/github.json'
import meta from './__fixtures__/meta.json'
import posts from './__fixtures__/posts.json'
import './__mocks__/matchMedia' import './__mocks__/matchMedia'
import * as Gatsby from 'gatsby'
const useStaticQuery = jest.spyOn(Gatsby, 'useStaticQuery') const useStaticQuery = jest.spyOn(Gatsby, 'useStaticQuery')
import meta from './__fixtures__/meta.json'
import avatar from './__fixtures__/avatar.json'
import posts from './__fixtures__/posts.json'
import github from './__fixtures__/github.json'
beforeAll(() => { beforeAll(() => {
useStaticQuery.mockImplementation(() => ({ useStaticQuery.mockImplementation(() => ({

View File

@ -1,5 +1,5 @@
import { render } from '@testing-library/react'
import { ReactElement } from 'react' import { ReactElement } from 'react'
import { render } from '@testing-library/react'
const testRender = (component: ReactElement): void => { const testRender = (component: ReactElement): void => {
it('renders without crashing', () => { it('renders without crashing', () => {

View File

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

View File

@ -143,6 +143,7 @@ All SVG assets under `src/images/` will be converted to React components with th
```jsx ```jsx
import { ReactComponent as Logo } from './components/svg/Logo' import { ReactComponent as Logo } from './components/svg/Logo'
;<Logo /> ;<Logo />
``` ```

View File

@ -1,7 +1,7 @@
import { GatsbyBrowser } from 'gatsby' import { GatsbyBrowser } from 'gatsby'
import './src/global/global.css' import './src/global/global.css'
import './src/global/imports.css' import './src/global/imports.css'
import wrapPageElementWithLayout from './src/helpers/wrapPageElement' import wrapPageElementWithLayout from './src/helpers/wrapPageElement'
export const wrapPageElement: GatsbyBrowser['wrapPageElement'] = export const wrapPageElement: GatsbyBrowser['wrapPageElement'] =
wrapPageElementWithLayout wrapPageElementWithLayout

View File

@ -1,11 +1,9 @@
import type { GatsbyConfig } from 'gatsby' import type { GatsbyConfig } from 'gatsby'
import siteConfig from './config'
import sources from './gatsby/sources'
import { feedContent } from './gatsby/feeds'
// required for gatsby-plugin-meta-redirect // required for gatsby-plugin-meta-redirect
import 'regenerator-runtime/runtime' import 'regenerator-runtime/runtime'
import siteConfig from './config'
import { feedContent } from './gatsby/feeds'
import sources from './gatsby/sources'
//import algolia from './gatsby/algolia' //import algolia from './gatsby/algolia'

View File

@ -1,14 +1,14 @@
import { createMarkdownFields } from './gatsby/createMarkdownFields' import type { GatsbyNode } from 'gatsby'
import { createExif } from './gatsby/createExif' import { createExif } from './gatsby/createExif'
import { createMarkdownFields } from './gatsby/createMarkdownFields'
import { import {
generatePostPages,
generateTagPages,
generateRedirectPages,
generateArchivePages, generateArchivePages,
generatePhotosPages generatePhotosPages,
generatePostPages,
generateRedirectPages,
generateTagPages
} from './gatsby/createPages' } from './gatsby/createPages'
import { generateJsonFeed } from './gatsby/feeds' import { generateJsonFeed } from './gatsby/feeds'
import type { GatsbyNode } from 'gatsby'
export const onCreateNode: GatsbyNode['onCreateNode'] = ({ export const onCreateNode: GatsbyNode['onCreateNode'] = ({
node, node,

View File

@ -1,7 +1,7 @@
import React from 'react' import React from 'react'
import { GatsbySSR } from 'gatsby' import { GatsbySSR } from 'gatsby'
import wrapPageElementWithLayout from './src/helpers/wrapPageElement'
import { UMAMI_SCRIPT_URL, UMAMI_WEBSITE_ID } from './src/helpers/umami' import { UMAMI_SCRIPT_URL, UMAMI_WEBSITE_ID } from './src/helpers/umami'
import wrapPageElementWithLayout from './src/helpers/wrapPageElement'
export const wrapPageElement: GatsbySSR['wrapPageElement'] = export const wrapPageElement: GatsbySSR['wrapPageElement'] =
wrapPageElementWithLayout wrapPageElementWithLayout

View File

@ -1,9 +1,9 @@
import fs from 'fs' import type { Actions, Node, NodePluginArgs } from 'gatsby'
import getCoordinates from 'dms2dec'
import fastExif from 'fast-exif' import fastExif from 'fast-exif'
import Fraction from 'fraction.js' import Fraction from 'fraction.js'
import getCoordinates from 'dms2dec' import fs from 'fs'
import iptc from 'node-iptc' import iptc from 'node-iptc'
import type { Actions, NodePluginArgs, Node } from 'gatsby'
export const createExif = async ( export const createExif = async (
node: Node, node: Node,

View File

@ -1,7 +1,7 @@
import { parse } from 'path'
import { createFilePath } from 'gatsby-source-filesystem'
import config from '../config'
import { Actions, Node, NodePluginArgs } from 'gatsby' import { Actions, Node, NodePluginArgs } from 'gatsby'
import { createFilePath } from 'gatsby-source-filesystem'
import { parse } from 'path'
import config from '../config'
// Create slug, date & github file link for posts from file path values // Create slug, date & github file link for posts from file path values
export function createMarkdownFields( export function createMarkdownFields(

View File

@ -1,6 +1,6 @@
import { Actions } from 'gatsby'
import path from 'path' import path from 'path'
import config from '../config' import config from '../config'
import { Actions } from 'gatsby'
const postTemplate = path.resolve('src/components/templates/Post/index.tsx') const postTemplate = path.resolve('src/components/templates/Post/index.tsx')
const archiveTemplate = path.resolve('src/components/templates/Archive.tsx') const archiveTemplate = path.resolve('src/components/templates/Archive.tsx')

View File

@ -1,5 +1,5 @@
import path from 'path'
import * as dotenv from 'dotenv' import * as dotenv from 'dotenv'
import path from 'path'
dotenv.config() dotenv.config()

459
package-lock.json generated
View File

@ -59,6 +59,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/fs-extra": "^9.0.13", "@types/fs-extra": "^9.0.13",
"@types/jest": "^29.2.6", "@types/jest": "^29.2.6",
"@types/lunr": "^2.3.4", "@types/lunr": "^2.3.4",
@ -6983,6 +6984,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",
@ -8107,6 +8226,101 @@
"resolve": "^1.10.0" "resolve": "^1.10.0"
} }
}, },
"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-core/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"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-sfc/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"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/@wagmi/chains": { "node_modules/@wagmi/chains": {
"version": "0.1.7", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/@wagmi/chains/-/chains-0.1.7.tgz", "resolved": "https://registry.npmjs.org/@wagmi/chains/-/chains-0.1.7.tgz",
@ -13675,6 +13889,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",
@ -19415,6 +19636,12 @@
"integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==", "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==",
"devOptional": true "devOptional": true
}, },
"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/javascript-stringify": { "node_modules/javascript-stringify": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
@ -22317,6 +22544,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",
@ -28852,6 +29089,14 @@
"node": ">=0.10.0" "node": ">=0.10.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": "1.1.5", "version": "1.1.5",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
@ -36865,6 +37110,97 @@
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
"dev": true "dev": true
}, },
"@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,
"requires": {
"@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"
},
"dependencies": {
"@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,
"requires": {
"@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"
}
},
"@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,
"requires": {
"@babel/types": "^7.17.0",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
}
},
"@babel/parser": {
"version": "7.18.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
"integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==",
"dev": true
},
"@babel/traverse": {
"version": "7.17.3",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz",
"integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==",
"dev": true,
"requires": {
"@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"
}
},
"@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,
"requires": {
"@babel/helper-validator-identifier": "^7.16.7",
"to-fast-properties": "^2.0.0"
}
},
"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
}
}
},
"@trysound/sax": { "@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",
@ -37790,6 +38126,99 @@
"resolve": "^1.10.0" "resolve": "^1.10.0"
} }
}, },
"@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,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"peer": true
}
}
},
"@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,
"requires": {
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"@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,
"requires": {
"@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"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"peer": true
}
}
},
"@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,
"requires": {
"@vue/compiler-dom": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"@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,
"requires": {
"@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"
}
},
"@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
},
"@wagmi/chains": { "@wagmi/chains": {
"version": "0.1.7", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/@wagmi/chains/-/chains-0.1.7.tgz", "resolved": "https://registry.npmjs.org/@wagmi/chains/-/chains-0.1.7.tgz",
@ -42045,6 +42474,13 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
}, },
"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
},
"esutils": { "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",
@ -46278,6 +46714,12 @@
"integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==", "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==",
"devOptional": true "devOptional": true
}, },
"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
},
"javascript-stringify": { "javascript-stringify": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
@ -48499,6 +48941,16 @@
"integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==",
"dev": true "dev": true
}, },
"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,
"requires": {
"sourcemap-codec": "^1.4.8"
}
},
"make-dir": { "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",
@ -53117,6 +53569,13 @@
} }
} }
}, },
"sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true,
"peer": true
},
"space-separated-tokens": { "space-separated-tokens": {
"version": "1.1.5", "version": "1.1.5",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",

View File

@ -77,6 +77,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/fs-extra": "^9.0.13", "@types/fs-extra": "^9.0.13",
"@types/jest": "^29.2.6", "@types/jest": "^29.2.6",
"@types/lunr": "^2.3.4", "@types/lunr": "^2.3.4",

View File

@ -1,9 +1,9 @@
import fastExif from 'fast-exif'
import fs from 'fs-extra' import fs from 'fs-extra'
import iptc from 'node-iptc'
import ora from 'ora'
import path from 'path' import path from 'path'
import slugify from 'slugify' import slugify from 'slugify'
import ora from 'ora'
import fastExif from 'fast-exif'
import iptc from 'node-iptc'
const templatePath = path.join(__dirname, 'new-article.md') const templatePath = path.join(__dirname, 'new-article.md')
const templatePathPhoto = path.join(__dirname, 'new-photo.md') const templatePathPhoto = path.join(__dirname, 'new-photo.md')

View File

@ -1,8 +1,8 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import Typekit from './atoms/Typekit'
import Header from './organisms/Header'
import Footer from './organisms/Footer'
import * as styles from './Layout.module.css' import * as styles from './Layout.module.css'
import Typekit from './atoms/Typekit'
import Footer from './organisms/Footer'
import Header from './organisms/Header'
export default function Layout({ children }: { children: any }): ReactElement { export default function Layout({ children }: { children: any }): ReactElement {
return ( return (

View File

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

View File

@ -1,15 +1,15 @@
import React, { import React, {
Fragment,
ReactElement, ReactElement,
useEffect,
useState,
createElement, createElement,
Fragment useEffect,
useState
} from 'react' } from 'react'
import { graphql, useStaticQuery } from 'gatsby' import { graphql, useStaticQuery } from 'gatsby'
import { unified } from 'unified' import rehypeReact from 'rehype-react'
import remarkParse from 'remark-parse' import remarkParse from 'remark-parse'
import remarkRehype from 'remark-rehype' import remarkRehype from 'remark-rehype'
import rehypeReact from 'rehype-react' import { unified } from 'unified'
import * as styles from './Changelog.module.css' import * as styles from './Changelog.module.css'
export function PureChangelog({ export function PureChangelog({

View File

@ -1,6 +1,5 @@
import React from 'react' import React from 'react'
import { render, screen, fireEvent } from '@testing-library/react' import { fireEvent, render, screen } from '@testing-library/react'
import Copy from './Copy' import Copy from './Copy'
describe('Copy', () => { describe('Copy', () => {

View File

@ -1,7 +1,7 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import Clipboard from 'react-clipboard.js'
import * as styles from './Copy.module.css' import * as styles from './Copy.module.css'
import Icon from './Icon' import Icon from './Icon'
import Clipboard from 'react-clipboard.js'
const onCopySuccess = (e: any) => { const onCopySuccess = (e: any) => {
e.trigger.classList.add(styles.copied) e.trigger.classList.add(styles.copied)

View File

@ -1,6 +1,5 @@
import React from 'react' import React from 'react'
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import Exif from './Exif' import Exif from './Exif'
const exif: Partial<Queries.ImageExif> = { const exif: Partial<Queries.ImageExif> = {

View File

@ -1,6 +1,6 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import ExifMap from './ExifMap'
import * as styles from './Exif.module.css' import * as styles from './Exif.module.css'
import ExifMap from './ExifMap'
import Icon from './Icon' import Icon from './Icon'
const ExifData = ({ const ExifData = ({

View File

@ -1,5 +1,5 @@
import { ImageDataLike } from 'gatsby-plugin-image'
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { ImageDataLike } from 'gatsby-plugin-image'
import { useSiteMetadata } from '../../../hooks/useSiteMetadata' import { useSiteMetadata } from '../../../hooks/useSiteMetadata'
type SchemaOrgProps = { type SchemaOrgProps = {

View File

@ -1,8 +1,8 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { graphql, useStaticQuery } from 'gatsby' import { graphql, useStaticQuery } from 'gatsby'
import { getSrc, ImageDataLike } from 'gatsby-plugin-image' import { ImageDataLike, getSrc } from 'gatsby-plugin-image'
import { useSiteMetadata } from '../../../hooks/useSiteMetadata'
import useDarkMode from '../../../hooks/useDarkMode' import useDarkMode from '../../../hooks/useDarkMode'
import { useSiteMetadata } from '../../../hooks/useSiteMetadata'
const query = graphql` const query = graphql`
query Logo { query Logo {

View File

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

View File

@ -1,33 +1,32 @@
import React, { FunctionComponent, ReactElement } from 'react' import React, { FunctionComponent, ReactElement } from 'react'
// https://featherstyles.com // https://featherstyles.com
// import * as Feather from '@kremalicious/react-feather' // import * as Feather from '@kremalicious/react-feather'
import { import {
ArrowDownCircle,
Edit,
GitHub,
Twitter,
Rss,
Sun,
Moon,
Compass,
X,
Copy,
Search,
ExternalLink,
Link,
ChevronRight,
ChevronLeft,
Camera,
Aperture, Aperture,
ArrowDownCircle,
Camera,
ChevronLeft,
ChevronRight,
Compass,
Copy,
Crosshair,
Edit,
ExternalLink,
GitHub,
Link,
Maximize, Maximize,
Crosshair Moon,
Rss,
Search,
Sun,
Twitter,
X
} from 'react-feather' } from 'react-feather'
import { ReactComponent as Bitcoin } from '../../images/bitcoin.svg'
// custom icons // custom icons
import { ReactComponent as Jsonfeed } from '../../images/jsonfeed.svg' import { ReactComponent as Jsonfeed } from '../../images/jsonfeed.svg'
import { ReactComponent as Bitcoin } from '../../images/bitcoin.svg'
import { ReactComponent as Stopwatch } from '../../images/stopwatch.svg'
import { ReactComponent as Mastodon } from '../../images/mastodon.svg' import { ReactComponent as Mastodon } from '../../images/mastodon.svg'
import { ReactComponent as Stopwatch } from '../../images/stopwatch.svg'
import * as styles from './Icon.module.css' import * as styles from './Icon.module.css'
const components: { const components: {

View File

@ -1,7 +1,6 @@
import React from 'react' import React from 'react'
// import { render } from '@testing-library/react' // import { render } from '@testing-library/react'
import testRender from '../../../.jest/testRender' import testRender from '../../../.jest/testRender'
import Input from './Input' import Input from './Input'
describe('Input', () => { describe('Input', () => {

View File

@ -1,4 +1,4 @@
import React, { ReactElement, InputHTMLAttributes } from 'react' import React, { InputHTMLAttributes, ReactElement } from 'react'
import * as styles from './Input.module.css' import * as styles from './Input.module.css'
export default function Input({ export default function Input({

View File

@ -1,5 +1,5 @@
import { Script } from 'gatsby'
import React from 'react' import React from 'react'
import { Script } from 'gatsby'
const script = ` const script = `
(function(d) { (function(d) {

View File

@ -1,8 +1,8 @@
import React, { ReactElement, useEffect, useState } from 'react' import React, { ReactElement, useEffect, useState } from 'react'
import { Link } from 'gatsby' import { Link } from 'gatsby'
import { useSiteMetadata } from '../../hooks/useSiteMetadata'
import Hamburger from '../atoms/Hamburger' import Hamburger from '../atoms/Hamburger'
import * as styles from './Menu.module.css' import * as styles from './Menu.module.css'
import { useSiteMetadata } from '../../hooks/useSiteMetadata'
export default function Menu(): ReactElement { export default function Menu(): ReactElement {
const [menuOpen, setMenuOpen] = useState(false) const [menuOpen, setMenuOpen] = useState(false)

View File

@ -1,8 +1,7 @@
import React from 'react' import React from 'react'
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import Networks from './Networks'
import meta from '../../../.jest/__fixtures__/meta.json' import meta from '../../../.jest/__fixtures__/meta.json'
import Networks from './Networks'
const { author, rss, jsonfeed } = meta.site.siteMetadata const { author, rss, jsonfeed } = meta.site.siteMetadata
const { twitter, github } = author const { twitter, github } = author

View File

@ -1,7 +1,7 @@
import React from 'react' import React from 'react'
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import PostTeaser from './PostTeaser'
import post from '../../../.jest/__fixtures__/post.json' import post from '../../../.jest/__fixtures__/post.json'
import PostTeaser from './PostTeaser'
describe('PostTeaser', () => { describe('PostTeaser', () => {
it('renders correctly', () => { it('renders correctly', () => {

View File

@ -1,5 +1,5 @@
import React from 'react' import React from 'react'
import { render, fireEvent, screen } from '@testing-library/react' import { fireEvent, render, screen } from '@testing-library/react'
import RelatedPosts from './RelatedPosts' import RelatedPosts from './RelatedPosts'
describe('RelatedPosts', () => { describe('RelatedPosts', () => {

View File

@ -1,8 +1,8 @@
import React, { ReactElement, useState } from 'react' import React, { ReactElement, useState } from 'react'
import { graphql, useStaticQuery } from 'gatsby' import { graphql, useStaticQuery } from 'gatsby'
import { PhotoThumb } from '../templates/Photos'
import PostTeaser from './PostTeaser' import PostTeaser from './PostTeaser'
import * as styles from './RelatedPosts.module.css' import * as styles from './RelatedPosts.module.css'
import { PhotoThumb } from '../templates/Photos'
const query = graphql` const query = graphql`
query RelatedPosts { query RelatedPosts {

View File

@ -1,6 +1,6 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import * as styles from './SearchButton.module.css'
import Icon from '../../atoms/Icon' import Icon from '../../atoms/Icon'
import * as styles from './SearchButton.module.css'
const SearchButton = ({ onClick }: { onClick: () => void }): ReactElement => ( const SearchButton = ({ onClick }: { onClick: () => void }): ReactElement => (
<button <button

View File

@ -1,6 +1,6 @@
import React, { ChangeEvent, ReactElement } from 'react' import React, { ChangeEvent, ReactElement } from 'react'
import Input from '../../atoms/Input'
import Icon from '../../atoms/Icon' import Icon from '../../atoms/Icon'
import Input from '../../atoms/Input'
import * as styles from './SearchInput.module.css' import * as styles from './SearchInput.module.css'
export default function SearchInput({ export default function SearchInput({

View File

@ -1,9 +1,9 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import ReactDOM from 'react-dom'
import { graphql, useStaticQuery } from 'gatsby' import { graphql, useStaticQuery } from 'gatsby'
import ReactDOM from 'react-dom'
import PostTeaser from '../PostTeaser' import PostTeaser from '../PostTeaser'
import SearchResultsEmpty from './SearchResultsEmpty'
import * as styles from './SearchResults.module.css' import * as styles from './SearchResults.module.css'
import SearchResultsEmpty from './SearchResultsEmpty'
export interface Results { export interface Results {
slug: string slug: string

View File

@ -1,6 +1,6 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import * as styles from './SearchResultsEmpty.module.css'
import { Results } from './SearchResults' import { Results } from './SearchResults'
import * as styles from './SearchResultsEmpty.module.css'
const SearchResultsEmpty = ({ const SearchResultsEmpty = ({
searchQuery, searchQuery,

View File

@ -1,10 +1,10 @@
import React, { useState, useEffect, ReactElement } from 'react' import React, { ReactElement, useEffect, useState } from 'react'
import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion' import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion'
import SearchInput from './SearchInput' import { getAnimationProps, moveInTop } from '../../atoms/Transitions'
import SearchButton from './SearchButton' import SearchButton from './SearchButton'
import SearchInput from './SearchInput'
import SearchResults from './SearchResults' import SearchResults from './SearchResults'
import * as styles from './index.module.css' import * as styles from './index.module.css'
import { getAnimationProps, moveInTop } from '../../atoms/Transitions'
export default function Search(): ReactElement { export default function Search(): ReactElement {
const shouldReduceMotion = useReducedMotion() const shouldReduceMotion = useReducedMotion()

View File

@ -1,5 +1,5 @@
import React from 'react' import React from 'react'
import { render, fireEvent, screen } from '@testing-library/react' import { fireEvent, render, screen } from '@testing-library/react'
import ThemeSwitch from './ThemeSwitch' import ThemeSwitch from './ThemeSwitch'
describe('ThemeSwitch', () => { describe('ThemeSwitch', () => {

View File

@ -1,7 +1,7 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import * as styles from './ThemeSwitch.module.css'
import Icon from '../atoms/Icon'
import useDarkMode from '../../hooks/useDarkMode' import useDarkMode from '../../hooks/useDarkMode'
import Icon from '../atoms/Icon'
import * as styles from './ThemeSwitch.module.css'
export default function ThemeSwitch(): ReactElement { export default function ThemeSwitch(): ReactElement {
const { isDarkMode, setIsDarkMode } = useDarkMode() const { isDarkMode, setIsDarkMode } = useDarkMode()

View File

@ -1,9 +1,9 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { graphql, useStaticQuery } from 'gatsby' import { graphql, useStaticQuery } from 'gatsby'
import { getSrc } from 'gatsby-plugin-image' import { getSrc } from 'gatsby-plugin-image'
import { useSiteMetadata } from '../../hooks/useSiteMetadata'
import IconLinks from './Networks' import IconLinks from './Networks'
import * as styles from './Vcard.module.css' import * as styles from './Vcard.module.css'
import { useSiteMetadata } from '../../hooks/useSiteMetadata'
const query = graphql` const query = graphql`
query Avatar { query Avatar {

View File

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

View File

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

View File

@ -1,7 +1,7 @@
import React, { useState, useEffect, ReactElement } from 'react' import React, { ReactElement, useEffect, useState } from 'react'
import axios from 'axios' import axios from 'axios'
import * as styles from './Conversion.module.css'
import { useNetwork } from 'wagmi' import { useNetwork } from 'wagmi'
import * as styles from './Conversion.module.css'
export async function getFiat( export async function getFiat(
amount: number, amount: number,

View File

@ -1,6 +1,5 @@
import React from 'react' import React from 'react'
import { render, fireEvent } from '@testing-library/react' import { fireEvent, render } from '@testing-library/react'
import InputGroup from './InputGroup' import InputGroup from './InputGroup'
const setAmount = jest.fn() const setAmount = jest.fn()

View File

@ -1,11 +1,11 @@
import React, { ReactElement, useState } from 'react' import React, { ReactElement, useState } from 'react'
import { parseEther } from '@ethersproject/units' import { parseEther } from '@ethersproject/units'
import { useDebounce } from 'use-debounce'
import InputGroup from './InputGroup'
import Alert, { getTransactionMessage } from './Alert'
import * as styles from './index.module.css'
import { useSendTransaction, usePrepareSendTransaction } from 'wagmi'
import { ConnectButton } from '@rainbow-me/rainbowkit' import { ConnectButton } from '@rainbow-me/rainbowkit'
import { useDebounce } from 'use-debounce'
import { usePrepareSendTransaction, useSendTransaction } from 'wagmi'
import Alert, { getTransactionMessage } from './Alert'
import InputGroup from './InputGroup'
import * as styles from './index.module.css'
export default function Web3Donation({ export default function Web3Donation({
address address

View File

@ -1,8 +1,8 @@
import React from 'react' import React from 'react'
import { Link } from 'gatsby' import { Link } from 'gatsby'
import { useSiteMetadata } from '../../hooks/useSiteMetadata'
import Icon from '../atoms/Icon' import Icon from '../atoms/Icon'
import Vcard from '../molecules/Vcard' import Vcard from '../molecules/Vcard'
import { useSiteMetadata } from '../../hooks/useSiteMetadata'
import * as styles from './Footer.module.css' import * as styles from './Footer.module.css'
function Copyright() { function Copyright() {

View File

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

View File

@ -1,9 +1,9 @@
import React from 'react' import React from 'react'
import { Link } from 'gatsby' import { Link } from 'gatsby'
import Search from '../molecules/Search'
import Menu from '../molecules/Menu'
import ThemeSwitch from '../molecules/ThemeSwitch'
import { ReactComponent as Logo } from '../../images/logo.svg' import { ReactComponent as Logo } from '../../images/logo.svg'
import Menu from '../molecules/Menu'
import Search from '../molecules/Search'
import ThemeSwitch from '../molecules/ThemeSwitch'
import * as styles from './Header.module.css' import * as styles from './Header.module.css'
export default function Header(): JSX.Element { export default function Header(): JSX.Element {

View File

@ -1,8 +1,7 @@
import React from 'react' import React from 'react'
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import Archive from './Archive'
import data from '../../../.jest/__fixtures__/posts.json' import data from '../../../.jest/__fixtures__/posts.json'
import Archive from './Archive'
describe('Archive', () => { describe('Archive', () => {
const pageContext = { const pageContext = {

View File

@ -1,11 +1,11 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { graphql } from 'gatsby' import { graphql } from 'gatsby'
import { PageContext } from '../../@types/Post' import { PageContext } from '../../@types/Post'
import HeadMeta, { HeadMetaProps } from '../atoms/HeadMeta'
import Pagination from '../molecules/Pagination' import Pagination from '../molecules/Pagination'
import PostTeaser from '../molecules/PostTeaser' import PostTeaser from '../molecules/PostTeaser'
import Page from './Page'
import * as styles from './Archive.module.css' import * as styles from './Archive.module.css'
import HeadMeta, { HeadMetaProps } from '../atoms/HeadMeta' import Page from './Page'
function getMetadata(pageContext: PageContext) { function getMetadata(pageContext: PageContext) {
const { tag, currentPageNumber, numPages } = pageContext const { tag, currentPageNumber, numPages } = pageContext

View File

@ -1,8 +1,7 @@
import React from 'react' import React from 'react'
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import Photos from './Photos'
import data from '../../../.jest/__fixtures__/photos.json' import data from '../../../.jest/__fixtures__/photos.json'
import Photos from './Photos'
describe('/photos', () => { describe('/photos', () => {
it('renders without crashing', () => { it('renders without crashing', () => {

View File

@ -1,11 +1,11 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { graphql, Link, PageProps } from 'gatsby' import { Link, PageProps, graphql } from 'gatsby'
import { PageContext } from '../../@types/Post' import { PageContext } from '../../@types/Post'
import HeadMeta, { HeadMetaProps } from '../atoms/HeadMeta'
import { Image } from '../atoms/Image' import { Image } from '../atoms/Image'
import Pagination from '../molecules/Pagination' import Pagination from '../molecules/Pagination'
import Page from './Page' import Page from './Page'
import * as styles from './Photos.module.css' import * as styles from './Photos.module.css'
import HeadMeta, { HeadMetaProps } from '../atoms/HeadMeta'
export const PhotoThumb = ({ export const PhotoThumb = ({
photo photo

View File

@ -1,7 +1,7 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { useSiteMetadata } from '../../../hooks/useSiteMetadata' import { useSiteMetadata } from '../../../hooks/useSiteMetadata'
import * as styles from './Actions.module.css'
import Icon from '../../atoms/Icon' import Icon from '../../atoms/Icon'
import * as styles from './Actions.module.css'
interface ActionProps { interface ActionProps {
title: string title: string

View File

@ -1,7 +1,7 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import Changelog from '../../atoms/Changelog' import Changelog from '../../atoms/Changelog'
import PostToc from './Toc'
import * as styles from './Content.module.css' import * as styles from './Content.module.css'
import PostToc from './Toc'
export default function PostContent({ export default function PostContent({
post post

View File

@ -1,8 +1,8 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { Link } from 'gatsby' import { Link } from 'gatsby'
import * as stylesMore from './More.module.css'
import * as styles from './LinkActions.module.css'
import Icon from '../../atoms/Icon' import Icon from '../../atoms/Icon'
import * as styles from './LinkActions.module.css'
import * as stylesMore from './More.module.css'
const PostLinkActions = ({ const PostLinkActions = ({
linkurl, linkurl,

View File

@ -1,10 +1,10 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { Link } from 'gatsby' import { Link } from 'gatsby'
import slugify from 'slugify' import slugify from 'slugify'
import Tag from '../../atoms/Tag'
import { useSiteMetadata } from '../../../hooks/useSiteMetadata' import { useSiteMetadata } from '../../../hooks/useSiteMetadata'
import * as styles from './Meta.module.css' import Tag from '../../atoms/Tag'
import PostDate from '../../molecules/PostDate' import PostDate from '../../molecules/PostDate'
import * as styles from './Meta.module.css'
export default function PostMeta({ export default function PostMeta({
post post

View File

@ -1,7 +1,7 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import * as styles from './Title.module.css'
import Icon from '../../atoms/Icon' import Icon from '../../atoms/Icon'
import PostDate from '../../molecules/PostDate' import PostDate from '../../molecules/PostDate'
import * as styles from './Title.module.css'
export default function PostTitle({ export default function PostTitle({
linkurl, linkurl,

View File

@ -1,10 +1,9 @@
import React from 'react' import React from 'react'
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import Post from '.' import Post from '.'
import link from '../../../../.jest/__fixtures__/link.json'
import post from '../../../../.jest/__fixtures__/post.json' import post from '../../../../.jest/__fixtures__/post.json'
import postWithMore from '../../../../.jest/__fixtures__/postWithMore.json' import postWithMore from '../../../../.jest/__fixtures__/postWithMore.json'
import link from '../../../../.jest/__fixtures__/link.json'
describe('Post', () => { describe('Post', () => {
const pageContext = { const pageContext = {

View File

@ -1,20 +1,20 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { graphql } from 'gatsby' import { graphql } from 'gatsby'
import { PageContext } from '../../../@types/Post'
import { useSiteMetadata } from '../../../hooks/useSiteMetadata'
import Exif from '../../atoms/Exif' import Exif from '../../atoms/Exif'
import HeadMeta from '../../atoms/HeadMeta'
import SchemaOrg from '../../atoms/HeadMeta/SchemaOrg'
import { Image } from '../../atoms/Image'
import RelatedPosts from '../../molecules/RelatedPosts' import RelatedPosts from '../../molecules/RelatedPosts'
import PostTitle from './Title'
import PostLead from './Lead'
import PostContent from './Content'
import PostActions from './Actions' import PostActions from './Actions'
import PostContent from './Content'
import PostLead from './Lead'
import PostLinkActions from './LinkActions' import PostLinkActions from './LinkActions'
import PostMeta from './Meta' import PostMeta from './Meta'
import PrevNext from './PrevNext' import PrevNext from './PrevNext'
import PostTitle from './Title'
import * as styles from './index.module.css' import * as styles from './index.module.css'
import { Image } from '../../atoms/Image'
import HeadMeta from '../../atoms/HeadMeta'
import { PageContext } from '../../../@types/Post'
import SchemaOrg from '../../atoms/HeadMeta/SchemaOrg'
import { useSiteMetadata } from '../../../hooks/useSiteMetadata'
export default function Post({ export default function Post({
data, data,

View File

@ -1,6 +1,6 @@
import { getDefaultWallets, Theme } from '@rainbow-me/rainbowkit' import { Theme, getDefaultWallets } from '@rainbow-me/rainbowkit'
import { createClient, configureChains } from 'wagmi' import { configureChains, createClient } from 'wagmi'
import { mainnet, polygon, optimism, arbitrum } from 'wagmi/chains' import { arbitrum, mainnet, optimism, polygon } from 'wagmi/chains'
import { infuraProvider } from 'wagmi/providers/infura' import { infuraProvider } from 'wagmi/providers/infura'
import { publicProvider } from 'wagmi/providers/public' import { publicProvider } from 'wagmi/providers/public'

View File

@ -1,5 +1,5 @@
import type { GatsbyBrowser, GatsbySSR } from 'gatsby'
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import type { GatsbyBrowser, GatsbySSR } from 'gatsby'
import Layout from '../components/Layout' import Layout from '../components/Layout'
const wrapPageElement: const wrapPageElement:

View File

@ -3,11 +3,11 @@
// https://github.com/daveschumaker/react-dark-mode-hook/blob/master/useDarkMode.js // https://github.com/daveschumaker/react-dark-mode-hook/blob/master/useDarkMode.js
// //
import { import {
useState,
useEffect,
useCallback,
Dispatch, Dispatch,
SetStateAction SetStateAction,
useCallback,
useEffect,
useState
} from 'react' } from 'react'
const isClient = typeof window === 'object' const isClient = typeof window === 'object'

View File

@ -1,4 +1,4 @@
import { useStaticQuery, graphql } from 'gatsby' import { graphql, useStaticQuery } from 'gatsby'
const query = graphql` const query = graphql`
query SiteMetadata { query SiteMetadata {

View File

@ -1,8 +1,8 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { Link, PageProps } from 'gatsby' import { Link, PageProps } from 'gatsby'
import HeadMeta, { HeadMetaProps } from '../components/atoms/HeadMeta'
import Page from '../components/templates/Page' import Page from '../components/templates/Page'
import * as styles from './404.module.css' import * as styles from './404.module.css'
import HeadMeta, { HeadMetaProps } from '../components/atoms/HeadMeta'
const meta: Partial<HeadMetaProps> = { const meta: Partial<HeadMetaProps> = {
title: `I'm sorry Dave`, title: `I'm sorry Dave`,

View File

@ -1,8 +1,7 @@
import React from 'react' import React from 'react'
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import Home from '../index'
import data from '../../../.jest/__fixtures__/home.json' import data from '../../../.jest/__fixtures__/home.json'
import Home from '../index'
describe('/', () => { describe('/', () => {
it('renders without crashing', () => { it('renders without crashing', () => {

View File

@ -1,6 +1,5 @@
import React from 'react' import React from 'react'
import { render } from '@testing-library/react' import { render } from '@testing-library/react'
import Tags from '../tags' import Tags from '../tags'
describe('/tags', () => { describe('/tags', () => {

View File

@ -1,5 +1,5 @@
import { graphql, PageProps } from 'gatsby'
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { PageProps, graphql } from 'gatsby'
import HeadMeta from '../components/atoms/HeadMeta' import HeadMeta from '../components/atoms/HeadMeta'
import PostTeaser from '../components/molecules/PostTeaser' import PostTeaser from '../components/molecules/PostTeaser'
import { PhotoThumb } from '../components/templates/Photos' import { PhotoThumb } from '../components/templates/Photos'

View File

@ -1,9 +1,9 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { graphql, PageProps } from 'gatsby' import { PageProps, graphql } from 'gatsby'
import Page from '../components/templates/Page'
import Tag from '../components/atoms/Tag'
import * as styles from './tags.module.css'
import HeadMeta, { HeadMetaProps } from '../components/atoms/HeadMeta' import HeadMeta, { HeadMetaProps } from '../components/atoms/HeadMeta'
import Tag from '../components/atoms/Tag'
import Page from '../components/templates/Page'
import * as styles from './tags.module.css'
const meta: Partial<HeadMetaProps> = { const meta: Partial<HeadMetaProps> = {
title: 'Tags', title: 'Tags',

View File

@ -1,14 +1,14 @@
import React, { ReactElement } from 'react' import React, { ReactElement } from 'react'
import { useSiteMetadata } from '../hooks/useSiteMetadata' import { HeadProps } from 'gatsby'
import Icon from '../components/atoms/Icon'
import * as styles from './thanks.module.css'
import Web3Donation from '../components/molecules/Web3Donation'
import Copy from '../components/atoms/Copy'
import { RainbowKitProvider } from '@rainbow-me/rainbowkit' import { RainbowKitProvider } from '@rainbow-me/rainbowkit'
import { WagmiConfig } from 'wagmi' import { WagmiConfig } from 'wagmi'
import { chains, theme, wagmiClient } from '../helpers/rainbowkit' import Copy from '../components/atoms/Copy'
import Meta, { HeadMetaProps } from '../components/atoms/HeadMeta' import Meta, { HeadMetaProps } from '../components/atoms/HeadMeta'
import { HeadProps } from 'gatsby' import Icon from '../components/atoms/Icon'
import Web3Donation from '../components/molecules/Web3Donation'
import { chains, theme, wagmiClient } from '../helpers/rainbowkit'
import { useSiteMetadata } from '../hooks/useSiteMetadata'
import * as styles from './thanks.module.css'
const meta: Partial<HeadMetaProps> = { const meta: Partial<HeadMetaProps> = {
title: `Say Thanks` title: `Say Thanks`