mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-06-30 07:36:38 -04:00
finally bump eslint to 9.x
This commit is contained in:
@ -1,48 +0,0 @@
|
||||
/**
|
||||
* @type {import("eslint").Linter.Config}
|
||||
*/
|
||||
module.exports = {
|
||||
root: true,
|
||||
parser: "@typescript-eslint/parser",
|
||||
extends: [
|
||||
"@jakejarvis/eslint-config",
|
||||
"next/core-web-vitals",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:prettier/recommended",
|
||||
],
|
||||
plugins: ["@typescript-eslint", "prettier"],
|
||||
rules: {
|
||||
camelcase: "off",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
"@typescript-eslint/no-explicit-any": "warn",
|
||||
"react/no-unescaped-entities": "off",
|
||||
"react/jsx-boolean-value": "error",
|
||||
"react/jsx-wrap-multilines": [
|
||||
"error",
|
||||
{
|
||||
// https://github.com/jsx-eslint/eslint-plugin-react/blob/HEAD/docs/rules/jsx-wrap-multilines.md#rule-details
|
||||
arrow: "parens-new-line",
|
||||
assignment: "parens-new-line",
|
||||
condition: "parens-new-line",
|
||||
declaration: "parens-new-line",
|
||||
logical: "parens-new-line",
|
||||
prop: "ignore",
|
||||
return: "parens-new-line",
|
||||
},
|
||||
],
|
||||
"prettier/prettier": ["error", {}, { usePrettierrc: true }],
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ["*.md", "*.mdx"],
|
||||
extends: ["plugin:mdx/recommended"],
|
||||
rules: {
|
||||
"mdx/code-blocks": "off",
|
||||
"import/no-unresolved": "off",
|
||||
"react/jsx-no-undef": "off",
|
||||
"react/jsx-boolean-value": "off", // TODO: causes some inconsistent parser errors in mdx
|
||||
},
|
||||
},
|
||||
],
|
||||
ignorePatterns: ["README.md"],
|
||||
};
|
@ -15,7 +15,7 @@ Run `pnpm install` to install the necessary dependencies and `pnpm dev` to start
|
||||
|
||||
Most production steps are handled [automatically by Vercel](https://vercel.com/docs/frameworks/nextjs), but running `pnpm build` locally will still generate an unoptimized, less-than-ideal static version which can be served via `pnpm start`.
|
||||
|
||||
**⚡ Bonus tip:** [Volta](https://volta.sh/), a magical, blazing-fast alternative to [nvm](https://github.com/nvm-sh/nvm), is used to pin the exact Node.js version used for development. It's completely optional but I highly recommend it in general!
|
||||
**☝️ Note:** [pnpm](https://pnpm.io/installation#using-corepack) is highly recommended (for [many reasons!](https://pnpm.io/benchmarks)) but this project should also work just fine with NPM or Yarn.
|
||||
|
||||
## 🌎 Related
|
||||
|
||||
|
@ -59,7 +59,7 @@ export type HeadingProps = ComponentPropsWithoutRef<typeof H> & {
|
||||
|
||||
const Heading = ({ level, id, divider, children, ...rest }: HeadingProps) => {
|
||||
return (
|
||||
<H as={`h${level}`} id={id} divider={divider || level === 2} {...rest}>
|
||||
<H as={`h${level}` as keyof JSX.IntrinsicElements} id={id} divider={divider || level === 2} {...rest}>
|
||||
{children}
|
||||
|
||||
{/* add anchor link to H2s and H3s. ID is either provided or automatically generated by rehype-slug. */}
|
||||
|
@ -14,7 +14,7 @@ export const ThemeContext: Context<{
|
||||
setTheme: (theme: string) => void;
|
||||
}> = createContext({
|
||||
activeTheme: "",
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
setTheme: (_) => {},
|
||||
});
|
||||
|
||||
|
70
eslint.config.mjs
Normal file
70
eslint.config.mjs
Normal file
@ -0,0 +1,70 @@
|
||||
import { FlatCompat } from "@eslint/eslintrc";
|
||||
import js from "@eslint/js";
|
||||
import typescriptEslint from "typescript-eslint";
|
||||
import prettierRecommended from "eslint-plugin-prettier/recommended";
|
||||
import customConfig from "@jakejarvis/eslint-config";
|
||||
import * as mdx from "eslint-plugin-mdx";
|
||||
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: import.meta.dirname,
|
||||
});
|
||||
|
||||
// eslint-disable-next-line import/no-anonymous-default-export
|
||||
export default [
|
||||
{ ignores: ["README.md", ".next", ".vercel", "node_modules"] },
|
||||
js.configs.recommended,
|
||||
...typescriptEslint.configs.recommended,
|
||||
...compat.extends("next/core-web-vitals"),
|
||||
prettierRecommended,
|
||||
...customConfig,
|
||||
{
|
||||
rules: {
|
||||
"prettier/prettier": [
|
||||
"error",
|
||||
{},
|
||||
{
|
||||
usePrettierrc: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
|
||||
rules: {
|
||||
camelcase: "off",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
"@typescript-eslint/no-explicit-any": "warn",
|
||||
"react/no-unescaped-entities": "off",
|
||||
"react/jsx-boolean-value": "error",
|
||||
|
||||
"react/jsx-wrap-multilines": [
|
||||
"error",
|
||||
{
|
||||
arrow: "parens-new-line",
|
||||
assignment: "parens-new-line",
|
||||
condition: "parens-new-line",
|
||||
declaration: "parens-new-line",
|
||||
logical: "parens-new-line",
|
||||
prop: "ignore",
|
||||
return: "parens-new-line",
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
...mdx.flat,
|
||||
processor: mdx.createRemarkProcessor({
|
||||
lintCodeBlocks: false,
|
||||
}),
|
||||
rules: {
|
||||
"mdx/remark": "warn",
|
||||
"mdx/code-blocks": "off",
|
||||
"react/jsx-no-undef": "off",
|
||||
"react/jsx-boolean-value": "off",
|
||||
"react/no-unescaped-entities": "off",
|
||||
// TODO: skip these correctly
|
||||
"max-len": "off",
|
||||
semi: "off",
|
||||
},
|
||||
},
|
||||
];
|
@ -3,7 +3,6 @@
|
||||
import { useCallback, useState, useRef } from "react";
|
||||
import type { Dispatch, SetStateAction } from "react";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
||||
const noop = () => {};
|
||||
|
||||
const useLocalStorage = <T = string>(
|
||||
|
59
package.json
59
package.json
@ -15,48 +15,48 @@
|
||||
"dev": "next dev --turbopack -H 0.0.0.0",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"lint": "next lint --no-cache",
|
||||
"typecheck": "tsc",
|
||||
"postinstall": "prisma generate"
|
||||
},
|
||||
"dependencies": {
|
||||
"@giscus/react": "^3.0.0",
|
||||
"@giscus/react": "^3.1.0",
|
||||
"@libsql/client": "^0.8.1",
|
||||
"@novnc/novnc": "1.4.0",
|
||||
"@octokit/graphql": "^8.1.1",
|
||||
"@octokit/graphql": "^8.1.2",
|
||||
"@octokit/graphql-schema": "^15.25.0",
|
||||
"@prisma/adapter-libsql": "^5.22.0",
|
||||
"@prisma/client": "^5.22.0",
|
||||
"@prisma/adapter-libsql": "^6.2.1",
|
||||
"@prisma/client": "^6.2.1",
|
||||
"@react-spring/web": "^9.7.5",
|
||||
"@stitches/react": "1.3.1-1",
|
||||
"@vercel/analytics": "^1.4.1",
|
||||
"comma-number": "^2.1.0",
|
||||
"copy-to-clipboard": "^3.3.3",
|
||||
"dayjs": "^1.11.13",
|
||||
"fast-glob": "^3.3.2",
|
||||
"fast-glob": "^3.3.3",
|
||||
"feed": "^4.2.2",
|
||||
"formik": "^2.4.6",
|
||||
"gray-matter": "^4.0.3",
|
||||
"next": "15.0.3",
|
||||
"next": "15.1.4",
|
||||
"next-mdx-remote": "^5.0.0",
|
||||
"next-seo": "^6.6.0",
|
||||
"nodemailer": "^6.9.16",
|
||||
"obj-str": "^1.1.0",
|
||||
"p-map": "^7.0.2",
|
||||
"p-map": "^7.0.3",
|
||||
"p-memoize": "^7.1.1",
|
||||
"polished": "^4.3.1",
|
||||
"prop-types": "^15.8.1",
|
||||
"query-string": "^9.1.1",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1",
|
||||
"react-error-boundary": "^4.1.2",
|
||||
"react-error-boundary": "^5.0.0",
|
||||
"react-frame-component": "^5.2.7",
|
||||
"react-icons": "^5.3.0",
|
||||
"react-icons": "~5.3.0",
|
||||
"react-innertext": "^1.1.5",
|
||||
"react-intersection-observer": "^9.13.1",
|
||||
"react-intersection-observer": "^9.15.0",
|
||||
"react-is": "18.3.1",
|
||||
"react-player": "^2.16.0",
|
||||
"react-textarea-autosize": "^8.5.5",
|
||||
"react-textarea-autosize": "^8.5.7",
|
||||
"react-turnstile": "^1.1.4",
|
||||
"react-tweet": "^3.2.1",
|
||||
"rehype-prism-plus": "^2.0.0",
|
||||
@ -71,34 +71,35 @@
|
||||
"sitemap": "^8.0.0",
|
||||
"stitches-normalize": "^3.0.1",
|
||||
"strip-comments": "^2.0.1",
|
||||
"swr": "^2.2.5",
|
||||
"swr": "^2.3.0",
|
||||
"trim-lines": "^3.0.1",
|
||||
"unified": "^11.0.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jakejarvis/eslint-config": "^3.1.0",
|
||||
"@eslint/eslintrc": "^3.2.0",
|
||||
"@eslint/js": "^9.18.0",
|
||||
"@jakejarvis/eslint-config": "~4.0.7",
|
||||
"@types/comma-number": "^2.1.2",
|
||||
"@types/node": "^22.9.1",
|
||||
"@types/node": "^22.10.7",
|
||||
"@types/nodemailer": "^6.4.17",
|
||||
"@types/novnc__novnc": "1.3.4",
|
||||
"@types/prop-types": "^15.7.13",
|
||||
"@types/prop-types": "^15.7.14",
|
||||
"@types/react": "^18.3.12",
|
||||
"@types/react-dom": "^18.3.1",
|
||||
"@types/react-is": "^18.3.0",
|
||||
"@types/strip-comments": "^2.0.4",
|
||||
"@typescript-eslint/eslint-plugin": "^8.15.0",
|
||||
"@typescript-eslint/parser": "^8.15.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "~8.57.1",
|
||||
"eslint-config-next": "15.0.3",
|
||||
"eslint-config-prettier": "~9.1.0",
|
||||
"eslint": "~9.18.0",
|
||||
"eslint-config-next": "15.1.4",
|
||||
"eslint-config-prettier": "~10.0.1",
|
||||
"eslint-plugin-mdx": "~3.1.5",
|
||||
"eslint-plugin-prettier": "~5.2.1",
|
||||
"lint-staged": "^15.2.10",
|
||||
"prettier": "^3.3.3",
|
||||
"prisma": "^5.22.0",
|
||||
"eslint-plugin-prettier": "~5.2.2",
|
||||
"lint-staged": "^15.4.0",
|
||||
"prettier": "^3.4.2",
|
||||
"prisma": "^6.2.1",
|
||||
"simple-git-hooks": "^2.11.1",
|
||||
"typescript": "^5.6.3"
|
||||
"typescript": "^5.7.3",
|
||||
"typescript-eslint": "^8.20.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"sharp": "^0.33.5"
|
||||
@ -106,6 +107,7 @@
|
||||
"engines": {
|
||||
"node": ">=20.x"
|
||||
},
|
||||
"packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0",
|
||||
"cacheDirectories": [
|
||||
"node_modules",
|
||||
".next/cache"
|
||||
@ -117,10 +119,5 @@
|
||||
"*.{js,jsx,mjs,ts,tsx,md,mdx}": [
|
||||
"eslint"
|
||||
]
|
||||
},
|
||||
"packageManager": "pnpm@9.14.2",
|
||||
"volta": {
|
||||
"node": "20.18.1",
|
||||
"pnpm": "9.14.2"
|
||||
}
|
||||
}
|
||||
|
2330
pnpm-lock.yaml
generated
2330
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user