From 95220ee03b00daa4c1bb92744126e10dff70b172 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Kopeck=C3=BD?= Date: Tue, 4 Feb 2025 15:10:53 +0100 Subject: [PATCH 1/5] feat: update llms.txt (#1443) After discussion with @vystrcild we decided to merge both apify.com and docs.apify.com `/llms.txt` files into one, so we can submit only one link to public `/llms.txt` directories instead of two for both the homepage and the docs. --- static/llms.txt | 52 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/static/llms.txt b/static/llms.txt index c648d3790..8efa2d9dd 100644 --- a/static/llms.txt +++ b/static/llms.txt @@ -1,5 +1,56 @@ # docs.apify.com +> Cloud platform for web scraping, browser automation, and data for AI. Use 3,000+ ready-made tools, code templates, or order a custom solution. + +## Your full‑stack platform for web scraping + +- [Apify Store](https://apify.com/store): Ready-to-use web scraping tools for popular websites and automation software for any use case. Plus marketplace for developers to earn from coding. +- [Apify Actors](https://apify.com/actors): Need to scrape at scale? Try Apify Actors, the easy serverless way to create and deploy web scraping and automation tools. +- [Careers at Apify](https://apify.com/jobs): Join the Apify team and help us make the web more programmable! +- [Apify integrations](https://apify.com/integrations): Connect Apify Actors and tasks with your favorite web apps and cloud services and bring your workflow automation to a whole new level. +- [Flexible platform—flexible pricing](https://apify.com/pricing): Extract value from the web with Apify. Flexible platform — flexible pricing. Free plan available, no credit card required. +- [Apify Storage](https://apify.com/storage): Scalable and reliable cloud data storage designed for web scraping and automation workloads. +- [Contact Sales](https://apify.com/contact-sales): Apify has all the tools you need for large-scale web scraping and automation. What are you looking for? +- [Scrape the web without getting blocked](https://apify.com/anti-blocking): Use Apify’s combined anti-blocking solutions to extract data reliably, even from sites with advanced anti-scraping protections. +- [Apify Proxy](https://apify.com/proxy): Apify Proxy allows you to change your IP address when web scraping to reduce the chance of being blocked because of your geographical location. +- [Apify for Enterprise](https://apify.com/enterprise): Accurate, reliable, and compliant web data for your business. From any website. At any scale. +- [Fast, reliable data for ChatGPT and LLMs](https://apify.com/data-for-generative-ai): Get the data to train ChatGPT API and Large Language Models, fast. +- [Use cases](https://apify.com/use-cases): Learn how web scraping and browser automation with Apify can help grow your business. +- [Apify Professional Services](https://apify.com/professional-services): Premium, customized professional services for web scraping and automation projects. +- [Apify Partners](https://apify.com/partners): Find certified partners to help you build or set up web scraping and automation solutions. +- [Web scraping code templates](https://apify.com/templates): Actor templates help you quickly set up your web scraping projects, saving you development time and giving you immediate access to all the features the Apify platform has to offer. +- [Actor and integration ideas](https://apify.com/ideas): Our community is always looking for new web scraping and automation Actors and integrations to connect them with. Upvote the ideas below or submit your own! +- [Changelog](https://apify.com/change-log): Keep up to date with the latest releases, fixes, and features from Apify. +- [Customer stories](https://apify.com/success-stories): Get inspired by these awesome projects. Find out how Apify can make your work more efficient, profitable, useful, and add value to everything you do. +- [About Apify](https://apify.com/about): We’re building the world’s best cloud platform for developing and running web scraping solutions. +- [Contact us](https://apify.com/contact): Company contact and legal information. Let us know what you would like Apify to do for you! + +## Apify Partners + +- [Monetize your code](https://apify.com/partners/actor-developers): Publish your code on the Apify platform, attract people who need your solution, and get paid! +- [Apify Affiliate Program](https://apify.com/partners/affiliate): Join Apify Affiliate program and earn up to 30% recurring commission by referring customers and leads. + +## Apify Support Programs + +- [Apify for startups](https://apify.com/resources/startups): Apify believes in encouraging startups to grow by making use of online data at scale. So we're extending a special 30% discount on our Scale plan exclusively for entrepreneurs and teams just starting out. +- [Apify for universities](https://apify.com/resources/universities): We hope to see future generations take advantage of the vast amount of data available online. That’s why we’re offering a 50% discount on our paid plans to students. +- [Apify for nonprofits](https://apify.com/resources/nonprofits): We believe that online data can help your organization have more impact, so we're offering a substantial discount from our plans to nonprofits and NGOs. + +## Web scraping code templates + +- [Crawlee + Playwright + Chrome](https://apify.com/templates/ts-crawlee-playwright-chrome): Web scraper example with Crawlee, Playwright and headless Chrome. Playwright is more modern, user-friendly and harder to block than Puppeteer. +- [Crawlee + Puppeteer + Chrome](https://apify.com/templates/ts-crawlee-puppeteer-chrome): Example of a Puppeteer and headless Chrome web scraper. Headless browsers render JavaScript and are harder to block, but they're slower than plain HTTP. +- [Crawlee + Cheerio](https://apify.com/templates/ts-crawlee-cheerio): A scraper example that uses Cheerio to parse HTML. It's fast, but it can't run the website's JavaScript or pass JS anti-scraping challenges. +- [Selenium + Chrome](https://apify.com/templates/python-selenium): Scraper example built with Selenium and headless Chrome browser to scrape a website and save the results to storage. A popular alternative to Playwright. +- [Scrapy](https://apify.com/templates/python-scrapy): This example Scrapy spider scrapes page titles from URLs defined in input parameter. It shows how to use Apify SDK for Python and Scrapy pipelines to save results. +- [Crawlee + BeautifulSoup](https://apify.com/templates/python-crawlee-beautifulsoup): Crawl and scrape websites using Crawlee and BeautifulSoup. Start from a given start URLs, and store results to Apify dataset. + +## Use cases + +- [Lead generation](https://apify.com/use-cases/lead-generation): A reliable and versatile solution for data extraction that will take your lead generation to the next level. +- [Market research](https://apify.com/use-cases/market-research): Use web scraping to uncover deep insights from reviews, social media, comments, and forums. Find out what real customers are saying about you and your competitors. +- [Sentiment analysis](https://apify.com/use-cases/sentiment-analysis): Fuel your sentiment analysis projects with automated data collection be it product reviews, news articles, or social media. + ## Apify Documentation - [Web Scraping Academy](https://docs.apify.com/academy): Learn everything about web scraping and automation with our free courses that will turn you into an expert scraper developer. @@ -45,4 +96,3 @@ - [Apify SDK for JavaScript and Node.js](https://docs.apify.com/sdk/js/) - [Apify SDK for Python is a toolkit for building Actors](https://docs.apify.com/sdk/python/) - From f62fbb5bfc7926c477a3172e866e068cc7b577d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 22:36:29 +0000 Subject: [PATCH 2/5] chore(deps): update lycheeverse/lychee-action action to v2.3.0 --- .github/workflows/lychee.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lychee.yml b/.github/workflows/lychee.yml index e5812b117..b91b401eb 100644 --- a/.github/workflows/lychee.yml +++ b/.github/workflows/lychee.yml @@ -36,7 +36,7 @@ jobs: - name: Run Lychee Link Checker id: lychee - uses: lycheeverse/lychee-action@v2.2.0 + uses: lycheeverse/lychee-action@v2.3.0 env: GITHUB_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} with: From 43bafa9ad51e48a4124ec2cfa68d7f355b5f2193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20K=C5=99ivka?= Date: Wed, 5 Feb 2025 11:31:28 +0100 Subject: [PATCH 3/5] docs(academy-puppeteer): clarify disadvantages of browsers and unified cheerio parsing (#1442) Co-authored-by: Honza Javorek --- .../executing_scripts/extracting_data.md | 6 ++++++ sources/academy/webscraping/puppeteer_playwright/index.md | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/sources/academy/webscraping/puppeteer_playwright/executing_scripts/extracting_data.md b/sources/academy/webscraping/puppeteer_playwright/executing_scripts/extracting_data.md index 42461c011..4fb52aa83 100644 --- a/sources/academy/webscraping/puppeteer_playwright/executing_scripts/extracting_data.md +++ b/sources/academy/webscraping/puppeteer_playwright/executing_scripts/extracting_data.md @@ -19,6 +19,12 @@ Now that we know how to execute scripts on a page, we're ready to learn a bit ab 1. Directly in `page.evaluate()` and other evaluate functions such as `page.$$eval()`. 2. In the Node.js context using a parsing library such as [Cheerio](https://www.npmjs.com/package/cheerio) +:::tip Crawlee and parsing with Cheerio + +If you are using Crawlee, we highly recommend the [parseWithCheerio](https://crawlee.dev/api/playwright-crawler/interface/PlaywrightCrawlingContext#parseWithCheerio) function for unified data extraction syntax. This way, switching between browser and plain HTTP scraping is a breeze. + +::: + ## Setup Here is the base setup for our code, upon which we'll be building off of in this lesson: diff --git a/sources/academy/webscraping/puppeteer_playwright/index.md b/sources/academy/webscraping/puppeteer_playwright/index.md index a96556b2b..279bab174 100644 --- a/sources/academy/webscraping/puppeteer_playwright/index.md +++ b/sources/academy/webscraping/puppeteer_playwright/index.md @@ -25,7 +25,13 @@ Both packages were developed by the same team and are very similar, which is why When automating a headless browser, you can do a whole lot more in comparison to making HTTP requests for static content. In fact, you can programmatically do pretty much anything a human could do with a browser, such as clicking elements, taking screenshots, typing into text areas, etc. -Additionally, since the requests aren't static, [dynamic content](../../glossary/concepts/dynamic_pages.md) can be rendered and interacted with (or, data from the dynamic content can be scraped). +Additionally, since the requests aren't static, [dynamic content](../../glossary/concepts/dynamic_pages.md) can be rendered and interacted with (or, data from the dynamic content can be scraped). Turn on the [headful mode](https://playwright.dev/docs/api/class-testoptions#test-options-headless) (`headless: false`) to see exactly what the browser is doing. + +Browsers can also be effective for [overcoming anti-scraping measures](../anti_scraping/index.md), especially if the website is running [JavaScript browser challenges](../anti_scraping/techniques/browser_challenges.md). + +## Disadvantages of headless browsers + +Browsers are slow and expensive to run. In the follow-up courses, the Apify Academy will show you how to scrape websites without a browser. Every website can potentially be reverse-engineered into a series of quick and cheap HTTP calls, but it might require significant effort and specialized knowledge. ## Setup {#setup} From dcb9aca3831e4541915f0d018c13a28f7f5cc85d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Wed, 5 Feb 2025 12:08:30 +0100 Subject: [PATCH 4/5] chore: update eslint to v9 (#1439) Closes #1276 --- .eslintignore | 2 - .../javascript/requestQueue_requests_post.js | 6 +- apify-docs-theme/src/markdown.js | 44 +- apify-docs-theme/src/roa-loader/index.js | 6 +- apify-docs-theme/src/theme.js | 1 - .../src/theme/ColorModeToggle/index.jsx | 12 +- .../src/theme/DocSidebarItem/Link/index.jsx | 12 +- apify-docs-theme/src/theme/Footer/index.jsx | 6 +- apify-docs-theme/src/theme/Layout/index.jsx | 12 +- .../MobileSidebar/PrimaryMenu/index.jsx | 2 +- .../src/theme/NavbarItem/ComponentTypes.jsx | 31 +- .../RunnableCodeBlock/RunnableCodeBlock.jsx | 8 +- apify-docs-theme/src/theme/SearchBar/index.js | 3 +- eslint.config.mjs | 49 + .../orchestrator/src/main.ts | 2 +- package-lock.json | 1082 +++++++---------- package.json | 22 +- sitePlugin.js | 4 +- .../node_js/caching_responses_in_puppeteer.js | 2 +- .../crawling/finding_links.js | 2 +- sources/api/sidebars.js | 1 - src/components/ActionCard/ActionCard.tsx | 4 +- .../ActorTemplates/ActorTemplates.tsx | 14 +- src/components/ApiLink.jsx | 2 - src/components/Button.tsx | 5 +- src/components/Card.jsx | 2 +- src/components/CardGrid.jsx | 1 - src/components/CardWithIcon/CardWithIcon.tsx | 4 +- .../ImageWithContent.tsx | 2 +- src/components/ChangeLog/ChangeLog.tsx | 4 +- src/components/GitButton.tsx | 4 +- src/components/Heading.tsx | 5 +- src/components/Hero/Hero.tsx | 2 +- .../OpenSourceCards/OpenSourceCards.tsx | 5 +- src/components/PlainCard/PlainCard.tsx | 4 +- src/components/PlatformCard.jsx | 6 +- src/components/SdkSection/SdkSection.tsx | 4 +- src/components/Section/Section.tsx | 4 +- src/components/Tabs.tsx | 3 +- src/components/Text.tsx | 6 +- src/components/UiLibraryWrapper.tsx | 6 +- src/pages/api/index.tsx | 15 +- src/pages/api/v2-old.js | 41 +- src/pages/open-source/index.tsx | 3 +- src/pages/sdk/index.tsx | 3 +- src/pages/versions.js | 1 - tsconfig.eslint.json | 2 + 47 files changed, 650 insertions(+), 811 deletions(-) delete mode 100644 .eslintignore create mode 100644 eslint.config.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index dd87e2d73..000000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -build diff --git a/apify-api/openapi/code_samples/javascript/requestQueue_requests_post.js b/apify-api/openapi/code_samples/javascript/requestQueue_requests_post.js index 02cc07368..17cccda9f 100644 --- a/apify-api/openapi/code_samples/javascript/requestQueue_requests_post.js +++ b/apify-api/openapi/code_samples/javascript/requestQueue_requests_post.js @@ -6,9 +6,9 @@ const apifyClient = new ApifyClient({ const result = await apifyClient .requestQueue('') .addRequest({ - 'uniqueKey': 'http://example.com', - 'url': 'http://example.com', - 'method': 'GET', + uniqueKey: 'http://example.com', + url: 'http://example.com', + method: 'GET', }); console.log(result); diff --git a/apify-docs-theme/src/markdown.js b/apify-docs-theme/src/markdown.js index deb748f8a..83742e65d 100644 --- a/apify-docs-theme/src/markdown.js +++ b/apify-docs-theme/src/markdown.js @@ -3,26 +3,6 @@ const remarkStringify = require('remark-stringify'); const { unified } = require('unified'); const { visitParents } = require('unist-util-visit-parents'); -/** - * Updates the markdown content for better UX and compatibility with Docusaurus v3. - * @param {string} changelog The markdown content. - * @returns {string} The updated markdown content. - */ -function updateChangelog(changelog) { - const pipeline = unified() - .use(remarkParse) - .use(removeGitCliffMarkers) - .use(incrementHeadingLevels) - .use(prettifyPRLinks) - .use(linkifyUserTags) - .use(remarkStringify); - - changelog = pipeline.processSync(changelog).toString(); - changelog = addFrontmatter(changelog); - changelog = escapeMDXCharacters(changelog); - return changelog; -} - /** * Bumps the headings levels in the markdown content. This function increases the depth * of all headings in the content by 1. This is useful when the content is included in @@ -60,7 +40,7 @@ const linkifyUserTags = () => (tree) => { const directParent = parents[parents.length - 1]; - if (!match || directParent.type === 'link') return; + if (!match || directParent.type === 'link') return 0; const nodeIndexInParent = directParent.children.findIndex((x) => x === node); @@ -95,7 +75,7 @@ const prettifyPRLinks = () => (tree) => { const prLinkRegex = /https:\/\/github.com\/[^\s]+\/pull\/(\d+)/g; const match = prLinkRegex.exec(node.value); - if (!match) return; + if (!match) return 0; const directParent = parents[parents.length - 1]; const nodeIndexInParent = directParent.children.findIndex((x) => x === node); @@ -148,6 +128,26 @@ function escapeMDXCharacters(changelog) { }); } +/** + * Updates the markdown content for better UX and compatibility with Docusaurus v3. + * @param {string} changelog The markdown content. + * @returns {string} The updated markdown content. + */ +function updateChangelog(changelog) { + const pipeline = unified() + .use(remarkParse) + .use(removeGitCliffMarkers) + .use(incrementHeadingLevels) + .use(prettifyPRLinks) + .use(linkifyUserTags) + .use(remarkStringify); + + changelog = pipeline.processSync(changelog).toString(); + changelog = addFrontmatter(changelog); + changelog = escapeMDXCharacters(changelog); + return changelog; +} + module.exports = { updateChangelog, }; diff --git a/apify-docs-theme/src/roa-loader/index.js b/apify-docs-theme/src/roa-loader/index.js index 65fbe154f..a57b1dc37 100644 --- a/apify-docs-theme/src/roa-loader/index.js +++ b/apify-docs-theme/src/roa-loader/index.js @@ -38,13 +38,14 @@ async function getHash(source) { })).json(); if (!res.data || !res.data.encoded) { - // eslint-disable-next-line no-console console.error(`Signing failed:' ${inspect(res.error) || 'Unknown error'}`, res); return 'invalid-token'; } cache[cacheKey] = res.data.encoded; - await new Promise((resolve) => setTimeout(resolve, 100)); + await new Promise((resolve) => { + setTimeout(resolve, 100); + }); return res.data.encoded; } @@ -79,7 +80,6 @@ module.exports = async function (code) { return { code, hash: 'fast' }; } - // eslint-disable-next-line no-console console.log(`Signing ${urlToRequest(this.resourcePath)}...`, { working, queue: queue.length }); const codeHash = await encodeAndSign(code); diff --git a/apify-docs-theme/src/theme.js b/apify-docs-theme/src/theme.js index 684f78ad1..4ccde9595 100644 --- a/apify-docs-theme/src/theme.js +++ b/apify-docs-theme/src/theme.js @@ -108,7 +108,6 @@ This either means that your Docusaurus setup is misconfigured, or that your GitH await generateChangelogFromGitHubReleases(pathsToCopyChangelog, `${context.siteConfig.organizationName}/${context.siteConfig.projectName}`); } } catch (e) { - // eslint-disable-next-line no-console console.warn(`Changelog page could not be initialized: ${e.message}`); } }, diff --git a/apify-docs-theme/src/theme/ColorModeToggle/index.jsx b/apify-docs-theme/src/theme/ColorModeToggle/index.jsx index 8bd85ffb5..42549b2ec 100644 --- a/apify-docs-theme/src/theme/ColorModeToggle/index.jsx +++ b/apify-docs-theme/src/theme/ColorModeToggle/index.jsx @@ -1,11 +1,11 @@ -import React from 'react'; -// eslint-disable-next-line import/no-extraneous-dependencies -import clsx from 'clsx'; -import useIsBrowser from '@docusaurus/useIsBrowser'; import { translate } from '@docusaurus/Translate'; -import IconLightMode from '../Icon/LightMode'; -import IconDarkMode from '../Icon/DarkMode'; +import useIsBrowser from '@docusaurus/useIsBrowser'; +import clsx from 'clsx'; +import React from 'react'; + import styles from './styles.module.css'; +import IconDarkMode from '../Icon/DarkMode'; +import IconLightMode from '../Icon/LightMode'; function ColorModeToggle({ className, diff --git a/apify-docs-theme/src/theme/DocSidebarItem/Link/index.jsx b/apify-docs-theme/src/theme/DocSidebarItem/Link/index.jsx index b4080044f..256b41c2a 100644 --- a/apify-docs-theme/src/theme/DocSidebarItem/Link/index.jsx +++ b/apify-docs-theme/src/theme/DocSidebarItem/Link/index.jsx @@ -1,12 +1,12 @@ -import React from 'react'; -// eslint-disable-next-line import/no-extraneous-dependencies -import clsx from 'clsx'; +import isInternalUrl from '@docusaurus/isInternalUrl'; +import Link from '@docusaurus/Link'; +import { isActiveSidebarItem } from '@docusaurus/plugin-content-docs/client'; import { ThemeClassNames } from '@docusaurus/theme-common'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import { isActiveSidebarItem } from '@docusaurus/plugin-content-docs/client'; -import Link from '@docusaurus/Link'; -import isInternalUrl from '@docusaurus/isInternalUrl'; import IconExternalLink from '@theme/Icon/ExternalLink'; +import clsx from 'clsx'; +import React from 'react'; + import styles from './styles.module.css'; export default function DocSidebarItemLink({ diff --git a/apify-docs-theme/src/theme/Footer/index.jsx b/apify-docs-theme/src/theme/Footer/index.jsx index 092a0b41d..fb5b24ee1 100644 --- a/apify-docs-theme/src/theme/Footer/index.jsx +++ b/apify-docs-theme/src/theme/Footer/index.jsx @@ -1,8 +1,8 @@ -import React from 'react'; -// eslint-disable-next-line import/no-extraneous-dependencies -import clsx from 'clsx'; import { useThemeConfig } from '@docusaurus/theme-common'; import LinkItem from '@theme/Footer/LinkItem'; +import clsx from 'clsx'; +import React from 'react'; + import styles from './index.module.css'; function FooterLinksColumn({ column }) { diff --git a/apify-docs-theme/src/theme/Layout/index.jsx b/apify-docs-theme/src/theme/Layout/index.jsx index 7272bdc2e..b9dd7d750 100644 --- a/apify-docs-theme/src/theme/Layout/index.jsx +++ b/apify-docs-theme/src/theme/Layout/index.jsx @@ -1,9 +1,9 @@ -import React from 'react'; +import { useLocation } from '@docusaurus/router'; // cannot use any of the theme aliases here as it causes a circular dependency :( ideas welcome import Layout from '@docusaurus/theme-classic/lib/theme/Layout/index'; -import { usePluginData } from '@docusaurus/useGlobalData'; import useBaseUrl from '@docusaurus/useBaseUrl'; -import { useLocation } from '@docusaurus/router'; +import { usePluginData } from '@docusaurus/useGlobalData'; +import React from 'react'; export default function LayoutWrapper(props) { const { options: { subNavbar } } = usePluginData('@apify/docs-theme'); @@ -13,9 +13,9 @@ export default function LayoutWrapper(props) { return (
diff --git a/apify-docs-theme/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.jsx b/apify-docs-theme/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.jsx index 19c80c5d2..376e1e6d4 100644 --- a/apify-docs-theme/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.jsx +++ b/apify-docs-theme/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.jsx @@ -1,8 +1,8 @@ -import React from 'react'; import { useThemeConfig } from '@docusaurus/theme-common'; import useBaseUrl from '@docusaurus/useBaseUrl'; import { usePluginData } from '@docusaurus/useGlobalData'; import NavbarItem from '@theme/NavbarItem'; +import React from 'react'; function useNavbarItems() { // TODO temporary casting until ThemeConfig type is improved diff --git a/apify-docs-theme/src/theme/NavbarItem/ComponentTypes.jsx b/apify-docs-theme/src/theme/NavbarItem/ComponentTypes.jsx index ecabadca5..d4c97aca8 100644 --- a/apify-docs-theme/src/theme/NavbarItem/ComponentTypes.jsx +++ b/apify-docs-theme/src/theme/NavbarItem/ComponentTypes.jsx @@ -1,13 +1,13 @@ +import { useDocsVersion, useLayoutDoc } from '@docusaurus/plugin-content-docs/client'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; +import DocSidebarNavbarItem from '@theme/NavbarItem/DocSidebarNavbarItem'; +import DocsVersionDropdownNavbarItem from '@theme/NavbarItem/DocsVersionDropdownNavbarItem'; +import DocsVersionNavbarItem from '@theme/NavbarItem/DocsVersionNavbarItem'; import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem'; +import HtmlNavbarItem from '@theme/NavbarItem/HtmlNavbarItem'; import LocaleDropdownNavbarItem from '@theme/NavbarItem/LocaleDropdownNavbarItem'; import SearchNavbarItem from '@theme/NavbarItem/SearchNavbarItem'; -import HtmlNavbarItem from '@theme/NavbarItem/HtmlNavbarItem'; -import DocSidebarNavbarItem from '@theme/NavbarItem/DocSidebarNavbarItem'; -import DocsVersionNavbarItem from '@theme/NavbarItem/DocsVersionNavbarItem'; -import DocsVersionDropdownNavbarItem from '@theme/NavbarItem/DocsVersionDropdownNavbarItem'; -import { useDocsVersion, useLayoutDoc } from '@docusaurus/plugin-content-docs/client'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import React from 'react'; // const versions = require('../../../versions.json'); @@ -40,7 +40,6 @@ function ApiNavbarItem(ctx) { let version = {}; try { - // eslint-disable-next-line react-hooks/rules-of-hooks version = useDocsVersion(); } catch { version.version = stable; @@ -87,15 +86,15 @@ function ApiNavbarItem(ctx) { } const ComponentTypes = { - 'default': DefaultNavbarItem, - 'localeDropdown': LocaleDropdownNavbarItem, - 'search': SearchNavbarItem, - 'dropdown': DropdownNavbarItem, - 'html': HtmlNavbarItem, + default: DefaultNavbarItem, + localeDropdown: LocaleDropdownNavbarItem, + search: SearchNavbarItem, + dropdown: DropdownNavbarItem, + html: HtmlNavbarItem, 'custom-api': ApiNavbarItem, - 'doc': DocNavbarItem, - 'docSidebar': DocSidebarNavbarItem, - 'docsVersion': DocsVersionNavbarItem, - 'docsVersionDropdown': DocsVersionDropdownNavbarItem, + doc: DocNavbarItem, + docSidebar: DocSidebarNavbarItem, + docsVersion: DocsVersionNavbarItem, + docsVersionDropdown: DocsVersionDropdownNavbarItem, }; export default ComponentTypes; diff --git a/apify-docs-theme/src/theme/RunnableCodeBlock/RunnableCodeBlock.jsx b/apify-docs-theme/src/theme/RunnableCodeBlock/RunnableCodeBlock.jsx index 3d838dff2..c3af3917d 100644 --- a/apify-docs-theme/src/theme/RunnableCodeBlock/RunnableCodeBlock.jsx +++ b/apify-docs-theme/src/theme/RunnableCodeBlock/RunnableCodeBlock.jsx @@ -1,8 +1,8 @@ -import React from 'react'; -// eslint-disable-next-line import/no-extraneous-dependencies -import clsx from 'clsx'; -import CodeBlock from '@theme/CodeBlock'; import Link from '@docusaurus/Link'; +import CodeBlock from '@theme/CodeBlock'; +import clsx from 'clsx'; +import React from 'react'; + import styles from './RunnableCodeBlock.module.css'; const EXAMPLE_RUNNERS = { diff --git a/apify-docs-theme/src/theme/SearchBar/index.js b/apify-docs-theme/src/theme/SearchBar/index.js index 6c89a777c..367cc27ad 100644 --- a/apify-docs-theme/src/theme/SearchBar/index.js +++ b/apify-docs-theme/src/theme/SearchBar/index.js @@ -1,10 +1,11 @@ -import { ApifySearch } from '@apify/docs-search-modal'; import BrowserOnly from '@docusaurus/BrowserOnly'; import RouterLink from '@docusaurus/Link'; import { useLocation, useHistory } from '@docusaurus/router'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import React, { useCallback } from 'react'; +import { ApifySearch } from '@apify/docs-search-modal'; + /** * Tests whether the given href is pointing to the current docusaurus instance (so we can use the router link). */ diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..f89bcaf94 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,49 @@ +import react from 'eslint-plugin-react'; +import globals from 'globals'; + +import apify from '@apify/eslint-config'; + +export default [ + { + ignores: ['**/dist', 'node_modules', '.docusaurus', 'build', 'sources/api'], + }, + ...apify, + { + languageOptions: { + parserOptions: { + project: 'tsconfig.eslint.json', + }, + }, + }, + { + rules: { + '@typescript-eslint/no-explicit-any': 'off', + 'no-param-reassign': 'off', + 'no-void': 'off', + 'no-console': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/extensions': 'off', + 'import/no-default-export': 'off', + }, + }, + { + files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'], + plugins: { + react, + }, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + globals: { + ...globals.browser, + }, + }, + rules: { + 'react/jsx-uses-react': 'error', + 'react/jsx-uses-vars': 'error', + }, + }, +]; diff --git a/examples/ts-parallel-scraping/orchestrator/src/main.ts b/examples/ts-parallel-scraping/orchestrator/src/main.ts index 7356bcb17..117b8172b 100644 --- a/examples/ts-parallel-scraping/orchestrator/src/main.ts +++ b/examples/ts-parallel-scraping/orchestrator/src/main.ts @@ -15,7 +15,7 @@ interface State { await Actor.init(); const { - parallelRunsCount= 1, + parallelRunsCount = 1, targetActorId, targetActorInput = {}, targetActorRunOptions = {}, diff --git a/package-lock.json b/package-lock.json index b64a51d7a..6799ab490 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,8 +27,8 @@ "@redocly/cli": "^1.27.1", "ajv": "^8.17.1", "clsx": "^2.0.0", - "docusaurus-plugin-openapi-docs": "^4.3.1", - "docusaurus-theme-openapi-docs": "^4.3.1", + "docusaurus-plugin-openapi-docs": "^4.3.2", + "docusaurus-theme-openapi-docs": "^4.3.2", "form-data": "^4.0.0", "github-buttons": "^2.28.0", "postcss-preset-env": "^10.0.0", @@ -45,27 +45,27 @@ "unist-util-visit": "^5.0.0" }, "devDependencies": { - "@apify/eslint-config-ts": "^0.4.1", + "@apify/eslint-config": "^0.5.0-beta.4", "@apify/tsconfig": "^0.1.0", "@rsbuild/plugin-styled-components": "^1.1.0", "@types/react": "^18.2.8", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^7.0.0", "babel-plugin-styled-components": "^2.1.4", "cross-env": "^7.0.3", - "eslint": "^8.46.0", - "eslint-plugin-json": "^3.1.0", - "eslint-plugin-markdown": "^3.0.1", - "eslint-plugin-react": "^7.33.1", - "eslint-plugin-react-hooks": "^4.6.0", + "eslint": "^9.19.0", + "eslint-plugin-json": "^4.0.1", + "eslint-plugin-markdown": "^5.1.0", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.1.0", "fs-extra": "^11.1.1", + "globals": "^15.14.0", "globby": "^14.0.0", "markdownlint": "^0.37.0", "markdownlint-cli": "^0.44.0", "patch-package": "^8.0.0", "path-browserify": "^1.0.1", "rimraf": "^6.0.0", - "typescript": "^5.1.3" + "typescript": "^5.7.3", + "typescript-eslint": "^8.22.0" }, "engines": { "node": ">=18.0.0" @@ -108,14 +108,14 @@ } }, "node_modules/@algolia/autocomplete-js": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-js/-/autocomplete-js-1.17.9.tgz", - "integrity": "sha512-51xmsIfApj8LEceArnLe3UfS8HSgJJa70FUEYpnLryO6+KZL0pDPQHw1uVw6e5yJiKN0KelDmk2Sa2uJ+gVKJw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-js/-/autocomplete-js-1.18.0.tgz", + "integrity": "sha512-1U4OPVji8j7p4/uLQFGfbM6kS4uR/65WthYZ/clJdYSvs/WQQxaVdtOZmEdrzt5DYPXoW+xjJIalSzovQ3Tybw==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-core": "1.17.9", - "@algolia/autocomplete-preset-algolia": "1.17.9", - "@algolia/autocomplete-shared": "1.17.9", + "@algolia/autocomplete-core": "1.18.0", + "@algolia/autocomplete-preset-algolia": "1.18.0", + "@algolia/autocomplete-shared": "1.18.0", "htm": "^3.1.1", "preact": "^10.13.2" }, @@ -124,6 +124,51 @@ "algoliasearch": ">= 4.9.1 < 6" } }, + "node_modules/@algolia/autocomplete-js/node_modules/@algolia/autocomplete-core": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.18.0.tgz", + "integrity": "sha512-P5DIMAVPkM3ggl10RIS5ghJn/gLupCpDvQH0HEJHBUkJu7slBE+dTEtyu3jLvM6tGV9JbKn73JBWv2ZgSr5W3A==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.18.0", + "@algolia/autocomplete-shared": "1.18.0" + } + }, + "node_modules/@algolia/autocomplete-js/node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.18.0.tgz", + "integrity": "sha512-vy+nuu6eUyPQdXTCMsbFLN4sAPy2lz/aTPQEzMY3Qh+61m2Ay97tL4+brxujmOMdLPn36kdS0PhYpQlytU54Zw==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.18.0" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-js/node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.18.0.tgz", + "integrity": "sha512-poLzwk6PBZmDCy81N81tSI+SuXmQD4V9ud3RzjCv4BZ+L+ImA3BmLkJUwOffjA5UyBUd6l/OM3Q7Wd3lREiD4w==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.18.0" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-js/node_modules/@algolia/autocomplete-shared": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.18.0.tgz", + "integrity": "sha512-EU2Ds2Uzu7t2ekd7JJC+XiosM7tpCT4ZfyqnqrPtu1WIof0AAfoeLjouVBlYjC4pr0DA3gYeZq3fDCefSn5xhg==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", @@ -160,9 +205,9 @@ } }, "node_modules/@algolia/autocomplete-theme-classic": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.17.9.tgz", - "integrity": "sha512-nCv0uv5J5r9riF1rJLfUY3AAJ11IbFifNocYINWG4cyOctHGoiK5ZDyYdQOLA98TCVR7hUywIYpvVCJBZnjGaw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.18.0.tgz", + "integrity": "sha512-+8BCxo9ZLI+fgC/UAI5W/1FTuegN0CcqNrZFYc0qwhZajfAV9JTR28+73o1k8V5nKaUlADBYUovzyMaFjMkz6g==", "license": "MIT" }, "node_modules/@algolia/cache-browser-local-storage": { @@ -654,64 +699,25 @@ "link": true }, "node_modules/@apify/eslint-config": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@apify/eslint-config/-/eslint-config-0.4.0.tgz", - "integrity": "sha512-cXYQUstZ5wjIQMX9HM9GOg8+s0lWp9xF7Zee8bCl5QAkNJs5gKtCsKStv7v6A2hexUZ+N5HAEN2MFex9IIw2/g==", + "version": "0.5.0-beta.4", + "resolved": "https://registry.npmjs.org/@apify/eslint-config/-/eslint-config-0.5.0-beta.4.tgz", + "integrity": "sha512-f7ccc63vPWrmkdKzA6HexwKBw3mdkCHiyovGquQBv0huDpLJRZekzqJ0vQKiCfh/79yn+6G3gaYabawOBp+dDQ==", "dev": true, "license": "ISC", "dependencies": { - "eslint-config-airbnb": "^19.0.0", + "@eslint/compat": "^1.2.2", "eslint-config-airbnb-base": "^15.0.0", - "eslint-import-resolver-typescript": "^2.5.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.0", - "eslint-plugin-react-hooks": "^4.3.0" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@apify/eslint-config-ts": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@apify/eslint-config-ts/-/eslint-config-ts-0.4.1.tgz", - "integrity": "sha512-dN+SZFtawthQ9H6qZIWBEG2Lc2/u7m7E1+0EpW6UtYcGeSWJXaEzVjeu+0m/LGiPBpJ5Kjn5pzJrY8jbhuW71w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@apify/eslint-config": "^0.4.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0" + "eslint-plugin-import": "^2.31.0", + "globals": "^15.11.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "*", - "@typescript-eslint/parser": "*", - "eslint": "*", - "typescript": "*" - } - }, - "node_modules/@apify/eslint-config/node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "eslint": "^9.0.0", + "typescript-eslint": "^8.0.0" }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "peerDependenciesMeta": { + "typescript-eslint": { + "optional": true + } } }, "node_modules/@apify/tsconfig": { @@ -1398,6 +1404,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", @@ -2384,6 +2399,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.26.7", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", @@ -4834,6 +4858,19 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", @@ -4844,17 +4881,87 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.5.tgz", + "integrity": "sha512-5iuG/StT+7OfvhoBHPlmxkPA9om6aDUFgmD4+mWKAGsYt4vCe8rypneG03AuseyRHBmcCLXQtIH5S26tIoggLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -4862,7 +4969,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4897,16 +5004,13 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4932,27 +5036,38 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.19.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.19.0.tgz", + "integrity": "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@exodus/schemasafe": { @@ -5059,44 +5174,42 @@ "react-hook-form": "^7.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -5113,13 +5226,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@iconify/types": { "version": "2.0.0", @@ -5143,18 +5262,6 @@ "mlly": "^1.7.3" } }, - "node_modules/@iconify/utils/node_modules/globals": { - "version": "15.14.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", - "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -5455,16 +5562,6 @@ "node": ">= 8" } }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -7224,9 +7321,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.5.tgz", - "integrity": "sha512-GLZPrd9ckqEBFMcVM/qRFAP0Hg3qiVEojgEFsx/N/zKXsBzbGF6z5FBDpZ0+Xhp1xr+qRZYjfGr1cWHB9oFHSA==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -7395,9 +7492,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.10.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.10.tgz", - "integrity": "sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==", + "version": "22.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz", + "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -7599,80 +7696,72 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.22.0.tgz", + "integrity": "sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.22.0", + "@typescript-eslint/type-utils": "8.22.0", + "@typescript-eslint/utils": "8.22.0", + "@typescript-eslint/visitor-keys": "8.22.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.22.0.tgz", + "integrity": "sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.22.0", + "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/typescript-estree": "8.22.0", + "@typescript-eslint/visitor-keys": "8.22.0", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.22.0.tgz", + "integrity": "sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/visitor-keys": "8.22.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -7680,41 +7769,37 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.22.0.tgz", + "integrity": "sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/typescript-estree": "8.22.0", + "@typescript-eslint/utils": "8.22.0", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.22.0.tgz", + "integrity": "sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==", "dev": true, "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -7722,53 +7807,30 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.22.0.tgz", + "integrity": "sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/visitor-keys": "8.22.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { @@ -7788,40 +7850,41 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.22.0.tgz", + "integrity": "sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@typescript-eslint/scope-manager": "8.22.0", + "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/typescript-estree": "8.22.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.22.0.tgz", + "integrity": "sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.22.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -8324,16 +8387,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", @@ -8536,13 +8589,6 @@ "util": "^0.12.5" } }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT" - }, "node_modules/astring": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", @@ -8635,35 +8681,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axe-core": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", - "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, "node_modules/axios": { "version": "1.7.9", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/babel-loader": { @@ -11178,13 +11204,6 @@ "lodash-es": "^4.17.21" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", @@ -11668,16 +11687,16 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/docusaurus-gtm-plugin": { @@ -12541,82 +12560,63 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.19.0.tgz", + "integrity": "sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.19.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", - "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" - }, - "engines": { - "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + "url": "https://eslint.org/donate" }, "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0" + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-airbnb-base": { @@ -12671,42 +12671,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", - "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", - "dev": true, - "license": "ISC", - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.7", - "enhanced-resolve": "^5.15.0", - "fast-glob": "^3.3.2", - "get-tsconfig": "^4.7.5", - "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3", - "stable-hash": "^0.0.4" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, "node_modules/eslint-module-utils": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", @@ -12790,19 +12754,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -12827,9 +12778,9 @@ } }, "node_modules/eslint-plugin-json": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", - "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-4.0.1.tgz", + "integrity": "sha512-3An5ISV5dq/kHfXdNyY5TUe2ONC3yXFSkLX2gu+W8xAhKhfvrRvkSAeKXCxZqZ0KJLX15ojBuLPyj+UikQMkOA==", "dev": true, "license": "MIT", "dependencies": { @@ -12837,77 +12788,23 @@ "vscode-json-languageservice": "^4.1.6" }, "engines": { - "node": ">=12.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "node": ">=18.0" } }, "node_modules/eslint-plugin-markdown": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.1.tgz", - "integrity": "sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-5.1.0.tgz", + "integrity": "sha512-SJeyKko1K6GwI0AN6xeCDToXDkfKZfXcexA6B+O2Wr2btUS9GrC+YgwSyVli5DJnctUHjFXcQ2cqTaAmVoLi2A==", "dev": true, "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^0.8.5" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": ">=8" } }, "node_modules/eslint-plugin-react": { @@ -12944,16 +12841,16 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { @@ -12967,19 +12864,6 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -13022,9 +12906,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -13032,20 +12916,20 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -13092,22 +12976,6 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -13128,32 +12996,19 @@ "node": "*" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -13685,16 +13540,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-loader": { @@ -13899,35 +13754,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { @@ -14393,19 +14230,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, "node_modules/giscus": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/giscus/-/giscus-1.6.0.tgz", @@ -14551,12 +14375,15 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -16119,16 +15946,6 @@ "node": ">=4" } }, - "node_modules/is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.6.3" - } - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -17059,26 +16876,6 @@ "node": ">=16.0.0" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/latest-version": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", @@ -28719,16 +28516,6 @@ "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", "license": "MIT" }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", @@ -30031,13 +29818,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", - "dev": true, - "license": "MIT" - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -30182,21 +29962,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/string.prototype.matchall": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", @@ -30908,16 +30673,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-dedent": { @@ -31112,6 +30877,29 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.22.0.tgz", + "integrity": "sha512-Y2rj210FW1Wb6TWXzQc5+P+EWI9/zdS57hLEc0gnyuvdzWo8+Y8brKlbj0muejonhMI/xAZCnZZwjbIfv1CkOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.22.0", + "@typescript-eslint/parser": "8.22.0", + "@typescript-eslint/utils": "8.22.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", diff --git a/package.json b/package.json index aa5c76be6..b8d43ea86 100644 --- a/package.json +++ b/package.json @@ -43,27 +43,27 @@ "postinstall": "patch-package" }, "devDependencies": { - "@apify/eslint-config-ts": "^0.4.1", + "@apify/eslint-config": "^0.5.0-beta.4", "@apify/tsconfig": "^0.1.0", "@rsbuild/plugin-styled-components": "^1.1.0", "@types/react": "^18.2.8", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^7.0.0", "babel-plugin-styled-components": "^2.1.4", "cross-env": "^7.0.3", - "eslint": "^8.46.0", - "eslint-plugin-json": "^3.1.0", - "eslint-plugin-markdown": "^3.0.1", - "eslint-plugin-react": "^7.33.1", - "eslint-plugin-react-hooks": "^4.6.0", + "eslint": "^9.19.0", + "eslint-plugin-json": "^4.0.1", + "eslint-plugin-markdown": "^5.1.0", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.1.0", "fs-extra": "^11.1.1", + "globals": "^15.14.0", "globby": "^14.0.0", "markdownlint": "^0.37.0", "markdownlint-cli": "^0.44.0", "path-browserify": "^1.0.1", "patch-package": "^8.0.0", "rimraf": "^6.0.0", - "typescript": "^5.1.3" + "typescript": "^5.7.3", + "typescript-eslint": "^8.22.0" }, "dependencies": { "@apify-packages/ui-library": "^0.28.1", @@ -80,8 +80,8 @@ "@redocly/cli": "^1.27.1", "ajv": "^8.17.1", "clsx": "^2.0.0", - "docusaurus-plugin-openapi-docs": "^4.3.1", - "docusaurus-theme-openapi-docs": "^4.3.1", + "docusaurus-plugin-openapi-docs": "^4.3.2", + "docusaurus-theme-openapi-docs": "^4.3.2", "form-data": "^4.0.0", "github-buttons": "^2.28.0", "postcss-preset-env": "^10.0.0", diff --git a/sitePlugin.js b/sitePlugin.js index c6bbf9c1b..4243bb9ba 100644 --- a/sitePlugin.js +++ b/sitePlugin.js @@ -1,8 +1,8 @@ module.exports = function () { return { name: 'custom-docusaurus-plugin', - // eslint-disable-next-line - configureWebpack(config, isServer, utils) { + + configureWebpack() { return { resolve: { alias: { diff --git a/sources/academy/tutorials/node_js/caching_responses_in_puppeteer.js b/sources/academy/tutorials/node_js/caching_responses_in_puppeteer.js index 32b4e58b8..490e0944f 100644 --- a/sources/academy/tutorials/node_js/caching_responses_in_puppeteer.js +++ b/sources/academy/tutorials/node_js/caching_responses_in_puppeteer.js @@ -28,7 +28,7 @@ const crawler = new PuppeteerCrawler({ let buffer; try { buffer = await response.buffer(); - } catch (error) { + } catch { // some responses do not contain buffer and do not need to be cached return; } diff --git a/sources/academy/webscraping/scraping_basics_javascript/crawling/finding_links.js b/sources/academy/webscraping/scraping_basics_javascript/crawling/finding_links.js index 58b1a83d3..9af7879a1 100644 --- a/sources/academy/webscraping/scraping_basics_javascript/crawling/finding_links.js +++ b/sources/academy/webscraping/scraping_basics_javascript/crawling/finding_links.js @@ -1,5 +1,5 @@ -import { gotScraping } from 'got-scraping'; import * as cheerio from 'cheerio'; +import { gotScraping } from 'got-scraping'; const storeUrl = 'https://warehouse-theme-metal.myshopify.com/collections/sales'; diff --git a/sources/api/sidebars.js b/sources/api/sidebars.js index 72e4ece33..013fd3f1a 100644 --- a/sources/api/sidebars.js +++ b/sources/api/sidebars.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line global-require const items = require('./sidebar.ts'); for (const item of items) { diff --git a/src/components/ActionCard/ActionCard.tsx b/src/components/ActionCard/ActionCard.tsx index 6feeab0f9..770010795 100644 --- a/src/components/ActionCard/ActionCard.tsx +++ b/src/components/ActionCard/ActionCard.tsx @@ -1,9 +1,9 @@ -import { HorizontalTile, theme } from '@apify-packages/ui-library'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import React from 'react'; import styled from 'styled-components'; +import { HorizontalTile, theme } from '@apify-packages/ui-library'; + import styles from './styles.module.css'; import ArrowRight20 from '../../pages/img/arrow-right-20.svg'; import { Heading } from '../Heading'; diff --git a/src/components/ActorTemplates/ActorTemplates.tsx b/src/components/ActorTemplates/ActorTemplates.tsx index 586478093..b78b4551e 100644 --- a/src/components/ActorTemplates/ActorTemplates.tsx +++ b/src/components/ActorTemplates/ActorTemplates.tsx @@ -1,16 +1,16 @@ -import { - ActorTemplateCard, - theme, -} from '@apify-packages/ui-library'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import React, -{ +import React, { useState, useEffect, } from 'react'; import styled from 'styled-components'; +import { + ActorTemplateCard, + theme, +} from '@apify-packages/ui-library'; + interface ActorTemplate { id: string, name: string, @@ -69,7 +69,7 @@ export const ActorTemplates: React.FC = ({ ); } catch (error) { setIsError(true); - // eslint-disable-next-line no-console + console.error('Error while fetching actor templates', error); } setIsLoading(false); diff --git a/src/components/ApiLink.jsx b/src/components/ApiLink.jsx index 171c55367..7354da129 100644 --- a/src/components/ApiLink.jsx +++ b/src/components/ApiLink.jsx @@ -1,6 +1,4 @@ -import React from 'react'; import Link from '@docusaurus/Link'; -// eslint-disable-next-line import/no-extraneous-dependencies import { useDocsVersion } from '@docusaurus/plugin-content-docs/client'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; diff --git a/src/components/Button.tsx b/src/components/Button.tsx index c9bb0ed35..3334244a2 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -1,7 +1,8 @@ -import { theme } from '@apify-packages/ui-library'; -import React, { PropsWithChildren } from 'react'; +import type { PropsWithChildren } from 'react'; import styled, { css } from 'styled-components'; +import { theme } from '@apify-packages/ui-library'; + // TODO: implement secondary, success and danger export const BUTTON_VARIANTS = { DEFAULT: 'DEFAULT', diff --git a/src/components/Card.jsx b/src/components/Card.jsx index 36c6c028c..6c221304e 100644 --- a/src/components/Card.jsx +++ b/src/components/Card.jsx @@ -1,7 +1,7 @@ import Link from '@docusaurus/Link'; import { useColorMode } from '@docusaurus/theme-common'; import clsx from 'clsx'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import styles from './Cards.module.css'; diff --git a/src/components/CardGrid.jsx b/src/components/CardGrid.jsx index 4a7047dfa..67aa63cfb 100644 --- a/src/components/CardGrid.jsx +++ b/src/components/CardGrid.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import styles from './CardGrid.module.css'; export default function CardGrid({ children }) { diff --git a/src/components/CardWithIcon/CardWithIcon.tsx b/src/components/CardWithIcon/CardWithIcon.tsx index 7ffc1f841..40cf12acf 100644 --- a/src/components/CardWithIcon/CardWithIcon.tsx +++ b/src/components/CardWithIcon/CardWithIcon.tsx @@ -1,7 +1,7 @@ -import { VerticalTile, theme } from '@apify-packages/ui-library'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import React from 'react'; + +import { VerticalTile, theme } from '@apify-packages/ui-library'; import styles from './styles.module.css'; import { Heading } from '../Heading'; diff --git a/src/components/CardWithImageAndContent/ImageWithContent.tsx b/src/components/CardWithImageAndContent/ImageWithContent.tsx index f654d0ce5..b64ca509c 100644 --- a/src/components/CardWithImageAndContent/ImageWithContent.tsx +++ b/src/components/CardWithImageAndContent/ImageWithContent.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import type React from 'react'; import styles from './styles.module.css'; diff --git a/src/components/ChangeLog/ChangeLog.tsx b/src/components/ChangeLog/ChangeLog.tsx index 14ae3473e..0c03936ed 100644 --- a/src/components/ChangeLog/ChangeLog.tsx +++ b/src/components/ChangeLog/ChangeLog.tsx @@ -1,5 +1,5 @@ import Link from '@docusaurus/Link'; -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import styles from './styles.module.css'; @@ -56,7 +56,7 @@ export default function ChangeLog() { setchangeLogData(data); } catch (error) { setIsError(true); - // eslint-disable-next-line no-console + console.error('Error while fetching change log data', error); } setIsLoading(false); diff --git a/src/components/GitButton.tsx b/src/components/GitButton.tsx index 23016a7f5..e91ca3f7d 100644 --- a/src/components/GitButton.tsx +++ b/src/components/GitButton.tsx @@ -1,6 +1,6 @@ import { useColorMode } from '@docusaurus/theme-common'; -import { GitHubButtonProps } from 'github-buttons'; -import React, { PropsWithChildren } from 'react'; +import type { GitHubButtonProps } from 'github-buttons'; +import type { PropsWithChildren } from 'react'; import GitHubButton from 'react-github-btn'; export default function GitButton(props: PropsWithChildren) { diff --git a/src/components/Heading.tsx b/src/components/Heading.tsx index cfa9991b4..032090044 100644 --- a/src/components/Heading.tsx +++ b/src/components/Heading.tsx @@ -1,7 +1,8 @@ -import { TextBaseComponent, TextBaseProps, theme } from '@apify-packages/ui-library'; -import React from 'react'; import styled, { css } from 'styled-components'; +import type { TextBaseProps } from '@apify-packages/ui-library'; +import { TextBaseComponent, theme } from '@apify-packages/ui-library'; + /** * @typedef {Object} HeadingProps * @property {React.ReactNode} [children] diff --git a/src/components/Hero/Hero.tsx b/src/components/Hero/Hero.tsx index c0e761173..2395e4fd0 100644 --- a/src/components/Hero/Hero.tsx +++ b/src/components/Hero/Hero.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import React from 'react'; +import type React from 'react'; import styles from './styles.module.css'; import { Heading } from '../Heading'; diff --git a/src/components/OpenSourceCards/OpenSourceCards.tsx b/src/components/OpenSourceCards/OpenSourceCards.tsx index f22c77d53..eceebe54c 100644 --- a/src/components/OpenSourceCards/OpenSourceCards.tsx +++ b/src/components/OpenSourceCards/OpenSourceCards.tsx @@ -1,11 +1,12 @@ -import { theme } from '@apify-packages/ui-library'; import Link from '@docusaurus/Link'; import { useColorMode } from '@docusaurus/theme-common'; import useBaseUrl from '@docusaurus/useBaseUrl'; import ThemedImage from '@theme/ThemedImage'; -import React from 'react'; +import type React from 'react'; import GitHubButton from 'react-github-btn'; +import { theme } from '@apify-packages/ui-library'; + import styles from './styles.module.css'; import CardWithImageAndContent from '../CardWithImageAndContent/ImageWithContent'; import { Heading } from '../Heading'; diff --git a/src/components/PlainCard/PlainCard.tsx b/src/components/PlainCard/PlainCard.tsx index a819b22fe..ebcd6ed19 100644 --- a/src/components/PlainCard/PlainCard.tsx +++ b/src/components/PlainCard/PlainCard.tsx @@ -1,7 +1,7 @@ -import { VerticalTile, theme } from '@apify-packages/ui-library'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import React from 'react'; + +import { VerticalTile, theme } from '@apify-packages/ui-library'; import styles from './styles.module.css'; import { Heading } from '../Heading'; diff --git a/src/components/PlatformCard.jsx b/src/components/PlatformCard.jsx index 822b76b6d..a479db6e4 100644 --- a/src/components/PlatformCard.jsx +++ b/src/components/PlatformCard.jsx @@ -1,7 +1,7 @@ -import React from 'react'; import Link from '@docusaurus/Link'; -// eslint-disable-next-line import/no-relative-packages -import ExternalLinkIcon from '../../apify-docs-theme/static/img/external-link.svg'; + +import ExternalLinkIcon from '@apify/docs-theme/static/img/external-link.svg'; + import styles from './Cards.module.css'; const PlatformLink = ({ cardItem, href, isExternalLink }) => ( diff --git a/src/components/SdkSection/SdkSection.tsx b/src/components/SdkSection/SdkSection.tsx index ec74cff1c..fec07b4d8 100644 --- a/src/components/SdkSection/SdkSection.tsx +++ b/src/components/SdkSection/SdkSection.tsx @@ -1,12 +1,12 @@ -import { ActionLink, Button, theme } from '@apify-packages/ui-library'; import { useColorMode } from '@docusaurus/theme-common'; import useBaseUrl from '@docusaurus/useBaseUrl'; import CodeBlock from '@theme/CodeBlock'; import ThemedImage from '@theme/ThemedImage'; -import React from 'react'; import GitHubButton from 'react-github-btn'; import styled from 'styled-components'; +import { ActionLink, Button, theme } from '@apify-packages/ui-library'; + import { Heading } from '../Heading'; import { Text } from '../Text'; diff --git a/src/components/Section/Section.tsx b/src/components/Section/Section.tsx index f8bdb213f..84f3f4ac0 100644 --- a/src/components/Section/Section.tsx +++ b/src/components/Section/Section.tsx @@ -1,6 +1,6 @@ -import { theme } from '@apify-packages/ui-library'; import clsx from 'clsx'; -import React from 'react'; + +import { theme } from '@apify-packages/ui-library'; import styles from './styles.module.css'; import { Heading } from '../Heading'; diff --git a/src/components/Tabs.tsx b/src/components/Tabs.tsx index 4ad4a828c..4eac0e219 100644 --- a/src/components/Tabs.tsx +++ b/src/components/Tabs.tsx @@ -1,8 +1,9 @@ -import { theme } from '@apify-packages/ui-library'; import clsx from 'clsx'; import React from 'react'; import styled from 'styled-components'; +import { theme } from '@apify-packages/ui-library'; + import { Heading } from './Heading'; const TabsWrapper = styled.div` diff --git a/src/components/Text.tsx b/src/components/Text.tsx index 3a89f67c3..81940c3c2 100644 --- a/src/components/Text.tsx +++ b/src/components/Text.tsx @@ -1,10 +1,10 @@ +import styled, { css } from 'styled-components'; + +import type { TextBaseProps } from '@apify-packages/ui-library'; import { TextBaseComponent, - TextBaseProps, theme, } from '@apify-packages/ui-library'; -import React from 'react'; -import styled, { css } from 'styled-components'; /** * @typedef {Object} TextProps diff --git a/src/components/UiLibraryWrapper.tsx b/src/components/UiLibraryWrapper.tsx index a33efae7c..0e163ddec 100644 --- a/src/components/UiLibraryWrapper.tsx +++ b/src/components/UiLibraryWrapper.tsx @@ -1,8 +1,10 @@ -import { UiDependencyProvider } from '@apify-packages/ui-library'; import Link from '@docusaurus/Link'; import { useColorMode } from '@docusaurus/theme-common'; import useBaseUrl from '@docusaurus/useBaseUrl'; -import React, { PropsWithChildren, useEffect, useState } from 'react'; +import type { PropsWithChildren } from 'react'; +import { useEffect, useState } from 'react'; + +import { UiDependencyProvider } from '@apify-packages/ui-library'; export default function UiLibraryWrapper({ children }: PropsWithChildren) { const [themeIsDark, setThemeIsDark] = useState(true); diff --git a/src/pages/api/index.tsx b/src/pages/api/index.tsx index e06d0d0d0..1cdcfef46 100644 --- a/src/pages/api/index.tsx +++ b/src/pages/api/index.tsx @@ -1,9 +1,3 @@ -import { - ActionLink, - BlogArticle, - Button, - theme, -} from '@apify-packages/ui-library'; import Link from '@docusaurus/Link'; import useBaseUrl from '@docusaurus/useBaseUrl'; import CodeBlock from '@theme/CodeBlock'; @@ -12,6 +6,13 @@ import ThemedImage from '@theme/ThemedImage'; import React from 'react'; import styled from 'styled-components'; +import { + ActionLink, + BlogArticle, + Button, + theme, +} from '@apify-packages/ui-library'; + import styles from './styles.module.css'; import GitButton from '../../components/GitButton'; import Hero from '../../components/Hero/Hero'; @@ -182,7 +183,7 @@ curl -X POST -d @- \\ {`// Easily run Actors, await them to finish using the convenient .call() method, and retrieve results from the resulting dataset. const { ApifyClient } = require('apify-client'); diff --git a/src/pages/api/v2-old.js b/src/pages/api/v2-old.js index 80df584fc..4c35e3522 100644 --- a/src/pages/api/v2-old.js +++ b/src/pages/api/v2-old.js @@ -28,20 +28,20 @@ function setupApiary(subdomain) { section: { title: { color: 'black', visibility: 'hidden' }, apiDescription: { - 'fontSize': '15px', + fontSize: '15px', // p: { marginBottom: '10px' }, - 'code': { + code: { fontSize: '13px', }, - 'pre': { + pre: { fontSize: '13px', }, - 'h1': { fontSize: '30px', fontWeight: 'normal', color: '#ec6c33' }, - 'h2': { fontSize: '30px', fontWeight: 'normal', color: '#ec6c33' }, - 'h3': { fontSize: '23px', fontWeight: 'normal' }, - 'p': { marginBottom: '20px' }, - 'ul': { paddingTop: '0px', paddingBottom: '0px' }, - 'ol': { paddingTop: '0px', paddingBottom: '0px' }, + h1: { fontSize: '30px', fontWeight: 'normal', color: '#ec6c33' }, + h2: { fontSize: '30px', fontWeight: 'normal', color: '#ec6c33' }, + h3: { fontSize: '23px', fontWeight: 'normal' }, + p: { marginBottom: '20px' }, + ul: { paddingTop: '0px', paddingBottom: '0px' }, + ol: { paddingTop: '0px', paddingBottom: '0px' }, 'ul.li': { marginBottom: '0px' }, 'ol.li': { marginBottom: '0px' }, }, @@ -49,16 +49,16 @@ function setupApiary(subdomain) { resourceGroup: { name: { fontSize: '30px', fontWeight: 'normal', color: '#ec6c33' }, description: { - 'p': { fontSize: '15px' }, - 'code': { fontSize: '13px' }, - 'pre': { fontSize: '13px' }, + p: { fontSize: '15px' }, + code: { fontSize: '13px' }, + pre: { fontSize: '13px' }, 'table.tr.th': { fontSize: '15px' }, 'table.tr.td': { fontSize: '15px' }, - 'ul': { paddingTop: '0px', paddingBottom: '0px' }, - 'ol': { paddingTop: '0px', paddingBottom: '0px' }, + ul: { paddingTop: '0px', paddingBottom: '0px' }, + ol: { paddingTop: '0px', paddingBottom: '0px' }, 'ul.li': { marginBottom: '0px' }, 'ol.li': { marginBottom: '0px' }, - 'marginBottom': '25px', + marginBottom: '25px', }, resources: { resource: { @@ -67,13 +67,13 @@ function setupApiary(subdomain) { action: { invitation: { fontSize: '16px' }, description: { - 'p': { fontSize: '15px' }, - 'code': { fontSize: '13px' }, - 'pre': { fontSize: '13px' }, + p: { fontSize: '15px' }, + code: { fontSize: '13px' }, + pre: { fontSize: '13px' }, 'table.tr.th': { fontSize: '15px' }, 'table.tr.td': { fontSize: '15px' }, - 'ul': { paddingTop: '0px', paddingBottom: '0px' }, - 'ol': { paddingTop: '0px', paddingBottom: '0px' }, + ul: { paddingTop: '0px', paddingBottom: '0px' }, + ol: { paddingTop: '0px', paddingBottom: '0px' }, 'ul.li': { marginBottom: '0px' }, 'ol.li': { marginBottom: '0px' }, }, @@ -117,7 +117,6 @@ export default function ApiDocs() { React.useEffect(() => { loadApiaryScripts(); document.documentElement.setAttribute('style', 'scroll-behavior: auto;'); - // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return ( diff --git a/src/pages/open-source/index.tsx b/src/pages/open-source/index.tsx index 3458d58bd..84d98514a 100644 --- a/src/pages/open-source/index.tsx +++ b/src/pages/open-source/index.tsx @@ -1,10 +1,11 @@ -import { theme, Banner, Heading, Text, Link } from '@apify-packages/ui-library'; import useBaseUrl from '@docusaurus/useBaseUrl'; import Layout from '@theme/Layout'; import clsx from 'clsx'; import React from 'react'; import styled from 'styled-components'; +import { theme, Banner, Heading, Text, Link } from '@apify-packages/ui-library'; + import ActionCard from '../../components/ActionCard/ActionCard'; import { ActorTemplates } from '../../components/ActorTemplates/ActorTemplates'; import CardWithImageAndContent from '../../components/CardWithImageAndContent/ImageWithContent'; diff --git a/src/pages/sdk/index.tsx b/src/pages/sdk/index.tsx index fcaf9ab6c..b9255c516 100644 --- a/src/pages/sdk/index.tsx +++ b/src/pages/sdk/index.tsx @@ -1,8 +1,9 @@ -import { theme } from '@apify-packages/ui-library'; import Layout from '@theme/Layout'; import React from 'react'; import styled from 'styled-components'; +import { theme } from '@apify-packages/ui-library'; + import Hero from '../../components/Hero/Hero'; import SdkSection from '../../components/SdkSection/SdkSection'; import Section from '../../components/Section/Section'; diff --git a/src/pages/versions.js b/src/pages/versions.js index e19f9ef4f..cd8208eed 100644 --- a/src/pages/versions.js +++ b/src/pages/versions.js @@ -146,7 +146,6 @@ function Versions(props) { ); } -// eslint-disable-next-line react/display-name export default (props) => ( diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index eb111fe5e..598944479 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -1,6 +1,8 @@ { "extends": "./tsconfig.json", "include": [ + "sources/**/*.ts", + "examples/**/*.ts", "src/**/*.js", "src/**/*.ts", "src/**/*.jsx", From 64d61a1e6d491e22572a129fc39a18668e80ad30 Mon Sep 17 00:00:00 2001 From: Apify Bot Date: Wed, 5 Feb 2025 11:10:29 +0000 Subject: [PATCH 5/5] chore: publish new version of @apify/docs-theme [skip ci] --- apify-docs-theme/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apify-docs-theme/package.json b/apify-docs-theme/package.json index ac7bd2349..3f67bb8e6 100644 --- a/apify-docs-theme/package.json +++ b/apify-docs-theme/package.json @@ -1,6 +1,6 @@ { "name": "@apify/docs-theme", - "version": "1.0.165", + "version": "1.0.166", "description": "", "main": "./src/index.js", "files": [