From 6e095c968b1076ff20da9c1c08a767081d98a245 Mon Sep 17 00:00:00 2001 From: Joe Heffernan Date: Fri, 20 Feb 2026 13:06:25 -0800 Subject: [PATCH 1/7] add linting deps and config --- eslint-plugin-sort-destructure-keys.d.ts | 1 + eslint.config.mts | 26 ++ package.json | 146 ++++----- yarn.lock | 359 ++++++++++++++++++++++- 4 files changed, 457 insertions(+), 75 deletions(-) create mode 100644 eslint-plugin-sort-destructure-keys.d.ts create mode 100644 eslint.config.mts diff --git a/eslint-plugin-sort-destructure-keys.d.ts b/eslint-plugin-sort-destructure-keys.d.ts new file mode 100644 index 0000000..55d4410 --- /dev/null +++ b/eslint-plugin-sort-destructure-keys.d.ts @@ -0,0 +1 @@ +declare module 'eslint-plugin-sort-destructure-keys'; diff --git a/eslint.config.mts b/eslint.config.mts new file mode 100644 index 0000000..26a62d2 --- /dev/null +++ b/eslint.config.mts @@ -0,0 +1,26 @@ +import eslint from '@eslint/js'; +import globals from "globals"; +import tseslint from "typescript-eslint"; +import sortDestructureKeys from "eslint-plugin-sort-destructure-keys"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + eslint.configs.recommended, + tseslint.configs.recommended, + { + files: ["**/*.{ts,tsx}"], + plugins: { + "sort-destructure-keys": sortDestructureKeys, + }, + languageOptions: { globals: { ...globals.browser, ...globals.node } }, + rules: { + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": ["error"], + "sort-destructure-keys/sort-destructure-keys": [ + 2, + { caseSensitive: false }, + ], + "@typescript-eslint/no-require-imports": "off", + }, + }, +]); \ No newline at end of file diff --git a/package.json b/package.json index df7204c..0f61df6 100644 --- a/package.json +++ b/package.json @@ -1,72 +1,78 @@ { - "name": "aics-idea-board", - "version": "0.0.2", - "author": "Megan Riel-Mehan", - "dependencies": { - "@ant-design/icons": "^5.5.1", - "@reach/router": "^1.3.4", - "antd": "^5.21.2", - "bulma": "^1.0.4", - "decap-cms-app": "^3.0.12", - "gatsby": "^5.14.0-next.3", - "gatsby-plugin-decap-cms": "^4.0.3", - "gatsby-plugin-fix-fouc": "^1.1.3", - "gatsby-plugin-image": "^3.13.1", - "gatsby-plugin-netlify": "^5.0.0", - "gatsby-plugin-purgecss": "^6.0.0", - "gatsby-plugin-react-helmet-async": "^1.2.3", - "gatsby-plugin-react-svg": "^3.3.0", - "gatsby-plugin-sass": "^6.13.1", - "gatsby-plugin-sharp": "^5.13.1", - "gatsby-remark-copy-linked-files": "^6.13.1", - "gatsby-remark-external-links": "^0.0.4", - "gatsby-remark-images": "^7.13.1", - "gatsby-remark-line-breaks": "^1.0.0", - "gatsby-remark-relative-images": "^2.0.2", - "gatsby-source-filesystem": "^5.13.1", - "gatsby-transformer-remark": "^6.13.1", - "gatsby-transformer-remark-frontmatter": "^1.1.0", - "gatsby-transformer-sharp": "^5.13.1", - "lodash": "^4.17.15", - "lodash-webpack-plugin": "^0.11.4", - "prop-types": "^15.6.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-helmet-async": "^2.0.5", - "sass": "^1.43.2", - "slugify": "^1.6.6", - "uuid": "^8.0.0", - "vitest": "^4.0.18" - }, - "keywords": [ - "gatsby" - ], - "main": "n/a", - "scripts": { - "clean": "gatsby clean", - "start": "npm run develop", - "build": "npm run clean && gatsby build", - "develop": "npm run clean && gatsby develop", - "serve": "gatsby serve", - "format": "prettier --trailing-comma es5 --no-semi --single-quote --write \"{gatsby-*.js,src/**/*.js}\"", - "test": "vitest", - "dev": "npx concurrently \"npx netlify-cms-proxy-server\" \"npm start -- --progress\"" - }, - "devDependencies": { - "@types/antd": "^1.0.0", - "@types/node": "^20.11.20", - "@types/react": "^18.2.59", - "@types/react-dom": "^18.2.19", - "@types/react-helmet": "^6.1.11", - "concurrently": "^9.2.1", - "gatsby-plugin-postcss": "^6.13.1", - "netlify-cli": "^17.15.7", - "postcss": "^8.4.35", - "prettier": "^2.0.5", - "typescript": "^5.3.3", - "typescript-plugin-css-modules": "^5.1.0" - }, - "engines": { - "node": ">= 18.15.0" - } + "name": "aics-idea-board", + "version": "0.0.2", + "author": "Megan Riel-Mehan", + "dependencies": { + "@ant-design/icons": "^5.5.1", + "@reach/router": "^1.3.4", + "antd": "^5.21.2", + "bulma": "^1.0.4", + "decap-cms-app": "^3.0.12", + "gatsby": "^5.14.0-next.3", + "gatsby-plugin-decap-cms": "^4.0.3", + "gatsby-plugin-fix-fouc": "^1.1.3", + "gatsby-plugin-image": "^3.13.1", + "gatsby-plugin-netlify": "^5.0.0", + "gatsby-plugin-purgecss": "^6.0.0", + "gatsby-plugin-react-helmet-async": "^1.2.3", + "gatsby-plugin-react-svg": "^3.3.0", + "gatsby-plugin-sass": "^6.13.1", + "gatsby-plugin-sharp": "^5.13.1", + "gatsby-remark-copy-linked-files": "^6.13.1", + "gatsby-remark-external-links": "^0.0.4", + "gatsby-remark-images": "^7.13.1", + "gatsby-remark-line-breaks": "^1.0.0", + "gatsby-remark-relative-images": "^2.0.2", + "gatsby-source-filesystem": "^5.13.1", + "gatsby-transformer-remark": "^6.13.1", + "gatsby-transformer-remark-frontmatter": "^1.1.0", + "gatsby-transformer-sharp": "^5.13.1", + "lodash": "^4.17.15", + "lodash-webpack-plugin": "^0.11.4", + "prop-types": "^15.6.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-helmet-async": "^2.0.5", + "sass": "^1.43.2", + "slugify": "^1.6.6", + "uuid": "^8.0.0", + "vitest": "^4.0.18" + }, + "keywords": [ + "gatsby" + ], + "main": "n/a", + "scripts": { + "clean": "gatsby clean", + "start": "npm run develop", + "build": "npm run clean && gatsby build", + "develop": "npm run clean && gatsby develop", + "serve": "gatsby serve", + "format": "prettier --trailing-comma es5 --no-semi --single-quote --write \"{gatsby-*.js,src/**/*.js}\"", + "test": "vitest", + "dev": "npx concurrently \"npx netlify-cms-proxy-server\" \"npm start -- --progress\"", + "lint": "eslint \"src/**/*.{ts,tsx}\" --quiet --fix" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/antd": "^1.0.0", + "@types/node": "^20.11.20", + "@types/react": "^18.2.59", + "@types/react-dom": "^18.2.19", + "@types/react-helmet": "^6.1.11", + "concurrently": "^9.2.1", + "eslint": "^9.38.0", + "eslint-plugin-sort-destructure-keys": "^3.0.0", + "gatsby-plugin-postcss": "^6.13.1", + "jiti": "^2.6.1", + "netlify-cli": "^17.15.7", + "postcss": "^8.4.35", + "prettier": "^2.0.5", + "typescript": "^5.3.3", + "typescript-eslint": "^8.56.0", + "typescript-plugin-css-modules": "^5.1.0" + }, + "engines": { + "node": ">= 18.15.0" + } } diff --git a/yarn.lock b/yarn.lock index 2e09a91..640504e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1830,11 +1830,46 @@ dependencies: eslint-visitor-keys "^3.4.3" +"@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + "@eslint-community/regexpp@^4.4.0": version "4.12.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== + dependencies: + "@eslint/object-schema" "^2.1.7" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" + +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== + dependencies: + "@types/json-schema" "^7.0.15" + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1850,6 +1885,44 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^3.3.1": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" + integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.1" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.39.3": + version "9.39.3" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.3.tgz#c6168736c7e0c43ead49654ed06a4bcb3833363d" + integrity sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw== + +"@eslint/js@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-10.0.1.tgz#1e8a876f50117af8ab67e47d5ad94d38d6622583" + integrity sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA== + +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== + +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== + dependencies: + "@eslint/core" "^0.17.0" + levn "^0.4.1" + "@fastify/accept-negotiator@^1.0.0", "@fastify/accept-negotiator@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz#c1c66b3b771c09742a54dd5bc87c582f6b0630ff" @@ -2121,6 +2194,19 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.7" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.4.0" + "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -2130,6 +2216,11 @@ debug "^4.1.1" minimatch "^3.0.4" +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "@humanwhocodes/momoa@^2.0.2": version "2.0.4" resolved "https://registry.yarnpkg.com/@humanwhocodes/momoa/-/momoa-2.0.4.tgz#8b9e7a629651d15009c3587d07a222deeb829385" @@ -2140,6 +2231,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + "@iarna/toml@2.2.5", "@iarna/toml@^2.2.5": version "2.2.5" resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" @@ -3992,7 +4088,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -4199,6 +4295,20 @@ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.7.tgz#114e2ffc8d5be4915fdd5bc90668fc0ceaadb760" integrity sha512-LKzNTjj+2j09wAo/vvVjzgw5qckJJzhdGgWHW7j69QIGdq/KnZrMAMIHQiWGl3Ccflh5/CudBAntTPYdprPltA== +"@typescript-eslint/eslint-plugin@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz#5aec3db807a6b8437ea5d5ebf7bd16b4119aba8d" + integrity sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw== + dependencies: + "@eslint-community/regexpp" "^4.12.2" + "@typescript-eslint/scope-manager" "8.56.0" + "@typescript-eslint/type-utils" "8.56.0" + "@typescript-eslint/utils" "8.56.0" + "@typescript-eslint/visitor-keys" "8.56.0" + ignore "^7.0.5" + natural-compare "^1.4.0" + ts-api-utils "^2.4.0" + "@typescript-eslint/eslint-plugin@^5.60.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" @@ -4215,6 +4325,17 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/parser@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.56.0.tgz#8ecff1678b8b1a742d29c446ccf5eeea7f971d72" + integrity sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg== + dependencies: + "@typescript-eslint/scope-manager" "8.56.0" + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/typescript-estree" "8.56.0" + "@typescript-eslint/visitor-keys" "8.56.0" + debug "^4.4.3" + "@typescript-eslint/parser@^5.60.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" @@ -4225,6 +4346,15 @@ "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" +"@typescript-eslint/project-service@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.56.0.tgz#bb8562fecd8f7922e676fc6a1189c20dd7991d73" + integrity sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.56.0" + "@typescript-eslint/types" "^8.56.0" + debug "^4.4.3" + "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" @@ -4233,6 +4363,19 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" +"@typescript-eslint/scope-manager@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz#604030a4c6433df3728effdd441d47f45a86edb4" + integrity sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w== + dependencies: + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/visitor-keys" "8.56.0" + +"@typescript-eslint/tsconfig-utils@8.56.0", "@typescript-eslint/tsconfig-utils@^8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz#2538ce83cbc376e685487960cbb24b65fe2abc4e" + integrity sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg== + "@typescript-eslint/type-utils@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" @@ -4243,11 +4386,27 @@ debug "^4.3.4" tsutils "^3.21.0" +"@typescript-eslint/type-utils@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz#72b4edc1fc73988998f1632b3ec99c2a66eaac6e" + integrity sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA== + dependencies: + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/typescript-estree" "8.56.0" + "@typescript-eslint/utils" "8.56.0" + debug "^4.4.3" + ts-api-utils "^2.4.0" + "@typescript-eslint/types@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== +"@typescript-eslint/types@8.56.0", "@typescript-eslint/types@^8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.56.0.tgz#a2444011b9a98ca13d70411d2cbfed5443b3526a" + integrity sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ== + "@typescript-eslint/typescript-estree@5.62.0", "@typescript-eslint/typescript-estree@^5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" @@ -4261,6 +4420,21 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz#fadbc74c14c5bac947db04980ff58bb178701c2e" + integrity sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q== + dependencies: + "@typescript-eslint/project-service" "8.56.0" + "@typescript-eslint/tsconfig-utils" "8.56.0" + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/visitor-keys" "8.56.0" + debug "^4.4.3" + minimatch "^9.0.5" + semver "^7.7.3" + tinyglobby "^0.2.15" + ts-api-utils "^2.4.0" + "@typescript-eslint/utils@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" @@ -4275,6 +4449,16 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.56.0.tgz#063ce6f702ec603de1b83ee795ed5e877d6f7841" + integrity sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ== + dependencies: + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.56.0" + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/typescript-estree" "8.56.0" + "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" @@ -4283,6 +4467,14 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz#7d6592ab001827d3ce052155edf7ecad19688d7d" + integrity sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg== + dependencies: + "@typescript-eslint/types" "8.56.0" + eslint-visitor-keys "^5.0.0" + "@vercel/nft@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@vercel/nft/-/nft-0.27.7.tgz#92e27ef1860f1a1d1838b76098996aae165d9b98" @@ -4626,7 +4818,7 @@ acorn-import-attributes@^1.9.5: resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -4660,6 +4852,11 @@ acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1, acorn@^8.6.0, acorn@^8.8.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== +acorn@^8.15.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + address@1.2.2, address@^1.0.1, address@^1.1.2: version "1.2.2" resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" @@ -7293,6 +7490,13 @@ debug@^3.0.1, debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decache@4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/decache/-/decache-4.6.2.tgz#c1df1325a2f36d53922e08f33380f083148199cd" @@ -8727,6 +8931,13 @@ eslint-plugin-react@^7.32.2: string.prototype.matchall "^4.0.12" string.prototype.repeat "^1.0.0" +eslint-plugin-sort-destructure-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-3.0.0.tgz#0bd6ac30cdaf3b2c4c02c9c5e4ab4c48adfde67a" + integrity sha512-ian2KEdGi8xZW50SVz9HIP9PDQN4XWeo3Hax3LsDk0ojL+wrwk40az8bKCnt3q2J7I3q5xF2ncZ0arj2q8Ou+A== + dependencies: + natural-compare-lite "^1.4.0" + eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -8735,6 +8946,14 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" @@ -8757,6 +8976,16 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint-visitor-keys@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" + integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== + eslint-webpack-plugin@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.7.0.tgz#0525793a4f8c652c1c6d863995ce1e0f2dcbd143" @@ -8815,6 +9044,46 @@ eslint@^7.32.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^9.38.0: + version "9.39.3" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.3.tgz#08d63df1533d7743c0907b32a79a7e134e63ee2f" + integrity sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg== + dependencies: + "@eslint-community/eslint-utils" "^4.8.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.39.3" + "@eslint/plugin-kit" "^0.4.1" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + esniff@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" @@ -8825,6 +9094,15 @@ esniff@^2.0.1: event-emitter "^0.3.5" type "^2.7.2" +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" @@ -8846,6 +9124,13 @@ esquery@^1.4.0: dependencies: estraverse "^5.1.0" +esquery@^1.5.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== + dependencies: + estraverse "^5.1.0" + esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -9333,6 +9618,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + file-loader@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" @@ -9509,6 +9801,14 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -10482,6 +10782,13 @@ glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" @@ -10565,6 +10872,11 @@ globals@^13.2.0, globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" @@ -11246,6 +11558,11 @@ ignore@^5.2.0, ignore@^5.2.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +ignore@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + image-meta@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/image-meta/-/image-meta-0.2.1.tgz#3a9eb9f0bfd2f767ca2b0720623c2e03742aa29f" @@ -12111,6 +12428,11 @@ jiti@^2.1.2: resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== +jiti@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + joi@^17.11.0, joi@^17.9.2: version "17.13.3" resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" @@ -12157,6 +12479,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + jsesc@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -12324,7 +12653,7 @@ keep-func-props@^4.0.0: dependencies: mimic-fn "^4.0.0" -keyv@^4.0.0, keyv@^4.5.3: +keyv@^4.0.0, keyv@^4.5.3, keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -13532,7 +13861,7 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0, minimatch@^9.0.4: +minimatch@^9.0.0, minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -14369,7 +14698,7 @@ optimism@^0.10.0: dependencies: "@wry/context" "^0.4.0" -optionator@^0.9.1: +optionator@^0.9.1, optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== @@ -17366,6 +17695,11 @@ semver@^7.0.0, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semve resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +semver@^7.7.3: + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== + send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -18829,6 +19163,11 @@ truncate-utf8-bytes@^1.0.0: dependencies: utf8-byte-length "^1.0.1" +ts-api-utils@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8" + integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA== + ts-invariant@^0.4.0: version "0.4.4" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" @@ -19029,6 +19368,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== +typescript-eslint@^8.56.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.56.0.tgz#f4686ccaaf2fb86daf0133820da40ca5961a2236" + integrity sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg== + dependencies: + "@typescript-eslint/eslint-plugin" "8.56.0" + "@typescript-eslint/parser" "8.56.0" + "@typescript-eslint/typescript-estree" "8.56.0" + "@typescript-eslint/utils" "8.56.0" + typescript-plugin-css-modules@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.1.0.tgz#faa0ceffe8a8ffcbbc2f77ed637a64464195044a" From a51d13c5a82802620baa3f85d969bd3935415055 Mon Sep 17 00:00:00 2001 From: Joe Heffernan Date: Fri, 20 Feb 2026 13:15:10 -0800 Subject: [PATCH 2/7] fix linting errors --- src/components/Content.tsx | 4 ++-- src/components/FullWidthImage.tsx | 6 +++--- src/components/IdeaRoll.tsx | 4 ++-- src/components/Layout.tsx | 2 +- src/components/MaterialsAndMethods.tsx | 4 ++-- src/components/PreviewCompatibleImage.tsx | 5 +++-- src/components/TagPopover.tsx | 2 +- src/templates/about-page.tsx | 2 +- src/templates/allenite.tsx | 2 +- src/templates/dataset.tsx | 3 --- src/templates/idea-post.tsx | 10 +++++----- src/templates/index-page.tsx | 15 ++++++++------- src/templates/program.tsx | 2 -- src/types/index.ts | 13 ++++++++++++- 14 files changed, 41 insertions(+), 33 deletions(-) diff --git a/src/components/Content.tsx b/src/components/Content.tsx index 268aa3f..638012b 100644 --- a/src/components/Content.tsx +++ b/src/components/Content.tsx @@ -10,11 +10,11 @@ interface ContentProps { className?: string; } -export const HTMLContent = ({ content, className }: HTMLContentProps) => ( +export const HTMLContent = ({ className, content }: HTMLContentProps) => (
); -const Content = ({ content, className }: ContentProps) => ( +const Content = ({ className, content }: ContentProps) => (
{content}
); diff --git a/src/components/FullWidthImage.tsx b/src/components/FullWidthImage.tsx index 15de1fe..bb9e740 100644 --- a/src/components/FullWidthImage.tsx +++ b/src/components/FullWidthImage.tsx @@ -10,11 +10,11 @@ interface FullWidthImageProps { } const FullWidthImage: React.FC = ({ - img, - title, height = 200, - subheading, + img, imgPosition = "top left", + subheading, + title, }) => { return ( diff --git a/src/components/IdeaRoll.tsx b/src/components/IdeaRoll.tsx index 6fbd84f..cc01471 100644 --- a/src/components/IdeaRoll.tsx +++ b/src/components/IdeaRoll.tsx @@ -1,6 +1,6 @@ import React from "react"; import { Link, graphql, StaticQuery } from "gatsby"; -import { Avatar, List, Space, Tag } from "antd"; +import { Avatar, List, Space } from "antd"; import { MessageOutlined, StarOutlined } from "@ant-design/icons"; import { useLocation } from "@reach/router"; import { MaterialsAndMethods } from "../types"; @@ -183,7 +183,7 @@ export default function IdeaRoll({ } } `} - render={(data: any) => ( + render={(data) => ( )} /> diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 5666287..c9a0b84 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -10,7 +10,7 @@ import theme from "../style/theme"; const { container } = require("../style/layout.module.css"); const TemplateWrapper = ({ children }: React.PropsWithChildren) => { - const { title, description } = useSiteMetadata(); + const { description, title } = useSiteMetadata(); return ( diff --git a/src/components/MaterialsAndMethods.tsx b/src/components/MaterialsAndMethods.tsx index 8955e3e..90c8105 100644 --- a/src/components/MaterialsAndMethods.tsx +++ b/src/components/MaterialsAndMethods.tsx @@ -8,8 +8,8 @@ const { section, sectionTitle } = require("../style/idea-post.module.css"); const { subText } = require("../style/materials.module.css"); export const MaterialsAndMethodsComponent: React.FC = ({ - dataset, cellLines, + dataset, protocols, software, }) => { @@ -27,7 +27,7 @@ export const MaterialsAndMethodsComponent: React.FC = ({ }; const getSoftwareToolRender = (software: SoftwareTool, index: number) => { - const { name, description, link } = + const { description, link, name } = software.softwareTool?.frontmatter ?? {}; const displayDescription = software.customDescription ?? description; diff --git a/src/components/PreviewCompatibleImage.tsx b/src/components/PreviewCompatibleImage.tsx index 87a2d13..752d907 100644 --- a/src/components/PreviewCompatibleImage.tsx +++ b/src/components/PreviewCompatibleImage.tsx @@ -1,10 +1,11 @@ import * as React from "react"; import { GatsbyImage } from "gatsby-plugin-image"; +import { ChildImageSharp } from "../types"; interface PreviewCompatibleImageProps { imageInfo: { alt?: string; - childImageSharp?: any; + childImageSharp?: ChildImageSharp; image: any; width?: number; height?: number; @@ -25,7 +26,7 @@ const PreviewCompatibleImage = ({ alt={alt} /> ); - } else if (!!childImageSharp) { + } else if (childImageSharp) { return ( = ({ tag, currentSlug }) => { +export const TagPopover: React.FC = ({ currentSlug, tag }) => { const data: Queries.AllIdeasForTagsQuery = useStaticQuery(graphql` query AllIdeasForTags { allMarkdownRemark( diff --git a/src/templates/about-page.tsx b/src/templates/about-page.tsx index 6159589..c582c32 100644 --- a/src/templates/about-page.tsx +++ b/src/templates/about-page.tsx @@ -23,9 +23,9 @@ interface AboutPageTemplateProps { } export const AboutPageTemplate = ({ - title, content, contentComponent, + title, }: AboutPageTemplateProps) => { const PageContent = contentComponent || Content; diff --git a/src/templates/allenite.tsx b/src/templates/allenite.tsx index 096ae31..0418c06 100644 --- a/src/templates/allenite.tsx +++ b/src/templates/allenite.tsx @@ -24,9 +24,9 @@ interface AlleniteTemplateProps { } export const AlleniteTemplate = ({ + contact, name, title, - contact, }: AlleniteTemplateProps) => { return (
diff --git a/src/templates/dataset.tsx b/src/templates/dataset.tsx index b324cfc..c1cab6a 100644 --- a/src/templates/dataset.tsx +++ b/src/templates/dataset.tsx @@ -27,9 +27,6 @@ type DatasetProps = { const DatasetTemplate: React.FC = ({ name, - description, - link, - status, }) => { return (
diff --git a/src/templates/idea-post.tsx b/src/templates/idea-post.tsx index 52f4a25..078bfb0 100644 --- a/src/templates/idea-post.tsx +++ b/src/templates/idea-post.tsx @@ -17,19 +17,19 @@ import { TagPopover } from "../components/TagPopover"; const Header = AntdLayout.Header; const { + actionIcons, + card, + proposal, section, sectionTitle, taglist, - proposal, - card, - actionIcons, } = require("../style/idea-post.module.css"); export const IdeaPostTemplate: React.FC = ({ + materialsAndMethods, slug, tags, title, - materialsAndMethods, }) => { // TODO query the actual data @@ -104,7 +104,7 @@ const IdeaPost: React.FC> = ({ data }) => { ); } - const { title, description } = markdownRemark.frontmatter; + const { description, title } = markdownRemark.frontmatter; return ( diff --git a/src/templates/index-page.tsx b/src/templates/index-page.tsx index caabba6..39640de 100644 --- a/src/templates/index-page.tsx +++ b/src/templates/index-page.tsx @@ -1,8 +1,7 @@ import React from "react"; import PropTypes from "prop-types"; -import { Link, graphql } from "gatsby"; +import { graphql } from "gatsby"; import { getImage } from "gatsby-plugin-image"; -import { Layout as AntdLayout, Flex } from "antd"; import Layout from "../components/Layout"; import IdeaRoll from "../components/IdeaRoll"; @@ -19,7 +18,8 @@ interface QueryResult { markdownRemark: { frontmatter: { title: string; - image: any; // Replace `any` with a more specific type if possible + // @eslint-disable-next-line @typescript-eslint/no-explicit-any + image: any; // TODO: Replace `any` with a more specific type if possible heading: string; subheading: string; mainpitch: MainPitch; @@ -35,6 +35,7 @@ interface MainPitch { } interface IndexPageTemplateProps { + // @eslint-disable-next-line @typescript-eslint/no-explicit-any image: any; // Replace `any` with a more specific type if possible title: string; heading: string; @@ -44,12 +45,12 @@ interface IndexPageTemplateProps { } export const IndexPageTemplate: React.FC = ({ - image, - title, + description, heading, - subheading, + image, mainpitch, - description, + subheading, + title, }) => { const heroImage = getImage(image) || image; diff --git a/src/templates/program.tsx b/src/templates/program.tsx index 281126c..ad18180 100644 --- a/src/templates/program.tsx +++ b/src/templates/program.tsx @@ -25,8 +25,6 @@ interface ProgramTemplateProps { export const ProgramTemplate = ({ name, - description, - image, }: ProgramTemplateProps) => { return (
diff --git a/src/types/index.ts b/src/types/index.ts index 492fa0f..4821445 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,5 @@ +import { IGatsbyImageData } from "gatsby-plugin-image"; + /** * Types are derived from the schema customization in gatsby-node.js * and generated by running `gatsby develop` after editing the schema. @@ -19,4 +21,13 @@ export type MaterialsAndMethods = NonNullable Date: Fri, 20 Feb 2026 14:59:07 -0800 Subject: [PATCH 3/7] fix eslint comment syntax --- src/templates/index-page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/templates/index-page.tsx b/src/templates/index-page.tsx index 39640de..6301bef 100644 --- a/src/templates/index-page.tsx +++ b/src/templates/index-page.tsx @@ -18,7 +18,7 @@ interface QueryResult { markdownRemark: { frontmatter: { title: string; - // @eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any image: any; // TODO: Replace `any` with a more specific type if possible heading: string; subheading: string; @@ -35,7 +35,7 @@ interface MainPitch { } interface IndexPageTemplateProps { - // @eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any image: any; // Replace `any` with a more specific type if possible title: string; heading: string; From 4158b46da67d2a284b1fb37522e8dc1f758dc4be Mon Sep 17 00:00:00 2001 From: Joe Heffernan Date: Mon, 23 Feb 2026 13:31:52 -0800 Subject: [PATCH 4/7] run format --- gatsby-config.js | 154 ++++++++-------- gatsby-node.js | 180 +++++++++---------- src/cms/cms.js | 14 +- src/cms/preview-templates/IdeaPostPreview.js | 32 ++-- src/components/IdeaRoll.tsx | 4 +- src/components/PreviewCompatibleImage.tsx | 1 + src/pages/tags/index.js | 44 ++--- src/templates/dataset.tsx | 4 +- src/templates/program.tsx | 4 +- src/types/index.ts | 1 - 10 files changed, 216 insertions(+), 222 deletions(-) diff --git a/gatsby-config.js b/gatsby-config.js index fce520c..278425b 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -1,83 +1,83 @@ module.exports = { - graphqlTypegen: true, - siteMetadata: { - title: 'Gatsby + Netlify CMS Starter', - description: - 'This repo contains an example business website that is built with Gatsby, and Netlify CMS.It follows the JAMstack architecture by using Git as a single source of truth, and Netlify for continuous deployment, and CDN distribution.', - }, - plugins: [ - 'gatsby-plugin-react-helmet-async', - 'gatsby-plugin-fix-fouc', - { - resolve: 'gatsby-plugin-sass', - options: { - sassOptions: { - indentedSyntax: true, - }, - }, - }, - { - // keep as first gatsby-source-filesystem plugin for gatsby image support - resolve: 'gatsby-source-filesystem', - options: { - path: `${__dirname}/static/img`, - name: 'uploads', - }, - }, - { - resolve: 'gatsby-source-filesystem', - options: { - path: `${__dirname}/src/pages`, - name: 'pages', - }, + graphqlTypegen: true, + siteMetadata: { + title: "Gatsby + Netlify CMS Starter", + description: + "This repo contains an example business website that is built with Gatsby, and Netlify CMS.It follows the JAMstack architecture by using Git as a single source of truth, and Netlify for continuous deployment, and CDN distribution.", }, - { - resolve: 'gatsby-source-filesystem', - options: { - path: `${__dirname}/src/img`, - name: 'images', - }, - }, - `gatsby-plugin-image`, - 'gatsby-plugin-sharp', - 'gatsby-transformer-sharp', - { - resolve: 'gatsby-transformer-remark', - options: { - plugins: [ - 'gatsby-remark-relative-images', - { - resolve: 'gatsby-remark-images', + plugins: [ + "gatsby-plugin-react-helmet-async", + "gatsby-plugin-fix-fouc", + { + resolve: "gatsby-plugin-sass", options: { - // It's important to specify the maxWidth (in pixels) of - // the content container as this plugin uses this as the - // base for generating different widths of each image. - maxWidth: 2048, + sassOptions: { + indentedSyntax: true, + }, }, - }, - { - resolve: 'gatsby-remark-copy-linked-files', + }, + { + // keep as first gatsby-source-filesystem plugin for gatsby image support + resolve: "gatsby-source-filesystem", options: { - destinationDir: 'static', + path: `${__dirname}/static/img`, + name: "uploads", }, - }, - ], - }, - }, - { - resolve: 'gatsby-plugin-decap-cms', - options: { - modulePath: `${__dirname}/src/cms/cms.js`, - }, - }, - { - resolve: 'gatsby-plugin-purgecss', // purges all unused/unreferenced css rules - options: { - develop: true, // Activates purging in npm run develop - purgeOnly: ['/bulma-style.sass'], // applies purging only on the bulma css file - printRejected: true, - }, - }, // must be after other CSS plugins - 'gatsby-plugin-netlify', // make sure to keep it last in the array - ], -} + }, + { + resolve: "gatsby-source-filesystem", + options: { + path: `${__dirname}/src/pages`, + name: "pages", + }, + }, + { + resolve: "gatsby-source-filesystem", + options: { + path: `${__dirname}/src/img`, + name: "images", + }, + }, + `gatsby-plugin-image`, + "gatsby-plugin-sharp", + "gatsby-transformer-sharp", + { + resolve: "gatsby-transformer-remark", + options: { + plugins: [ + "gatsby-remark-relative-images", + { + resolve: "gatsby-remark-images", + options: { + // It's important to specify the maxWidth (in pixels) of + // the content container as this plugin uses this as the + // base for generating different widths of each image. + maxWidth: 2048, + }, + }, + { + resolve: "gatsby-remark-copy-linked-files", + options: { + destinationDir: "static", + }, + }, + ], + }, + }, + { + resolve: "gatsby-plugin-decap-cms", + options: { + modulePath: `${__dirname}/src/cms/cms.js`, + }, + }, + { + resolve: "gatsby-plugin-purgecss", // purges all unused/unreferenced css rules + options: { + develop: true, // Activates purging in npm run develop + purgeOnly: ["/bulma-style.sass"], // applies purging only on the bulma css file + printRejected: true, + }, + }, // must be after other CSS plugins + "gatsby-plugin-netlify", // make sure to keep it last in the array + ], +}; diff --git a/gatsby-node.js b/gatsby-node.js index 1e4c534..0500bde 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -1,16 +1,16 @@ -const _ = require('lodash') -const fs = require('fs') -const path = require('path') -const { createFilePath } = require('gatsby-source-filesystem') +const _ = require("lodash"); +const fs = require("fs"); +const path = require("path"); +const { createFilePath } = require("gatsby-source-filesystem"); const { - stringWithDefault, - resolveToArray, - resolveSlug, - resolveSoftwareTools, -} = require('./gatsbyutils/gatsby-resolver-utils') -const { DATASET_PATH } = require('./gatsbyutils/constants') + stringWithDefault, + resolveToArray, + resolveSlug, + resolveSoftwareTools, +} = require("./gatsbyutils/gatsby-resolver-utils"); +const { DATASET_PATH } = require("./gatsbyutils/constants"); -const read = (p) => fs.readFileSync(path.join(__dirname, p), 'utf8') +const read = (p) => fs.readFileSync(path.join(__dirname, p), "utf8"); /** * Markdown in /src/pages/ with these templateKeys are data-only @@ -21,9 +21,9 @@ const read = (p) => fs.readFileSync(path.join(__dirname, p), 'utf8') const DATA_ONLY_PAGES = ["software", "dataset", "allenite", "program"]; exports.createSchemaCustomization = ({ actions, schema }) => { - const { createTypes } = actions - const typeDefs = [ - `""" + const { createTypes } = actions; + const typeDefs = [ + `""" Nested materials and methods block for idea posts. """ type MaterialsAndMethods { @@ -49,10 +49,10 @@ exports.createSchemaCustomization = ({ actions, schema }) => { softwareTool: MarkdownRemark @link(by: "fields.slug") customDescription: String }`, - ] - createTypes(read('gatsby/schema/base.gql')) - createTypes(typeDefs) -} + ]; + createTypes(read("gatsby/schema/base.gql")); + createTypes(typeDefs); +}; /** * Resolvers ensure data shape/presence after queries, or provide @@ -116,48 +116,48 @@ exports.createResolvers = ({ createResolvers }) => { * Skips creating pages for data-only pages. */ exports.createPages = ({ actions, graphql }) => { - const { createPage } = actions - - return graphql(` - { - allMarkdownRemark(limit: 1000) { - edges { - node { - id - fields { - slug - } - frontmatter { - tags - templateKey - draft + const { createPage } = actions; + + return graphql(` + { + allMarkdownRemark(limit: 1000) { + edges { + node { + id + fields { + slug + } + frontmatter { + tags + templateKey + draft + } + } + } } - } } - } - } - `).then((result) => { - if (result.errors) { - result.errors.forEach((e) => console.error(e.toString())) - return Promise.reject(result.errors) - } + `).then((result) => { + if (result.errors) { + result.errors.forEach((e) => console.error(e.toString())); + return Promise.reject(result.errors); + } - const posts = result.data.allMarkdownRemark.edges + const posts = result.data.allMarkdownRemark.edges; - posts.forEach((edge) => { - const id = edge.node.id - const templateKey = edge.node.frontmatter.templateKey + posts.forEach((edge) => { + const id = edge.node.id; + const templateKey = edge.node.frontmatter.templateKey; - // Skip creating pages for data-only pages (software, dataset, etc.) - if (DATA_ONLY_PAGES.includes(templateKey)) { - return - } + // Skip creating pages for data-only pages (software, dataset, etc.) + if (DATA_ONLY_PAGES.includes(templateKey)) { + return; + } - // Skip creating pages for drafts - // Toggle boolean flag on dev-example pages during development - if (edge.node.frontmatter.draft === true) { - return - } + // Skip creating pages for drafts + // Toggle boolean flag on dev-example pages during development + if (edge.node.frontmatter.draft === true) { + return; + } createPage({ path: edge.node.fields.slug, @@ -172,41 +172,41 @@ exports.createPages = ({ actions, graphql }) => { }); }); - // Tag pages: - let tags = [] - // Iterate through each post, putting all found tags into `tags` - posts.forEach((edge) => { - if (_.get(edge, `node.frontmatter.tags`)) { - tags = tags.concat(edge.node.frontmatter.tags) - } - }) - // Eliminate duplicate tags - tags = _.uniq(tags) - - // Make tag pages - tags.forEach((tag) => { - const tagPath = `/tags/${_.kebabCase(tag)}/` - - createPage({ - path: tagPath, - component: path.resolve(`src/templates/tags.tsx`), - context: { - tag, - }, - }) - }) - }) -} + // Tag pages: + let tags = []; + // Iterate through each post, putting all found tags into `tags` + posts.forEach((edge) => { + if (_.get(edge, `node.frontmatter.tags`)) { + tags = tags.concat(edge.node.frontmatter.tags); + } + }); + // Eliminate duplicate tags + tags = _.uniq(tags); + + // Make tag pages + tags.forEach((tag) => { + const tagPath = `/tags/${_.kebabCase(tag)}/`; + + createPage({ + path: tagPath, + component: path.resolve(`src/templates/tags.tsx`), + context: { + tag, + }, + }); + }); + }); +}; exports.onCreateNode = ({ node, actions, getNode }) => { - const { createNodeField } = actions - - if (node.internal.type === `MarkdownRemark`) { - const value = createFilePath({ node, getNode }) - createNodeField({ - name: `slug`, - node, - value, - }) - } -} + const { createNodeField } = actions; + + if (node.internal.type === `MarkdownRemark`) { + const value = createFilePath({ node, getNode }); + createNodeField({ + name: `slug`, + node, + value, + }); + } +}; diff --git a/src/cms/cms.js b/src/cms/cms.js index 3bf5c25..2906919 100644 --- a/src/cms/cms.js +++ b/src/cms/cms.js @@ -1,9 +1,9 @@ -import CMS from 'decap-cms-app' +import CMS from "decap-cms-app"; -import AboutPagePreview from './preview-templates/AboutPagePreview' -import IdeaPostPreview from './preview-templates/IdeaPostPreview' -import IndexPagePreview from './preview-templates/IndexPagePreview' +import AboutPagePreview from "./preview-templates/AboutPagePreview"; +import IdeaPostPreview from "./preview-templates/IdeaPostPreview"; +import IndexPagePreview from "./preview-templates/IndexPagePreview"; -CMS.registerPreviewTemplate('index', IndexPagePreview) -CMS.registerPreviewTemplate('about', AboutPagePreview) -CMS.registerPreviewTemplate('idea', IdeaPostPreview) +CMS.registerPreviewTemplate("index", IndexPagePreview); +CMS.registerPreviewTemplate("about", AboutPagePreview); +CMS.registerPreviewTemplate("idea", IdeaPostPreview); diff --git a/src/cms/preview-templates/IdeaPostPreview.js b/src/cms/preview-templates/IdeaPostPreview.js index 8bcc83f..d3d3517 100644 --- a/src/cms/preview-templates/IdeaPostPreview.js +++ b/src/cms/preview-templates/IdeaPostPreview.js @@ -5,22 +5,22 @@ import PropTypes from "prop-types"; import { IdeaPostTemplate } from "../../templates/idea-post"; const IdeaPostPreview = ({ entry, widgetFor }) => { - const tags = entry.getIn(['data', 'tags']) - return ( - - ) -} + const tags = entry.getIn(["data", "tags"]); + return ( + + ); +}; IdeaPostPreview.propTypes = { - entry: PropTypes.shape({ - getIn: PropTypes.func, - }), - widgetFor: PropTypes.func, -} + entry: PropTypes.shape({ + getIn: PropTypes.func, + }), + widgetFor: PropTypes.func, +}; -export default IdeaPostPreview +export default IdeaPostPreview; diff --git a/src/components/IdeaRoll.tsx b/src/components/IdeaRoll.tsx index ab56c15..8e6ad93 100644 --- a/src/components/IdeaRoll.tsx +++ b/src/components/IdeaRoll.tsx @@ -192,9 +192,7 @@ export default function IdeaRoll({ } } `} - render={(data) => ( - - )} + render={(data) => } /> ); } diff --git a/src/components/PreviewCompatibleImage.tsx b/src/components/PreviewCompatibleImage.tsx index 1b7f5b7..0480c5b 100644 --- a/src/components/PreviewCompatibleImage.tsx +++ b/src/components/PreviewCompatibleImage.tsx @@ -1,6 +1,7 @@ import * as React from "react"; import { GatsbyImage } from "gatsby-plugin-image"; + import { ChildImageSharp } from "../types"; interface PreviewCompatibleImageProps { diff --git a/src/pages/tags/index.js b/src/pages/tags/index.js index ed4cc77..4c71081 100644 --- a/src/pages/tags/index.js +++ b/src/pages/tags/index.js @@ -8,12 +8,12 @@ import { kebabCase } from "lodash"; import Layout from "../../components/Layout"; const TagsPage = ({ - data: { - allMarkdownRemark: { group }, - site: { - siteMetadata: { title }, + data: { + allMarkdownRemark: { group }, + site: { + siteMetadata: { title }, + }, }, - }, }) => (
@@ -45,23 +45,23 @@ const TagsPage = ({ ); -export default TagsPage +export default TagsPage; export const tagPageQuery = graphql` - query TagsQuery { - site { - siteMetadata { - title - } + query TagsQuery { + site { + siteMetadata { + title + } + } + allMarkdownRemark( + limit: 1000 + filter: { frontmatter: { draft: { ne: true } } } + ) { + group(field: frontmatter___tags) { + fieldValue + totalCount + } + } } - allMarkdownRemark( - limit: 1000 - filter: { frontmatter: { draft: { ne: true } } } - ) { - group(field: frontmatter___tags) { - fieldValue - totalCount - } - } - } -` +`; diff --git a/src/templates/dataset.tsx b/src/templates/dataset.tsx index c11aeca..2934e83 100644 --- a/src/templates/dataset.tsx +++ b/src/templates/dataset.tsx @@ -26,9 +26,7 @@ type DatasetProps = { date?: string; }; -const DatasetTemplate: React.FC = ({ - name, -}) => { +const DatasetTemplate: React.FC = ({ name }) => { return (

{name}

diff --git a/src/templates/program.tsx b/src/templates/program.tsx index 04f7180..8ca48bd 100644 --- a/src/templates/program.tsx +++ b/src/templates/program.tsx @@ -25,9 +25,7 @@ interface ProgramTemplateProps { active: boolean; } -export const ProgramTemplate = ({ - name, -}: ProgramTemplateProps) => { +export const ProgramTemplate = ({ name }: ProgramTemplateProps) => { return (

{name}

diff --git a/src/types/index.ts b/src/types/index.ts index 2fc7046..a6cbfd2 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -26,7 +26,6 @@ export type SoftwareTool = MaterialsAndMethods["software"][number]; export type IdeasForTags = Queries.AllIdeasForTagsQuery["allMarkdownRemark"]["edges"]; - /** * Other utility types */ From 4d37d0cdd09870f6c53040d3addc54e20c352494 Mon Sep 17 00:00:00 2001 From: Joe Heffernan Date: Mon, 23 Feb 2026 13:33:10 -0800 Subject: [PATCH 5/7] add one lint warning --- src/components/PreviewCompatibleImage.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/PreviewCompatibleImage.tsx b/src/components/PreviewCompatibleImage.tsx index 0480c5b..21e0ba4 100644 --- a/src/components/PreviewCompatibleImage.tsx +++ b/src/components/PreviewCompatibleImage.tsx @@ -8,6 +8,7 @@ interface PreviewCompatibleImageProps { imageInfo: { alt?: string; childImageSharp?: ChildImageSharp; + // eslint-disable-next-line @typescript-eslint/no-explicit-any TODO: Replace `any` with a more specific type if possible image: any; width?: number; height?: number; From e9c54ef649959d715b9630fac2ad4aedea1a9b37 Mon Sep 17 00:00:00 2001 From: Joe Heffernan Date: Mon, 23 Feb 2026 13:37:30 -0800 Subject: [PATCH 6/7] restore prop types import --- src/templates/index-page.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/templates/index-page.tsx b/src/templates/index-page.tsx index bd6ff00..019a85a 100644 --- a/src/templates/index-page.tsx +++ b/src/templates/index-page.tsx @@ -3,6 +3,8 @@ import React from "react"; import { graphql } from "gatsby"; import { getImage } from "gatsby-plugin-image"; +import PropTypes from "prop-types"; + import FullWidthImage from "../components/FullWidthImage"; import IdeaRoll from "../components/IdeaRoll"; import Layout from "../components/Layout"; From cd3a33e336f7f8e33870c0b4870ee8be8c8eaf67 Mon Sep 17 00:00:00 2001 From: Joe Heffernan Date: Wed, 25 Feb 2026 09:21:24 -0800 Subject: [PATCH 7/7] run format --- gatsby-node.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gatsby-node.js b/gatsby-node.js index 3055c2b..9fda52f 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -3,12 +3,12 @@ const fs = require("fs"); const path = require("path"); const { createFilePath } = require("gatsby-source-filesystem"); const { - stringWithDefault, - resolveToArray, - resolveSlug, - resolveSoftwareTools, -} = require('./gatsby/utils/gatsby-resolver-utils') -const { DATASET_PATH } = require('./gatsby/constants') + stringWithDefault, + resolveToArray, + resolveSlug, + resolveSoftwareTools, +} = require("./gatsby/utils/gatsby-resolver-utils"); +const { DATASET_PATH } = require("./gatsby/constants"); const read = (p) => fs.readFileSync(path.join(__dirname, p), "utf8");