diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..be93d946 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,23 @@ +{ + "parser": "@typescript-eslint/parser", + "extends": ["eslint:recommended", "plugin:react/recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", "prettier"], + "plugins": ["prettier", "@typescript-eslint"], + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true, + "modules": true, + "experimentalObjectRestSpread": true + } + }, + "settings": { + "react": { + "version": "16.6" + } + }, + "rules": { + "react/react-in-jsx-scope": "off", + "typescript-eslint/no-non-null-asserted-optional-chain": "off" + } +} diff --git a/.gitignore b/.gitignore index 12f040f4..6f2c5a9d 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,8 @@ public/canonical.json # rollup .rollup.cache +# next +.next +next-env.d.ts +out + diff --git a/Dockerfile b/Dockerfile index 4a26bcd5..7c7a480d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,18 +4,19 @@ USER root WORKDIR /usr/share/builder -COPY package.json package-lock.json tsconfig.json config-overrides.js ./ +COPY package.json package-lock.json tsconfig.json next.config.ts .eslintrc.json prettier.config.js proxy.mjs ./ COPY src ./src COPY public ./public -COPY packages/common ./packages/common +COPY packages ./packages RUN npm i +RUN npm run build FROM registry.access.redhat.com/ubi9/nginx-124 WORKDIR /usr/share/nginx -COPY --from=builder /usr/share/builder/ /usr/share/nginx/html +COPY --from=builder /usr/share/builder/out /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 8080 diff --git a/README.md b/README.md index f404863b..054e4815 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,12 @@ https://developers.redhat.com/api-catalog/ ## Project structure -The main package is found on [src](./src) and contains the React application for the site itself. +The main package is found on [src](./src) and contains the Next.js application. Other packages includes: - [Common code](./packages/common) shared across other packages. Contains the information about the included APIs. - [Discovery](./packages/discovery) contains a file descriptor and its supporting schemas to describe the contents found in API catalog. It includes the list of the APIs, what group they form part of and their metadata. -- [Prerender](./packages/prerender) is a cli tool to pre-render all the API catalog to increase SEO and make it easier to - be read by bots. - [Sitemap](./packages/sitemap) is a cli tool to create the sitemap.xml of API catalog. The sitemap package is also responsible for generating the [canonical format json file](./public/canonical.json) used by the Search Platform for indexing. - [transform](./packages/transform) is a cli tool to process the [discovery file](./packages/discovery/Discovery.yml) and create typescript code that can be loaded by API Catalog, the resulting code is stored in the @@ -78,7 +76,7 @@ Use `npm install` to install all the project dependencies. ### Running the frontend -Use `npm run start` to start the frontend application. +Use `npm run dev` to start the frontend application. ### Running the discovery process @@ -92,12 +90,6 @@ npm run discovery:build && npm run discovery:start -- --skip-api-fetch The sitemap can be re-generated by running: `SITEMAP_BASE_URL=https://my-base-url npm run sitemap`. -### Pre-rendering the site - -To be more bot-friendly we pre-render the whole site to allow it to be crawled. -You can run trigger a local run by building the site `npm run build` and then running `npm run prerender`. The results of the pre-rendering are written in -[build/pre-rendered](./build/pre-rendered) - ## Adding external content Details from each API is extracted from its openapi file to show in the API catalog. Sometimes this is not enough. @@ -125,7 +117,7 @@ This is a list of the support sections, followed by the required file name. - Getting started: `getting-started.md` -## Releasing to Production +## Releasing to Production (Deprecated) We use GitLab tags for deployment to Production. Follow these steps: @@ -150,6 +142,10 @@ We use GitLab tags for deployment to Production. Follow these steps: 4. **Watch the pipeline:** Monitor the pipeline in GitLab's CI/CD > Pipelines section. If successful, your code is deployed to production. +## Releasing to production (new) + +TBD + ## SPAship configuration We require some components that are shared across developers.redhat.com (header and footer). These components needs to be copied (and synchronized from time to time). diff --git a/next.config.ts b/next.config.ts new file mode 100644 index 00000000..51fe375a --- /dev/null +++ b/next.config.ts @@ -0,0 +1,39 @@ +import type { NextConfig } from 'next'; +import MonacoWebpackPlugin from 'monaco-editor-webpack-plugin'; + +const nextConfig: NextConfig = { + /* config options here */ + output: 'export', + images: { + unoptimized: true, + }, + ...(process.env.DEV === 'true' + ? { + async rewrites() { + // proxy to get the assets from developers.redhat.com + return [ + { + source: '/modules/:path*', + destination: 'http://localhost:3001/modules/:path*', + }, + ]; + }, + basePath: '', + } + : { + basePath: '/api-catalog', + }), + webpack: (config, { isServer }) => { + if (!isServer) { + config.plugins.push( + new MonacoWebpackPlugin({ + languages: ['go', 'python', 'java', 'javascript', 'shell', 'cpp', 'ruby', 'json'], + filename: 'static/[name].worker.js', + }), + ); + } + return config; + }, +}; + +export default nextConfig; diff --git a/package-lock.json b/package-lock.json index 86976510..bf9a0cab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,19 +11,22 @@ "packages/*" ], "dependencies": { - "@patternfly/patternfly": "^4.222.4", - "@patternfly/react-code-editor": "^4.82.113", - "@patternfly/react-core": "^4.267.6", - "@patternfly/react-icons": "^4.93.3", - "@patternfly/react-styles": "^4.92.3", - "@patternfly/react-table": "^4.112.6", - "@patternfly/react-tokens": "^4.94.3", + "@patternfly/patternfly": "^5.0.0", + "@patternfly/react-code-editor": "^5.0.0", + "@patternfly/react-core": "^5.0.0", + "@patternfly/react-icons": "^5.0.0", + "@patternfly/react-styles": "^5.0.0", + "@patternfly/react-table": "^5.0.0", + "@patternfly/react-tokens": "^5.0.0", "axios": "^1.5.1", + "eslint-config-next": "^15.0.2", "httpsnippet-lite": "^3.0.4", "immer": "^9.0.19", "lodash.snakecase": "^4.1.1", "lodash.startcase": "^4.4.0", "mock-json-schema": "^1.1.1", + "next": "^15.0.2", + "prettier": "^3.3.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-helmet-async": "^1.3.0", @@ -37,6 +40,8 @@ }, "devDependencies": { "@apidevtools/swagger-parser": "^10.1.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "^9.14.0", "@rollup/plugin-commonjs": "^24.0.1", "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.1", @@ -45,6 +50,7 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@types/eslint__js": "^8.42.3", "@types/jest": "^27.5.2", "@types/lodash.snakecase": "^4.1.7", "@types/lodash.startcase": "^4.4.7", @@ -53,14 +59,20 @@ "@types/react-dom": "^18.0.10", "@types/react-helmet": "^6.1.6", "@types/swagger2openapi": "^7.0.4", + "@typescript-eslint/eslint-plugin": "^8.13.0", + "@typescript-eslint/parser": "^8.13.0", "ajv": "^8.12.0", "assert-never": "^1.2.1", "better-ajv-errors": "^1.2.0", + "concurrently": "^9.1.0", "customize-cra": "^1.0.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.37.2", "gh-pages": "^5.0.0", "glob": "^9.2.1", - "monaco-editor-webpack-plugin": "^7.0.1", + "monaco-editor-webpack-plugin": "^7.1.0", "npm-run-all": "^4.1.5", "openapi-types": "^12.1.0", "react-app-rewired": "^2.2.1", @@ -72,12 +84,15 @@ "sitemaps": "^2.0.4", "swagger2openapi": "^7.0.8", "ts-jest": "^29.0.5", - "typescript": "^4.9.4", + "typescript": "^4.9.5", + "typescript-eslint": "^8.13.0", "yaml": "^2.2.1" } }, "node_modules/@adobe/css-tools": { - "version": "4.0.2", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", "dev": true, "license": "MIT" }, @@ -153,10 +168,6 @@ "resolved": "packages/discovery", "link": true }, - "node_modules/@apidocs/prerender": { - "resolved": "packages/prerender", - "link": true - }, "node_modules/@apidocs/sitemap": { "resolved": "packages/sitemap", "link": true @@ -166,10 +177,14 @@ "link": true }, "node_modules/@babel/code-frame": { - "version": "7.18.6", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -211,7 +226,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -241,31 +258,39 @@ } }, "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.20.7", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -310,7 +335,9 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -366,7 +393,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -526,14 +555,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -571,21 +604,14 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/types": "^7.26.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.13", - "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -1544,7 +1570,9 @@ } }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -1746,7 +1774,9 @@ } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -1810,30 +1840,31 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.13", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", - "debug": "^4.1.0", + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1841,12 +1872,13 @@ } }, "node_modules/@babel/types": { - "version": "7.20.7", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2111,14 +2143,53 @@ "postcss-selector-parser": "^6.0.10" } }, - "node_modules/@eslint/eslintrc": { - "version": "1.4.1", + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "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, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.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", @@ -2126,7 +2197,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" @@ -2134,6 +2205,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2148,16 +2222,47 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, "license": "Python-2.0" }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "license": "MIT", + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "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, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2165,6 +2270,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -2175,16 +2283,19 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, "license": "MIT" }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "license": "(MIT OR CC0-1.0)", + "node_modules/@eslint/js": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@exodus/schemasafe": { @@ -2194,11 +2305,14 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", + "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", "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -2226,133 +2340,497 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", + "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", "license": "BSD-3-Clause" }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "license": "MIT", + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" + "funding": { + "url": "https://opencollective.com/libvips" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" + "url": "https://opencollective.com/libvips" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@jest/console": { - "version": "29.4.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/types": "^29.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.4.2", - "jest-util": "^29.4.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/libvips" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://opencollective.com/libvips" } }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.4.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.4.2", + "jest-util": "^29.4.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "peer": true, "dependencies": { "color-name": "~1.1.4" @@ -3577,27 +4055,33 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -3608,11 +4092,13 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@jsdevtools/ono": { @@ -3624,6 +4110,203 @@ "version": "2.0.4", "license": "MIT" }, + "node_modules/@monaco-editor/loader": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz", + "integrity": "sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==", + "license": "MIT", + "dependencies": { + "state-local": "^1.0.6" + }, + "peerDependencies": { + "monaco-editor": ">= 0.21.0 < 1" + } + }, + "node_modules/@monaco-editor/react": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.6.0.tgz", + "integrity": "sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==", + "license": "MIT", + "dependencies": { + "@monaco-editor/loader": "^1.4.0" + }, + "peerDependencies": { + "monaco-editor": ">= 0.25.0 < 1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@next/env": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.2.tgz", + "integrity": "sha512-c0Zr0ModK5OX7D4ZV8Jt/wqoXtitLNPwUfG9zElCZztdaZyNVnN40rDXVZ/+FGuR4CcNV5AEfM6N8f+Ener7Dg==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.0.2.tgz", + "integrity": "sha512-R9Jc7T6Ge0txjmqpPwqD8vx6onQjynO9JT73ArCYiYPvSrwYXepH/UY/WdKDY8JPWJl72sAE4iGMHPeQ5xdEWg==", + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.2.tgz", + "integrity": "sha512-GK+8w88z+AFlmt+ondytZo2xpwlfAR8U6CRwXancHImh6EdGfHMIrTSCcx5sOSBei00GyLVL0ioo1JLKTfprgg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.2.tgz", + "integrity": "sha512-KUpBVxIbjzFiUZhiLIpJiBoelqzQtVZbdNNsehhUn36e2YzKHphnK8eTUW1s/4aPy5kH/UTid8IuVbaOpedhpw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.2.tgz", + "integrity": "sha512-9J7TPEcHNAZvwxXRzOtiUvwtTD+fmuY0l7RErf8Yyc7kMpE47MIQakl+3jecmkhOoIyi/Rp+ddq7j4wG6JDskQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.2.tgz", + "integrity": "sha512-BjH4ZSzJIoTTZRh6rG+a/Ry4SW0HlizcPorqNBixBWc3wtQtj4Sn9FnRZe22QqrPnzoaW0ctvSz4FaH4eGKMww==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.2.tgz", + "integrity": "sha512-i3U2TcHgo26sIhcwX/Rshz6avM6nizrZPvrDVDY1bXcLH1ndjbO8zuC7RoHp0NSK7wjJMPYzm7NYL1ksSKFreA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.2.tgz", + "integrity": "sha512-AMfZfSVOIR8fa+TXlAooByEF4OB00wqnms1sJ1v+iu8ivwvtPvnkwdzzFMpsK5jA2S9oNeeQ04egIWVb4QWmtQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.2.tgz", + "integrity": "sha512-JkXysDT0/hEY47O+Hvs8PbZAeiCQVxKfGtr4GUpNAhlG2E0Mkjibuo8ryGD29Qb5a3IOnKYNoZlh/MyKd2Nbww==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.2.tgz", + "integrity": "sha512-foaUL0NqJY/dX0Pi/UcZm5zsmSk5MtP/gxx3xOPyREkMFN+CTjctPfu3QaqrQHinaKdPnMWPJDKt4VjDfTBe/Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "license": "MIT", @@ -3678,6 +4361,15 @@ "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==", + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, "node_modules/@oclif/command": { "version": "1.8.21", "dev": true, @@ -4111,72 +4803,85 @@ } }, "node_modules/@patternfly/patternfly": { - "version": "4.222.4", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.4.2.tgz", + "integrity": "sha512-+BaokNR8/AmTYMESxby9UtQXPGACg449BXQd0KejAvW/uGxlgO6mY1X1205DeBEHoK3e/vXkYXjvZPpv/tcxSA==", "license": "MIT" }, "node_modules/@patternfly/react-code-editor": { - "version": "4.82.113", + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/@patternfly/react-code-editor/-/react-code-editor-5.4.11.tgz", + "integrity": "sha512-Dq6VnCs0mEJ3S/m+pTUdO5Cq3Cz3nztITClGUbwtUxXjjZkllOBwH2hW7nucwc7+Jvec6fRhNUfWZsRpNDAhGA==", "license": "MIT", "dependencies": { - "@patternfly/react-core": "^4.276.6", - "@patternfly/react-icons": "^4.93.6", - "@patternfly/react-styles": "^4.92.6", - "react-dropzone": "9.0.0", - "tslib": "^2.0.0" + "@monaco-editor/react": "^4.6.0", + "@patternfly/react-core": "^5.4.8", + "@patternfly/react-icons": "^5.4.2", + "@patternfly/react-styles": "^5.4.1", + "react-dropzone": "14.2.3", + "tslib": "^2.7.0" }, "peerDependencies": { - "react": "^16.8 || ^17 || ^18", - "react-dom": "^16.8 || ^17 || ^18", - "react-monaco-editor": "^0.51.0" + "react": "^17 || ^18", + "react-dom": "^17 || ^18" } }, "node_modules/@patternfly/react-core": { - "version": "4.276.6", + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.4.8.tgz", + "integrity": "sha512-4KRsQsH39VmTiFPLdN34QqNZg6gKrTamJxKtWEPO1VKA0TpoRMwpFEGk9BDyxipxYST6WzXznAaLCidGkCDlWw==", "license": "MIT", "dependencies": { - "@patternfly/react-icons": "^4.93.6", - "@patternfly/react-styles": "^4.92.6", - "@patternfly/react-tokens": "^4.94.6", - "focus-trap": "6.9.2", - "react-dropzone": "9.0.0", - "tippy.js": "5.1.2", - "tslib": "^2.0.0" + "@patternfly/react-icons": "^5.4.2", + "@patternfly/react-styles": "^5.4.1", + "@patternfly/react-tokens": "^5.4.1", + "focus-trap": "7.6.0", + "react-dropzone": "^14.2.3", + "tslib": "^2.7.0" }, "peerDependencies": { - "react": "^16.8 || ^17 || ^18", - "react-dom": "^16.8 || ^17 || ^18" + "react": "^17 || ^18", + "react-dom": "^17 || ^18" } }, "node_modules/@patternfly/react-icons": { - "version": "4.93.6", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.4.2.tgz", + "integrity": "sha512-CMQ5oHYzW6TPVTs2jpNJmP2vGCAKR/YeTPwHGO9dLkAUej1IcIxtCCWK2Fdo2UJsnBjuZihasyw2b6ehvbUm9Q==", "license": "MIT", "peerDependencies": { - "react": "^16.8 || ^17 || ^18", - "react-dom": "^16.8 || ^17 || ^18" + "react": "^17 || ^18", + "react-dom": "^17 || ^18" } }, "node_modules/@patternfly/react-styles": { - "version": "4.92.6", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.4.1.tgz", + "integrity": "sha512-XA8PXksD8uiA3RTwxdUwJXOCf+V6sVd+2HKapWAdRLvtSV+Sdk7NgCvalb4IAQncsddLopjPQD8gAHA298+N8w==", "license": "MIT" }, "node_modules/@patternfly/react-table": { - "version": "4.112.6", + "version": "5.4.9", + "resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-5.4.9.tgz", + "integrity": "sha512-fSbBZRihVCAaUOKRFzzqYhBrTSI/VGU6O9I0a21T+bXwHz071OsefBdE/ZQiJhqHpJTC+WAZWM76/1CEEnrBFw==", "license": "MIT", "dependencies": { - "@patternfly/react-core": "^4.267.6", - "@patternfly/react-icons": "^4.93.3", - "@patternfly/react-styles": "^4.92.3", - "@patternfly/react-tokens": "^4.94.3", - "lodash": "^4.17.19", - "tslib": "^2.0.0" + "@patternfly/react-core": "^5.4.8", + "@patternfly/react-icons": "^5.4.2", + "@patternfly/react-styles": "^5.4.1", + "@patternfly/react-tokens": "^5.4.1", + "lodash": "^4.17.21", + "tslib": "^2.7.0" }, "peerDependencies": { - "react": "^16.8 || ^17 || ^18", - "react-dom": "^16.8 || ^17 || ^18" + "react": "^17 || ^18", + "react-dom": "^17 || ^18" } }, "node_modules/@patternfly/react-tokens": { - "version": "4.94.6", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.4.1.tgz", + "integrity": "sha512-eygdHE7Krta1mijAv/E8RHiKIgysD0eeNTo8EXUYC8/M4e5K6sqpr2p6rQBF8QiRMN8FnbXvZT3K2OQ28pYt9Q==", "license": "MIT" }, "node_modules/@pkgr/core": { @@ -4184,6 +4889,7 @@ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -4503,8 +5209,16 @@ } } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "license": "MIT" + }, "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", "license": "MIT" }, "node_modules/@sinclair/typebox": { @@ -4541,7 +5255,9 @@ } }, "node_modules/@spaship/cli": { - "version": "1.5.5", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@spaship/cli/-/cli-1.8.0.tgz", + "integrity": "sha512-aU5L6jt891D83edXhW3l6CJbFsycnU/eOAhSRKc0CnmAqJ40uFAGFCLGWXWD7IT/zJ8nIBLoin2FmHXt12/pFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4553,7 +5269,7 @@ "archiver": "^5.0.0", "axios": "^0.27.0", "chalk": "^4.1.1", - "cosmiconfig": "^7.0.0", + "cosmiconfig": "^8.0.0", "form-data": "^4.0.0", "inquirer": "^8.0.0", "inquirer-loop": "^0.3.0", @@ -4634,6 +5350,33 @@ "dev": true, "license": "MIT" }, + "node_modules/@spaship/cli/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@spaship/cli/node_modules/form-data": { "version": "4.0.0", "dev": true, @@ -4943,6 +5686,21 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "license": "MIT", @@ -5247,8 +6005,20 @@ "@types/json-schema": "*" } }, + "node_modules/@types/eslint__js": { + "version": "8.42.3", + "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz", + "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*" + } + }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "license": "MIT", "dependencies": { "@types/eslint": "*", @@ -5256,9 +6026,10 @@ } }, "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.15", @@ -5279,16 +6050,6 @@ "@types/range-parser": "*" } }, - "node_modules/@types/fs-extra": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz", - "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==", - "dev": true, - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, "node_modules/@types/graceful-fs": { "version": "4.1.6", "license": "MIT", @@ -5361,17 +6122,10 @@ }, "node_modules/@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "license": "MIT" }, - "node_modules/@types/jsonfile": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", - "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/lodash": { "version": "4.14.191", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", @@ -5561,39 +6315,32 @@ "version": "21.0.0", "license": "MIT" }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.48.2", - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "5.48.2", - "@typescript-eslint/type-utils": "5.48.2", - "@typescript-eslint/utils": "5.48.2", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.13.0.tgz", + "integrity": "sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/type-utils": "8.13.0", + "@typescript-eslint/utils": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.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": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -5601,105 +6348,456 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.48.2", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz", + "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==", "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "5.48.2" + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz", + "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.48.2", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz", + "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==", "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.48.2", - "@typescript-eslint/types": "5.48.2", - "@typescript-eslint/typescript-estree": "5.48.2", - "debug": "^4.3.4" + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.48.2", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz", + "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.48.2", - "@typescript-eslint/visitor-keys": "5.48.2" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "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" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.48.2", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", + "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.48.2", - "@typescript-eslint/utils": "5.48.2", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@typescript-eslint/types": "8.13.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/types": { - "version": "5.48.2", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.13.0.tgz", + "integrity": "sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "debug": "^4.3.4" + }, + "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" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz", + "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz", + "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz", + "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "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/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", + "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.13.0.tgz", + "integrity": "sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.13.0", + "@typescript-eslint/utils": "8.13.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "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/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz", + "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz", + "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz", + "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "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/type-utils/node_modules/@typescript-eslint/utils": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz", + "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.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" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", + "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.48.2", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.48.2", - "@typescript-eslint/visitor-keys": "5.48.2", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5720,16 +6818,18 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.48.2", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "license": "MIT", "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.48.2", - "@typescript-eslint/types": "5.48.2", - "@typescript-eslint/typescript-estree": "5.48.2", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "engines": { @@ -5762,10 +6862,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.48.2", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -5776,119 +6878,155 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "license": "ISC" + }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -5898,10 +7036,14 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "license": "Apache-2.0" }, "node_modules/abab": { @@ -5920,7 +7062,9 @@ } }, "node_modules/acorn": { - "version": "8.8.2", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5947,15 +7091,10 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -6197,10 +7336,28 @@ } }, "node_modules/aria-query": { - "version": "5.1.3", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "license": "MIT", "dependencies": { - "deep-equal": "^2.0.5" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-flatten": { @@ -6208,13 +7365,16 @@ "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.6", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -6239,13 +7399,55 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.3.1", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -6256,12 +7458,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -6289,14 +7493,41 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.1", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/asap": { @@ -6309,8 +7540,10 @@ "license": "MIT" }, "node_modules/ast-types-flow": { - "version": "0.0.7", - "license": "ISC" + "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==", + "license": "MIT" }, "node_modules/async": { "version": "3.2.4", @@ -6336,20 +7569,14 @@ } }, "node_modules/attr-accept": { - "version": "1.1.3", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.4.tgz", + "integrity": "sha512-2pA6xFIbdTUDCAwjN8nQwI+842VwzbDUXO2IYlpPXQIORgKnavorcr4Ce3rwh+zsNg9zK7QPsdvDj3Lum4WX4w==", "license": "MIT", - "dependencies": { - "core-js": "^2.5.0" - }, "engines": { "node": ">=4" } }, - "node_modules/attr-accept/node_modules/core-js": { - "version": "2.6.12", - "hasInstallScript": true, - "license": "MIT" - }, "node_modules/autoprefixer": { "version": "10.4.13", "funding": [ @@ -6382,8 +7609,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6392,18 +7624,21 @@ } }, "node_modules/axe-core": { - "version": "4.6.2", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -6421,10 +7656,12 @@ } }, "node_modules/axobject-query": { - "version": "3.1.1", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "license": "Apache-2.0", - "dependencies": { - "deep-equal": "^2.0.5" + "engines": { + "node": ">= 0.4" } }, "node_modules/babel-jest": { @@ -6764,7 +8001,9 @@ } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6869,6 +8108,7 @@ }, "node_modules/base64-js": { "version": "1.5.1", + "dev": true, "funding": [ { "type": "github", @@ -7007,6 +8247,7 @@ }, "node_modules/bl": { "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -7019,19 +8260,21 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.1", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -7042,6 +8285,8 @@ }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -7049,6 +8294,8 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -7056,6 +8303,8 @@ }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -7066,6 +8315,8 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/bonjour-service": { @@ -7091,10 +8342,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -7105,7 +8358,9 @@ "license": "BSD-2-Clause" }, "node_modules/browserslist": { - "version": "4.21.4", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "funding": [ { "type": "opencollective", @@ -7114,14 +8369,18 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -7150,6 +8409,7 @@ }, "node_modules/buffer": { "version": "5.7.1", + "dev": true, "funding": [ { "type": "github", @@ -7172,6 +8432,7 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", + "dev": true, "license": "MIT", "engines": { "node": "*" @@ -7192,21 +8453,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" + "engines": { + "node": ">=10.16.0" } }, "node_modules/bytes": { @@ -7250,11 +8505,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7308,7 +8571,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001447", + "version": "1.0.30001677", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz", + "integrity": "sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==", "funding": [ { "type": "opencollective", @@ -7317,6 +8582,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "license": "CC-BY-4.0" @@ -7400,11 +8669,6 @@ "node": ">= 6" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, "node_modules/chrome-trace-event": { "version": "1.0.3", "license": "MIT", @@ -7501,6 +8765,12 @@ "node": ">= 10" } }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, "node_modules/cliui": { "version": "7.0.4", "license": "ISC", @@ -7542,16 +8812,61 @@ "version": "1.0.1", "license": "MIT" }, - "node_modules/color-convert": { - "version": "1.9.3", + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", + "optional": true, "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "optional": true }, "node_modules/colord": { "version": "2.9.3", @@ -7661,6 +8976,168 @@ "version": "0.0.1", "license": "MIT" }, + "node_modules/concurrently": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.0.tgz", + "integrity": "sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/confusing-browser-globals": { "version": "1.0.11", "license": "MIT" @@ -7683,7 +9160,9 @@ } }, "node_modules/content-type": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7694,7 +9173,9 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.5.0", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7788,52 +9269,6 @@ "node": ">= 10" } }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/cross-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/cross-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/cross-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "license": "MIT", @@ -8223,6 +9658,57 @@ "node": ">=10" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "license": "MIT", @@ -8281,32 +9767,6 @@ "version": "0.7.0", "license": "MIT" }, - "node_modules/deep-equal": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-is": { "version": "0.1.4", "license": "MIT" @@ -8346,6 +9806,23 @@ "node": ">=10" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "license": "MIT", @@ -8354,9 +9831,12 @@ } }, "node_modules/define-properties": { - "version": "1.1.4", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "license": "MIT", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -8383,6 +9863,8 @@ }, "node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -8398,12 +9880,24 @@ }, "node_modules/destroy": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "license": "MIT", @@ -8456,11 +9950,6 @@ "node": ">=0.8.0" } }, - "node_modules/devtools-protocol": { - "version": "0.0.981744", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", - "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==" - }, "node_modules/didyoumean": { "version": "1.2.2", "license": "Apache-2.0" @@ -8613,29 +10102,20 @@ "version": "5.1.0", "license": "BSD-2-Clause" }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/duplexer": { "version": "0.1.2", "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/ejs": { - "version": "3.1.8", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" @@ -8648,7 +10128,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.284", + "version": "1.5.52", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.52.tgz", + "integrity": "sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==", "license": "ISC" }, "node_modules/email-addresses": { @@ -8680,7 +10162,9 @@ } }, "node_modules/encodeurl": { - "version": "1.0.2", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -8688,13 +10172,16 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", + "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.12.0", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -8726,42 +10213,57 @@ } }, "node_modules/es-abstract": { - "version": "1.21.1", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -8774,45 +10276,92 @@ "version": "1.0.0", "license": "MIT" }, - "node_modules/es-get-iterator": { - "version": "1.1.3", + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "0.9.3", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -8837,7 +10386,9 @@ "dev": true }, "node_modules/escalade": { - "version": "3.1.1", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -8925,47 +10476,49 @@ } }, "node_modules/eslint": { - "version": "8.32.0", + "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.", "license": "MIT", "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", + "@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", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "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.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -8978,6 +10531,116 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-next": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.0.2.tgz", + "integrity": "sha512-N8o6cyUXzlMmQbdc2Kc83g1qomFi3ITqrAZfubipVKET2uR2mCStyGRcx/r8WiAIVMul2KfwRiCHBkTpBvGBmA==", + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "15.0.2", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3" + }, + "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-config-next/node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "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 || ^9.0.0" + } + }, + "node_modules/eslint-config-next/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-config-react-app": { "version": "7.0.1", "license": "MIT", @@ -9004,13 +10667,127 @@ "eslint": "^8.0.0" } }, + "node_modules/eslint-config-react-app/node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-react-app/node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-react-app/node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-react-app/node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "license": "MIT", "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -9020,8 +10797,27 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-module-utils": { - "version": "2.7.4", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "license": "MIT", "dependencies": { "debug": "^3.2.7" @@ -9037,6 +10833,8 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "license": "MIT", "dependencies": { "ms": "^2.1.1" @@ -9059,30 +10857,36 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -9099,71 +10903,45 @@ "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", + "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==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "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", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "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" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "node_modules/eslint-plugin-prettier": { @@ -9171,6 +10949,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.9.1" @@ -9197,30 +10976,35 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.32.1", + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.1.0", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react-hooks": { @@ -9244,10 +11028,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -9259,7 +11045,9 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -9280,7 +11068,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -9288,36 +11078,21 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "license": "Apache-2.0", - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", + "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==", "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-webpack-plugin": { @@ -9391,6 +11166,37 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "license": "MIT", @@ -9515,12 +11321,14 @@ } }, "node_modules/espree": { - "version": "9.4.1", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -9541,7 +11349,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -9592,6 +11402,8 @@ }, "node_modules/etag": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9819,35 +11631,37 @@ } }, "node_modules/express": { - "version": "4.18.2", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -9910,39 +11724,6 @@ "node": ">=0.10.0" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "license": "MIT" @@ -9951,10 +11732,13 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/fast-glob": { - "version": "3.2.12", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -9986,7 +11770,9 @@ "license": "MIT" }, "node_modules/fast-loops": { - "version": "1.1.3", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.4.tgz", + "integrity": "sha512-8dbd3XWoKCTms18ize6JmQF1SFnnfj5s0B7rRry22EofgMu7B6LKHVh+XfFqFGsqnbH54xgeO83PzpKI+ODhlg==", "license": "MIT" }, "node_modules/fast-redact": { @@ -10046,14 +11832,6 @@ "bser": "2.1.1" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/figures": { "version": "3.2.0", "dev": true, @@ -10097,13 +11875,15 @@ } }, "node_modules/file-selector": { - "version": "0.1.19", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", + "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", "license": "MIT", "dependencies": { - "tslib": "^2.0.1" + "tslib": "^2.4.0" }, "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/filelist": { @@ -10162,7 +11942,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -10172,11 +11954,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -10189,6 +11973,8 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -10196,6 +11982,8 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/find-cache-dir": { @@ -10213,11 +12001,6 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-free-port": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-free-port/-/find-free-port-2.0.0.tgz", - "integrity": "sha512-J1j8gfEVf5FN4PR5w5wrZZ7NYs2IvqsHcd03cAeQx3Ec/mo+lKceaVNhpsRKoZpZKbId88o8qh+dwUwzBV6WCg==" - }, "node_modules/find-up": { "version": "5.0.0", "license": "MIT", @@ -10286,14 +12069,18 @@ "license": "ISC" }, "node_modules/focus-trap": { - "version": "6.9.2", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.0.tgz", + "integrity": "sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==", "license": "MIT", "dependencies": { - "tabbable": "^5.3.2" + "tabbable": "^6.2.0" } }, "node_modules/follow-redirects": { - "version": "1.15.2", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", @@ -10563,6 +12350,8 @@ }, "node_modules/fresh": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -10570,6 +12359,7 @@ }, "node_modules/fs-constants": { "version": "1.0.0", + "dev": true, "license": "MIT" }, "node_modules/fs-extra": { @@ -10606,17 +12396,24 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -10647,12 +12444,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10680,11 +12484,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -10693,6 +12500,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/gh-pages": { "version": "5.0.0", "dev": true, @@ -10822,6 +12641,8 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { @@ -10886,10 +12707,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -10950,11 +12774,15 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "license": "MIT" }, "node_modules/growly": { @@ -10985,16 +12813,6 @@ "version": "1.6.2", "license": "(Apache-2.0 OR MPL-1.1)" }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "license": "MIT", @@ -11010,17 +12828,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -11040,10 +12862,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -11052,6 +12876,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hast-util-whitespace": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", @@ -11218,6 +13054,8 @@ }, "node_modules/http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -11259,7 +13097,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", @@ -11380,6 +13220,7 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "dev": true, "funding": [ { "type": "github", @@ -11397,7 +13238,9 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.2.4", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", "engines": { "node": ">= 4" @@ -11699,11 +13542,13 @@ } }, "node_modules/internal-slot": { - "version": "1.0.4", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -11725,12 +13570,14 @@ "node": ">= 10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -11739,22 +13586,25 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-array-buffer": { - "version": "3.0.1", + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, "node_modules/is-bigint": { "version": "1.0.4", "license": "MIT", @@ -11826,6 +13676,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-bun-module": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", + "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, "node_modules/is-callable": { "version": "1.2.7", "license": "MIT", @@ -11837,10 +13696,30 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "license": "MIT", "dependencies": { - "has": "^1.0.3" + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11879,6 +13758,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "license": "MIT", @@ -11893,6 +13784,21 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "license": "MIT", @@ -11912,8 +13818,13 @@ } }, "node_modules/is-map": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11924,7 +13835,9 @@ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, "node_modules/is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -11935,6 +13848,8 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -12019,17 +13934,27 @@ } }, "node_modules/is-set": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12072,14 +13997,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -12104,8 +14027,13 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12121,11 +14049,16 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12171,7 +14104,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12236,6 +14171,22 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/jake": { "version": "10.8.5", "license": "Apache-2.0", @@ -15831,14 +17782,6 @@ "version": "2.2.1", "license": "MIT" }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "license": "MIT" @@ -15899,13 +17842,15 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -15961,11 +17906,15 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.3", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "license": "MIT", "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" @@ -16013,14 +17962,21 @@ } }, "node_modules/language-subtag-registry": { - "version": "0.3.22", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "license": "CC0-1.0" }, "node_modules/language-tags": { - "version": "1.0.5", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "license": "MIT", "dependencies": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/lazystream": { @@ -16067,6 +18023,8 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -16367,7 +18325,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -16459,6 +18419,8 @@ }, "node_modules/media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -16482,8 +18444,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -16925,10 +18892,12 @@ ] }, "node_modules/micromatch": { - "version": "4.0.5", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -16937,6 +18906,8 @@ }, "node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -17060,11 +19031,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/mock-json-schema": { "version": "1.1.1", "license": "MIT", @@ -17072,22 +19038,15 @@ "lodash": "^4.17.21" } }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "optional": true, - "engines": { - "node": "*" - } - }, "node_modules/monaco-editor": { "version": "0.34.1", "license": "MIT", "peer": true }, "node_modules/monaco-editor-webpack-plugin": { - "version": "7.0.1", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.1.0.tgz", + "integrity": "sha512-ZjnGINHN963JQkFqjjcBtn1XBtUATDZBMgNQhDQwd78w2ukRhFXAPNgWuacaQiDZsUr4h1rWv5Mv6eriKuOSzA==", "dev": true, "license": "MIT", "dependencies": { @@ -17126,54 +19085,6 @@ "dev": true, "license": "ISC" }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, "node_modules/nano-css": { "version": "5.3.5", "license": "Unlicense", @@ -17215,7 +19126,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" @@ -17230,6 +19149,8 @@ }, "node_modules/natural-compare-lite": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "license": "MIT" }, "node_modules/nconf": { @@ -17254,15 +19175,6 @@ "node": ">=10" } }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, "node_modules/negotiator": { "version": "0.6.3", "license": "MIT", @@ -17274,6 +19186,60 @@ "version": "2.6.2", "license": "MIT" }, + "node_modules/next": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.2.tgz", + "integrity": "sha512-rxIWHcAu4gGSDmwsELXacqAPUk+j8dV/A9cDF5fsiCMpkBDYkO2AEaL1dfD+nNmDiU6QMCFN8Q30VEKapT9UHQ==", + "license": "MIT", + "dependencies": { + "@next/env": "15.0.2", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.13", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.18.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.0.2", + "@next/swc-darwin-x64": "15.0.2", + "@next/swc-linux-arm64-gnu": "15.0.2", + "@next/swc-linux-arm64-musl": "15.0.2", + "@next/swc-linux-x64-gnu": "15.0.2", + "@next/swc-linux-x64-musl": "15.0.2", + "@next/swc-win32-arm64-msvc": "15.0.2", + "@next/swc-win32-x64-msvc": "15.0.2", + "sharp": "^0.33.5" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-02c0e824-20241028", + "react-dom": "^18.2.0 || 19.0.0-rc-02c0e824-20241028", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, "node_modules/nice-try": { "version": "1.0.5", "dev": true, @@ -17395,7 +19361,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.8", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "license": "MIT" }, "node_modules/normalize-package-data": { @@ -17537,7 +19505,9 @@ } }, "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -17751,19 +19721,10 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, "engines": { "node": ">= 0.4" }, @@ -17779,11 +19740,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -17795,24 +19758,29 @@ } }, "node_modules/object.entries": { - "version": "1.1.6", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.6", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -17837,24 +19805,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.hasown": { - "version": "1.1.2", + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "license": "MIT", "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.6", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -17869,6 +19842,8 @@ }, "node_modules/on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -17925,7 +19900,9 @@ "license": "MIT" }, "node_modules/optionator": { - "version": "0.9.1", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -17933,7 +19910,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -18186,7 +20163,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "license": "MIT" }, "node_modules/path-type": { @@ -18196,17 +20175,14 @@ "node": ">=8" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" - }, "node_modules/performance-now": { "version": "2.1.0", "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { @@ -18415,16 +20391,19 @@ "node": ">=4" } }, - "node_modules/popper.js": { - "version": "1.16.1", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" + "engines": { + "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.21", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -18433,11 +20412,15 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -19523,6 +21506,8 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -19532,8 +21517,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "peer": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -19549,6 +21533,7 @@ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -19605,14 +21590,6 @@ "dev": true, "license": "MIT" }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/promise": { "version": "8.3.0", "license": "MIT", @@ -19640,21 +21617,6 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types-extra": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "react-is": "^16.3.2", - "warning": "^4.0.0" - }, - "peerDependencies": { - "react": ">=0.14.0" - } - }, - "node_modules/prop-types-extra/node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "license": "MIT" @@ -19670,122 +21632,36 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/psl": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", - "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", - "deprecated": "< 19.2.0 is no longer supported", - "hasInstallScript": true, - "dependencies": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.981744", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.5.0" - }, - "engines": { - "node": ">=10.18.1" - } - }, - "node_modules/puppeteer/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/puppeteer/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">= 0.10" } }, - "node_modules/puppeteer/node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "license": "MIT", "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/q": { @@ -19797,10 +21673,12 @@ } }, "node_modules/qs": { - "version": "6.11.0", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -19868,7 +21746,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -19882,6 +21762,8 @@ }, "node_modules/raw-body/node_modules/bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -19889,6 +21771,8 @@ }, "node_modules/raw-body/node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -19937,7 +21821,9 @@ } }, "node_modules/react-app-rewired/node_modules/semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -20064,19 +21950,20 @@ } }, "node_modules/react-dropzone": { - "version": "9.0.0", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", + "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", "license": "MIT", "dependencies": { - "attr-accept": "^1.1.3", - "file-selector": "^0.1.8", - "prop-types": "^15.6.2", - "prop-types-extra": "^1.1.0" + "attr-accept": "^2.2.2", + "file-selector": "^0.6.0", + "prop-types": "^15.8.1" }, "engines": { - "node": ">= 6" + "node": ">= 10.13" }, "peerDependencies": { - "react": ">=0.14.0" + "react": ">= 16.8 || 18.0.0" } }, "node_modules/react-error-overlay": { @@ -20142,19 +22029,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, - "node_modules/react-monaco-editor": { - "version": "0.51.0", - "license": "MIT", - "peer": true, - "dependencies": { - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "@types/react": ">=17 <= 18", - "monaco-editor": "^0.34.1", - "react": ">=17 <= 18" - } - }, "node_modules/react-refresh": { "version": "0.11.0", "license": "MIT", @@ -21448,7 +23322,9 @@ } }, "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -21534,6 +23410,27 @@ "node": ">=8" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/reftools": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", @@ -21573,12 +23470,15 @@ "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -21587,16 +23487,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { "version": "5.2.2", "license": "MIT", @@ -21737,6 +23627,15 @@ "node": ">=8" } }, + "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==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve-url-loader": { "version": "4.0.0", "license": "MIT", @@ -21855,9 +23754,10 @@ } }, "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -21960,7 +23860,9 @@ } }, "node_modules/rxjs": { - "version": "7.8.0", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -21978,6 +23880,24 @@ "node": ">=6" } }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "funding": [ @@ -21996,20 +23916,19 @@ ], "license": "MIT" }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, "node_modules/safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -22096,7 +24015,9 @@ } }, "node_modules/schema-utils": { - "version": "3.1.1", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", @@ -22166,11 +24087,10 @@ } }, "node_modules/semver": { - "version": "7.3.8", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -22178,22 +24098,10 @@ "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/send": { - "version": "0.18.0", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -22216,6 +24124,8 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -22223,10 +24133,23 @@ }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/serialize-javascript": { @@ -22299,18 +24222,52 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-harmonic-interval": { "version": "1.0.1", "license": "Unlicense", @@ -22320,6 +24277,8 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/shallowequal": { @@ -22327,6 +24286,46 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "license": "MIT", @@ -22345,7 +24344,9 @@ } }, "node_modules/shell-quote": { - "version": "1.7.4", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22413,12 +24414,18 @@ "dev": true }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22428,22 +24435,27 @@ "version": "3.0.7", "license": "ISC" }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT", + "optional": true + }, "node_modules/sisteransi": { "version": "1.0.5", "license": "MIT" }, - "node_modules/site-prerender": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/site-prerender/-/site-prerender-1.0.2.tgz", - "integrity": "sha512-3jmYsdyUyouFH2JOX5cVBXLXdDdPRGHm3y+I1BYpaAU1QH8sl0mOwGEvG7phJhW/rGEfQXwnwEd6Y3OY3CF1Fg==", - "dependencies": { - "bunyan": "^1.8.15", - "express": "^4.17.3", - "find-free-port": "^2.0.0", - "fs-extra": "^10.0.1", - "puppeteer": "^13.5.2" - } - }, "node_modules/sitemaps": { "version": "2.0.4", "dev": true, @@ -22658,21 +24670,27 @@ "stacktrace-gps": "^3.0.4" } }, + "node_modules/state-local": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", + "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==", + "license": "MIT" + }, "node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "internal-slot": "^1.0.4" - }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { - "node": ">= 0.4" + "node": ">=10.0.0" } }, "node_modules/string_decoder": { @@ -22717,18 +24735,41 @@ "version": "8.0.0", "license": "MIT" }, + "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==", + "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.8", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22750,25 +24791,60 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22871,6 +24947,29 @@ "inline-style-parser": "0.1.1" } }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, "node_modules/stylehacks": { "version": "5.1.1", "license": "MIT", @@ -23099,6 +25198,7 @@ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", "dev": true, + "license": "MIT", "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" @@ -23111,7 +25211,9 @@ } }, "node_modules/tabbable": { - "version": "5.3.3", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", "license": "MIT" }, "node_modules/tailwindcss": { @@ -23164,19 +25266,9 @@ "node": ">=6" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, "node_modules/tar-stream": { "version": "2.2.0", + "dev": true, "license": "MIT", "dependencies": { "bl": "^4.0.3", @@ -23237,11 +25329,13 @@ } }, "node_modules/terser": { - "version": "5.16.1", + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "license": "BSD-2-Clause", "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -23253,14 +25347,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.6", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -23335,19 +25431,13 @@ }, "node_modules/through": { "version": "2.3.8", + "dev": true, "license": "MIT" }, "node_modules/thunky": { "version": "1.1.0", "license": "MIT" }, - "node_modules/tippy.js": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "popper.js": "^1.16.0" - } - }, "node_modules/tmp": { "version": "0.0.33", "dev": true, @@ -23363,15 +25453,10 @@ "version": "1.0.5", "license": "BSD-3-Clause" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -23386,13 +25471,17 @@ }, "node_modules/toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tough-cookie": { - "version": "4.1.2", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", @@ -23421,6 +25510,16 @@ "node": ">=8" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -23454,6 +25553,18 @@ "version": "1.0.1", "license": "MIT" }, + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-easing": { "version": "0.2.0", "license": "Unlicense" @@ -23589,17 +25700,21 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.1", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "license": "MIT", "dependencies": { "minimist": "^1.2.0" @@ -23610,6 +25725,8 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "license": "MIT", "engines": { "node": ">=4" @@ -23618,7 +25735,8 @@ "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -23639,6 +25757,8 @@ }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -23666,6 +25786,8 @@ }, "node_modules/type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -23675,13 +25797,74 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -23695,7 +25878,9 @@ } }, "node_modules/typescript": { - "version": "4.9.4", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -23705,6 +25890,158 @@ "node": ">=4.2.0" } }, + "node_modules/typescript-eslint": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.13.0.tgz", + "integrity": "sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.13.0", + "@typescript-eslint/parser": "8.13.0", + "@typescript-eslint/utils": "8.13.0" + }, + "engines": { + "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/node_modules/@typescript-eslint/scope-manager": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz", + "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz", + "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz", + "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "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/node_modules/@typescript-eslint/utils": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz", + "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.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" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", + "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "license": "MIT", @@ -23718,15 +26055,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "license": "MIT", @@ -23879,6 +26207,8 @@ }, "node_modules/unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -23897,7 +26227,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "funding": [ { "type": "opencollective", @@ -23906,15 +26238,19 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -24085,15 +26421,10 @@ "makeerror": "1.0.12" } }, - "node_modules/warning": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/watchpack": { - "version": "2.4.0", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -24138,32 +26469,33 @@ } }, "node_modules/webpack": { - "version": "5.75.0", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "version": "5.96.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", + "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -24183,7 +26515,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "license": "MIT", "dependencies": { "colorette": "^2.0.10", @@ -24324,7 +26658,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.12.0", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -24381,10 +26717,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "license": "MIT" - }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", "license": "BSD-2-Clause", @@ -24486,29 +26818,61 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-collection": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "license": "MIT", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.9", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -24529,7 +26893,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -24912,7 +27278,9 @@ } }, "node_modules/ws": { - "version": "7.5.9", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { "node": ">=8.3.0" @@ -24957,9 +27325,14 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.2.1", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", "dev": true, "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -24987,15 +27360,6 @@ "node": ">=10" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "license": "MIT", @@ -25055,6 +27419,7 @@ }, "packages/prerender": { "name": "@apidocs/prerender", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "@apidocs/common": "*", @@ -25067,33 +27432,6 @@ "@types/node": "^18.13.0" } }, - "packages/prerender/node_modules/@types/node": { - "version": "18.15.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.0.tgz", - "integrity": "sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==", - "dev": true - }, - "packages/prerender/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "packages/prerender/node_modules/fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "packages/sitemap": { "name": "@apidocs/sitemap", "license": "Apache-2.0", @@ -25127,6 +27465,7 @@ "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -25168,6 +27507,7 @@ "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, diff --git a/package.json b/package.json index 63664eaa..f3a51427 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,12 @@ "packages/*" ], "scripts": { - "build": "npm run clean && react-app-rewired build", - "eject": "react-app-rewired eject", - "start": "npm run clean && react-app-rewired start", - "spandx": "spandx", + "build": "next build", + "prettier": "prettier --write \"**/*.tsx\"", + "dev": "concurrently \"node proxy.mjs\" \"DEV=true next dev\"", + "lint": "eslint --ext .js,.ts,.tsx ./src", + "start": "next start", + "circular": "madge --circular ./src --extensions js,ts,tsx", "test": "npm exec jest --src discovery", "clean": "npm run clean --workspaces --if-present", "discovery": "npm-run-all discovery:build discovery:start", @@ -18,10 +20,7 @@ "discovery:start": "npm run --workspace packages/transform start -- --input-dir `npm prefix`/packages/discovery -o `npm prefix`/packages/common/config", "sitemap": "npm-run-all sitemap:build sitemap:start", "sitemap:build": "npm run --workspace packages/common -workspace packages/sitemap build", - "sitemap:start": "npm run --workspace packages/sitemap start -- -o `npm prefix`/public -b $SITEMAP_BASE_URL", - "prerender": "npm-run-all prerender:build prerender:start", - "prerender:build": "npm run --workspace packages/common -workspace packages/prerender build", - "prerender:start": "npm run --workspace packages/prerender start -- -o `npm prefix`/build/pre-rendered -d `npm prefix`/build -b `read-json-value package.json homepage`" + "sitemap:start": "npm run --workspace packages/sitemap start -- -o `npm prefix`/public -b $SITEMAP_BASE_URL" }, "browserslist": { "production": [ @@ -35,26 +34,23 @@ "last 1 safari version" ] }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, "dependencies": { - "@patternfly/patternfly": "^4.222.4", - "@patternfly/react-code-editor": "^4.82.113", - "@patternfly/react-core": "^4.267.6", - "@patternfly/react-icons": "^4.93.3", - "@patternfly/react-styles": "^4.92.3", - "@patternfly/react-table": "^4.112.6", - "@patternfly/react-tokens": "^4.94.3", + "@patternfly/patternfly": "^5.0.0", + "@patternfly/react-code-editor": "^5.0.0", + "@patternfly/react-core": "^5.0.0", + "@patternfly/react-icons": "^5.0.0", + "@patternfly/react-styles": "^5.0.0", + "@patternfly/react-table": "^5.0.0", + "@patternfly/react-tokens": "^5.0.0", "axios": "^1.5.1", + "eslint-config-next": "^15.0.2", "httpsnippet-lite": "^3.0.4", "immer": "^9.0.19", "lodash.snakecase": "^4.1.1", "lodash.startcase": "^4.4.0", "mock-json-schema": "^1.1.1", + "next": "^15.0.2", + "prettier": "^3.3.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-helmet-async": "^1.3.0", @@ -68,6 +64,8 @@ }, "devDependencies": { "@apidevtools/swagger-parser": "^10.1.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "^9.14.0", "@rollup/plugin-commonjs": "^24.0.1", "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.1", @@ -76,6 +74,7 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@types/eslint__js": "^8.42.3", "@types/jest": "^27.5.2", "@types/lodash.snakecase": "^4.1.7", "@types/lodash.startcase": "^4.4.7", @@ -84,14 +83,20 @@ "@types/react-dom": "^18.0.10", "@types/react-helmet": "^6.1.6", "@types/swagger2openapi": "^7.0.4", + "@typescript-eslint/eslint-plugin": "^8.13.0", + "@typescript-eslint/parser": "^8.13.0", "ajv": "^8.12.0", "assert-never": "^1.2.1", "better-ajv-errors": "^1.2.0", + "concurrently": "^9.1.0", "customize-cra": "^1.0.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.37.2", "gh-pages": "^5.0.0", "glob": "^9.2.1", - "monaco-editor-webpack-plugin": "^7.0.1", + "monaco-editor-webpack-plugin": "^7.1.0", "npm-run-all": "^4.1.5", "openapi-types": "^12.1.0", "react-app-rewired": "^2.2.1", @@ -103,7 +108,8 @@ "sitemaps": "^2.0.4", "swagger2openapi": "^7.0.8", "ts-jest": "^29.0.5", - "typescript": "^4.9.4", + "typescript": "^4.9.5", + "typescript-eslint": "^8.13.0", "yaml": "^2.2.1" }, "jest": { diff --git a/packages/common/config/apis/hcc-insights/automation-hub/content.json b/packages/common/config/apis/hcc-insights/automation-hub/content.json index 8621d41b..95027c55 100644 --- a/packages/common/config/apis/hcc-insights/automation-hub/content.json +++ b/packages/common/config/apis/hcc-insights/automation-hub/content.json @@ -71768,4 +71768,4 @@ } ] } -} \ No newline at end of file +} diff --git a/packages/common/config/icon-ansible.tsx b/packages/common/config/icon-ansible.tsx index b46fe9de..78bf6c94 100644 --- a/packages/common/config/icon-ansible.tsx +++ b/packages/common/config/icon-ansible.tsx @@ -4,15 +4,19 @@ const AnsibleIcon = () => { return ( - + - - - - - - ) - ;} - export default AnsibleIcon; + + + + + + ); +}; +export default AnsibleIcon; diff --git a/packages/common/config/icon-edge.tsx b/packages/common/config/icon-edge.tsx index a2b94dab..a09b7819 100644 --- a/packages/common/config/icon-edge.tsx +++ b/packages/common/config/icon-edge.tsx @@ -5,32 +5,69 @@ const EdgeIcon = () => { - + - - + + - - + + - - + + - - + + - - + + - + - ) -;} + ); +}; export default EdgeIcon; - diff --git a/packages/common/config/icon-generic.tsx b/packages/common/config/icon-generic.tsx index f23eb5d2..ddbd9768 100644 --- a/packages/common/config/icon-generic.tsx +++ b/packages/common/config/icon-generic.tsx @@ -9,13 +9,28 @@ const GenericIcon = () => { {`.bd54039f-1ff7-4ad7-a5a2-655d1144d9f5{fill:#fff;}`} - - - - - - + + + + + + - ) -;} + ); +}; export default GenericIcon; diff --git a/packages/common/config/icon-insights.tsx b/packages/common/config/icon-insights.tsx index f75f71d9..17390f86 100644 --- a/packages/common/config/icon-insights.tsx +++ b/packages/common/config/icon-insights.tsx @@ -2,18 +2,27 @@ import React from 'react'; const InsightsIcon = () => { return ( - + - - - - + + + + - ) -;} + ); +}; export default InsightsIcon; diff --git a/packages/common/config/icon-openshift.tsx b/packages/common/config/icon-openshift.tsx index adc07782..6399f086 100644 --- a/packages/common/config/icon-openshift.tsx +++ b/packages/common/config/icon-openshift.tsx @@ -9,14 +9,32 @@ const OpenShiftIcon = () => { {`.b{fill:#e00;}`} - - - - - - - + + + + + + + - ) -;} + ); +}; export default OpenShiftIcon; diff --git a/packages/common/config/icon-services.tsx b/packages/common/config/icon-services.tsx index b47a836e..5e8b183f 100644 --- a/packages/common/config/icon-services.tsx +++ b/packages/common/config/icon-services.tsx @@ -4,27 +4,32 @@ const ServicesIcon = () => { return ( - - + - + + c-0.76,0-1.38-0.62-1.38-1.38s0.62-1.38,1.38-1.38s1.38,0.62,1.38,1.38S26.26,27.87,25.5,27.87z" + /> - ) -;} + ); +}; export default ServicesIcon; diff --git a/packages/common/config/icon-subscriptions.tsx b/packages/common/config/icon-subscriptions.tsx index e0b32b91..45505d1d 100644 --- a/packages/common/config/icon-subscriptions.tsx +++ b/packages/common/config/icon-subscriptions.tsx @@ -5,21 +5,40 @@ const SubscriptionsIcon = () => { - + - + - + - ) -;} + ); +}; export default SubscriptionsIcon; diff --git a/packages/common/package.json b/packages/common/package.json index a07c584b..2d43e58c 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -4,6 +4,7 @@ "private": true, "license": "Apache-2.0", "main": "dist/index.js", + "typings": "dist/index.d.ts", "scripts": { "build": "tsc --build", "clean": "rimraf ./dist" diff --git a/packages/prerender/package.json b/packages/prerender/package.json deleted file mode 100644 index 86306fd9..00000000 --- a/packages/prerender/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "@apidocs/prerender", - "description": "Creates a prerender of api-documentation-frontend", - "private": true, - "type": "commonjs", - "license": "Apache-2.0", - "dependencies": { - "@apidocs/common": "*", - "commander": "7.2.0", - "site-prerender": "^1.0.2", - "fs-extra": "^11.1.0" - }, - "devDependencies": { - "@types/fs-extra": "^11.0.1", - "@types/node": "^18.13.0" - }, - "scripts": { - "build": "rollup -c rollup.config.js", - "start": "node dist/main.js" - } -} diff --git a/packages/prerender/rollup.config.js b/packages/prerender/rollup.config.js deleted file mode 100644 index e6fac0b5..00000000 --- a/packages/prerender/rollup.config.js +++ /dev/null @@ -1,22 +0,0 @@ -// rollup.config.js -import typescript from '@rollup/plugin-typescript'; -import resolve from '@rollup/plugin-node-resolve'; -import json from '@rollup/plugin-json'; -import commonjs from '@rollup/plugin-commonjs'; - -export default { - input: 'src/main.ts', - output: { - dir: 'dist', - format: 'cjs', - }, - plugins: [ - commonjs(), - json(), - resolve({ - preferBuiltins: true - }), - typescript() - ], - external: ['react', 'site-prerender', 'site-prerender/lib/crawler', 'site-prerender/lib/serve', 'site-prerender/lib/log'], -}; diff --git a/packages/prerender/src/declarations.d.ts b/packages/prerender/src/declarations.d.ts deleted file mode 100644 index 28e99504..00000000 --- a/packages/prerender/src/declarations.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'site-prerender'; -declare module 'site-prerender/lib/crawler'; -declare module 'site-prerender/lib/serve'; -declare module 'site-prerender/lib/log'; -declare module 'find-free-port'; diff --git a/packages/prerender/src/main.ts b/packages/prerender/src/main.ts deleted file mode 100644 index 46e15dc7..00000000 --- a/packages/prerender/src/main.ts +++ /dev/null @@ -1,81 +0,0 @@ -import {APIConfiguration, apiConfigurations, pages} from "@apidocs/common"; -import {getCommand} from "./program.js"; -import {mkdtempSync, mkdirSync} from "fs"; -import {copySync, moveSync, removeSync} from "fs-extra"; -import path from 'path'; -import {PatchedSitePrerenderer} from "./site-prerender-patch"; - -interface Options { - basePath?: string; - distDir: string; - outputDir: string; -} - -export const prependBasePath = (url: string, options: Options) => url; - -export const createApiRoutes = (config: ReadonlyArray>, options: Options): Array => { - return config.map(c => pages.getApiPage(c.id)).map(url => prependBasePath(url, options)); -} - -export const execute = async (options: Options) => { - const routes = [ - prependBasePath(pages.getLandingPage(), options), - ...createApiRoutes(apiConfigurations, options), - ]; - - const rootDir = path.resolve(mkdtempSync('pre-rendered')); - let sourcePath = rootDir; - let basePath = ''; - - if (options.basePath) { - sourcePath = path.join(rootDir, options.basePath); - basePath = options.basePath; - mkdirSync(sourcePath, { - recursive: true - }); - } - - copySync(options.distDir, sourcePath); - - const destDir = path.resolve(mkdtempSync('pre-rendered-output')); - - try { - const sp = new PatchedSitePrerenderer(basePath,{ - staticPath: rootDir, - outputFolder: destDir, - routes - }); - - await sp.init(); - await sp.start(); - await sp.close(); - - // Copy the resources we are interested in. - // but clean the dir before starting - removeSync(options.outputDir); - mkdirSync(options.outputDir, { - recursive: true - }); - - routes.forEach(route => { - const file = path.join(route, 'index.html'); - // Server writes to the destination directory - no need to append the basePath here. - const input = path.join(destDir, file); - const output = path.join(options.outputDir, file); - moveSync(input, output, { - overwrite: true - }); - }); - } finally { - removeSync(rootDir); - removeSync(destDir); - } -} - -if (process.argv) { - if (require.main === module) { - const command = getCommand(); - command.parse(process.argv); - execute(command.opts() as Options); - } -} diff --git a/packages/prerender/src/program.ts b/packages/prerender/src/program.ts deleted file mode 100644 index c1cf6279..00000000 --- a/packages/prerender/src/program.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Command} from "commander"; - -export const getCommand = () => { - return new Command() - .description( - `Generates the pre-renders based on the config files` - ) - .option('-b, --base-path ', 'Base path relative to the HTTP root') - .requiredOption('-d, --dist-dir ', 'Directory of the dist - where build project is located at') - .requiredOption('-o, --output-dir ', 'Output directory'); -}; diff --git a/packages/prerender/src/site-prerender-patch.ts b/packages/prerender/src/site-prerender-patch.ts deleted file mode 100644 index 3354da27..00000000 --- a/packages/prerender/src/site-prerender-patch.ts +++ /dev/null @@ -1,68 +0,0 @@ -import SitePrerender from 'site-prerender'; -import Crawler from 'site-prerender/lib/crawler'; -import Serve from 'site-prerender/lib/serve'; -import log from 'site-prerender/lib/log'; -import fp from 'find-free-port'; -import express from "express"; -import path from "path"; - -type ServeConfig = { - basePath: string; - staticPath: string; -} - -type CrawlerConfig = { - headless?: boolean; - baseUrl: string; - basePath: string; -} - -/** - * Patches SitePrerenderer to be able to use base paths (we use /apidocs) to do the prerendering correctly - * The only real line patched is from site-prerender/lib/serve in the `start` async method. - * `res.sendFile(path.join(staticPath, 'index.html'))` is changed to: - * `res.sendFile(path.join(staticPath, basePath, 'index.html'))` to be able to include a basePath. - * Everything else just helps to pass the required variable. - */ -export class PatchedSitePrerenderer extends SitePrerender { - - private readonly basePath: string; - - constructor(basePath: string, ...args: unknown[]) { - super(...args); - this.basePath = basePath; - } - - async init() { - this.serve = new PatchedServe() - const { baseUrl } = await this.serve.start({ - staticPath: this.config.staticPath, - basePath: this.basePath - }); - this.baseUrl = path.join(baseUrl, this.basePath); - - this.crawler = new Crawler({ - baseUrl: this.baseUrl - }); - await this.crawler.init(); - } -} - -class PatchedServe extends Serve { - async start(config: ServeConfig) { - const { staticPath, basePath } = config - const [freeP] = await fp(3000) - this.httpServer = this.app.listen(freeP, () => { - log.info(`Server started at http://localhost:${freeP}`) - }) - - this.app.use(express.static(staticPath)) - this.app.use((req: unknown, res: any) => { - res.sendFile(path.join(staticPath, basePath, 'index.html')) - }) - - return { - baseUrl: `http://127.0.0.1:${freeP}`, - } - } -} diff --git a/packages/prerender/tsconfig.json b/packages/prerender/tsconfig.json deleted file mode 100644 index 7c127bdf..00000000 --- a/packages/prerender/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "incremental": true, - "module": "esnext", - "target": "ES6", - "allowJs": true, - "checkJs": false, - "strict": true, - "moduleResolution": "node", - "sourceMap": false, - "resolveJsonModule": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "outDir": "./dist" - }, - "exclude": [ - "node_modules" - ], - "include": [ - "./src/**/*" - ] -} diff --git a/packages/prerender/tsconfig.tsbuildinfo b/packages/prerender/tsconfig.tsbuildinfo deleted file mode 100644 index 6955b124..00000000 --- a/packages/prerender/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es6.d.ts","../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../node_modules/typescript/lib/lib.scripthost.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/tslib/tslib.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/scheduler/tracing.d.ts","../../node_modules/@types/react/index.d.ts","../common/dist/config/APIConfigurationIcons.d.ts","../../node_modules/openapi-types/dist/index.d.ts","../common/dist/config/apis.d.ts","../common/dist/router/Utils.d.ts","../common/dist/index.d.ts","./node_modules/commander/typings/index.d.ts","./src/program.ts","../../node_modules/sitemaps/dist/lib/createSitemap.d.ts","../../node_modules/sitemaps/dist/lib/createSitemapIndex.d.ts","../../node_modules/sitemaps/dist/index.d.ts","./src/main.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/globals.global.d.ts","./node_modules/@types/node/index.d.ts","../../node_modules/@types/aria-query/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/dot/index.d.ts","../../node_modules/@types/eslint/helpers.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/@types/mime/Mime.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-cache-semantics/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/jest-matcher-utils/node_modules/chalk/index.d.ts","../../node_modules/jest-diff/build/cleanupSemantic.d.ts","../../node_modules/pretty-format/build/types.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/types.d.ts","../../node_modules/jest-diff/build/diffLines.d.ts","../../node_modules/jest-diff/build/printDiffs.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/@types/jest/index.d.ts","../../node_modules/@types/js-cookie/index.d.ts","../../node_modules/@types/json5/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/prettier/index.d.ts","../../node_modules/@types/q/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/react-helmet/index.d.ts","../../node_modules/@types/resolve/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/@types/scheduler/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/testing-library__jest-dom/matchers.d.ts","../../node_modules/@types/testing-library__jest-dom/index.d.ts","../../node_modules/@types/trusted-types/lib/index.d.ts","../../node_modules/@types/trusted-types/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts"],"fileInfos":["721cec59c3fef87aaf480047d821fb758b3ec9482c4129a54631e6e25e432a31",{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"f3d4da15233e593eacb3965cde7960f3fddf5878528d882bcedd5cbaba0193c7","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"f1c9fe42b65437a61104e601eb298c5c859fb522b483f1bdb700eed67a16f980",{"version":"bbdf156fea2fabed31a569445835aeedcc33643d404fcbaa54541f06c109df3f","affectsGlobalScope":true},"1c29793071152b207c01ea1954e343be9a44d85234447b2b236acae9e709a383","6a386ff939f180ae8ef064699d8b7b6e62bc2731a62d7fbf5e02589383838dea","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"d11a5d3967290ea6be7e6d7667c4673a7626cfaa32cfc68101000d2b218606ab","affectsGlobalScope":true},"15eb47f9c1f6e3c27591556a577641fe1962f737d83fbfd8cf77cc0165bc17fd","cc3e30832aff12a575919d59eb3d680ca7cc999e1041bb0fc489dbe0276b066b","51523d71eb7ab41c82a2d28986000cd17405c8f8e1ee223cf02f7013e692a37e","7bff67e3e3fc124e9716480e7463a8d60280f31eb32327c440326f772a490870","d8cacd68f63ff488ea449b636b6445f52cf5be9bd4eb30ad53adb83e694cbca6","7717e1ba82d36aee8d76cb53e218b2ffc78d2177c089775244ddde9118b88c83","423c0036d8bb3504185b6e0604d73852f4f926d19388ae065d2300923ae9ae53","9d6a6e36e6f9b30f251f1fcbd3515692d442c36c2b1171679ba997821dc12063","bbac600dc59c8e93116edd6b457b96b3fda49510ef05c8334c7b6976e9c54dd7","73e00392aa613937ade33b8623afe92fd7198307ed7898c6e9f61c2ec533f182",{"version":"d0d04989f26d0409e728f0ef4b55e9ee72d85759aa47952cab4d46f85d77b39f","signature":"19d93b3493ceda2b1bb6a593e4fc8142d9547844f3dce9dd20a8e79a2f9dc0b3"},"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"ca72190df0eb9b09d4b600821c8c7b6c9747b75a1c700c4d57dc0bb72abc074c","affectsGlobalScope":true},"11e2d554398d2bd460e7d06b2fa5827a297c8acfbe00b4f894a224ac0862857f",{"version":"e193e634a99c9c1d71f1c6e4e1567a4a73584328d21ea02dd5cddbaad6693f61","affectsGlobalScope":true},"374ca798f244e464346f14301dc2a8b4b111af1a83b49fffef5906c338a1f922","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","5eb881ed2a0d5b17ea36df5cd4c4be500e460c412f270c3170e906bec65580ac","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","489532ff54b714f0e0939947a1c560e516d3ae93d51d639ab02e907a0e950114","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","5eec82ac21f84d83586c59a16b9b8502d34505d1393393556682fe7e7fde9ef2","04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true},"bcebb922784739bdb34c18ee51095d25a92b560c78ccd2eaacd6bd00f7443d83","7ee6ed878c4528215c82b664fe0cfe80e8b4da6c0d4cc80869367868774db8b1","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","fd93cee2621ff42dabe57b7be402783fd1aa69ece755bcba1e0290547ae60513","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","09326ae5f7e3d49be5cd9ea00eb814770e71870a438faa2efd8bdd9b4db21320",{"version":"3c4ba1dd9b12ffa284b565063108f2f031d150ea15b8fafbdc17f5d2a07251f3","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","c4577fb855ca259bdbf3ea663ca73988ce5f84251a92b4aef80a1f4122b6f98e","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"ff07a9a03c65732ccc59b3c65bc584173da093bd563a6565411c01f5703bd3cb","affectsGlobalScope":true},"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"d8d555f3d607ecaa18d55de6995ea8f206342ecc93305919eac945c7c78c78c6","21522c0f405e58c8dd89cd97eb3d1aa9865ba017fde102d01f86ab50b44e5610","f4617bbd5403ec5b058db53b242dcb1421952e2652bd5c80abf6a1c4ea5656d6","cc957354aa3c94c9961ebf46282cfde1e81d107fc5785a61f62c67f1dd3ac2eb","230d323ef7f2ffadfc0ceae494492c4d2faa2b4eaec07a4b71424d084b97ebb8","93de1c6dab503f053efe8d304cb522bb3a89feab8c98f307a674a4fae04773e9","dae3d1adc67ac3dbd1cd471889301339ec439837b5df565982345be20c8fca9a","b6ddf3a46ccfa4441d8be84d2e9bf3087573c48804196faedbd4a25b60631beb","6d829824ead8999f87b6df21200df3c6150391b894b4e80662caa462bd48d073","afc559c1b93df37c25aef6b3dfa2d64325b0e112e887ee18bf7e6f4ec383fc90","d78e5898c8de5e0f934eee83f680262de005caa268d137101b833fd932f95e07","16d51f964ec125ad2024cf03f0af444b3bc3ec3614d9345cc54d09bab45c9a4c","ba601641fac98c229ccd4a303f747de376d761babb33229bb7153bed9356c9cc",{"version":"a34eb69d404f1db719580115825bd7ba837023effe04d235bdbb2e0168df7451","affectsGlobalScope":true},"56cbe80e6c42d7e6e66b6f048add8b01c663797b843a074d9f19c4a3d63a269a",{"version":"a7135fadd61095bf904842769db716f55fd80cc6d7ab2195d1db4290f6a1f59d","affectsGlobalScope":true},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true},"946bd1737d9412395a8f24414c70f18660b84a75a12b0b448e6eb1a2161d06dd","f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","3adc8ac088388fd10b0e9cd3fa08abbebed9172577807394a241466ccb98f411","e050a0afcdbb269720a900c85076d18e0c1ab73e580202a2bf6964978181222a","5b9ecf7da4d71cf3832dbb8336150fa924631811f488ad4690c2dfec2b4fb1d7","951c85f75aac041dddbedfedf565886a7b494e29ec1532e2a9b4a6180560b50e","f47887b61c6cf2f48746980390d6cb5b8013518951d912cfb37fe748071942be","15c88bfd1b8dc7231ff828ae8df5d955bae5ebca4cf2bcb417af5821e52299ae","bf88ef4208a770ca39a844b182b3695df536326ea566893fdc5b8418702a331e","ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","cab425b5559edac18327eb2c3c0f47e7e9f71b667290b7689faafd28aac69eae","c1d5cc0286eef54f6246a972ec1720efbba6b7b0a53a303e1f2067ca229ecd16","8b06ac3faeacb8484d84ddb44571d8f410697f98d7bfa86c0fda60373a9f5215","7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","f5638f7c2f12a9a1a57b5c41b3c1ea7db3876c003bab68e6a57afd6bcc169af0","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322","462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","7adecb2c3238794c378d336a8182d4c3dd2c4fa6fa1785e2797a3db550edea62","dc12dc0e5aa06f4e1a7692149b78f89116af823b9e1f1e4eae140cd3e0e674e6","1bfc6565b90c8771615cd8cfcf9b36efc0275e5e83ac7d9181307e96eb495161","8a8a96898906f065f296665e411f51010b51372fa260d5373bf9f64356703190","7f82ef88bdb67d9a850dd1c7cd2d690f33e0f0acd208e3c9eba086f3670d4f73",{"version":"ccfd8774cd9b929f63ff7dcf657977eb0652e3547f1fcac1b3a1dc5db22d4d58","affectsGlobalScope":true},"b3338366fe1f2c5f978e2ec200f57d35c5bd2c4c90c2191f1e638cfa5621c1f6","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","6fa0008bf91a4cc9c8963bace4bba0bd6865cbfa29c3e3ccc461155660fb113a","2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b","bc88e4049153bc4dddb4503ed7e624eb141edfa9064b3659d6c86e900fe9e621","62b931417104c7cb35d0725e1869f51d52d7b18462fd58f32f846a314a42ba10","e4dd91dd4789a109aab51d8a0569a282369fcda9ba6f2b2297bc61bacfb1a042","f5686791fc970f7b1d9f834b69a88ffd7f6b4d438bb5f762d6749e9d8db1c8d9","8baa5d0febc68db886c40bf341e5c90dc215a90cd64552e47e8184be6b7e3358","199f9ead0daf25ae4c5632e3d1f42570af59685294a38123eef457407e13f365","74b0245c42990ed8a849df955db3f4362c81b13f799ebc981b7bec2d5b414a57","2b93035328f7778d200252681c1d86285d501ed424825a18f81e4c3028aa51d9","2ac9c8332c5f8510b8bdd571f8271e0f39b0577714d5e95c1e79a12b2616f069","42c21aa963e7b86fa00801d96e88b36803188018d5ad91db2a9101bccd40b3ff","d31eb848cdebb4c55b4893b335a7c0cca95ad66dee13cbb7d0893810c0a9c301","77c1d91a129ba60b8c405f9f539e42df834afb174fe0785f89d92a2c7c16b77a","7a9e0a564fee396cacf706523b5aeed96e04c6b871a8bebefad78499fbffc5bc","906c751ef5822ec0dadcea2f0e9db64a33fb4ee926cc9f7efa38afe5d5371b2a","5387c049e9702f2d2d7ece1a74836a14b47fbebe9bbeb19f94c580a37c855351","c68391fb9efad5d99ff332c65b1606248c4e4a9f1dd9a087204242b56c7126d6","e9cf02252d3a0ced987d24845dcb1f11c1be5541f17e5daa44c6de2d18138d0c","e8b02b879754d85f48489294f99147aeccc352c760d95a6fe2b6e49cd400b2fe","9f6908ab3d8a86c68b86e38578afc7095114e66b2fc36a2a96e9252aac3998e0","0eedb2344442b143ddcd788f87096961cd8572b64f10b4afc3356aa0460171c6","71405cc70f183d029cc5018375f6c35117ffdaf11846c35ebf85ee3956b1b2a6","c68baff4d8ba346130e9753cefe2e487a16731bf17e05fdacc81e8c9a26aae9d","2cd15528d8bb5d0453aa339b4b52e0696e8b07e790c153831c642c3dea5ac8af","479d622e66283ffa9883fbc33e441f7fc928b2277ff30aacbec7b7761b4e9579","ade307876dc5ca267ca308d09e737b611505e015c535863f22420a11fffc1c54","f8cdefa3e0dee639eccbe9794b46f90291e5fd3989fcba60d2f08fde56179fb9","86c5a62f99aac7053976e317dbe9acb2eaf903aaf3d2e5bb1cafe5c2df7b37a8","2b300954ce01a8343866f737656e13243e86e5baef51bd0631b21dcef1f6e954","a2d409a9ffd872d6b9d78ead00baa116bbc73cfa959fce9a2f29d3227876b2a1","b288936f560cd71f4a6002953290de9ff8dfbfbf37f5a9391be5c83322324898","61178a781ef82e0ff54f9430397e71e8f365fc1e3725e0e5346f2de7b0d50dfa","6a6ccb37feb3aad32d9be026a3337db195979cd5727a616fc0f557e974101a54","c649ea79205c029a02272ef55b7ab14ada0903db26144d2205021f24727ac7a3","38e2b02897c6357bbcff729ef84c736727b45cc152abe95a7567caccdfad2a1d","d6610ea7e0b1a7686dba062a1e5544dd7d34140f4545305b7c6afaebfb348341","3dee35db743bdba2c8d19aece7ac049bde6fa587e195d86547c882784e6ba34c","b15e55c5fa977c2f25ca0b1db52cfa2d1fd4bf0baf90a8b90d4a7678ca462ff1","f41d30972724714763a2698ae949fbc463afb203b5fa7c4ad7e4de0871129a17","843dd7b6a7c6269fd43827303f5cbe65c1fecabc30b4670a50d5a15d57daeeb9","f06d8b8567ee9fd799bf7f806efe93b67683ef24f4dea5b23ef12edff4434d9d","6017384f697ff38bc3ef6a546df5b230c3c31329db84cbfe686c83bec011e2b2","e1a5b30d9248549ca0c0bb1d653bafae20c64c4aa5928cc4cd3017b55c2177b0","a593632d5878f17295bd53e1c77f27bf4c15212822f764a2bfc1702f4b413fa0","a868a534ba1c2ca9060b8a13b0ffbbbf78b4be7b0ff80d8c75b02773f7192c29","da7545aba8f54a50fde23e2ede00158dc8112560d934cee58098dfb03aae9b9d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","6aee496bf0ecfbf6731aa8cca32f4b6e92cdc0a444911a7d88410408a45ecc5d","acebfe99678cf7cddcddc3435222cf132052b1226e902daac9fbb495c321a9b5","82b1f9a6eefef7386aebe22ac49f23b806421e82dbf35c6e5b7132d79e4165da","b0d10e46cfe3f6c476b69af02eaa38e4ccc7430221ce3109ae84bb9fb8282298","49c972b1c491933723861f15cba6ae694466abfd0938ca4f366621127bb51962",{"version":"910199067bfd07a4605bf51001677680e1691f8d403e9d410c0fe33a6079cd58","affectsGlobalScope":true},"2fcd2d22b1f30555e785105597cd8f57ed50300e213c4f1bbca6ae149f782c38",{"version":"bb4248c7f953233ac52332088fac897d62b82be07244e551d87c5049600b6cf7","affectsGlobalScope":true},"77c5c7f8578d139c74102a29384f5f4f0792a12d819ddcdcaf8307185ff2d45d","70e9a18da08294f75bf23e46c7d69e67634c0765d355887b9b41f0d959e1426e","ae84439d1ae42b30ced3df38c4285f35b805be40dfc95b0647d0e59c70b11f97"],"options":{"emitDeclarationOnly":false,"esModuleInterop":true,"importHelpers":true,"module":99,"noEmitHelpers":true,"skipLibCheck":true,"sourceMap":false,"strict":true,"target":2},"fileIdsList":[[110,119],[110],[110,119,120,121,122,123],[110,119,121],[83,110,117,125],[74,110,117],[109,110,117,130],[83,110,117],[110,134,136],[110,133,134,135],[80,83,110,117,128,129],[110,126,129,130,140],[81,110,117],[80,83,85,88,98,109,110,117],[110,146],[110,147],[110,152,157],[110,139],[110,138],[52,110],[48,49,50,51,110],[110,170,209],[110,170,194,209],[110,209],[110,170],[110,170,195,209],[110,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208],[110,195,209],[81,110,141],[83,110,117,139],[110,158,213],[110,215],[80,83,85,98,106,109,110,115,117],[110,218],[110,150,153],[110,150,153,154,155],[110,152],[110,149,156],[110,151],[60,61,110],[53,54,110],[53,55,56,110],[64,110],[67,110],[68,73,101,110],[69,80,81,88,98,109,110],[69,70,80,88,110],[71,110],[72,73,81,89,110],[73,98,106,110],[74,76,80,88,110],[75,110],[76,77,110],[80,110],[78,80,110],[80,81,82,98,109,110],[80,81,82,95,98,101,110],[110,114],[76,83,88,98,109,110],[80,81,83,84,88,98,106,109,110],[83,85,98,106,109,110],[64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116],[80,86,110],[87,109,110],[76,80,88,98,110],[89,110],[90,110],[67,91,110],[92,108,110,114],[93,110],[94,110],[80,95,96,110],[95,97,110,112],[68,80,98,99,100,101,110],[68,98,100,110],[98,99,110],[101,110],[102,110],[80,104,105,110],[104,105,110],[73,88,98,106,110],[107,110],[88,108,110],[68,83,94,109,110],[73,110],[98,110,111],[110,112],[110,113],[68,73,80,82,91,98,109,110,112,114],[98,110,115],[47,57,59,62,81,90,110],[47,58,110],[57,62]],"referencedMap":[[121,1],[119,2],[118,2],[124,3],[120,1],[122,4],[123,1],[126,5],[127,6],[131,7],[125,8],[132,2],[137,9],[133,2],[136,10],[134,2],[130,11],[141,12],[142,13],[143,2],[144,2],[145,14],[146,2],[147,15],[148,16],[158,17],[159,2],[135,2],[160,2],[138,18],[139,19],[161,2],[162,2],[163,2],[50,2],[164,2],[129,2],[128,2],[165,20],[166,20],[48,2],[52,21],[167,2],[168,2],[169,2],[51,2],[194,22],[195,23],[170,24],[173,24],[192,22],[193,22],[183,22],[182,25],[180,22],[175,22],[188,22],[186,22],[190,22],[174,22],[187,22],[191,22],[176,22],[177,22],[189,22],[171,22],[178,22],[179,22],[181,22],[185,22],[196,26],[184,22],[172,22],[209,27],[208,2],[203,26],[205,28],[204,26],[197,26],[198,26],[200,26],[202,26],[206,28],[207,28],[199,28],[201,28],[210,29],[140,30],[211,8],[212,2],[214,31],[213,2],[216,32],[215,2],[217,33],[218,2],[219,34],[49,2],[150,2],[154,35],[156,36],[155,35],[153,37],[157,38],[149,2],[54,2],[152,39],[151,2],[62,40],[60,2],[61,2],[47,2],[9,2],[10,2],[14,2],[13,2],[3,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[4,2],[5,2],[26,2],[23,2],[24,2],[25,2],[27,2],[28,2],[29,2],[6,2],[30,2],[31,2],[32,2],[33,2],[7,2],[37,2],[34,2],[35,2],[36,2],[38,2],[8,2],[39,2],[44,2],[45,2],[40,2],[41,2],[42,2],[43,2],[2,2],[1,2],[46,2],[12,2],[11,2],[53,20],[55,41],[57,42],[56,2],[64,43],[65,43],[67,44],[68,45],[69,46],[70,47],[71,48],[72,49],[73,50],[74,51],[75,52],[76,53],[77,53],[79,54],[78,55],[80,54],[81,56],[82,57],[66,58],[116,2],[83,59],[84,60],[85,61],[117,62],[86,63],[87,64],[88,65],[89,66],[90,67],[91,68],[92,69],[93,70],[94,71],[95,72],[96,72],[97,73],[98,74],[100,75],[99,76],[101,77],[102,78],[103,2],[104,79],[105,80],[106,81],[107,82],[108,83],[109,84],[110,85],[111,86],[112,87],[113,88],[114,89],[115,90],[58,2],[63,91],[59,92]],"exportedModulesMap":[[121,1],[119,2],[118,2],[124,3],[120,1],[122,4],[123,1],[126,5],[127,6],[131,7],[125,8],[132,2],[137,9],[133,2],[136,10],[134,2],[130,11],[141,12],[142,13],[143,2],[144,2],[145,14],[146,2],[147,15],[148,16],[158,17],[159,2],[135,2],[160,2],[138,18],[139,19],[161,2],[162,2],[163,2],[50,2],[164,2],[129,2],[128,2],[165,20],[166,20],[48,2],[52,21],[167,2],[168,2],[169,2],[51,2],[194,22],[195,23],[170,24],[173,24],[192,22],[193,22],[183,22],[182,25],[180,22],[175,22],[188,22],[186,22],[190,22],[174,22],[187,22],[191,22],[176,22],[177,22],[189,22],[171,22],[178,22],[179,22],[181,22],[185,22],[196,26],[184,22],[172,22],[209,27],[208,2],[203,26],[205,28],[204,26],[197,26],[198,26],[200,26],[202,26],[206,28],[207,28],[199,28],[201,28],[210,29],[140,30],[211,8],[212,2],[214,31],[213,2],[216,32],[215,2],[217,33],[218,2],[219,34],[49,2],[150,2],[154,35],[156,36],[155,35],[153,37],[157,38],[149,2],[54,2],[152,39],[151,2],[62,40],[60,2],[61,2],[47,2],[9,2],[10,2],[14,2],[13,2],[3,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[4,2],[5,2],[26,2],[23,2],[24,2],[25,2],[27,2],[28,2],[29,2],[6,2],[30,2],[31,2],[32,2],[33,2],[7,2],[37,2],[34,2],[35,2],[36,2],[38,2],[8,2],[39,2],[44,2],[45,2],[40,2],[41,2],[42,2],[43,2],[2,2],[1,2],[46,2],[12,2],[11,2],[53,20],[55,41],[57,42],[56,2],[64,43],[65,43],[67,44],[68,45],[69,46],[70,47],[71,48],[72,49],[73,50],[74,51],[75,52],[76,53],[77,53],[79,54],[78,55],[80,54],[81,56],[82,57],[66,58],[116,2],[83,59],[84,60],[85,61],[117,62],[86,63],[87,64],[88,65],[89,66],[90,67],[91,68],[92,69],[93,70],[94,71],[95,72],[96,72],[97,73],[98,74],[100,75],[99,76],[101,77],[102,78],[103,2],[104,79],[105,80],[106,81],[107,82],[108,83],[109,84],[110,85],[111,86],[112,87],[113,88],[114,89],[115,90],[58,2],[63,93],[59,92]],"semanticDiagnosticsPerFile":[121,119,118,124,120,122,123,126,127,131,125,132,137,133,136,134,130,141,142,143,144,145,146,147,148,158,159,135,160,138,139,161,162,163,50,164,129,128,165,166,48,52,167,168,169,51,194,195,170,173,192,193,183,182,180,175,188,186,190,174,187,191,176,177,189,171,178,179,181,185,196,184,172,209,208,203,205,204,197,198,200,202,206,207,199,201,210,140,211,212,214,213,216,215,217,218,219,49,150,154,156,155,153,157,149,54,152,151,62,60,61,47,9,10,14,13,3,15,16,17,18,19,20,21,22,4,5,26,23,24,25,27,28,29,6,30,31,32,33,7,37,34,35,36,38,8,39,44,45,40,41,42,43,2,1,46,12,11,53,55,57,56,64,65,67,68,69,70,71,72,73,74,75,76,77,79,78,80,81,82,66,116,83,84,85,117,86,87,88,89,90,91,92,93,94,95,96,97,98,100,99,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,58,63,59]},"version":"4.9.4"} \ No newline at end of file diff --git a/packages/sitemap/src/collector.ts b/packages/sitemap/src/collector.ts index 5fa156ae..e93cd45c 100644 --- a/packages/sitemap/src/collector.ts +++ b/packages/sitemap/src/collector.ts @@ -29,9 +29,10 @@ const getDocuments = (config: ReadonlyArray>, baseurl if (paths) { const pathSummaries = Object.entries(paths) .map(([path, pathObject]) => { - return Object.entries(pathObject) + return Object.entries(pathObject!) .map(([method, methodInfo]) => { - return methodInfo.summary + // TODO: Fis the type definition + return (methodInfo as any).summary }) }) return pathSummaries.flatMap(summaryArray => summaryArray.filter(summary => summary !== undefined)) diff --git a/packages/transform/src/main.ts b/packages/transform/src/main.ts index 2db0effa..36643054 100644 --- a/packages/transform/src/main.ts +++ b/packages/transform/src/main.ts @@ -268,6 +268,8 @@ const writeTsTemplates = (foundApis: Array, tags: Array, options: writeFileSync( path.resolve(options.outputDir, 'apis.ts'), + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore prettyResult ); } diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 00000000..a86e5805 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,9 @@ +module.exports = { + "printWidth": 150, + "arrowParens": "always", + "semi": true, + "tabWidth": 2, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSpacing": true +}; diff --git a/proxy.mjs b/proxy.mjs new file mode 100644 index 00000000..390a7c7a --- /dev/null +++ b/proxy.mjs @@ -0,0 +1,18 @@ +import express from 'express'; +import { createProxyMiddleware } from 'http-proxy-middleware'; + +const proxyMiddleware = createProxyMiddleware({ + target: 'https://developers.redhat.com/modules', + changeOrigin: true, + logger: console, + secure: false, + changeOrigin: true, +}) + +const app = express(); + +app.use('/modules', proxyMiddleware) + +app.listen(3001, () => { + console.log('Proxy server is running on http://localhost:3001'); +}); diff --git a/src/App.scss b/src/App.scss deleted file mode 100644 index ecf60b43..00000000 --- a/src/App.scss +++ /dev/null @@ -1,185 +0,0 @@ -:root { - --rh-custom-column-top-margin: 41px; - --pfe-theme--color--ui-accent: #e00; -} - -.apid-c-page-landingpage, .apid-c-page-apipage { - --pf-c-page__main--ZIndex: 1; - max-width: 1500px; //remove before developers.redhat.com classes - margin: auto; - } - -.apid-c-page-landingpage { - .apid-split-l-pagination { - width: 100%; - flex-direction: row; - @media screen and (max-width: 998px) { - flex-direction: column; - } - } - .pf-c-sidebar__main { - height: 100%; - } - .pf-c-sidebar__content { - height: 100%; - box-shadow: inset 0.125rem 0 0.125rem -0.0625rem rgba(3, 3, 3, 0.16); - } - .pf-c-text-input-group { - width: 250px; - &__icon { - display: none; - } - &__text-input { - padding-left: var(--pf-global--spacer--sm); - } - } - .pf-c-check { - --pf-c-check__label--FontSize: var(--pf-c-content--small--FontSize); - --pf-c-check__label--LineHeight: var(--pf-c-content--small--LineHeight); - } - .pf-c-page__main-section { - box-shadow: inset 0.125rem 0 0.125rem -0.0625rem rgba(3, 3, 3, 0.16); - } - .apid-c-page__main-section-gallery { - min-height: 500px; - } - - .pf-c-card__body { - display: flex; - flex-direction: column; - .apid-tags__main { - margin-top: auto; - padding-top: var(--pf-global--spacer--sm); - } - svg { - width: 38px; - height: 38px; - } - } -} - -.apid-c-page-apipage { - .pf-c-page__main-section { - border-bottom: 1px solid var(--pf-global--palette--black-300); - } - .pf-c-sidebar__main { - height: 100%; - } - .pf-c-sidebar__content { - height: 100%; - min-height: 500px; - .pf-c-page__main-section { - box-shadow: inset 0.2rem 0 0.2rem -0.0625rem rgba(3, 3, 3, 0.1); - } - } - .pf-c-back-to-top { - position: fixed; - } -} - -.apid-c-card-codeblock { - .pf-c-dropdown { - --pf-c-dropdown__toggle--BackgroundColor: var(--pf-global--BackgroundColor--dark-100); - --pf-c-dropdown__toggle--Color: var(--pf-global--Color--light-200); - --pf-c-dropdown__toggle--Color: var(--pf-global--Color--light-200); - --pf-c-dropdown__toggle--m-plain--Color: var(--pf-global--Color--light-200); - --pf-c-dropdown__toggle--m-plain--hover--Color: var(--pf-global--Color--light-200); - --pf-c-dropdown__toggle-icon--Color: var(--pf-global--Color--light-200); - --pf-c-dropdown--m-plain--hover__toggle-icon--Color: var(--pf-global--Color--light-200); - --pf-c-dropdown__menu--BackgroundColor: var(--pf-global--BackgroundColor--dark-100); - --pf-c-dropdown__menu-item--Color: var(--pf-global--Color--light-200); - --pf-c-dropdown__menu-item--hover--Color: var(--pf-global--Color--light-200); - --pf-c-dropdown__menu-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--dark-200); - } - .pf-c-button { - color: var(--pf-global--Color--light-200); - } - .pf-c-code-editor { - --pf-c-code-editor__header--before--BorderBottomWidth: 0; - --pf-c-code-editor__main--BorderColor: var(--pf-global--BackgroundColor--dark-100); - --pf-c-code-editor__main--BackgroundColor: var(--pf-global--BackgroundColor--dark-100); - --pf-c-code-editor__code--PaddingLeft: 0; - --pf-c-code-editor__code--PaddingTop: var(--pf-global--spacer--md); - } - .monaco-editor, .monaco-editor-background { - padding-bottom: 0; - padding-top: 0; - background-color: var(--pf-global--BackgroundColor--dark-100); - } -} - -.apid-c-accordion-operations.pf-c-accordion { - --pf-c-accordion__expanded-content-body--PaddingLeft: var(--pf-global--spacer--2xl); - border-left: 1px solid var(--pf-global--BorderColor--100); - border-right: 1px solid var(--pf-global--BorderColor--100); - .pf-c-accordion__toggle.pf-m-expanded { - background: var(--pf-global--BackgroundColor--light-200); - } - .pf-c-accordion__toggle { - flex-direction: row-reverse; - justify-content: flex-end; - &-icon { - align-self: flex-start; - margin-right: var(--pf-global--spacer--sm); - } - &-text { - overflow: hidden; - text-overflow: ellipsis; - text-align: left; - white-space: nowrap; - // temp fix - until conflict with sidebar is resolved - @media screen and (min-width: 769px) and (max-width: 1200px) { - width:450px; - } - @media screen and (min-width: 1201px) and (max-width: 1400px) { - width:800px; - } - @media screen and (min-width: 1401px) { - width:1000px; - } - } - } -} - -.apid-c-accordion-schemas.pf-c-accordion { - --pf-c-accordion__expanded-content-body--PaddingLeft: var(--pf-global--spacer--sm); - --pf-c-accordion__expanded-content-body--PaddingTop: 0; - border-left: 1px solid var(--pf-global--BorderColor--100); - border-right: 1px solid var(--pf-global--BorderColor--100); - .pf-c-accordion__toggle.pf-m-expanded { - background: var(--pf-global--BackgroundColor--light-200); - } - .pf-c-accordion__toggle { - flex-direction: row-reverse; - justify-content: flex-end, - } - .pf-c-accordion__toggle-text { - text-align: left; - margin-left: var(--pf-global--spacer--md); - } -} - -.apid-c-jump-links { - .pf-c-jump-links__link { - --pf-c-jump-links__link--PaddingTop: var(--pf-global--spacer--sm); - --pf-c-jump-links__link--PaddingBottom: 0; - } - - .pf-c-jump-links__list { - --pf-c-jump-links__list--PaddingTop: var(--pf-global--spacer--sm); - --pf-c-jump-links__list--PaddingBottom: var(--pf-global--spacer--sm); - } -} - -.apid-reqbody-header { - padding-top: var(--pf-global--spacer--md); -} - -.apid-m-text-break-all { - word-break: break-all; -} - -.apid-landing-layout-toggle-group { - margin-top: auto; - margin-bottom: auto; -} diff --git a/src/App.tsx b/src/App.tsx deleted file mode 100644 index 5c7a7dbb..00000000 --- a/src/App.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import '@patternfly/patternfly/patternfly.css'; -import '@patternfly/patternfly/patternfly-addons.css'; -import {router} from "./router/AppRouter"; -import {RouterProvider} from 'react-router-dom'; -import {HelmetProvider} from "react-helmet-async"; - -import './App.scss'; - -const App = () => { - return ( - - - - ); -} - -export default App; diff --git a/src/app/App.scss b/src/app/App.scss new file mode 100644 index 00000000..8dfa91fa --- /dev/null +++ b/src/app/App.scss @@ -0,0 +1,197 @@ +@import "~@patternfly/patternfly/patternfly-addons.css"; +@import "~@patternfly/react-core/dist/styles/base.css"; + +:root { + --rh-custom-column-top-margin: 41px; + --pfe-theme--color--ui-accent: #e00; +} + +.apid-c-page-landingpage, .apid-c-page-apipage { + --pf-v5-c-page__main--ZIndex: 1; + max-width: 1500px; //remove before developers.redhat.com classes + margin: auto; + } + +.apid-c-page-landingpage { + .apid-split-l-pagination { + width: 100%; + flex-direction: row; + @media screen and (max-width: 998px) { + flex-direction: column; + } + } + .pf-v5-c-sidebar__main { + height: 100%; + } + .pf-v5-c-sidebar__content { + height: 100%; + box-shadow: inset 0.125rem 0 0.125rem -0.0625rem rgba(3, 3, 3, 0.16); + } + .pf-v5-c-text-input-group { + width: 250px; + &__icon { + display: none; + } + &__text-input { + padding-left: var(--pf-v5-global--spacer--sm); + } + } + .pf-v5-c-check { + --pf-v5-c-check__label--FontSize: var(--pf-v5-c-content--small--FontSize); + --pf-v5-c-check__label--LineHeight: var(--pf-v5-c-content--small--LineHeight); + } + .pf-v5-c-page__main-section { + box-shadow: inset 0.125rem 0 0.125rem -0.0625rem rgba(3, 3, 3, 0.16); + } + .apid-c-page__main-section-gallery { + min-height: 500px; + } + + .pf-v5-c-card__body { + display: flex; + flex-direction: column; + .apid-tags__main { + margin-top: auto; + padding-top: var(--pf-v5-global--spacer--sm); + } + svg { + width: 38px; + height: 38px; + } + } +} + +.apid-c-page-apipage { + .pf-v5-c-page__main-section { + border-bottom: 1px solid var(--pf-v5-global--palette--black-300); + } + .pf-v5-c-sidebar__main { + height: 100%; + } + .pf-v5-c-sidebar__content { + height: 100%; + min-height: 500px; + .pf-v5-c-page__main-section { + box-shadow: inset 0.2rem 0 0.2rem -0.0625rem rgba(3, 3, 3, 0.1); + } + } + .pf-v5-c-back-to-top { + position: fixed; + } +} + +.apid-c-card-codeblock { + .pf-v5-c-code-editor__main { + background-color: var(--pf-v5-global--BackgroundColor--dark-100); + } + .pf-v5-c-dropdown { + margin-left: auto; + --pf-v5-c-dropdown__toggle--BackgroundColor: var(--pf-v5-global--BackgroundColor--dark-100); + --pf-v5-c-dropdown__toggle--Color: var(--pf-v5-global--Color--light-200); + --pf-v5-c-dropdown__toggle--Color: var(--pf-v5-global--Color--light-200); + --pf-v5-c-dropdown__toggle--m-plain--Color: var(--pf-v5-global--Color--light-200); + --pf-v5-c-dropdown__toggle--m-plain--hover--Color: var(--pf-v5-global--Color--light-200); + --pf-v5-c-dropdown__toggle-icon--Color: var(--pf-v5-global--Color--light-200); + --pf-v5-c-dropdown--m-plain--hover__toggle-icon--Color: var(--pf-v5-global--Color--light-200); + --pf-v5-c-dropdown__menu--BackgroundColor: var(--pf-v5-global--BackgroundColor--dark-100); + --pf-v5-c-dropdown__menu-item--Color: var(--pf-v5-global--Color--light-200); + --pf-v5-c-dropdown__menu-item--hover--Color: var(--pf-v5-global--Color--light-200); + --pf-v5-c-dropdown__menu-item--hover--BackgroundColor: var(--pf-v5-global--BackgroundColor--dark-200); + } + .pf-v5-c-button { + color: var(--pf-v5-global--Color--light-200); + } + .pf-v5-c-code-editor { + --pf-v5-c-code-editor__header--before--BorderBottomWidth: 0; + --pf-v5-c-code-editor__main--BorderColor: var(--pf-v5-global--BackgroundColor--dark-100); + --pf-v5-c-code-editor__main--BackgroundColor: var(--pf-v5-global--BackgroundColor--dark-100); + --pf-v5-c-code-editor__code--PaddingLeft: 0; + --pf-v5-c-code-editor__code--PaddingTop: var(--pf-v5-global--spacer--md); + } + .monaco-editor, .monaco-editor-background { + padding-bottom: 0; + padding-top: 0; + background-color: var(--pf-v5-global--BackgroundColor--dark-100); + } + .pf-v5-c-card__header-main { + display: flex; + width: 100%; + + } +} + +.apid-c-accordion-operations.pf-v5-c-accordion { + --pf-v5-c-accordion__expanded-content-body--PaddingLeft: var(--pf-v5-global--spacer--2xl); + border-left: 1px solid var(--pf-v5-global--BorderColor--100); + border-right: 1px solid var(--pf-v5-global--BorderColor--100); + .pf-v5-c-accordion__toggle.pf-v5-m-expanded { + background: var(--pf-v5-global--BackgroundColor--light-200); + } + .pf-v5-c-accordion__toggle { + flex-direction: row-reverse; + justify-content: flex-end; + &-icon { + align-self: flex-start; + margin-right: var(--pf-v5-global--spacer--sm); + } + &-text { + overflow: hidden; + text-overflow: ellipsis; + text-align: left; + white-space: nowrap; + // temp fix - until conflict with sidebar is resolved + @media screen and (min-width: 769px) and (max-width: 1200px) { + width:450px; + } + @media screen and (min-width: 1201px) and (max-width: 1400px) { + width:800px; + } + @media screen and (min-width: 1401px) { + width:1000px; + } + } + } +} + +.apid-c-accordion-schemas.pf-v5-c-accordion { + --pf-v5-c-accordion__expanded-content-body--PaddingLeft: var(--pf-v5-global--spacer--sm); + --pf-v5-c-accordion__expanded-content-body--PaddingTop: 0; + border-left: 1px solid var(--pf-v5-global--BorderColor--100); + border-right: 1px solid var(--pf-v5-global--BorderColor--100); + .pf-v5-c-accordion__toggle.pf-v5-m-expanded { + background: var(--pf-v5-global--BackgroundColor--light-200); + } + .pf-v5-c-accordion__toggle { + flex-direction: row-reverse; + justify-content: flex-end, + } + .pf-v5-c-accordion__toggle-text { + text-align: left; + margin-left: var(--pf-v5-global--spacer--md); + } +} + +.apid-c-jump-links { + .pf-v5-c-jump-links__link { + --pf-v5-c-jump-links__link--PaddingTop: var(--pf-v5-global--spacer--sm); + --pf-v5-c-jump-links__link--PaddingBottom: 0; + } + + .pf-v5-c-jump-links__list { + --pf-v5-c-jump-links__list--PaddingTop: var(--pf-v5-global--spacer--sm); + --pf-v5-c-jump-links__list--PaddingBottom: var(--pf-v5-global--spacer--sm); + } +} + +.apid-reqbody-header { + padding-top: var(--pf-v5-global--spacer--md); +} + +.apid-m-text-break-all { + word-break: break-all; +} + +.apid-landing-layout-toggle-group { + margin-top: auto; + margin-bottom: auto; +} diff --git a/src/app/api/[slug]/page.tsx b/src/app/api/[slug]/page.tsx new file mode 100644 index 00000000..924b718e --- /dev/null +++ b/src/app/api/[slug]/page.tsx @@ -0,0 +1,11 @@ +import { apiConfigurations } from '@apidocs/common'; +import { APIPage } from '@/components/APIPage'; + +export async function generateStaticParams() { + return apiConfigurations.map((apiConfig) => ({ slug: apiConfig.id })); +} + +export default async function Page({ params }: { params: Promise<{ slug: string }> }) { + const { slug } = await params; + return ; +} diff --git a/src/app/favicon2023-16x16.png b/src/app/favicon2023-16x16.png new file mode 100644 index 00000000..5a890a36 Binary files /dev/null and b/src/app/favicon2023-16x16.png differ diff --git a/src/app/favicon2023-32x32.png b/src/app/favicon2023-32x32.png new file mode 100644 index 00000000..73450a2f Binary files /dev/null and b/src/app/favicon2023-32x32.png differ diff --git a/src/app/fonts/GeistMonoVF.woff b/src/app/fonts/GeistMonoVF.woff new file mode 100644 index 00000000..f2ae185c Binary files /dev/null and b/src/app/fonts/GeistMonoVF.woff differ diff --git a/src/app/fonts/GeistVF.woff b/src/app/fonts/GeistVF.woff new file mode 100644 index 00000000..1b62daac Binary files /dev/null and b/src/app/fonts/GeistVF.woff differ diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 00000000..a658381b --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,120 @@ +import './App.scss'; + +const headerPatch = ` +(() => { + addEventListener("DOMContentLoaded", () => { + const pfeNavigation = document.getElementById("pfe-navigation"); + if (!pfeNavigation) { + return; + } + + const foundForms = [... pfeNavigation.getElementsByTagName("form")] + .filter(f => f.action.endsWith("/search")); + + if (foundForms.length > 0) { + const form = foundForms[0]; + const input = document.createElement('input'); + input.type = 'hidden'; + input.name = 'documentKind'; + input.value = 'api_catalog'; + form.appendChild(input); + } + }); +})();`; + +const analyticsInclude = ` + +`; +const pendoInclude = ` + if ("${process.env.REACT_APP_PENDO_ENABLED}" === "true") { + (function(apiKey){ + (function(p,e,n,d,o){var v,w,x,y,z;o=p[d]=p[d]||{};o._q=o._q||[]; + + v=['initialize','identify','updateOptions','pageLoad','track'];for(w=0,x=v.length;w) { + return ( + + + + + + + + + + + +
+
' }} + >
+ {children} +
' }} + >
+ + + + + + + + + + + + +
+ + + ); +} diff --git a/src/app/page.tsx b/src/app/page.tsx new file mode 100644 index 00000000..964b09c4 --- /dev/null +++ b/src/app/page.tsx @@ -0,0 +1,219 @@ +'use client'; + +import { + Icon, + Button, + Flex, + Form, + Page, + PageSection, + PageSectionVariants, + Pagination, + Popover, + Sidebar, + SidebarContent, + SidebarPanel, + Split, + SplitItem, + Text, + TextContent, + TextVariants, + ToggleGroup, + Tooltip, + SearchInput, + PaginationProps, + ToggleGroupItem, +} from '@patternfly/react-core'; +import { useLandingConfigStore } from '@/store/useLandingConfigStore'; +import { defaultAvailablePerPage, usePaginationStore } from '@/store/usePaginationStore'; +import { SidebarTags } from '@/components/SideBar/SidebarTags'; +import ThIcon from '@patternfly/react-icons/dist/js/icons/th-icon'; +import ThListIcon from '@patternfly/react-icons/dist/js/icons/th-list-icon'; + +import { apiConfigurations, apiLabels } from '@apidocs/common/config/apis'; +import { useMemo } from 'react'; +import { Config } from '@/config'; +import { GridContent } from '@/components/GridContent'; +import { ListContent } from '@/components/ListContent'; +import { usePaginatedGallery } from '@/components/Card/usePaginatedGallery'; +import ExternalLinkAltIcon from '@patternfly/react-icons/dist/esm/icons/external-link-alt-icon'; + +const galleryId = 'apid-c-api-gallery'; + +export default function Home() { + const landingStore = useLandingConfigStore(); + const pagination = usePaginationStore(); + + const filteredDocs = useMemo( + () => + apiConfigurations + .filter((apiConfig) => apiConfig.displayName.toLowerCase().includes(landingStore.searchInput.toLowerCase())) + .filter((apiConfig) => landingStore.selectedTags.length === 0 || apiConfig.tags.some((tag) => landingStore.selectedTags.includes(tag.id))), + [landingStore.searchInput, landingStore.selectedTags], + ); + + usePaginatedGallery(galleryId, landingStore.view === 'grid', { + setPage: pagination.setPage, + page: pagination.page, + perPage: pagination.perPage, + setPerPage: pagination.setPerPage, + setAvailablePerPage: pagination.setAvailablePerPage, + defaultAvailablePerPage: defaultAvailablePerPage, + elements: filteredDocs, + setItems: pagination.setItems, + }); + const onChange = (searchInput: string) => { + landingStore.setSearchInput(searchInput); + pagination.setPage(1); + }; + + const changeView = (toView: 'grid' | 'list') => { + landingStore.setView(toView); + pagination.setPage(1); + if (toView === 'list') { + pagination.setAvailablePerPage(defaultAvailablePerPage); + pagination.setPerPage(10); + } + }; + + const clearFilters = () => { + landingStore.setSearchInput(''); + landingStore.setSelectedTags([]); + pagination.setPage(1); + }; + + const onTagsChange = (tagId: string, isChecked: boolean) => { + landingStore.updateSingleTag(tagId, isChecked); + pagination.setPage(1); + }; + + // For some reason the type doesn't like 'ref'. + const basePaginationProps: Omit = { + itemCount: filteredDocs.length, + perPage: pagination.perPage, + page: pagination.page, + onSetPage: (_event, page) => pagination.setPage(page), + onPerPageSelect: (_event, perPage, newPage) => { + pagination.setPerPage(perPage); + pagination.setPage(newPage); + }, + perPageOptions: pagination.availablePerPage.map((a) => ({ + title: a.toString(), + value: a, + })), + dropDirection: 'up', + variant: 'bottom', + className: 'pf-v5-u-py-sm', + }; + + return ( + + + +
+ onChange(searchInput)} + onClear={() => onChange('')} + /> + + +
+ + + + {Config.title} + + + + + + + + + + + Important: Starting Dec 2024, Red Hat will discontinue support for basic authorization to connect to services APIs. The + Red Hat Hybrid Cloud Console is integrating service accounts with User Access functionality to provide granular control over + access permissions and enhance security. Token-based authentication is recommended. More information about transitioning from + basic authentication to token-based authentication via service accounts is described on the{' '} + Red Hat Customer Portal. + + } + > + + + + + + + + + + } + aria-label="Cards display" + isSelected={landingStore.view === 'grid'} + onChange={() => changeView('grid')} + /> + + + } + aria-label="Table display" + isSelected={landingStore.view === 'list'} + onChange={() => changeView('list')} + /> + + + + + + + + + {landingStore.view === 'grid' ? ( + + ) : ( + + )} + + + + + + +
+
+ ); +} diff --git a/src/components/APIDoc/ApiDoc.tsx b/src/components/APIDoc/ApiDoc.tsx index 0c3a02e2..8cab92a9 100644 --- a/src/components/APIDoc/ApiDoc.tsx +++ b/src/components/APIDoc/ApiDoc.tsx @@ -1,68 +1,61 @@ -import {FunctionComponent} from 'react'; -import {deRef} from "../../utils/Openapi"; -import {PageSection, PageSectionVariants, TextContent, Text, TextVariants} from "@patternfly/react-core"; -import {ServerList} from "./ServerList"; -import {SecuritySchemeList} from "./SecuritySchemeList"; +import { FunctionComponent } from 'react'; +import { deRef } from '../../utils/Openapi'; +import { PageSection, PageSectionVariants, TextContent, Text, TextVariants } from '@patternfly/react-core'; +import { ServerList } from './ServerList'; +import { SecuritySchemeList } from './SecuritySchemeList'; import { SchemaViewer } from './SchemaViewer'; -import {GroupedOperations} from "./hooks/useGroupedOperations"; -import {renderGroupOperations} from "./Operations/renderGroupedOperations"; -import {getAuthenticationId, getOperationId, getSchemasId} from "../../utils/OpenapiHtmlIds"; -import {getTitleWithVersion} from "../../utils/OpenapiSelectors"; -import {APIContent, ExtraAPIContent} from "@apidocs/common"; -import {DocumentContent} from "../DocumentContent/DocumentContent"; -import ReactMarkdown from "react-markdown"; +import { GroupedOperations } from './hooks/useGroupedOperations'; +import { renderGroupOperations } from './Operations/renderGroupedOperations'; +import { getAuthenticationId, getOperationId, getSchemasId } from '../../utils/OpenapiHtmlIds'; +import { getTitleWithVersion } from '../../utils/OpenapiSelectors'; +import { APIContent, ExtraAPIContent } from '@apidocs/common'; +import { DocumentContent } from '@/components/DocumentContent/DocumentContent'; +import ReactMarkdown from 'react-markdown'; interface ApiDocProps { - apiContent: APIContent; - groupedOperations: GroupedOperations; + apiContent: APIContent; + groupedOperations: GroupedOperations; } -export const ApiDoc: FunctionComponent = props => { - const { apiContent, groupedOperations } = props; +export const ApiDoc: FunctionComponent = (props) => { + const { apiContent, groupedOperations } = props; - const openapi = apiContent.openapi; + const openapi = apiContent.openapi; - return ( - <> - + return ( + <> + - - {getTitleWithVersion(openapi)} - - { - openapi.info.description && - - { openapi.info.description } - - } + {getTitleWithVersion(openapi)} + {openapi.info.description && ( +
+ {openapi.info.description} +
+ )}
- { openapi.servers && ( - - )} + {openapi.servers && }
- - { openapi.components?.securitySchemes && ( - -
- deRef(s, openapi))} /> + + {openapi.components?.securitySchemes && ( + +
+ deRef(s, openapi))} />
)} - - - - Operations - + + + Operations - { renderGroupOperations({ + {renderGroupOperations({ openapi, - groupedOperations: groupedOperations - }) } + groupedOperations: groupedOperations, + })} - - + + ); -} +}; diff --git a/src/components/APIDoc/CodeBlockDropdown.tsx b/src/components/APIDoc/CodeBlockDropdown.tsx index e5f4cf54..58c8cfa0 100644 --- a/src/components/APIDoc/CodeBlockDropdown.tsx +++ b/src/components/APIDoc/CodeBlockDropdown.tsx @@ -1,38 +1,37 @@ import React from 'react'; -import { Dropdown, DropdownToggle, DropdownItem } from '@patternfly/react-core'; +import { Dropdown, DropdownToggle, DropdownItem } from '@patternfly/react-core/deprecated'; import { SnippetInfoItem, SnippetItemsArray } from '../../hooks/useSnippets'; import { useSetLanguage, useLanguage } from '../../utils/LanguageContext'; - export const CodeBlockDropdown: React.FunctionComponent = () => { const language = useLanguage(); const setLanguage = useSetLanguage(); const [isOpen, setIsOpen] = React.useState(false); - const onToggle = (isOpen: boolean) => { + const onToggle = (_e: unknown, isOpen: boolean) => { setIsOpen(isOpen); }; - const onSelect = (event: any) => { + const onSelect = () => { setIsOpen(false); }; - const onDropdownSelect = (event: any, item: SnippetInfoItem) => { + const onDropdownSelect = (_event: unknown, item: SnippetInfoItem) => { setLanguage(item); - } + }; return ( - {language.text} - - } + toggle={ onToggle(_e, isOpen)}>{language.text}} isOpen={isOpen} - dropdownItems={SnippetItemsArray.map((item)=> onDropdownSelect(e, item)}>{item.text})} + dropdownItems={SnippetItemsArray.map((item) => ( + onDropdownSelect(e, item)}> + {item.text} + + ))} isPlain /> ); diff --git a/src/components/APIDoc/CodeSamples.tsx b/src/components/APIDoc/CodeSamples.tsx index ca2e2cfd..4f7326dd 100644 --- a/src/components/APIDoc/CodeSamples.tsx +++ b/src/components/APIDoc/CodeSamples.tsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { Card, CardBody, CardHeader, ClipboardCopyButton, FlexItem } from '@patternfly/react-core'; +import { Card, CardBody, CardHeader, ClipboardCopyButton } from '@patternfly/react-core'; import { CodeEditor } from '@patternfly/react-code-editor'; import { CodeBlockDropdown } from './CodeBlockDropdown'; @@ -10,44 +10,41 @@ interface CodeSampleProps { } export const CodeSamples: React.FunctionComponent = ({ codesnippet }) => { - const [copied, setCopied] = useState(false); + const [copied, setCopied] = useState(false); - const language = useLanguage(); + const language = useLanguage(); - if (!codesnippet) { - return null; // Return null if there are no code samples; Without this logic the code samples initially shows up as selected - } + if (!codesnippet) { + return null; // Return null if there are no code samples; Without this logic the code samples initially shows up as selected + } - const clipboardCopyFunc = (event: any, text: string) => { - navigator.clipboard.writeText(text); - }; + const clipboardCopyFunc = (_event: unknown, text: string) => { + navigator.clipboard.writeText(text); + }; - const onCopyClick = (event: any, text: string) => { - clipboardCopyFunc(event, text); - setCopied(true); - }; + const onCopyClick = (event: React.MouseEvent, text: string) => { + clipboardCopyFunc(event, text); + setCopied(true); + }; - return <> + return ( + <> - - - - - - onCopyClick(e, codesnippet)} - exitDelay={copied ? 1500 : 600} - variant="plain" - onTooltipHidden={() => setCopied(false)} - > + + + onCopyClick(e, codesnippet)} + exitDelay={copied ? 1500 : 600} + variant="plain" + onTooltipHidden={() => setCopied(false)} + > {copied ? 'Copied!' : 'Copy code to clipboard'} - - + - + = ({ codesnip language={language.highlighter} height="400px" /> - - - ; + + + + ); }; diff --git a/src/components/APIDoc/ExampleResponse.tsx b/src/components/APIDoc/ExampleResponse.tsx index 1b7575c3..b487bb7f 100644 --- a/src/components/APIDoc/ExampleResponse.tsx +++ b/src/components/APIDoc/ExampleResponse.tsx @@ -1,39 +1,41 @@ import React from 'react'; -import {CodeBlock, CodeBlockCode, ExpandableSection, ExpandableSectionToggle} from "@patternfly/react-core"; -import {stringHash} from "../../utils/Hash"; +import { CodeBlock, CodeBlockCode, ExpandableSection, ExpandableSectionToggle } from '@patternfly/react-core'; +import { stringHash } from '../../utils/Hash'; export interface ExampleResponseProps { - response: string; + response: string; } -export const ExampleResponse: React.FunctionComponent = ({response}) => { - const codeByLines = response.split('\n'); - const showMore = codeByLines.length > 8; - const id = `example-response-${stringHash(response)}`; +export const ExampleResponse: React.FunctionComponent = ({ response }) => { + const codeByLines = response.split('\n'); + const showMore = codeByLines.length > 8; + const id = `example-response-${stringHash(response)}`; + const toggleId = `${id}-toggle`; - const [isExpanded, setExpanded] = React.useState(false); - const onToggle = (expand: boolean) => setExpanded(expand); + const [isExpanded, setExpanded] = React.useState(false); + const onToggle = (expand: boolean) => setExpanded(expand); - return <> - - - {showMore ? <> - {codeByLines.slice(0, 5).join('\n')} - - {codeByLines.slice(5).join('\n')} - - : <> - {codeByLines.join('\n')} - } - - {showMore && - {isExpanded ? 'Show Less' : 'Show More'} - } - - ; + return ( + <> + + + {showMore ? ( + <> + {codeByLines.slice(0, 5).join('\n')} + + {codeByLines.slice(5).join('\n')} + + + ) : ( + <>{codeByLines.join('\n')} + )} + + {showMore && ( + + {isExpanded ? 'Show Less' : 'Show More'} + + )} + + + ); }; diff --git a/src/components/APIDoc/Operation.tsx b/src/components/APIDoc/Operation.tsx index 49fab1d9..adc1dd12 100644 --- a/src/components/APIDoc/Operation.tsx +++ b/src/components/APIDoc/Operation.tsx @@ -1,34 +1,20 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import React, { useState, useMemo } from "react"; -import { OpenAPIV3 } from "openapi-types"; -import { deRef } from "../../utils/Openapi"; -import { - buildCodeSampleData, - BuildCodeSampleDataParams, -} from "../../utils/Snippets"; -import { - Grid, - GridItem, - Text, - TextContent, - TextVariants, - AccordionItem, - AccordionToggle, - AccordionContent, - Label, -} from "@patternfly/react-core"; -import ReactMarkdown from "react-markdown"; +import React, { useState, useMemo } from 'react'; +import { OpenAPIV3 } from 'openapi-types'; +import { deRef } from '../../utils/Openapi'; +import { buildCodeSampleData, BuildCodeSampleDataParams } from '../../utils/Snippets'; +import { Grid, GridItem, TextContent, AccordionItem, AccordionToggle, AccordionContent, Label } from '@patternfly/react-core'; +import ReactMarkdown from 'react-markdown'; -import { ParameterView } from "./ParameterView"; -import { CodeSamples } from "./CodeSamples"; -import { RequestBodyView } from "./RequestBodyView"; -import { ResponseView } from "./ResponseView"; +import { ParameterView } from './ParameterView'; +import { CodeSamples } from './CodeSamples'; +import { RequestBodyView } from './RequestBodyView'; +import { ResponseView } from './ResponseView'; -import { Request as RequestFormat } from "har-format"; +import { Request as RequestFormat } from 'har-format'; -import { useSnippets } from "../../hooks/useSnippets"; -import { useLanguage } from "../../utils/LanguageContext"; -import InfoCircleIcon from "@patternfly/react-icons/dist/esm/icons/info-circle-icon"; +import { useSnippets } from '../../hooks/useSnippets'; +import { useLanguage } from '../../utils/LanguageContext'; +import InfoCircleIcon from '@patternfly/react-icons/dist/esm/icons/info-circle-icon'; export interface OperationProps { verb: string; @@ -45,21 +31,12 @@ export const Operation: React.FunctionComponent = (props) => { return ( - setExpanded((prev) => !prev)} - className="pf-u-py-sm" - > + setExpanded((prev) => !prev)} className="pf-v5-u-py-sm"> {operation.summary && ( - + {operation.summary} {operation.deprecated && ( - )} - + {verb.toUpperCase()} {path} @@ -80,18 +57,10 @@ export const Operation: React.FunctionComponent = (props) => { ); }; -const OperationContent: React.FunctionComponent = ({ - verb, - baseUrl, - path, - operation, - document, -}) => { - const parameters = (operation.parameters || []).map((p) => - deRef(p, document) - ); - const queryParameters = parameters.filter((p) => p.in === "query"); - const pathParameters = parameters.filter((p) => p.in === "path"); +const OperationContent: React.FunctionComponent = ({ verb, baseUrl, path, operation, document }) => { + const parameters = (operation.parameters || []).map((p) => deRef(p, document)); + const queryParameters = parameters.filter((p) => p.in === 'query'); + const pathParameters = parameters.filter((p) => p.in === 'path'); const codeSampleLanguage = useLanguage(); @@ -105,55 +74,32 @@ const OperationContent: React.FunctionComponent = ({ document: document, }; - const reqData: RequestFormat = useMemo( - () => buildCodeSampleData(codeSampleBuildParams), - [verb, path, codeSampleLanguage] - ); + const reqData: RequestFormat = useMemo(() => buildCodeSampleData(codeSampleBuildParams), [verb, path, codeSampleLanguage]); const snippets = useSnippets(codeSampleLanguage, reqData); return ( - - - - { - operation.description && - - {operation.description} - - } - + + + {operation.description && {operation.description}} - + {pathParameters.length > 0 && ( - - + + )} {queryParameters.length > 0 && ( - - + + )} - {operation.requestBody && ( - - )} + {operation.requestBody && } - + diff --git a/src/components/APIDoc/Operations.tsx b/src/components/APIDoc/Operations.tsx index d3556d32..393e8532 100644 --- a/src/components/APIDoc/Operations.tsx +++ b/src/components/APIDoc/Operations.tsx @@ -1,10 +1,10 @@ -import {FunctionComponent, PropsWithChildren} from "react"; -import {Accordion} from "@patternfly/react-core"; +import { FunctionComponent, PropsWithChildren } from 'react'; +import { Accordion } from '@patternfly/react-core'; -export const Operations: FunctionComponent = ({children}) => { - return( - - {children} - - ) -} +export const Operations: FunctionComponent = ({ children }) => { + return ( + + {children} + + ); +}; diff --git a/src/components/APIDoc/Operations/renderGroupedOperations.tsx b/src/components/APIDoc/Operations/renderGroupedOperations.tsx index fdb3ee9a..933a8520 100644 --- a/src/components/APIDoc/Operations/renderGroupedOperations.tsx +++ b/src/components/APIDoc/Operations/renderGroupedOperations.tsx @@ -1,59 +1,56 @@ -import {GroupedOperations} from "../hooks/useGroupedOperations"; -import {Operation} from "../Operation"; -import {StackItem, Text, TextContent, TextVariants} from "@patternfly/react-core"; -import {OpenAPIV3} from "openapi-types"; -import {Operations} from "../Operations"; -import {getOperationGroupId, getUngroupedOperationsId} from "../../../utils/OpenapiHtmlIds"; +import { GroupedOperations } from '../hooks/useGroupedOperations'; +import { Operation } from '../Operation'; +import { StackItem, Text, TextContent, TextVariants } from '@patternfly/react-core'; +import { OpenAPIV3 } from 'openapi-types'; +import { Operations } from '../Operations'; +import { getOperationGroupId, getUngroupedOperationsId } from '../../../utils/OpenapiHtmlIds'; interface GroupedOperationsProps { - groupedOperations: GroupedOperations; - openapi: OpenAPIV3.Document; + groupedOperations: GroupedOperations; + openapi: OpenAPIV3.Document; } const mapToOperation = (operationId: string, operations: GroupedOperations['operations'], openapi: OpenAPIV3.Document) => { - const operation = operations[operationId]; - return ; -} + const operation = operations[operationId]; + return ( + + ); +}; -export const renderGroupOperations = ({groupedOperations, openapi}: GroupedOperationsProps) => { - const result = [ - ...(groupedOperations.groups.map(group => - - - { group.name } - - - { group.description } - - - {group - .operationIds - .map(id => mapToOperation(id, groupedOperations.operations, openapi))} - -
-
)) - ]; +export const renderGroupOperations = ({ groupedOperations, openapi }: GroupedOperationsProps) => { + const result = [ + ...groupedOperations.groups.map((group) => ( + + + {group.name} + {group.description} + + {group.operationIds.map((id) => mapToOperation(id, groupedOperations.operations, openapi))} +
+
+ )), + ]; - if (groupedOperations.others.length > 0) { - const title = result.length > 0 ? 'Other operations' : undefined; - result.push( - { title && - - {title} - - } - {groupedOperations - .others - .map(id => mapToOperation(id, groupedOperations.operations, openapi))} - ); - } + if (groupedOperations.others.length > 0) { + const title = result.length > 0 ? 'Other operations' : undefined; + result.push( + + {title && ( + + {title} + + )} + {groupedOperations.others.map((id) => mapToOperation(id, groupedOperations.operations, openapi))} + , + ); + } - return result; -} + return result; +}; diff --git a/src/components/APIDoc/ParameterView.tsx b/src/components/APIDoc/ParameterView.tsx index 58dc432d..d9f2fd17 100644 --- a/src/components/APIDoc/ParameterView.tsx +++ b/src/components/APIDoc/ParameterView.tsx @@ -1,47 +1,53 @@ -import React from "react" +import React from 'react'; import { OpenAPIV3 } from 'openapi-types'; -import {Flex, FlexItem, Text, TextContent, TextVariants} from '@patternfly/react-core'; -import { TableComposable, Tbody, Td, Thead, Tr } from "@patternfly/react-table"; -import {SchemaType} from "./SchemaType"; +import { Flex, FlexItem, Text, TextContent, TextVariants } from '@patternfly/react-core'; +import { Table, Tbody, Td, Thead, Tr } from '@patternfly/react-table'; +import { SchemaType } from './SchemaType'; interface ParameterViewProps { - title: string; - parameters: OpenAPIV3.ParameterObject[]; - document: OpenAPIV3.Document; -} -export const ParameterView: React.FunctionComponent = ({title, parameters, document}) => { - return ( - <> - - {title} - - - - - Name - Type - Description - - - - {parameters.map(((p, index) => ( - - - - - {p.name} - - - {p.required && "*"} - - - - - {p.description} - - )))} - - - - ) + title: string; + parameters: OpenAPIV3.ParameterObject[]; + document: OpenAPIV3.Document; } +export const ParameterView: React.FunctionComponent = ({ title, parameters, document }) => { + return ( + <> + + + {title} + + + + + + + + + + + + {parameters.map((p, index) => ( + + + + + + ))} + +
NameTypeDescription
+ + + {p.name} + + + + {p.required && '*'} + + + + + + {p.description}
+ + ); +}; diff --git a/src/components/APIDoc/RequestBodyView.tsx b/src/components/APIDoc/RequestBodyView.tsx index efd9f720..c6f2dc27 100644 --- a/src/components/APIDoc/RequestBodyView.tsx +++ b/src/components/APIDoc/RequestBodyView.tsx @@ -1,14 +1,8 @@ -import React from "react"; -import { OpenAPIV3 } from "openapi-types"; -import { DeRefResponse } from "../../utils/Openapi"; -import { - Flex, - FlexItem, - Text, - TextContent, - TextVariants, -} from "@patternfly/react-core"; -import { SchemaType } from "./SchemaType"; +import React from 'react'; +import { OpenAPIV3 } from 'openapi-types'; +import { DeRefResponse } from '../../utils/Openapi'; +import { Flex, FlexItem, Text, TextContent, TextVariants } from '@patternfly/react-core'; +import { SchemaType } from './SchemaType'; interface BodySchemaInfo { schemaType: string; @@ -19,28 +13,21 @@ export interface RequestBodyViewProps { requestBody: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject; document: OpenAPIV3.Document; } -export const RequestBodyView: React.FunctionComponent = ({ - requestBody, - document, -}) => { +export const RequestBodyView: React.FunctionComponent = ({ requestBody, document }) => { let requestBodySchemas = [] as BodySchemaInfo[]; let isEmptyContent = false; if (requestBody) { - if ("content" in requestBody) { - requestBodySchemas = Object.entries(requestBody.content).map( - ([mediatype, mediaObject]) => { - if (mediaObject.schema !== undefined) { - const schema = mediaObject.schema as - | OpenAPIV3.ReferenceObject - | OpenAPIV3.SchemaObject; - return { schemaType: mediatype, schema: schema }; - } - return { - schemaType: mediatype, - schema: {} as DeRefResponse, - }; + if ('content' in requestBody) { + requestBodySchemas = Object.entries(requestBody.content).map(([mediatype, mediaObject]) => { + if (mediaObject.schema !== undefined) { + const schema = mediaObject.schema as OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject; + return { schemaType: mediatype, schema: schema }; } - ); + return { + schemaType: mediatype, + schema: {} as DeRefResponse, + }; + }); } else { isEmptyContent = true; } @@ -48,31 +35,16 @@ export const RequestBodyView: React.FunctionComponent = ({ return ( <> - + Request Body Schema {!isEmptyContent ? ( requestBodySchemas.map((bodySchema) => { - return ( - bodySchema.schema && ( - - ) - ); + return bodySchema.schema && ; }) ) : ( - + )} ); @@ -83,11 +55,7 @@ interface RefSchemaViewProps { schema: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject; document: OpenAPIV3.Document; } -export const RefSchemaView: React.FunctionComponent = ({ - schemaType, - schema, - document, -}) => { +export const RefSchemaView: React.FunctionComponent = ({ schemaType, schema, document }) => { return ( diff --git a/src/components/APIDoc/ResponseView.tsx b/src/components/APIDoc/ResponseView.tsx index d0426b55..36513530 100644 --- a/src/components/APIDoc/ResponseView.tsx +++ b/src/components/APIDoc/ResponseView.tsx @@ -1,26 +1,68 @@ -import React, {useState} from 'react'; -import {OpenAPIV3} from "openapi-types"; +'use client'; +import React, { Fragment, useState } from 'react'; +import { OpenAPIV3 } from 'openapi-types'; -import {buildExample, deRef} from "../../utils/Openapi"; -import { - Text, - TextContent, - TextVariants, -} from "@patternfly/react-core"; -import {ExpandableRowContent, TableComposable, Tbody, Td, Th, Thead, Tr} from "@patternfly/react-table"; -import {ExampleResponse} from "./ExampleResponse"; -import {SchemaType} from "./SchemaType"; +import { buildExample, deRef, DeRefResponse } from '../../utils/Openapi'; +import { Text, TextContent, TextVariants } from '@patternfly/react-core'; +import { Table, ExpandableRowContent, Tbody, Td, Th, Thead, Tr, TdProps } from '@patternfly/react-table'; +import { ExampleResponse } from './ExampleResponse'; +import { SchemaType } from './SchemaType'; interface ResponseViewProps { responses: OpenAPIV3.ResponsesObject; document: OpenAPIV3.Document; } -export const ResponseView: React.FunctionComponent = ({responses, document}) => { - const [expandedCodes, setExpandedCodes] = useState([]) - const setCodeExpanded = (code: string, isExpanding = true) => setExpandedCodes(prevExpanded => { - const otherExpandedRowNames = prevExpanded.filter(r => r !== code); - return isExpanding ? [...otherExpandedRowNames, code] : otherExpandedRowNames; +const getResponseSchema = (response: OpenAPIV3.ResponseObject, document: OpenAPIV3.Document) => { + const contents = response.content ? Object.values(response.content).filter((c) => c.schema !== undefined) : []; + if (contents.length === 0) { + return 'None'; + } + + // Todo we should try to display all available types + return ; +}; + +const ApiResponse = ({ + expandInfo, + code, + dResponse, + isExpanded, + exampleResponse, + responseSchema, +}: { + dResponse: DeRefResponse; + code: string; + expandInfo?: TdProps['expand']; + isExpanded: boolean; + exampleResponse?: string; + responseSchema: ReturnType; +}) => { + return ( + <> + + + {code} + {dResponse.description} + {responseSchema} + + {expandInfo && exampleResponse && ( + + + {} + + + )} + + ); +}; + +export const ResponseView: React.FunctionComponent = ({ responses, document }) => { + const [expandedCodes, setExpandedCodes] = useState([]); + const setCodeExpanded = (code: string, isExpanding = true) => + setExpandedCodes((prevExpanded) => { + const otherExpandedRowNames = prevExpanded.filter((r) => r !== code); + return isExpanding ? [...otherExpandedRowNames, code] : otherExpandedRowNames; }); const isCodeExpanded = (code: string) => expandedCodes.includes(code); @@ -28,72 +70,56 @@ export const ResponseView: React.FunctionComponent = ({respon const responseExamples = React.useMemo(() => { if (responses) { - return buildExample(responses, document); + return buildExample(responses, document); } return undefined; - }, [ responses, document]); + }, [responses, document]); - return ( + return responseMap.length > 0 ? ( <> - { responseMap.length > 0 && <> - - Responses - - + + Responses + + - - - + + + - {responseMap.map(([code, response],rowIndex) => { - const dResponse = deRef(response, document); + {responseMap.map(([code, response], rowIndex) => { + const dResponse = deRef(response, document); + const isExpanded = isCodeExpanded(code); - let expandInfo; - if (responseExamples && responseExamples[code]?.length > 0) { - expandInfo = { - rowIndex, - isExpanded: isCodeExpanded(code), - onToggle: () => setCodeExpanded(code, !isCodeExpanded(code)), - expandId: 'response-code-expanded' + let expandInfo; + const responseSchema = getResponseSchema(dResponse, document); + if (responseExamples && responseExamples[code]?.length > 0) { + expandInfo = { + rowIndex, + isExpanded: isExpanded, + onToggle: () => setCodeExpanded(code, !isExpanded), + expandId: 'response-code-expanded', + }; } - } - return <> - - - - - - { - expandInfo && - - - } - ; - })} + return ( + + ); + })} - - } +
- StatusDescriptionSchema + StatusDescriptionSchema
- {code}{dResponse.description}{getResponseSchema(dResponse, document)}
- - {responseExamples && } - -
- ) -} - -const getResponseSchema = (response: OpenAPIV3.ResponseObject, document: OpenAPIV3.Document) => { - const contents = response.content ? Object.values(response.content).filter(c => c.schema !== undefined) : []; - if (contents.length === 0) { - return 'None'; - } - - // Todo we should try to display all available types - return ; -} + ) : null; +}; diff --git a/src/components/APIDoc/SchemaDataView.tsx b/src/components/APIDoc/SchemaDataView.tsx index dc598fd4..7fa8ce5e 100644 --- a/src/components/APIDoc/SchemaDataView.tsx +++ b/src/components/APIDoc/SchemaDataView.tsx @@ -1,13 +1,26 @@ -import React, {ReactNode, useEffect, useState} from 'react'; -import { TreeView, TreeViewDataItem, Text, TextContent, TextVariants, Flex, FlexItem, AccordionItem, AccordionToggle, AccordionContent, Card, CardBody } from '@patternfly/react-core'; +import React, { ReactNode, useEffect, useState } from 'react'; +import { + TreeView, + TreeViewDataItem, + Text, + TextContent, + TextVariants, + Flex, + FlexItem, + AccordionItem, + AccordionToggle, + AccordionContent, + Card, + CardBody, +} from '@patternfly/react-core'; import { OpenAPIV3 } from 'openapi-types'; import { deRef, DeRefResponse } from '../../utils/Openapi'; import { PropertyView } from './SchemaPropertyView'; -import {getSchemaId} from "../../utils/OpenapiHtmlIds"; -import {useLocation} from "react-use"; -import {SchemaType} from "./SchemaType"; +import { getSchemaId } from '../../utils/OpenapiHtmlIds'; +import { useLocation } from 'react-use'; +import { SchemaType } from './SchemaType'; export interface SchemaDataViewProps { schemaName: string; @@ -17,7 +30,7 @@ export interface SchemaDataViewProps { export const SchemaDataView: React.FunctionComponent = ({ schemaName, schema, document }) => { const schemaData = getTreeViewData(schemaName, schema, document); - const {hash: locationHash} = useLocation(); + const { hash: locationHash } = useLocation(); const id = getSchemaId(schemaName); const idWithHash = `#${id}`; @@ -30,7 +43,7 @@ export const SchemaDataView: React.FunctionComponent = ({ s }, [locationHash, idWithHash]); const switchExpanded = () => { - setExpanded(prev => { + setExpanded((prev) => { // Reset the hash if we collapse it if (prev && locationHash === idWithHash) { const scrollX = window.scrollX; @@ -38,7 +51,7 @@ export const SchemaDataView: React.FunctionComponent = ({ s window.location.hash = ''; window.scrollTo({ left: scrollX, - top: scrollY + top: scrollY, }); } @@ -46,20 +59,19 @@ export const SchemaDataView: React.FunctionComponent = ({ s }); }; - return - - {schemaName} - {schema.type ? schema.type : 'object'} + return ( + + + {schemaName} + {schema.type ? schema.type : 'object'} - { isExpanded && - - } - ; + {isExpanded && ( + + + + )} + + ); }; interface SchemasDataOut { @@ -71,141 +83,152 @@ interface ConditionSchemaProps { schemas: (OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject)[]; document: OpenAPIV3.Document; } -const ConditionSchema:React.FunctionComponent = ({condition, schemas, document}) => { - let singleSchemas: ReactNode[] = [] +const ConditionSchema: React.FunctionComponent = ({ condition, schemas, document }) => { + const singleSchemas: ReactNode[] = []; const schemasData = schemas.map((schema) => { if ('$ref' in schema) { - singleSchemas.push(); - return undefined + singleSchemas.push(); + return undefined; } if ('type' in schema) { if (!['object', 'array'].includes(String(schema.type))) { - singleSchemas.push(schema.type as string) - return undefined + singleSchemas.push(schema.type as string); + return undefined; } } - const treeData = getTreeViewData('', schema.type === 'array' ? schema.items as DeRefResponse : deRef(schema, document), document) + const treeData = getTreeViewData( + '', + schema.type === 'array' ? (schema.items as DeRefResponse) : deRef(schema, document), + document, + ); - return {type: schema.type as string, treeData: treeData} as SchemasDataOut - }) + return { type: schema.type as string, treeData: treeData } as SchemasDataOut; + }); return ( <> - + {condition} - { - singleSchemas.map((singleSchema) => { - return ( - - - {singleSchema} - - ) - }) - } - { - schemasData.map((schemaData) => { - if (!schemaData){ - return undefined - } - return ( - - - {schemaData.type} - - - - ) - }) - } + {singleSchemas.map((singleSchema, idx) => { + return ( + + + {singleSchema} + + + ); + })} + {schemasData.map((schemaData) => { + if (!schemaData) { + return undefined; + } + return ( + + + {schemaData.type} + + + + + + ); + })} - ) -} + ); +}; interface ConditionalKeyVal { schemaKey: string; - schemaVal: (OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject)[] + schemaVal: (OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject)[]; } const findConditionKey = (value: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject) => { if ('oneOf' in value) { - return {schemaKey: 'One of', schemaVal: value.oneOf} as ConditionalKeyVal + return { schemaKey: 'One of', schemaVal: value.oneOf } as ConditionalKeyVal; } else if ('anyOf' in value) { - return {schemaKey: 'Any of', schemaVal: value.anyOf} as ConditionalKeyVal + return { schemaKey: 'Any of', schemaVal: value.anyOf } as ConditionalKeyVal; } else if ('allOf' in value) { - return {schemaKey: 'All of', schemaVal: value.allOf} as ConditionalKeyVal + return { schemaKey: 'All of', schemaVal: value.allOf } as ConditionalKeyVal; } - return undefined -} + return undefined; +}; -const getTreeViewData = (schemaName: string, schema: DeRefResponse, document: OpenAPIV3.Document) => { - const conditionalSchema = findConditionKey(schema) +const getTreeViewData = ( + schemaName: string, + schema: DeRefResponse, + document: OpenAPIV3.Document, +) => { + const conditionalSchema = findConditionKey(schema); if (conditionalSchema) { - const {schemaKey, schemaVal} = conditionalSchema - return [{name: }] as TreeViewDataItem[] + const { schemaKey, schemaVal } = conditionalSchema; + return [{ name: }] as TreeViewDataItem[]; } if (!schema.properties) { - return [{ - name: schema.type ? ( - } - required={false} - /> - ) : "schema undefined" - }] as TreeViewDataItem[] + return [ + { + name: schema.type ? ( + } + required={false} + /> + ) : ( + 'schema undefined' + ), + }, + ] as TreeViewDataItem[]; } - const schemaKeyValArray = Object.entries(schema.properties) + const schemaKeyValArray = Object.entries(schema.properties); if (schemaKeyValArray.length < 1) { - return [{name: "Any data"}] as TreeViewDataItem[] + return [{ name: 'Any data' }] as TreeViewDataItem[]; } const schemaData = schemaKeyValArray.map(([key, value]) => { - let propertyType: string | ReactNode = "object" + let propertyType: string | ReactNode = 'object'; let children: TreeViewDataItem[] | undefined = undefined; const conditionalSchema = findConditionKey(value); if (conditionalSchema) { - const {schemaKey, schemaVal} = conditionalSchema - children = [{name: }] as TreeViewDataItem[] - } else if ('$ref' in value ) { - propertyType = ; - } else { - propertyType = 'type' in value ? value.type as string : 'any type' + const { schemaKey, schemaVal } = conditionalSchema; + children = [{ name: }] as TreeViewDataItem[]; + } else if ('$ref' in value) { + propertyType = ; + } else { + propertyType = 'type' in value ? (value.type as string) : 'any type'; if ('items' in value) { - const itemConditionalSchema = findConditionKey(value.items) + const itemConditionalSchema = findConditionKey(value.items); if (itemConditionalSchema) { - const {schemaKey, schemaVal} = itemConditionalSchema - children = [{name: }] as TreeViewDataItem[] + const { schemaKey, schemaVal } = itemConditionalSchema; + children = [{ name: }] as TreeViewDataItem[]; } else if ('type' in value.items) { - propertyType = ; + propertyType = ; } if ('$ref' in value.items) { - propertyType = ; + propertyType = ; } if ('properties' in value.items) { - const items = deRef(value.items, document) - children = getTreeViewData(schemaName, items, document) + const items = deRef(value.items, document); + children = getTreeViewData(schemaName, items, document); } } else if ('properties' in value) { - const items = deRef(value, document) - children = getTreeViewData(schemaName, items, document) + const items = deRef(value, document); + children = getTreeViewData(schemaName, items, document); } } return { - name: , + name: , id: key, children: children, - } - }) as TreeViewDataItem[] + }; + }) as TreeViewDataItem[]; - return schemaData -} + return schemaData; +}; diff --git a/src/components/APIDoc/SchemaPropertyView.tsx b/src/components/APIDoc/SchemaPropertyView.tsx index 379fbf67..05c8c639 100644 --- a/src/components/APIDoc/SchemaPropertyView.tsx +++ b/src/components/APIDoc/SchemaPropertyView.tsx @@ -1,8 +1,7 @@ -import React, {ReactNode} from 'react'; +import React, { ReactNode } from 'react'; import { Text, TextContent, TextVariants, Flex, FlexItem, Label, LabelGroup } from '@patternfly/react-core'; import { OpenAPIV3 } from 'openapi-types'; - interface PropertyViewComponentProps { propSchema?: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject; propName: string; @@ -10,86 +9,91 @@ interface PropertyViewComponentProps { required: boolean | undefined; } -export const PropertyView:React.FunctionComponent = ({propSchema, propName, propertyType, required}) => { +export const PropertyView: React.FunctionComponent = ({ propSchema, propName, propertyType, required }) => { let extraProps; - if (propSchema && !('$ref' in propSchema) ) { - extraProps = + if (propSchema && !('$ref' in propSchema)) { + extraProps = ; } return ( - + {propName} - {required && "*"} + + {required && '*'} + - - {propertyType} - + {propertyType} - - {extraProps} - + {extraProps} - ) -} - + ); +}; interface ExtraPropertyViewProps { propSchema: OpenAPIV3.SchemaObject; } -export const ExtraPropertyView:React.FunctionComponent = ({propSchema}) => { +export const ExtraPropertyView: React.FunctionComponent = ({ propSchema }) => { let maxMin: string | undefined; if (propSchema.maximum && propSchema.minimum) { - maxMin = (propSchema.exclusiveMinimum ? '>': '≥') + ` ${propSchema.minimum} and ` - maxMin += (propSchema.exclusiveMaximum ? '<' : '≤') + ` ${propSchema.maximum}` + maxMin = (propSchema.exclusiveMinimum ? '>' : '≥') + ` ${propSchema.minimum} and `; + maxMin += (propSchema.exclusiveMaximum ? '<' : '≤') + ` ${propSchema.maximum}`; } else if (propSchema.maximum) { - maxMin = (propSchema.exclusiveMaximum ? '<' : '≤') + ` ${propSchema.maximum}` + maxMin = (propSchema.exclusiveMaximum ? '<' : '≤') + ` ${propSchema.maximum}`; } else if (propSchema.minimum) { - maxMin = (propSchema.exclusiveMinimum ? '>' : '≥') + ` ${propSchema.minimum}` + maxMin = (propSchema.exclusiveMinimum ? '>' : '≥') + ` ${propSchema.minimum}`; } let maxMinChar: string | undefined; if (propSchema.maxLength && propSchema.minLength) { - maxMinChar = `${propSchema.minLength} to ${propSchema.maxLength} chars` + maxMinChar = `${propSchema.minLength} to ${propSchema.maxLength} chars`; } else if (propSchema.maxLength) { - maxMinChar = `max ${propSchema.maxLength} chars` + maxMinChar = `max ${propSchema.maxLength} chars`; } else if (propSchema.minLength) { - maxMinChar = `min ${propSchema.minLength} chars` + maxMinChar = `min ${propSchema.minLength} chars`; } let maxMinItems: string | undefined; if (propSchema.maxItems && propSchema.minItems) { - maxMinItems = `${propSchema.minItems} to ${propSchema.maxItems} items` + maxMinItems = `${propSchema.minItems} to ${propSchema.maxItems} items`; } else if (propSchema.maxItems) { - maxMinItems = `max ${propSchema.maxItems} items` + maxMinItems = `max ${propSchema.maxItems} items`; } else if (propSchema.minItems) { - maxMinItems = `min ${propSchema.minItems} items` + maxMinItems = `min ${propSchema.minItems} items`; } let maxMinProps: string | undefined; if (propSchema.maxProperties && propSchema.minProperties) { - maxMinProps = `${propSchema.minProperties} to ${propSchema.maxProperties} properties` + maxMinProps = `${propSchema.minProperties} to ${propSchema.maxProperties} properties`; } else if (propSchema.maxProperties) { - maxMinProps = `max ${propSchema.maxProperties} properties` + maxMinProps = `max ${propSchema.maxProperties} properties`; } else if (propSchema.minItems) { - maxMinProps = `min ${propSchema.minProperties} properties` + maxMinProps = `min ${propSchema.minProperties} properties`; } - return( + return ( {propSchema.format && } {propSchema.default && } - {propSchema.enum && {propSchema.enum.map(e => )}} + {propSchema.enum && ( + + {propSchema.enum.map((e) => ( + + ))} + + )} {propSchema.pattern && } {propSchema.multipleOf && } {maxMin && } @@ -102,5 +106,5 @@ export const ExtraPropertyView:React.FunctionComponent = {propSchema.writeOnly && } {propSchema.deprecated && } - ) -} + ); +}; diff --git a/src/components/APIDoc/SchemaType.tsx b/src/components/APIDoc/SchemaType.tsx index 31da6d63..75016b7c 100644 --- a/src/components/APIDoc/SchemaType.tsx +++ b/src/components/APIDoc/SchemaType.tsx @@ -1,42 +1,46 @@ -import {FunctionComponent} from "react"; -import {OpenAPIV3} from "openapi-types"; -import {deRef} from "../../utils/Openapi"; -import {JumpLink} from "../JumpLink/JumpLink"; -import {getSchemaId} from "../../utils/OpenapiHtmlIds"; +import { FunctionComponent } from 'react'; +import { OpenAPIV3 } from 'openapi-types'; +import { deRef } from '../../utils/Openapi'; +import { JumpLink } from '@/components/JumpLink/JumpLink'; +import { getSchemaId } from '../../utils/OpenapiHtmlIds'; export interface SchemaTypeProps { - document: OpenAPIV3.Document; - schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined; - writeEnums?: boolean; + document: OpenAPIV3.Document; + schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined; + writeEnums?: boolean; } -export const SchemaType: FunctionComponent = ({schema, document, writeEnums}) => { - if (!schema) { - return Unknown; - } - - const dSchema = deRef(schema, document); - - if (dSchema.deRefData?.name) { - return {dSchema.deRefData.name}; - } - - if (dSchema.type === undefined) { - return Unknown; - } - - - // Enums are applied as modifiers else where - we need to make this behavior consistent - if (writeEnums && dSchema.enum) { - return {dSchema.enum.join(' | ')}; - } - - if (dSchema.type === 'array') { - - // This will get "funny" (not really) If the type is inline - we should probably preprocess and create custom - // types if that happens. or think of another way of display an Array of something that is not name - return Array<>; - } - - return {dSchema.type} -} +export const SchemaType: FunctionComponent = ({ schema, document, writeEnums }) => { + if (!schema) { + return Unknown; + } + + const dSchema = deRef(schema, document); + + if (dSchema.deRefData?.name) { + return {dSchema.deRefData.name}; + } + + if (dSchema.type === undefined) { + return Unknown; + } + + // Enums are applied as modifiers else where - we need to make this behavior consistent + if (writeEnums && dSchema.enum) { + return {dSchema.enum.join(' | ')}; + } + + if (dSchema.type === 'array') { + // This will get "funny" (not really) If the type is inline - we should probably preprocess and create custom + // types if that happens. or think of another way of display an Array of something that is not name + return ( + + Array< + + > + + ); + } + + return {dSchema.type}; +}; diff --git a/src/components/APIDoc/SchemaViewer.tsx b/src/components/APIDoc/SchemaViewer.tsx index b54fc51b..570de736 100644 --- a/src/components/APIDoc/SchemaViewer.tsx +++ b/src/components/APIDoc/SchemaViewer.tsx @@ -1,34 +1,32 @@ -import React from "react" +import React from 'react'; import { OpenAPIV3 } from 'openapi-types'; import { SchemaDataView } from './SchemaDataView'; import { deRef } from '../../utils/Openapi'; import { Accordion, Text, TextContent, TextVariants } from '@patternfly/react-core'; interface SchemaViewerProps { - document: OpenAPIV3.Document + document: OpenAPIV3.Document; } export const SchemaViewer: React.FunctionComponent = ({ document }) => { - const schemas = document.components?.schemas; - const entries = schemas ? Object.entries(schemas) : undefined; + const schemas = document.components?.schemas; + const entries = schemas ? Object.entries(schemas) : undefined; - if (!entries || entries.length === 0) { - return null; - } + if (!entries || entries.length === 0) { + return null; + } - return( - <> - - - Schemas - - - - { schemas && Object.entries(schemas).map(([schemaName, schemaObject]) => { - return - }) - } - - - ) -} + return ( + <> + + Schemas + + + {schemas && + Object.entries(schemas).map(([schemaName, schemaObject]) => { + return ; + })} + + + ); +}; diff --git a/src/components/APIDoc/SecurityScheme.tsx b/src/components/APIDoc/SecurityScheme.tsx index c689f49f..1c9a1a17 100644 --- a/src/components/APIDoc/SecurityScheme.tsx +++ b/src/components/APIDoc/SecurityScheme.tsx @@ -1,52 +1,53 @@ import React from 'react'; -import {OpenAPIV3} from "openapi-types"; -import ReactMarkdown from "react-markdown"; +import { OpenAPIV3 } from 'openapi-types'; +import ReactMarkdown from 'react-markdown'; export interface SecuritySchemesProps { - securityScheme: OpenAPIV3.SecuritySchemeObject; + securityScheme: OpenAPIV3.SecuritySchemeObject; } -export const SecurityScheme: React.FunctionComponent = props => { - - switch (props.securityScheme.type) { - case "apiKey": - return ; - case "http": - return ; - case "oauth2": - case "openIdConnect": - throw new Error('Unimplemented scheme') - default: - throw new Error(`Unknown security scheme found: ${JSON.stringify(props.securityScheme)}`); - } +export const SecurityScheme: React.FunctionComponent = (props) => { + switch (props.securityScheme.type) { + case 'apiKey': + return ; + case 'http': + return ; + case 'oauth2': + case 'openIdConnect': + throw new Error('Unimplemented scheme'); + default: + throw new Error(`Unknown security scheme found: ${JSON.stringify(props.securityScheme)}`); + } }; -const SecuritySchemeHttp: React.FunctionComponent = http => { - return <> - HTTP Authentication, scheme: {http.scheme} -
- { - http.description && - - {http.description} - - } - ; -} +const SecuritySchemeHttp: React.FunctionComponent = (http) => { + return ( + <> + HTTP Authentication, scheme: {http.scheme} +
+ {http.description && ( + + {http.description} + + )} + + ); +}; -const SecuritySchemeApiKey: React.FunctionComponent = api => { - return <> - API Key (Access Token) -
-
    -
  • Parameter name: {api.name}
  • -
  • In: {api.in}
  • -
- { - api.description && - - {api.description} - - } - ; -} +const SecuritySchemeApiKey: React.FunctionComponent = (api) => { + return ( + <> + API Key (Access Token) +
+
    +
  • Parameter name: {api.name}
  • +
  • In: {api.in}
  • +
+ {api.description && ( + + {api.description} + + )} + + ); +}; diff --git a/src/components/APIDoc/SecuritySchemeList.tsx b/src/components/APIDoc/SecuritySchemeList.tsx index 35fa925e..9fc43034 100644 --- a/src/components/APIDoc/SecuritySchemeList.tsx +++ b/src/components/APIDoc/SecuritySchemeList.tsx @@ -1,18 +1,21 @@ import React from 'react'; -import {OpenAPIV3} from "openapi-types"; -import {Text, TextContent, TextList, TextListItem, TextVariants} from "@patternfly/react-core"; -import {SecurityScheme} from "./SecurityScheme"; +import { OpenAPIV3 } from 'openapi-types'; +import { Text, TextContent, TextList, TextListItem, TextVariants } from '@patternfly/react-core'; +import { SecurityScheme } from './SecurityScheme'; export interface SecuritySchemeListProps { - schemes: Array; + schemes: Array; } -export const SecuritySchemeList: React.FunctionComponent = ({schemes}) => - - Authentication - - {schemes.map((s, index) => - - )} - - ; +export const SecuritySchemeList: React.FunctionComponent = ({ schemes }) => ( + + Authentication + + {schemes.map((s, index) => ( + + + + ))} + + +); diff --git a/src/components/APIDoc/ServerList.tsx b/src/components/APIDoc/ServerList.tsx index a2330649..170fff33 100644 --- a/src/components/APIDoc/ServerList.tsx +++ b/src/components/APIDoc/ServerList.tsx @@ -1,35 +1,37 @@ import React from 'react'; -import {OpenAPIV3} from "openapi-types"; -import {Text, TextContent, TextList, TextListItem, TextVariants} from "@patternfly/react-core"; +import { OpenAPIV3 } from 'openapi-types'; +import { Text, TextContent, TextList, TextListItem, TextVariants } from '@patternfly/react-core'; export interface ServerListProps { - servers: Array; + servers: Array; } -export const ServerList: React.FunctionComponent = ({servers}) => - - Base URLs: - - {servers.map((server, index) => - {getServerURL(server)} - )} - - ; - +export const ServerList: React.FunctionComponent = ({ servers }) => ( + + + Base URLs: + + + {servers.map((server, index) => ( + {getServerURL(server)} + ))} + + +); const getServerURL = (server: OpenAPIV3.ServerObject): string => { - let serverURL = server.url - if (server.description) { - serverURL = `${server.description}: ${server.url}` - } + let serverURL = server.url; + if (server.description) { + serverURL = `${server.description}: ${server.url}`; + } - if (!server.variables) { - return serverURL - } + if (!server.variables) { + return serverURL; + } - for (const variable in server.variables) { - serverURL = serverURL.replace(`{${variable}}`, server.variables[variable].default) - } + for (const variable in server.variables) { + serverURL = serverURL.replace(`{${variable}}`, server.variables[variable].default); + } - return serverURL -} + return serverURL; +}; diff --git a/src/components/APIDoc/hooks/useGroupedOperations.ts b/src/components/APIDoc/hooks/useGroupedOperations.ts index 92ad471b..17b41326 100644 --- a/src/components/APIDoc/hooks/useGroupedOperations.ts +++ b/src/components/APIDoc/hooks/useGroupedOperations.ts @@ -1,116 +1,120 @@ -import {OpenAPIV3} from "openapi-types"; -import {Tag} from "./useTags"; -import {BackgroundTaskState, useBackgroundTask} from "../../../hooks/useBackgroundTask"; +import { OpenAPIV3 } from 'openapi-types'; +import { Tag } from './useTags'; +import { BackgroundTaskState, useBackgroundTask } from '../../../hooks/useBackgroundTask'; interface Operation { - id: string; - rawOperation: OpenAPIV3.OperationObject; - verb: string; - baseUrl: string; - path: string; + id: string; + rawOperation: OpenAPIV3.OperationObject; + verb: string; + baseUrl: string; + path: string; } interface Group extends Tag { - operationIds: Array; + operationIds: Array; } export interface GroupedOperations { - groups: Array; - others: Array; - operations: Record; + groups: Array; + others: Array; + operations: Record; } -const operationVerbs: string[] = ["get", "post", "patch", "put", "delete", "options", "head", "trace"] +const operationVerbs: string[] = ['get', 'post', 'patch', 'put', 'delete', 'options', 'head', 'trace']; const getServerURL = (server: OpenAPIV3.ServerObject): string => { - let serverURL = server.url + let serverURL = server.url; - if (!server.variables) { - return serverURL - } + if (!server.variables) { + return serverURL; + } - for (const variable in server.variables) { - serverURL = serverURL.replace(`{${variable}}`, server.variables[variable].default) - } + for (const variable in server.variables) { + serverURL = serverURL.replace(`{${variable}}`, server.variables[variable].default); + } - return serverURL -} + return serverURL; +}; const loadGrouped = (openapi: OpenAPIV3.Document, grouped: GroupedOperations, serverUrl: string | undefined) => { - const defaultUrl = "https://www.example.com" - let baseUrl = getServerURL(openapi.servers?.[0] || {url: defaultUrl}); - - //if the serverurl is present, override the baseurl - if(serverUrl) { - //check to see if the existing baseurl starts with a / and add that to the end of the serverurl - if(baseUrl.startsWith("/")) { - serverUrl = serverUrl + baseUrl; - } - baseUrl = serverUrl; - } - - // check that baseUrl is a valid url - try { - new URL(baseUrl); - } catch (e) { - console.warn("Invalid baseUrl: ", baseUrl, e) - baseUrl = defaultUrl; + const defaultUrl = 'https://www.example.com'; + let baseUrl = getServerURL(openapi.servers?.[0] || { url: defaultUrl }); + + //if the serverurl is present, override the baseurl + if (serverUrl) { + //check to see if the existing baseurl starts with a / and add that to the end of the serverurl + if (baseUrl.startsWith('/')) { + serverUrl = serverUrl + baseUrl; } - // if baseUrl ends in a /, remove it - if (baseUrl.endsWith("/")) { - baseUrl = baseUrl.substring(0, baseUrl.length - 1); + baseUrl = serverUrl; + } + + // check that baseUrl is a valid url + try { + new URL(baseUrl); + } catch (e) { + console.warn('Invalid baseUrl: ', baseUrl, e); + baseUrl = defaultUrl; + } + // if baseUrl ends in a /, remove it + if (baseUrl.endsWith('/')) { + baseUrl = baseUrl.substring(0, baseUrl.length - 1); + } + + Object.entries(openapi.paths) + // Looks like openapi v3.1 supports components here as well + .forEach(([path, pathObject]) => + Object.entries(pathObject as Record) + .filter(([verb]) => operationVerbs.includes(verb)) + .forEach(([verb, operation]) => { + const operationId = operation.operationId || `${verb}-${path}`; + grouped.operations[operationId] = { + id: operationId, + rawOperation: operation, + verb, + baseUrl, + path, + }; + + let found = false; + + if (operation.tags) { + for (const group of grouped.groups) { + if (operation.tags.includes(group.id)) { + found = true; + group.operationIds.push(operationId); + } + } + } + + if (!found) { + grouped.others.push(operationId); + } + }), + ); + + grouped.groups = grouped.groups.filter((g) => g.operationIds.length > 0); +}; + +export const useGroupedOperations = ( + openapi: OpenAPIV3.Document | undefined, + tags: Array, + serverUrl: string | undefined, +): BackgroundTaskState => { + return useBackgroundTask(() => { + const grouped: GroupedOperations = { + groups: tags.map((t) => ({ + ...t, + operationIds: [], + })), + others: [], + operations: {}, + }; + + if (openapi) { + loadGrouped(openapi, grouped, serverUrl); } - Object.entries(openapi.paths) - // Looks like openapi v3.1 supports components here as well - .forEach(([path, pathObject]) => - Object.entries(pathObject as Record) - .filter(([verb, _operation]) => operationVerbs.includes(verb)) - .forEach(([verb, operation]) => { - const operationId = operation.operationId || `${verb}-${path}`; - grouped.operations[operationId] = { - id: operationId, - rawOperation: operation, - verb, - baseUrl, - path - }; - - let found = false; - - if (operation.tags) { - for (const group of grouped.groups) { - if (operation.tags.includes(group.id)) { - found = true; - group.operationIds.push(operationId); - } - } - } - - if (!found) { - grouped.others.push(operationId); - } - }) - ); - - grouped.groups = grouped.groups.filter(g => g.operationIds.length > 0); -} - -export const useGroupedOperations = (openapi: OpenAPIV3.Document | undefined, tags: Array, serverUrl: string | undefined): BackgroundTaskState => { - return useBackgroundTask(() => { - const grouped: GroupedOperations = { - groups: tags.map(t => ({ - ...t, - operationIds: [] - })), - others: [], - operations: {} - }; - - if (openapi) { - loadGrouped(openapi, grouped, serverUrl); - } - - return grouped; - }, [openapi, tags]); -} + return grouped; + }, [openapi, tags]); +}; diff --git a/src/components/APIDoc/hooks/useTags.ts b/src/components/APIDoc/hooks/useTags.ts index 9f084194..8912ff65 100644 --- a/src/components/APIDoc/hooks/useTags.ts +++ b/src/components/APIDoc/hooks/useTags.ts @@ -1,27 +1,29 @@ -import {OpenAPIV3} from "openapi-types"; -import {useMemo} from "react"; +import { OpenAPIV3 } from 'openapi-types'; +import { useMemo } from 'react'; import startCase from 'lodash.startcase'; import snakeCase from 'lodash.snakecase'; export interface Tag { - id: string; - name: string; - description?: string; + id: string; + name: string; + description?: string; } export const useTags = (openapi: OpenAPIV3.Document | undefined): Array => { - return useMemo(() => { - const tags: Array = []; - if (openapi?.tags) { - openapi.tags.forEach(t => tags.push({ - id: t.name, - // the idea here is to have a consistent naming here - // FOO_BAR or fooBar, foo bar => Foo bar - name: startCase(snakeCase(t.name).toLowerCase()), - // Omit empty strings and write undefined instead - description: t.description?.trim() || undefined, - })); - } - return tags; - }, [openapi]); -} + return useMemo(() => { + const tags: Array = []; + if (openapi?.tags) { + openapi.tags.forEach((t) => + tags.push({ + id: t.name, + // the idea here is to have a consistent naming here + // FOO_BAR or fooBar, foo bar => Foo bar + name: startCase(snakeCase(t.name).toLowerCase()), + // Omit empty strings and write undefined instead + description: t.description?.trim() || undefined, + }), + ); + } + return tags; + }, [openapi]); +}; diff --git a/src/components/APIPage.tsx b/src/components/APIPage.tsx new file mode 100644 index 00000000..9f194deb --- /dev/null +++ b/src/components/APIPage.tsx @@ -0,0 +1,116 @@ +'use client'; +import { useEffect, useState } from 'react'; +import { + BackToTop, + Breadcrumb, + BreadcrumbItem, + Bullseye, + Page, + PageSection, + PageSectionVariants, + Sidebar, + SidebarContent, + SidebarPanel, + Spinner, +} from '@patternfly/react-core'; +import Head from 'next/head'; +import { apiConfigurations, APIContent } from '@apidocs/common'; +import { ApiDoc } from '@/components/APIDoc/ApiDoc'; +import { usePromise } from 'react-use'; +import { useTags } from '../components/APIDoc/hooks/useTags'; +import { useGroupedOperations } from '../components/APIDoc/hooks/useGroupedOperations'; +import { SidebarApiSections } from '../components/SideBar/SidebarApiSections'; +import { fromApiLabels } from '../utils/DevelopersRedHatTaxonomy'; +import { LanguageProvider } from '../utils/LanguageContext'; +import { Config } from '@/config'; +import { useRouter } from 'next/navigation'; + +type ApiState = + | { + isLoading: true; + } + | { + isLoading: false; + api: APIContent | undefined; + }; + +export const APIPage = ({ apiId }: { apiId: string }) => { + const router = useRouter(); + const promiseOnMounted = usePromise(); + const [apiState, setApiState] = useState({ + isLoading: true, + }); + + const selectedApi = apiConfigurations.find((api) => api.id === apiId); + + useEffect(() => { + (async () => { + if (selectedApi) { + await promiseOnMounted; + const resolved = await selectedApi.getApiContent(); + setApiState({ + isLoading: false, + api: resolved, + }); + } + })(); + }, [promiseOnMounted, selectedApi]); + + const openapi = 'api' in apiState ? apiState.api?.openapi : undefined; + const tags = useTags(openapi); + const groupedOperations = useGroupedOperations(openapi, tags, selectedApi?.serverUrl); + + if (!selectedApi) { + return
Foobar
; + } + + const taxonomyData = fromApiLabels(selectedApi.tags); + return ( + <> + + + + {selectedApi.displayName} | {Config.title}{' '} + + + + {taxonomyData.map((t) => ( + + ))} + + + + + { + e.preventDefault(); + e.stopPropagation(); + router.push('/'); + }} + > + {Config.title} + + {selectedApi.displayName} + + + + + + + + {apiState.isLoading || !apiState.api || groupedOperations.loading ? ( + + + + ) : ( + + )} + + + + + + + ); +}; diff --git a/src/components/Card/Card.tsx b/src/components/Card/Card.tsx index f9851bac..7889645c 100644 --- a/src/components/Card/Card.tsx +++ b/src/components/Card/Card.tsx @@ -1,8 +1,7 @@ -import {FunctionComponent, PropsWithChildren, MouseEvent} from 'react'; -import {Card as PFCard, CardBody, Split, SplitItem, Text, TextContent, TextVariants} from '@patternfly/react-core'; - -import {APIConfigurationIcons} from '@apidocs/common'; -import { Link, useNavigate } from 'react-router-dom'; +import { FunctionComponent, PropsWithChildren } from 'react'; +import { Card as PFCard, CardBody, Split, SplitItem, Text, TextContent, TextVariants } from '@patternfly/react-core'; +import Link from 'next/link'; +import { APIConfigurationIcons } from '@apidocs/common'; export interface CardProps { apiId: string; @@ -12,53 +11,45 @@ export interface CardProps { to: string; } -export const Card: FunctionComponent> = ({apiId, displayName, icon, description, to, children}) => { - const navigate = useNavigate(); - +export const Card: FunctionComponent> = ({ apiId, displayName, icon, description, to, children }) => { const TitleIcon = icon ? APIConfigurationIcons[icon] : APIConfigurationIcons.GenericIcon; - const onCardClick = (event: MouseEvent) => { - // Allow default Link new tab on ctrl+click - if (event.ctrlKey) { - return; - } - - event.preventDefault(); - - // By-pass click if we actually clicked on a button (or it's children) - const clickedAButton = event.target instanceof Element && event.target.closest('button'); - - if (!clickedAButton) { - navigate(to) - } - } - - return - - - - - - - - - {displayName} - - - - - - - {description} - - - {children} - - - + // const onCardClick = (event: MouseEvent) => { + // // Allow default Link new tab on ctrl+click + // if (event.ctrlKey) { + // return; + // } + + // event.preventDefault(); + + // // By-pass click if we actually clicked on a button (or it's children) + // const clickedAButton = event.target instanceof Element && event.target.closest('button'); + + // if (!clickedAButton) { + // Router.push(to) + // } + // } + + return ( + + + + + + + + + + {displayName} + + + + + {description} + + {children} + + + + ); }; diff --git a/src/components/Card/usePaginatedGallery.ts b/src/components/Card/usePaginatedGallery.ts index f45a1940..698ac7bc 100644 --- a/src/components/Card/usePaginatedGallery.ts +++ b/src/components/Card/usePaginatedGallery.ts @@ -1,67 +1,71 @@ -import { APIConfiguration } from "@apidocs/common"; -import { useEffect, useState} from "react"; -import {useDebounce, useWindowSize} from "react-use"; -import {useGetHtmlElementById} from "../../hooks/useGetHtmlElementById"; +import { APIConfiguration } from '@apidocs/common'; +import { useEffect, useState } from 'react'; +import { useDebounce, useWindowSize } from 'react-use'; +import { useGetHtmlElementById } from '../../hooks/useGetHtmlElementById'; interface PerPageOptions { - setPage:(page: number) => void, - setPerPage: (perPage: number) => void, - page: number, - perPage: number, - setAvailablePerPage: (availablePerPage: ReadonlyArray) => void, - defaultAvailablePerPage: ReadonlyArray, - elements: ReadonlyArray, - setItems: (elements: ReadonlyArray) => void, + setPage: (page: number) => void; + setPerPage: (perPage: number) => void; + page: number; + perPage: number; + setAvailablePerPage: (availablePerPage: ReadonlyArray) => void; + defaultAvailablePerPage: ReadonlyArray; + elements: ReadonlyArray; + setItems: (elements: ReadonlyArray) => void; } export const usePaginatedGallery = ( - cardContainerId: string, - usingGallery: boolean, - {setPage, setPerPage, page, perPage, setAvailablePerPage, defaultAvailablePerPage, elements, setItems}: PerPageOptions + cardContainerId: string, + usingGallery: boolean, + { setPage, setPerPage, page, perPage, setAvailablePerPage, defaultAvailablePerPage, elements, setItems }: PerPageOptions, ): void => { - const { width: windowSizeWidth, height: windowSizeHeight } = useWindowSize(); - const [debouncedSize, setDebouncedSize] = useState<[number, number]>([windowSizeWidth , windowSizeHeight]); - const [elementsPerRow, setElementsPerRow] = useState(); + const { width: windowSizeWidth, height: windowSizeHeight } = useWindowSize(); + const [debouncedSize, setDebouncedSize] = useState<[number, number]>([windowSizeWidth, windowSizeHeight]); + const [elementsPerRow, setElementsPerRow] = useState(); - useDebounce(() => { - setDebouncedSize([windowSizeWidth, windowSizeHeight]); - }, 50, [windowSizeWidth, windowSizeHeight]); + useDebounce( + () => { + setDebouncedSize([windowSizeWidth, windowSizeHeight]); + }, + 50, + [windowSizeWidth, windowSizeHeight], + ); - const gallery = useGetHtmlElementById(cardContainerId); + const gallery = useGetHtmlElementById(cardContainerId); - useEffect(() => { - if (usingGallery && gallery && gallery.children.length > 0) { - gallery.style.display = 'grid'; - const first = gallery.children.item(0)!; - const children = [...gallery.children]; - const elementsPerRow = children.filter(c => 'offsetTop' in first && 'offsetTop' in c && first.offsetTop === c.offsetTop).length; - setElementsPerRow(elementsPerRow); - } else { - setElementsPerRow(undefined); - } - }, [debouncedSize, gallery, usingGallery]); + useEffect(() => { + if (usingGallery && gallery && gallery.children.length > 0) { + gallery.style.display = 'grid'; + const first = gallery.children.item(0)!; + const children = [...gallery.children]; + const elementsPerRow = children.filter((c) => 'offsetTop' in first && 'offsetTop' in c && first.offsetTop === c.offsetTop).length; + setElementsPerRow(elementsPerRow); + } else { + setElementsPerRow(undefined); + } + }, [debouncedSize, gallery, usingGallery]); - useEffect(() => { - setItems(elements.slice((page - 1) * perPage, page * perPage)); - }, [page, perPage, elements, setItems]); + useEffect(() => { + setItems(elements.slice((page - 1) * perPage, page * perPage)); + }, [page, perPage, elements, setItems]); - // Updates the available elements if the elements per row is different - useEffect(() => { - if (elementsPerRow) { - const availablePerPage = defaultAvailablePerPage.map(size => { - return Math.ceil(size / elementsPerRow) * elementsPerRow; - }); + // Updates the available elements if the elements per row is different + useEffect(() => { + if (elementsPerRow) { + const availablePerPage = defaultAvailablePerPage.map((size) => { + return Math.ceil(size / elementsPerRow) * elementsPerRow; + }); - setAvailablePerPage(availablePerPage); - setPerPage(availablePerPage.includes(perPage) ? perPage : availablePerPage[0]) - } - }, [elementsPerRow, setAvailablePerPage, setPerPage, perPage, defaultAvailablePerPage]); + setAvailablePerPage(availablePerPage); + setPerPage(availablePerPage.includes(perPage) ? perPage : availablePerPage[0]); + } + }, [elementsPerRow, setAvailablePerPage, setPerPage, perPage, defaultAvailablePerPage]); - // Updates current page - useEffect(() => { - if (usingGallery && gallery && gallery.children.length > 0) { - const lastPage = Math.floor(gallery.childElementCount / (perPage)) + 1; - setPage(Math.min(page, lastPage)); - } - }, [page, perPage, setPage, gallery, usingGallery]); + // Updates current page + useEffect(() => { + if (usingGallery && gallery && gallery.children.length > 0) { + const lastPage = Math.floor(gallery.childElementCount / perPage) + 1; + setPage(Math.min(page, lastPage)); + } + }, [page, perPage, setPage, gallery, usingGallery]); }; diff --git a/src/components/DocumentContent/DocumentContent.tsx b/src/components/DocumentContent/DocumentContent.tsx index 8fc477dc..66207eb8 100644 --- a/src/components/DocumentContent/DocumentContent.tsx +++ b/src/components/DocumentContent/DocumentContent.tsx @@ -1,26 +1,24 @@ -import {FunctionComponent} from "react"; -import ReactMarkdown from "react-markdown"; -import {PageSection, PageSectionVariants, Text, TextContent, TextVariants} from "@patternfly/react-core"; +import { FunctionComponent } from 'react'; +import ReactMarkdown from 'react-markdown'; +import { PageSection, PageSectionVariants, Text, TextContent, TextVariants } from '@patternfly/react-core'; interface DocumentContentProps { - from: Record; - name: string; - title?: string; + from: Record; + name: string; + title?: string; } -export const DocumentContent: FunctionComponent = ({from, name, title}) => { - if (!Object.hasOwn(from, name)) { - return null; - } +export const DocumentContent: FunctionComponent = ({ from, name, title }) => { + if (!Object.hasOwn(from, name)) { + return null; + } - return - - { title && - {title} - } - - {from[name]} - - - ; + return ( + + + {title && {title}} + {from[name]} + + + ); }; diff --git a/src/components/GalleryTemplate.tsx b/src/components/GalleryTemplate.tsx new file mode 100644 index 00000000..67037cf1 --- /dev/null +++ b/src/components/GalleryTemplate.tsx @@ -0,0 +1,51 @@ +import { APIConfiguration, APIConfigurationIcons, pages } from '@apidocs/common'; +import { CSSProperties, FunctionComponent, useMemo } from 'react'; +import { Gallery, GalleryItem } from '@patternfly/react-core'; +import { Card } from '@/components/Card/Card'; +import { Tag, Tags } from '@/components/Tags'; + +interface GaleryProps { + id?: string; + elements: ReadonlyArray; + isHidden?: boolean; +} + +export const GalleryTemplate: FunctionComponent = ({ id, elements, isHidden }) => { + const style = useMemo( + () => + isHidden + ? { + visibility: 'hidden', + overflow: 'hidden', + height: 0, + } + : {}, + [isHidden], + ); + + return ( + + {elements.map((apiConfig) => ( + + + {apiConfig.tags.length > 0 && ( +
+ + {apiConfig.tags.map((t) => ( + + ))} + +
+ )} +
+
+ ))} +
+ ); +}; diff --git a/src/components/GridContent.tsx b/src/components/GridContent.tsx new file mode 100644 index 00000000..19fff531 --- /dev/null +++ b/src/components/GridContent.tsx @@ -0,0 +1,20 @@ +import { APIConfiguration } from '@apidocs/common'; +import { Fragment, FunctionComponent } from 'react'; +import { NoMatchFound } from '@/components/NoMatchFound/NoMatchFound'; +import { GalleryTemplate } from './GalleryTemplate'; + +interface GridContentProps { + galleryId: string; + allItems: Readonly[]; + items: ReadonlyArray; + clearFilters: () => void; +} + +export const GridContent: FunctionComponent = ({ galleryId, allItems, items, clearFilters }) => { + return ( + + + {items.length > 0 ? : } + + ); +}; diff --git a/src/components/JumpLink/JumpLink.tsx b/src/components/JumpLink/JumpLink.tsx index eabe3c51..6ecbe82a 100644 --- a/src/components/JumpLink/JumpLink.tsx +++ b/src/components/JumpLink/JumpLink.tsx @@ -1,12 +1,9 @@ -import {FunctionComponent, PropsWithChildren} from 'react'; - +import { FunctionComponent, PropsWithChildren } from 'react'; interface JumpLinkProps { - id: string; + id: string; } -export const JumpLink: FunctionComponent> = ({id, children}) => { - return - {children} - ; +export const JumpLink: FunctionComponent> = ({ id, children }) => { + return {children}; }; diff --git a/src/components/ListContent.tsx b/src/components/ListContent.tsx new file mode 100644 index 00000000..f323d149 --- /dev/null +++ b/src/components/ListContent.tsx @@ -0,0 +1,37 @@ +import { FunctionComponent } from 'react'; +import { Flex, FlexItem } from '@patternfly/react-core'; +import { Table, Thead, Tr, Th, Tbody } from '@patternfly/react-table'; +import { APIConfiguration } from '@apidocs/common'; +import { NoMatchFound } from '../components/NoMatchFound/NoMatchFound'; +import { ListView } from './ListView'; + +interface ListContentProps { + items: ReadonlyArray; + clearFilters: () => void; +} + +export const ListContent: FunctionComponent = ({ items, clearFilters }) => { + const columnNames = { + name: 'Application name', + description: 'Description', + apiVersion: 'API version', + tags: 'Tags', + }; + + return ( + + + + + + + + + {items.length > 0 ? : } +
+ + {columnNames.name} + + {columnNames.description}{columnNames.tags}
+ ); +}; diff --git a/src/components/ListView.tsx b/src/components/ListView.tsx new file mode 100644 index 00000000..0d06e2c2 --- /dev/null +++ b/src/components/ListView.tsx @@ -0,0 +1,39 @@ +import { Fragment, FunctionComponent } from 'react'; +import { Flex, FlexItem } from '@patternfly/react-core'; +import { Tr, Td } from '@patternfly/react-table'; +import { APIConfiguration, pages } from '@apidocs/common'; +import { Tag, Tags } from '../components/Tags'; +import Link from 'next/link'; + +interface ListViewProps { + elements: ReadonlyArray; + isHidden?: boolean; +} + +export const ListView: FunctionComponent = ({ elements }) => { + return ( + + {elements.map((apiConfig) => ( + + + + + {apiConfig.displayName} + + + + {apiConfig.description} + +
+ + {apiConfig.tags.map((t) => ( + + ))} + +
+ + + ))} +
+ ); +}; diff --git a/src/components/NoMatchFound/NoMatchFound.tsx b/src/components/NoMatchFound/NoMatchFound.tsx index debd752f..da0aba83 100644 --- a/src/components/NoMatchFound/NoMatchFound.tsx +++ b/src/components/NoMatchFound/NoMatchFound.tsx @@ -1,20 +1,19 @@ -import {FunctionComponent} from "react"; -import {Button, EmptyState, EmptyStateBody, EmptyStateIcon, EmptyStatePrimary, Title} from "@patternfly/react-core"; -import {SearchIcon} from "@patternfly/react-icons"; +import { FunctionComponent } from 'react'; +import { Button, EmptyState, EmptyStateBody, EmptyStateIcon, EmptyStateHeader, EmptyStateFooter } from '@patternfly/react-core'; +import { SearchIcon } from '@patternfly/react-icons'; interface NoMatchFoundProps { - clearFilters: () => void; + clearFilters: () => void; } -export const NoMatchFound: FunctionComponent = ({clearFilters}) => - - - No results found - - - No results match the filter criteria. Clear all filters and try again. - - - - -; +export const NoMatchFound: FunctionComponent = ({ clearFilters }) => ( + + } headingLevel="h4" /> + No results match the filter criteria. Clear all filters and try again. + + + + +); diff --git a/src/components/SideBar/SidebarApiSections.tsx b/src/components/SideBar/SidebarApiSections.tsx index feae732d..23b89df6 100644 --- a/src/components/SideBar/SidebarApiSections.tsx +++ b/src/components/SideBar/SidebarApiSections.tsx @@ -1,87 +1,86 @@ -import {Fragment, FunctionComponent, ReactNode, useMemo} from "react"; -import {OpenAPIV3} from "openapi-types"; -import {GroupedOperations} from "../APIDoc/hooks/useGroupedOperations"; -import {JumpLinks, JumpLinksItem, JumpLinksList, Skeleton} from "@patternfly/react-core"; -import { - getAuthenticationId, - getOperationGroupId, - getOperationId, - getSchemasId, - getUngroupedOperationsId -} from "../../utils/OpenapiHtmlIds"; -import {BackgroundTaskState} from "../../hooks/useBackgroundTask"; -import {getTitleWithVersion} from "../../utils/OpenapiSelectors"; +import { Fragment, FunctionComponent, ReactNode, useMemo } from 'react'; +import { OpenAPIV3 } from 'openapi-types'; +import { JumpLinks, JumpLinksItem, JumpLinksList, Skeleton } from '@patternfly/react-core'; +import { getAuthenticationId, getOperationGroupId, getOperationId, getSchemasId, getUngroupedOperationsId } from '../../utils/OpenapiHtmlIds'; +import { getTitleWithVersion } from '../../utils/OpenapiSelectors'; +import { GroupedOperations } from '@/hooks/useGroupedOperations'; +import { BackgroundTaskState } from '@/hooks/useBackgroundTask'; export interface SidebarApiSectionsProps { - openapi: OpenAPIV3.Document | undefined; - groupedOperations: BackgroundTaskState; + openapi: OpenAPIV3.Document | undefined; + groupedOperations: BackgroundTaskState; } -export const SidebarApiSections: FunctionComponent = ({openapi, groupedOperations}) => { - const jumpLinkContent = useMemo(() => { - const links = []; +export const SidebarApiSections: FunctionComponent = ({ openapi, groupedOperations }) => { + const jumpLinkContent = useMemo(() => { + const links = []; - if (openapi?.security) { - links.push(Authentication) - } + if (openapi?.security) { + links.push( + + Authentication + , + ); + } - const operationSublinkContent: Array = []; - if (!groupedOperations.loading) { - groupedOperations.value.groups - .forEach(g => operationSublinkContent.push( - - {g.name || g.description} - - )); + const operationSublinkContent: Array = []; + if (!groupedOperations.loading) { + groupedOperations.value.groups.forEach((g) => + operationSublinkContent.push( + + {g.name || g.description} + , + ), + ); - if (groupedOperations.value.others.length > 0 && groupedOperations.value.groups.length > 0) { - operationSublinkContent.push( - Other operations - ) - } - } else { - operationSublinkContent.push( - - - - - - - - - - ); - } + if (groupedOperations.value.others.length > 0 && groupedOperations.value.groups.length > 0) { + operationSublinkContent.push( + + Other operations + , + ); + } + } else { + operationSublinkContent.push( + + + + + + + + + + + , + ); + } - links.push( - Operations - {operationSublinkContent.length > 0 ? {operationSublinkContent} : []} - ); + links.push( + + Operations + {operationSublinkContent.length > 0 ? {operationSublinkContent} : []} + , + ); - if (openapi?.components?.schemas) { - links.push(Schemas); - } + if (openapi?.components?.schemas) { + links.push( + + Schemas + , + ); + } - return links; - }, [openapi, groupedOperations]); + return links; + }, [openapi, groupedOperations]); - return <> -
- - {jumpLinkContent} - -
- ; + return ( + <> +
+ + {jumpLinkContent} + +
+ + ); }; diff --git a/src/components/SideBar/SidebarTags.tsx b/src/components/SideBar/SidebarTags.tsx index 2fdaf5df..8a2fa30e 100644 --- a/src/components/SideBar/SidebarTags.tsx +++ b/src/components/SideBar/SidebarTags.tsx @@ -1,69 +1,73 @@ -import React, {FunctionComponent, useMemo} from "react"; -import {APILabel} from "@apidocs/common"; -import {Checkbox, Text, TextContent, TextVariants} from "@patternfly/react-core"; -import assertNever from "assert-never"; +import React, { FunctionComponent, useMemo } from 'react'; +import { APILabel } from '@apidocs/common/types'; +import { Checkbox, Text, TextContent, TextVariants } from '@patternfly/react-core'; +import assertNever from 'assert-never'; interface SidebarTagsProps { - tags: ReadonlyArray; - selected: ReadonlyArray; - setSelected: (tagId: string, isChecked: boolean) => void; + tags: ReadonlyArray; + selected: ReadonlyArray; + setSelected: (tagId: string, isChecked: boolean) => void; } -const displayedTags: ReadonlyArray = [ - 'use-case', - 'service', - 'platform' -] as const; +const displayedTags: ReadonlyArray = ['use-case', 'service', 'platform'] as const; type DisplayedTagsType = (typeof displayedTags)[number]; const getTitle = (type: DisplayedTagsType) => { - switch (type) { - case 'use-case': - return 'Use Case'; - case 'service': - return 'SaaS Service'; - case 'platform': - return 'Red Hat Platform'; - } + switch (type) { + case 'use-case': + return 'Use Case'; + case 'service': + return 'SaaS Service'; + case 'platform': + return 'Red Hat Platform'; + } - assertNever(type); -} + assertNever(type); +}; -export const SidebarTags: FunctionComponent = ({tags, selected, setSelected}) => { - const tagsByGroup = useMemo(() => tags.reduce( +export const SidebarTags: FunctionComponent = ({ tags, selected, setSelected }) => { + const tagsByGroup = useMemo( + () => + tags.reduce( (prev, current) => { - if (current.type in prev) { - prev[current.type].push(current); - } - return prev; + if (current.type in prev) { + prev[current.type].push(current); + } + return prev; }, { - 'use-case': [], - service: [], - platform: [] - } as Record> - ), [tags]); + 'use-case': [], + service: [], + platform: [], + } as Record>, + ), + [tags], + ); - return ( - - {displayedTags.map((type, index) => - - {tagsByGroup[type].length > 0 && ( - <> - 0 ? 'pf-u-mt-md' : ''} pf-u-mb-sm`}>{getTitle(type)} - {tagsByGroup[type].map(tag => setSelected(tag.id, isChecked)} - isChecked={selected.includes(tag.id)} - />)} - - )} - - )} - - ); -} + return ( + + {displayedTags.map((type, index) => ( + + {tagsByGroup[type].length > 0 && ( + <> + 0 ? 'pf-v5-u-mt-md' : ''} pf-v5-u-mb-sm`}> + {getTitle(type)} + + {tagsByGroup[type].map((tag) => ( + setSelected(tag.id, isChecked)} + isChecked={selected.includes(tag.id)} + /> + ))} + + )} + + ))} + + ); +}; diff --git a/src/components/Tags/Tag.tsx b/src/components/Tags/Tag.tsx index b7ac7b93..b19f318d 100644 --- a/src/components/Tags/Tag.tsx +++ b/src/components/Tags/Tag.tsx @@ -1,27 +1,25 @@ -import {FunctionComponent} from "react"; -import {Label, LabelProps} from "@patternfly/react-core"; -import {APILabel} from "@apidocs/common"; -import assertNever from "assert-never"; +import { FunctionComponent } from 'react'; +import { Label, LabelProps } from '@patternfly/react-core'; +import { APILabel } from '@apidocs/common'; +import assertNever from 'assert-never'; interface TagProps { - value: Readonly; + value: Readonly; } const colorForLabelType = (type: APILabel['type']): LabelProps['color'] => { - switch (type) { - case "platform": - return 'green'; - case "service": - return `orange`; - case "use-case": - return 'blue'; - default: - assertNever(type); - } -} + switch (type) { + case 'platform': + return 'green'; + case 'service': + return `orange`; + case 'use-case': + return 'blue'; + default: + assertNever(type); + } +}; -export const Tag: FunctionComponent = ({value}) => { - return ; +export const Tag: FunctionComponent = ({ value }) => { + return ; }; diff --git a/src/components/Tags/Tags.tsx b/src/components/Tags/Tags.tsx index 6ead475c..ac5a4c5e 100644 --- a/src/components/Tags/Tags.tsx +++ b/src/components/Tags/Tags.tsx @@ -1,9 +1,7 @@ -import {Children, FunctionComponent, PropsWithChildren} from "react"; -import {LabelGroup} from "@patternfly/react-core"; +import { Children, FunctionComponent, PropsWithChildren } from 'react'; +import { LabelGroup } from '@patternfly/react-core'; -export const Tags: FunctionComponent = ({children}) => { - const numLabels = Children.toArray(children).length <= 4 ? 4 : 3; - return - {children} - ; +export const Tags: FunctionComponent = ({ children }) => { + const numLabels = Children.toArray(children).length <= 4 ? 4 : 3; + return {children}; }; diff --git a/src/config.ts b/src/config.ts index af33fd49..87f73086 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,5 +1,5 @@ const RawConfig = { - title: 'API Catalog and Documentation' + title: 'API Catalog and Documentation', }; -export const Config = RawConfig as Readonly; +export const Config = RawConfig as Readonly; diff --git a/src/hooks/useBackgroundTask.ts b/src/hooks/useBackgroundTask.ts index 21f71819..9d97a92f 100644 --- a/src/hooks/useBackgroundTask.ts +++ b/src/hooks/useBackgroundTask.ts @@ -1,27 +1,31 @@ -import {DependencyList, useEffect, useState} from "react"; +import { DependencyList, useEffect, useState } from 'react'; -export type BackgroundTaskState = { - loading: true -} | { - loading: false; - value: T -}; +export type BackgroundTaskState = + | { + loading: true; + } + | { + loading: false; + value: T; + }; export const useBackgroundTask = (callback: () => T, deps?: DependencyList): BackgroundTaskState => { - const [state, setState] = useState>({ - loading: true - }); + const [state, setState] = useState>({ + loading: true, + }); - useEffect(() => { - (async () => { - const value = callback(); - setState({ - loading: false, - value - }); - })(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, deps ?? [callback]); + useEffect( + () => { + (async () => { + const value = callback(); + setState({ + loading: false, + value, + }); + })(); + }, + deps ?? [callback], + ); - return state; -} + return state; +}; diff --git a/src/hooks/useGetHtmlElementById.ts b/src/hooks/useGetHtmlElementById.ts index f32814d8..ce92767b 100644 --- a/src/hooks/useGetHtmlElementById.ts +++ b/src/hooks/useGetHtmlElementById.ts @@ -1,15 +1,14 @@ -import {useEffect, useState} from "react"; +import { useEffect, useState } from 'react'; export const useGetHtmlElementById = (elementId: string) => { - const [element, setElement] = useState(); + const [element, setElement] = useState(); - // eslint-disable-next-line react-hooks/exhaustive-deps - useEffect(() => { - const foundElement = document.getElementById(elementId); - if (foundElement !== element) { - setElement(foundElement ?? undefined); - } - }); + useEffect(() => { + const foundElement = document.getElementById(elementId); + if (foundElement !== element) { + setElement(foundElement ?? undefined); + } + }); - return element; -} + return element; +}; diff --git a/src/hooks/useGroupedOperations.ts b/src/hooks/useGroupedOperations.ts new file mode 100644 index 00000000..7a31c928 --- /dev/null +++ b/src/hooks/useGroupedOperations.ts @@ -0,0 +1,120 @@ +import { OpenAPIV3 } from 'openapi-types'; +import { Tag } from './useTags'; +import { BackgroundTaskState, useBackgroundTask } from './useBackgroundTask'; + +interface Operation { + id: string; + rawOperation: OpenAPIV3.OperationObject; + verb: string; + baseUrl: string; + path: string; +} + +interface Group extends Tag { + operationIds: Array; +} + +export interface GroupedOperations { + groups: Array; + others: Array; + operations: Record; +} + +const operationVerbs: string[] = ['get', 'post', 'patch', 'put', 'delete', 'options', 'head', 'trace']; + +const getServerURL = (server: OpenAPIV3.ServerObject): string => { + let serverURL = server.url; + + if (!server.variables) { + return serverURL; + } + + for (const variable in server.variables) { + serverURL = serverURL.replace(`{${variable}}`, server.variables[variable].default); + } + + return serverURL; +}; + +const loadGrouped = (openapi: OpenAPIV3.Document, grouped: GroupedOperations, serverUrl: string | undefined) => { + const defaultUrl = 'https://www.example.com'; + let baseUrl = getServerURL(openapi.servers?.[0] || { url: defaultUrl }); + + //if the serverurl is present, override the baseurl + if (serverUrl) { + //check to see if the existing baseurl starts with a / and add that to the end of the serverurl + if (baseUrl.startsWith('/')) { + serverUrl = serverUrl + baseUrl; + } + baseUrl = serverUrl; + } + + // check that baseUrl is a valid url + try { + new URL(baseUrl); + } catch (e) { + console.warn('Invalid baseUrl: ', baseUrl, e); + baseUrl = defaultUrl; + } + // if baseUrl ends in a /, remove it + if (baseUrl.endsWith('/')) { + baseUrl = baseUrl.substring(0, baseUrl.length - 1); + } + + Object.entries(openapi.paths) + // Looks like openapi v3.1 supports components here as well + .forEach(([path, pathObject]) => + Object.entries(pathObject as Record) + .filter(([verb]) => operationVerbs.includes(verb)) + .forEach(([verb, operation]) => { + const operationId = operation.operationId || `${verb}-${path}`; + grouped.operations[operationId] = { + id: operationId, + rawOperation: operation, + verb, + baseUrl, + path, + }; + + let found = false; + + if (operation.tags) { + for (const group of grouped.groups) { + if (operation.tags.includes(group.id)) { + found = true; + group.operationIds.push(operationId); + } + } + } + + if (!found) { + grouped.others.push(operationId); + } + }), + ); + + grouped.groups = grouped.groups.filter((g) => g.operationIds.length > 0); +}; + +export const useGroupedOperations = ( + openapi: OpenAPIV3.Document | undefined, + tags: Array, + serverUrl: string | undefined, +): BackgroundTaskState => { + return useBackgroundTask(() => { + const grouped: GroupedOperations = { + groups: tags.map((t) => ({ + ...t, + operationIds: [], + })), + others: [], + operations: {}, + }; + + if (openapi) { + loadGrouped(openapi, grouped, serverUrl); + } + + return grouped; + }, [openapi, tags]); +}; diff --git a/src/hooks/useSnippets.ts b/src/hooks/useSnippets.ts index 54ea412a..46b0e5e7 100644 --- a/src/hooks/useSnippets.ts +++ b/src/hooks/useSnippets.ts @@ -1,28 +1,27 @@ -import {useEffect, useState} from "react"; +import { useEffect, useState } from 'react'; import { Language } from '@patternfly/react-code-editor'; -import {Request as RequestFormat} from 'har-format' +import { Request as RequestFormat } from 'har-format'; import { HTTPSnippet, isValidTargetId } from 'httpsnippet-lite'; - export interface SnippetInfoItem { text: string; language: string; highlighter: Language; - langLibrary: string|undefined; + langLibrary: string | undefined; } export const SnippetItemsArray = [ - {text: "python", language: "python", highlighter: Language.python, langLibrary: "requests"}, - {text: "go", language: "go", highlighter: Language.go, langLibrary: undefined}, - {text: "java", language: "java", highlighter: Language.java, langLibrary: "asynchttp"}, - {text: "javascript", language: "javascript", highlighter: Language.javascript, langLibrary: "fetch"}, - {text: "node", language: "node", highlighter: Language.javascript, langLibrary: "fetch"}, - {text: "c", language: "c", highlighter: Language.cpp, langLibrary: "libcurl"}, - {text: "ruby", language: "ruby", highlighter: Language.ruby, langLibrary: "native"}, - {text: "cURL", language: "shell", highlighter: Language.shell, langLibrary: "curl"}, - {text: "http", language: "http", highlighter: Language.json, langLibrary: "http1.1"}, + { text: 'python', language: 'python', highlighter: Language.python, langLibrary: 'requests' }, + { text: 'go', language: 'go', highlighter: Language.go, langLibrary: undefined }, + { text: 'java', language: 'java', highlighter: Language.java, langLibrary: 'asynchttp' }, + { text: 'javascript', language: 'javascript', highlighter: Language.javascript, langLibrary: 'fetch' }, + { text: 'node', language: 'node', highlighter: Language.javascript, langLibrary: 'fetch' }, + { text: 'c', language: 'c', highlighter: Language.cpp, langLibrary: 'libcurl' }, + { text: 'ruby', language: 'ruby', highlighter: Language.ruby, langLibrary: 'native' }, + { text: 'cURL', language: 'shell', highlighter: Language.shell, langLibrary: 'curl' }, + { text: 'http', language: 'http', highlighter: Language.json, langLibrary: 'http1.1' }, ] as SnippetInfoItem[]; const getCodeSample = async (language: string, langLibrary: string | undefined, requestData: RequestFormat) => { @@ -54,7 +53,7 @@ export const useSnippets = (languageInfo: SnippetInfoItem, reqData: RequestForma if (sample) { setSnippet(sample as string); } - }) + }); } }, [languageInfo, reqData]); diff --git a/src/hooks/useTags.ts b/src/hooks/useTags.ts new file mode 100644 index 00000000..8912ff65 --- /dev/null +++ b/src/hooks/useTags.ts @@ -0,0 +1,29 @@ +import { OpenAPIV3 } from 'openapi-types'; +import { useMemo } from 'react'; +import startCase from 'lodash.startcase'; +import snakeCase from 'lodash.snakecase'; + +export interface Tag { + id: string; + name: string; + description?: string; +} + +export const useTags = (openapi: OpenAPIV3.Document | undefined): Array => { + return useMemo(() => { + const tags: Array = []; + if (openapi?.tags) { + openapi.tags.forEach((t) => + tags.push({ + id: t.name, + // the idea here is to have a consistent naming here + // FOO_BAR or fooBar, foo bar => Foo bar + name: startCase(snakeCase(t.name).toLowerCase()), + // Omit empty strings and write undefined instead + description: t.description?.trim() || undefined, + }), + ); + } + return tags; + }, [openapi]); +}; diff --git a/src/index.tsx b/src/index.tsx deleted file mode 100644 index 5fc44383..00000000 --- a/src/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement -); -root.render( - - - -); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/src/pages/APIPage.tsx b/src/pages/APIPage.tsx deleted file mode 100644 index 39d3bdfd..00000000 --- a/src/pages/APIPage.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import {FunctionComponent, useEffect, useMemo, useState} from 'react'; -import { - BackToTop, - Breadcrumb, - BreadcrumbItem, - Bullseye, - Page, - PageSection, - PageSectionVariants, - Sidebar, - SidebarContent, - SidebarPanel, - Spinner, -} from "@patternfly/react-core"; -import {apiConfigurations, APIContent} from "@apidocs/common"; -import {useNavigate, useParams} from "react-router"; -import {ApiDoc} from "../components/APIDoc/ApiDoc"; -import {usePromise} from "react-use"; -import {Helmet} from "react-helmet-async"; -import {useTags} from "../components/APIDoc/hooks/useTags"; -import {useGroupedOperations} from "../components/APIDoc/hooks/useGroupedOperations"; -import {SidebarApiSections} from "../components/SideBar/SidebarApiSections"; -import {fromApiLabels} from "../utils/DevelopersRedHatTaxonomy"; -import {Config} from "../config"; -import { LanguageProvider } from '../utils/LanguageContext'; - -type ApiState = { - isLoading: true; -} | { - isLoading: false; - api: APIContent | undefined; -} - -export const APIPage: FunctionComponent = () => { - - const navigate = useNavigate(); - const { api } = useParams(); - const promiseOnMounted = usePromise(); - const [apiState, setApiState] = useState({ - isLoading: true - }); - - const selectedApi = useMemo(() => apiConfigurations.find(a => a.id === api), [ api ]); - - useEffect(() => { - (async () => { - if (selectedApi) { - await promiseOnMounted; - const resolved = await selectedApi.getApiContent(); - setApiState({ - isLoading: false, - api: resolved - }); - } - })(); - }, [promiseOnMounted, selectedApi]); - - const openapi = 'api' in apiState ? apiState.api?.openapi : undefined; - const tags = useTags(openapi); - const groupedOperations = useGroupedOperations(openapi, tags, selectedApi?.serverUrl); - - if (!selectedApi || (!apiState.isLoading && apiState.api === undefined)) { - navigate('/'); - return null; - } - - const taxonomyData = fromApiLabels(selectedApi.tags); - return <> - - - {selectedApi.displayName} | {Config.title} - - - { taxonomyData.map(t => ( - - )) } - - - - - { - event.preventDefault(); - navigate('/'); - }} >{Config.title} - {selectedApi.displayName} - - - - - - - - { (apiState.isLoading || !apiState.api || groupedOperations.loading) ? - : - } - - - - - - ; -}; diff --git a/src/pages/GalleryTemplate.tsx b/src/pages/GalleryTemplate.tsx deleted file mode 100644 index 838f5cc1..00000000 --- a/src/pages/GalleryTemplate.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import {APIConfiguration, APIConfigurationIcons, pages} from "@apidocs/common"; -import {CSSProperties, FunctionComponent, useMemo} from "react"; -import {Gallery, GalleryItem} from "@patternfly/react-core"; -import {Card} from "../components/Card/Card"; -import {Tag, Tags} from "../components/Tags"; - -interface GaleryProps { - id?: string; - elements: ReadonlyArray; - isHidden?: boolean -} - -export const GalleryTemplate: FunctionComponent = ({id, elements, isHidden}) => { - - - const style = useMemo(() => (isHidden ? { - visibility: 'hidden', - overflow: 'hidden', - height: 0 - } : {}), [isHidden]); - - return ( - - { elements.map(apiConfig => ( - - - { apiConfig.tags.length > 0 && ( -
- - {apiConfig.tags.map(t => )} - -
- )} -
-
- ))} -
- ); -} diff --git a/src/pages/GridContent.tsx b/src/pages/GridContent.tsx deleted file mode 100644 index 3e365bfc..00000000 --- a/src/pages/GridContent.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { APIConfiguration } from '@apidocs/common'; -import {Fragment, FunctionComponent} from 'react'; -import {NoMatchFound} from "../components/NoMatchFound/NoMatchFound"; -import {GalleryTemplate} from "./GalleryTemplate"; - -interface GridContentProps { - galleryId: string; - allItems: Readonly[]; - items: ReadonlyArray; - clearFilters: () => void; -} - -export const GridContent: FunctionComponent = ({galleryId, allItems, items, clearFilters}) => { - return - - { items.length > 0 ? - : } - -} diff --git a/src/pages/LandingPage.tsx b/src/pages/LandingPage.tsx deleted file mode 100644 index 1990a6fb..00000000 --- a/src/pages/LandingPage.tsx +++ /dev/null @@ -1,195 +0,0 @@ -import {FunctionComponent, useMemo } from 'react'; -import { - Button, - Flex, - Form, - Icon, - Page, - PageSection, - PageSectionVariants, - Pagination, - PaginationProps, Popover, - Sidebar, - SidebarContent, - SidebarPanel, Split, SplitItem, - Text, - TextContent, - TextVariants, - ToggleGroup, - ToggleGroupItem, Tooltip -} from "@patternfly/react-core"; -import {apiConfigurations, apiLabels} from "@apidocs/common"; -import { SearchInput } from '@patternfly/react-core'; -import ThIcon from '@patternfly/react-icons/dist/js/icons/th-icon'; -import ThListIcon from '@patternfly/react-icons/dist/js/icons/th-list-icon'; -import ExternalLinkAltIcon from '@patternfly/react-icons/dist/esm/icons/external-link-alt-icon'; -import {Helmet} from 'react-helmet-async'; - - -import {SidebarTags} from "../components/SideBar/SidebarTags"; -import {usePaginatedGallery} from "../components/Card/usePaginatedGallery"; - -import { GridContent } from './GridContent'; -import { ListContent } from './ListContent'; -import { useLandingConfigStore } from '../store/useLandingConfigStore'; -import { usePaginationStore, defaultAvailablePerPage } from '../store/usePaginationStore'; -import {Config} from "../config"; - -export const LandingPage: FunctionComponent = () => { - const landingStore = useLandingConfigStore(); - - const onChange = (searchInput: string) => { - landingStore.setSearchInput(searchInput); - pagination.setPage(1); - }; - - const filteredDocs = useMemo(() => apiConfigurations - .filter((apiConfig) => apiConfig.displayName.toLowerCase().includes(landingStore.searchInput.toLowerCase())) - .filter(apiConfig => landingStore.selectedTags.length === 0 || apiConfig.tags.some(tag => landingStore.selectedTags.includes(tag.id))), - [landingStore.searchInput, landingStore.selectedTags] - ); - - const galleryId = 'apid-c-api-gallery'; - - const pagination = usePaginationStore(); - - usePaginatedGallery(galleryId, landingStore.view === 'grid', { - setPage: pagination.setPage, - page: pagination.page, - perPage: pagination.perPage, - setPerPage: pagination.setPerPage, - setAvailablePerPage: pagination.setAvailablePerPage, - defaultAvailablePerPage: defaultAvailablePerPage, - elements: filteredDocs, - setItems: pagination.setItems, - }); - - const changeView = (toView: 'grid' | 'list') => { - landingStore.setView(toView); - pagination.setPage(1); - if (toView === 'list') { - pagination.setAvailablePerPage(defaultAvailablePerPage); - pagination.setPerPage(10); - } - } - - const clearFilters = () => { - landingStore.setSearchInput(''); - landingStore.setSelectedTags([]); - pagination.setPage(1); - }; - - const onTagsChange = (tagId: string, isChecked: boolean) => { - landingStore.updateSingleTag(tagId, isChecked); - pagination.setPage(1); - } - - // For some reason the type doesn't like 'ref'. - const basePaginationProps: Omit = { - itemCount: filteredDocs.length, - perPage: pagination.perPage, - page: pagination.page, - onSetPage: (_event, page) => pagination.setPage(page), - onPerPageSelect: (_event, perPage, newPage) => { - pagination.setPerPage(perPage); - pagination.setPage(newPage); - }, - perPageOptions: pagination.availablePerPage.map(a => ({ - title: a.toString(), - value: a - })), - dropDirection: "up", - variant: "bottom", - className: "pf-u-py-sm" - } - - return <> - - Home | {Config.title} - - - - - -
- onChange(searchInput)} - onClear={() => onChange('')} - /> - - -
- - - - {Config.title} - - - - - - - - - - - Important: Starting Dec 2024, Red Hat will discontinue support for basic authorization to connect to services' APIs. - The Red Hat Hybrid Cloud Console is integrating service accounts with User Access functionality to provide granular control - over access permissions and enhance security. - Token-based authentication is recommended. - More information about transitioning from basic authentication to token-based authentication via service accounts is described - on the Red Hat Customer Portal. - } - > - - - - - - - - - - } aria-label="Cards display" isSelected={landingStore.view === 'grid'} onChange={() => changeView('grid')} /> - - - } aria-label="Table display" isSelected={landingStore.view === 'list'} onChange={() => changeView('list')} /> - - - - - - - - - { landingStore.view === 'grid' - ? - : - } - - - - - - -
-
- ; -}; diff --git a/src/pages/ListContent.tsx b/src/pages/ListContent.tsx deleted file mode 100644 index 5bf81b0f..00000000 --- a/src/pages/ListContent.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import {FunctionComponent} from 'react'; -import {Flex, FlexItem} from "@patternfly/react-core"; -import { TableComposable, Thead, Tr, Th, Tbody} from '@patternfly/react-table'; -import { APIConfiguration } from '@apidocs/common'; -import {NoMatchFound} from "../components/NoMatchFound/NoMatchFound"; -import {ListView} from './ListView'; - -interface ListContentProps { - items: ReadonlyArray; - clearFilters: () => void; -} - -export const ListContent: FunctionComponent = ({items, clearFilters}) => { - const columnNames = { - name: 'Application name', - description: 'Description', - apiVersion: 'API version', - tags: 'Tags', - }; - - return ( - - - - - - - {columnNames.name} - - - - {columnNames.description} - {columnNames.tags} - - - - { items.length > 0 ? - : } - - - ); -} diff --git a/src/pages/ListView.tsx b/src/pages/ListView.tsx deleted file mode 100644 index cba6a433..00000000 --- a/src/pages/ListView.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import {Fragment, FunctionComponent} from "react"; -import {Flex, FlexItem} from "@patternfly/react-core"; -import {Tr, Td} from '@patternfly/react-table'; -import {APIConfiguration, pages} from "@apidocs/common"; -import {Tag, Tags} from "../components/Tags"; -import {Link} from "react-router-dom"; - -interface ListViewProps { - elements: ReadonlyArray; - isHidden?: boolean -} - -export const ListView: FunctionComponent = ({elements}) => { - return ( - - { elements.map(apiConfig => ( - - - - - - {apiConfig.displayName} - - - - - {apiConfig.description} - -
- - {apiConfig.tags.map(t => )} - -
- - - ))} -
- - ); -} diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts deleted file mode 100644 index 6431bc5f..00000000 --- a/src/react-app-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/src/reportWebVitals.ts b/src/reportWebVitals.ts deleted file mode 100644 index 49a2a16e..00000000 --- a/src/reportWebVitals.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ReportHandler } from 'web-vitals'; - -const reportWebVitals = (onPerfEntry?: ReportHandler) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/src/router/AppRouter.tsx b/src/router/AppRouter.tsx deleted file mode 100644 index 6972bdea..00000000 --- a/src/router/AppRouter.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import {createBrowserRouter, Navigate} from "react-router-dom"; -import {LandingPage} from "../pages/LandingPage"; -import {APIPage} from "../pages/APIPage"; -import {pages} from "@apidocs/common"; - -export const router = createBrowserRouter([ - { - path: pages.getLandingPage(), - element: , - index: true - }, - { - path: pages.getApiPage(':api'), - element: - }, - { - path: '*', - element: - } -], { - basename: process.env.PUBLIC_URL -}); diff --git a/src/setupTests.ts b/src/setupTests.ts deleted file mode 100644 index 8f2609b7..00000000 --- a/src/setupTests.ts +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/src/store/useLandingConfigStore.ts b/src/store/useLandingConfigStore.ts index 9c7997eb..5fcd844a 100644 --- a/src/store/useLandingConfigStore.ts +++ b/src/store/useLandingConfigStore.ts @@ -1,6 +1,5 @@ -import produce from 'immer'; -import { create } from 'zustand' - +import { produce } from 'immer'; +import { create } from 'zustand'; export interface LandingConfigStore { searchInput: string; @@ -12,25 +11,22 @@ export interface LandingConfigStore { setView: (newView: string) => void; } -export const useLandingConfigStore = create()( - (set) => ({ - searchInput: '', - selectedTags: [], - view: 'grid', - setSearchInput: (input) => set((state) => ({ searchInput: input })), - setSelectedTags: (tagsArray) => set((state) => ({ selectedTags: tagsArray })), - updateSingleTag: (tagId, isChecked) => - set( - produce(draft => { - const index = draft.selectedTags.indexOf(tagId); - - if (index === -1 && isChecked) { - draft.selectedTags.push(tagId); - } else if (index !== -1 && !isChecked) { - draft.selectedTags.splice(index, 1); - } - }) - ), - setView: (newView) => set((state) => ({ view: newView })), - }) -) +export const useLandingConfigStore = create()((set) => ({ + searchInput: '', + selectedTags: [], + view: 'grid', + setSearchInput: (input) => set(() => ({ searchInput: input })), + setSelectedTags: (tagsArray) => set(() => ({ selectedTags: tagsArray })), + updateSingleTag: (tagId, isChecked) => + set( + produce((draft) => { + const index = draft.selectedTags.indexOf(tagId); + if (index === -1 && isChecked) { + draft.selectedTags.push(tagId); + } else if (index !== -1 && !isChecked) { + draft.selectedTags.splice(index, 1); + } + }), + ), + setView: (newView) => set(() => ({ view: newView })), +})); diff --git a/src/store/usePaginationStore.ts b/src/store/usePaginationStore.ts index 82adec97..0b7de6a7 100644 --- a/src/store/usePaginationStore.ts +++ b/src/store/usePaginationStore.ts @@ -1,12 +1,7 @@ -import { create } from 'zustand' -import { APIConfiguration } from '../../packages/common/types'; +import { APIConfiguration } from '@apidocs/common'; +import { create } from 'zustand'; - -export const defaultAvailablePerPage: ReadonlyArray = [ - 10, - 20, - 50 -]; +export const defaultAvailablePerPage: ReadonlyArray = [10, 20, 50]; export interface PaginationStore { count: number; @@ -20,16 +15,14 @@ export interface PaginationStore { setItems: (elements: ReadonlyArray) => void; } -export const usePaginationStore = create()( - (set) => ({ - count: 0, - perPage: 10, - page: 1, - availablePerPage: defaultAvailablePerPage, - items: [], - setPerPage: (input) => set((state) => ({ perPage: input })), - setPage: (input) => set((state) => ({ page: input })), - setAvailablePerPage: (inputArr) => set((state) => ({ availablePerPage: inputArr })), - setItems: (elements) => set((state) => ({ items: elements })), - }) -) +export const usePaginationStore = create()((set) => ({ + count: 0, + perPage: 10, + page: 1, + availablePerPage: defaultAvailablePerPage, + items: [], + setPerPage: (input) => set(() => ({ perPage: input })), + setPage: (input) => set(() => ({ page: input })), + setAvailablePerPage: (inputArr) => set(() => ({ availablePerPage: inputArr })), + setItems: (elements) => set(() => ({ items: elements })), +})); diff --git a/src/tsconfig.json b/src/tsconfig.json new file mode 100644 index 00000000..8b6c62ca --- /dev/null +++ b/src/tsconfig.json @@ -0,0 +1,36 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "incremental": true, + "module": "esnext", + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + ".next/types/**/*.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/src/utils/DevelopersRedHatTaxonomy.ts b/src/utils/DevelopersRedHatTaxonomy.ts index 8de647da..eef9fe3d 100644 --- a/src/utils/DevelopersRedHatTaxonomy.ts +++ b/src/utils/DevelopersRedHatTaxonomy.ts @@ -1,28 +1,34 @@ -import {APILabel, DevRedHatTaxonomy} from "@apidocs/common"; +import { APILabel, DevRedHatTaxonomy } from '@apidocs/common'; export interface DevelopersRedHatTaxonomy { - type: keyof DevRedHatTaxonomy; - value: string; + type: keyof DevRedHatTaxonomy; + value: string; } type DictionaryKey = `${DevelopersRedHatTaxonomy['type']}:${string}`; -const addTaxonomy = (dictionary: Record, taxonomy: DevRedHatTaxonomy, type: DevelopersRedHatTaxonomy['type']) => { - const value = taxonomy[type]; - if (value) { - dictionary[`product:${type}`] = { - type, - value - } - } -} +const addTaxonomy = ( + dictionary: Record, + taxonomy: DevRedHatTaxonomy, + type: DevelopersRedHatTaxonomy['type'], +) => { + const value = taxonomy[type]; + if (value) { + dictionary[`product:${type}`] = { + type, + value, + }; + } +}; export const fromApiLabels = (tags: ReadonlyArray): ReadonlyArray => { - const dictionary: Record = {}; - tags.map(tag => tag.devRedHatTaxonomy).forEach(taxonomy => { - addTaxonomy(dictionary, taxonomy, 'product'); - addTaxonomy(dictionary, taxonomy, 'topic'); + const dictionary: Record = {}; + tags + .map((tag) => tag.devRedHatTaxonomy) + .forEach((taxonomy) => { + addTaxonomy(dictionary, taxonomy, 'product'); + addTaxonomy(dictionary, taxonomy, 'topic'); }); - return Object.values(dictionary); -} + return Object.values(dictionary); +}; diff --git a/src/utils/Hash.ts b/src/utils/Hash.ts index cc82f66c..2c2ba00b 100644 --- a/src/utils/Hash.ts +++ b/src/utils/Hash.ts @@ -5,11 +5,11 @@ * @see http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/ */ export const stringHash = (str: string): number => { - let hash = 0; - for (let i = 0, len = str.length; i < len; i++) { - let chr = str.charCodeAt(i); - hash = (hash << 5) - hash + chr; - hash |= 0; // Convert to 32bit integer - } - return hash; -} + let hash = 0; + for (let i = 0, len = str.length; i < len; i++) { + const chr = str.charCodeAt(i); + hash = (hash << 5) - hash + chr; + hash |= 0; // Convert to 32bit integer + } + return hash; +}; diff --git a/src/utils/LanguageContext.tsx b/src/utils/LanguageContext.tsx index 64292010..fc0dd0dc 100644 --- a/src/utils/LanguageContext.tsx +++ b/src/utils/LanguageContext.tsx @@ -2,7 +2,6 @@ import React, { createContext, useState, useContext, ReactNode } from 'react'; import { SnippetInfoItem, SnippetItemsArray } from '../hooks/useSnippets'; - type LanguageContextType = { language: SnippetInfoItem; handleChangeLanguage: (newLanguage: SnippetInfoItem) => void; @@ -24,11 +23,7 @@ export const LanguageProvider = ({ children }: LanguageProviderProps) => { setLanguage(newLanguage); } - return ( - - {children} - - ); + return {children}; }; export const useLanguage = () => { diff --git a/src/utils/Openapi.ts b/src/utils/Openapi.ts index bf4cb2bf..7184a323 100644 --- a/src/utils/Openapi.ts +++ b/src/utils/Openapi.ts @@ -1,80 +1,91 @@ /** * Set of OpenAPI tools to work with the OpenAPI */ -import { OpenAPIV3 } from "openapi-types"; +import { OpenAPIV3 } from 'openapi-types'; import { mock } from 'mock-json-schema'; -type Referenceable = OpenAPIV3.SchemaObject | OpenAPIV3.ResponseObject | OpenAPIV3.ParameterObject - | OpenAPIV3.ExampleObject | OpenAPIV3.RequestBodyObject | OpenAPIV3.HeaderObject - | OpenAPIV3.SecuritySchemeObject | OpenAPIV3.LinkObject | OpenAPIV3.CallbackObject; +type Referenceable = + | OpenAPIV3.SchemaObject + | OpenAPIV3.ResponseObject + | OpenAPIV3.ParameterObject + | OpenAPIV3.ExampleObject + | OpenAPIV3.RequestBodyObject + | OpenAPIV3.HeaderObject + | OpenAPIV3.SecuritySchemeObject + | OpenAPIV3.LinkObject + | OpenAPIV3.CallbackObject; type StringMap = { - [key: string]: object; -} + [key: string]: object; +}; export type DeRefResponse = { - deRefData?: { - name: string; - path: string; - } + deRefData?: { + name: string; + path: string; + }; } & T; const isAReference = (refOrObject: OpenAPIV3.ReferenceObject | T): refOrObject is OpenAPIV3.ReferenceObject => { - // Editor might complain because of: - // Redundant 'typeof' check: '$ref' always has type 'string' - // This is wrong, as CallbackObject might also have $ref as a PathItemObject - return refOrObject && '$ref' in refOrObject && typeof refOrObject.$ref === 'string'; -} + // Editor might complain because of: + // Redundant 'typeof' check: '$ref' always has type 'string' + // This is wrong, as CallbackObject might also have $ref as a PathItemObject + return refOrObject && '$ref' in refOrObject && typeof refOrObject.$ref === 'string'; +}; export const deRef = (refOrObject: OpenAPIV3.ReferenceObject | T, base: OpenAPIV3.Document): DeRefResponse => { - if (isAReference(refOrObject)) { - return deRefTransverse(refOrObject.$ref, base); - } + if (isAReference(refOrObject)) { + return deRefTransverse(refOrObject.$ref, base); + } - return refOrObject; + return refOrObject; }; const deRefTransverse = (reference: string, base: OpenAPIV3.Document): DeRefResponse => { - let current: object = {}; + let current: object = {}; - const path = reference.split('/'); + const path = reference.split('/'); - const startAt = path.shift(); - if (startAt === '#') { - // Assume we don't refer documents outside - i.e. it starts with '#' - current = base; - } else { - throw new Error(`External reference found: ${reference}`); - } + const startAt = path.shift(); + if (startAt === '#') { + // Assume we don't refer documents outside - i.e. it starts with '#' + current = base; + } else { + throw new Error(`External reference found: ${reference}`); + } - for (const step of path) { - if (step in current) { - current = (current as StringMap)[step]; - } else { - throw new Error(`Path not found for ref ${reference}`); - } + for (const step of path) { + if (step in current) { + current = (current as StringMap)[step]; + } else { + throw new Error(`Path not found for ref ${reference}`); } - - return { - deRefData: { - name: path.at(-1)!, - path: reference - }, - ...current as T - }; -} + } + + return { + deRefData: { + name: path.at(-1)!, + path: reference, + }, + ...(current as T), + }; +}; // Todo: This probably needs more work export const recursiveDeRef = (refOrObject: OpenAPIV3.ReferenceObject | T, base: OpenAPIV3.Document): DeRefResponse => { - return recursiveDeRefInternal(refOrObject, { - document: base, - entities: {} - }) as DeRefResponse; -} + return recursiveDeRefInternal(refOrObject, { + document: base, + entities: {}, + }) as DeRefResponse; +}; interface RecursiveDeRefContext { - document: OpenAPIV3.Document; - entities: Record; + document: OpenAPIV3.Document; + entities: Record; +} + +function isDeRefResponse(defObject: object): defObject is DeRefResponse { + return !!(defObject && (defObject as DeRefResponse)?.deRefData?.path); } /* @@ -84,65 +95,69 @@ lib to create the example does not handle recursion - we need to keep track of r A simpler approach is to have a context per path and when found ignore the content */ const recursiveDeRefInternal = (refOrObject: object, context: RecursiveDeRefContext): object => { - let deRefObj: object; - if (isAReference(refOrObject)) { - if (context.entities[refOrObject.$ref]) { - return {}; - } else { - deRefObj = deRef(refOrObject, context.document); - context.entities[(deRefObj as DeRefResponse).deRefData?.path!] = deRefObj; - } + let deRefObj: object; + if (isAReference(refOrObject)) { + if (context.entities[refOrObject.$ref]) { + return {}; } else { - deRefObj = { - ...refOrObject - }; + deRefObj = deRef(refOrObject, context.document); + if (isDeRefResponse(deRefObj) && deRefObj.deRefData) { + context.entities[deRefObj.deRefData.path] = deRefObj; + } } + } else { + deRefObj = { + ...refOrObject, + }; + } - const recursiveDeRefArrayMap = (element: unknown): unknown => { - if (!element) { - return element; - } - - if (Array.isArray(element)) { - return element.map(recursiveDeRefArrayMap); - } else if (typeof element === 'object') { - return recursiveDeRefInternal(element, { - ...context, - entities: {...context.entities} - }); - } - - return element; + const recursiveDeRefArrayMap = (element: unknown): unknown => { + if (!element) { + return element; } - for (const [prop, value] of Object.entries(deRefObj)) { - if (Array.isArray(value)) { - (deRefObj as any)[prop] = value.map(recursiveDeRefArrayMap); - } else if (typeof value === 'object') { - // Todo: Minor typesafety - there must be a way to patch the Referenceable to convert all ReferenceObject to accept a DeRefResponse - (deRefObj as any)[prop] = recursiveDeRefInternal(value, { - ...context, - entities: {...context.entities} - }); - } + if (Array.isArray(element)) { + return element.map(recursiveDeRefArrayMap); + } else if (typeof element === 'object') { + return recursiveDeRefInternal(element, { + ...context, + entities: { ...context.entities }, + }); } - return deRefObj; -} + return element; + }; + + for (const [prop, value] of Object.entries(deRefObj)) { + if (Array.isArray(value)) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (deRefObj as any)[prop] = value.map(recursiveDeRefArrayMap); + } else if (typeof value === 'object') { + // Todo: Minor typesafety - there must be a way to patch the Referenceable to convert all ReferenceObject to accept a DeRefResponse + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (deRefObj as any)[prop] = recursiveDeRefInternal(value, { + ...context, + entities: { ...context.entities }, + }); + } + } + + return deRefObj; +}; type ExamplesObj = { - [key: string]: string; -} -export const buildExample = (responses: OpenAPIV3.ResponsesObject, document: OpenAPIV3.Document): ExamplesObj=> { - const examples: ExamplesObj = {} - Object.entries(responses).forEach(([code, response])=> { - const deRefResponse = deRef(response, document); - if (deRefResponse.content && deRefResponse.content['application/json']?.schema) { - // We need to deRef everything recursive to make the mock work - const jsonSchema = recursiveDeRef(deRefResponse.content['application/json'].schema, document); - examples[code] = JSON.stringify(mock(jsonSchema), undefined, 2); - } - }) - - return examples; -} + [key: string]: string; +}; +export const buildExample = (responses: OpenAPIV3.ResponsesObject, document: OpenAPIV3.Document): ExamplesObj => { + const examples: ExamplesObj = {}; + Object.entries(responses).forEach(([code, response]) => { + const deRefResponse = deRef(response, document); + if (deRefResponse.content && deRefResponse.content['application/json']?.schema) { + // We need to deRef everything recursive to make the mock work + const jsonSchema = recursiveDeRef(deRefResponse.content['application/json'].schema, document); + examples[code] = JSON.stringify(mock(jsonSchema), undefined, 2); + } + }); + + return examples; +}; diff --git a/src/utils/OpenapiSelectors.ts b/src/utils/OpenapiSelectors.ts index 4cc56338..b5377f1c 100644 --- a/src/utils/OpenapiSelectors.ts +++ b/src/utils/OpenapiSelectors.ts @@ -3,15 +3,15 @@ * Avoid having to repeat how to extract some specific data such as the "title with version" of the application. */ -import {OpenAPIV3} from "openapi-types"; +import { OpenAPIV3 } from 'openapi-types'; export const getTitleWithVersion = (openapi: OpenAPIV3.Document) => { - const title = openapi.info.title; - let version = openapi.info.version; + const title = openapi.info.title; + let version = openapi.info.version; - if (version.match(/^d/)) { - version = `v${version}`; - } + if (version.match(/^d/)) { + version = `v${version}`; + } - return `${title} ${version}`; -} + return `${title} ${version}`; +}; diff --git a/src/utils/Snippets.ts b/src/utils/Snippets.ts index 822d0fef..e0244b75 100644 --- a/src/utils/Snippets.ts +++ b/src/utils/Snippets.ts @@ -1,119 +1,126 @@ -import {OpenAPIV3} from "openapi-types"; +import { OpenAPIV3 } from 'openapi-types'; import { mock } from 'mock-json-schema'; import { DeRefResponse, deRef, recursiveDeRef } from './Openapi'; -import {Request as RequestFormat, Header, QueryString, PostData} from 'har-format' - +import { Request as RequestFormat, Header, QueryString, PostData } from 'har-format'; const getHeaders = (inferredContentType: string, params: DeRefResponse[], document: OpenAPIV3.Document): Header[] => { - const headers: Header[] = [] + const headers: Header[] = []; if (document.components?.securitySchemes) { - Object.values(document.components?.securitySchemes).forEach(s => { - const scheme = deRef(s, document) - if ("in" in scheme && scheme.in === "header") { - if (scheme.name === "Authorization") { - headers.push({name: scheme.name, value: "Bearer "}) + Object.values(document.components?.securitySchemes).forEach((s) => { + const scheme = deRef(s, document); + if ('in' in scheme && scheme.in === 'header') { + if (scheme.name === 'Authorization') { + headers.push({ name: scheme.name, value: 'Bearer ' }); } else { - headers.push({name: scheme.name, value: scheme.type}) + headers.push({ name: scheme.name, value: scheme.type }); } } }); } - params.forEach(param => { - if (param.in === "header" && param.required) { - let val = param.name - if (param.schema && "type" in param.schema) { - val = param.schema.type as string + params.forEach((param) => { + if (param.in === 'header' && param.required) { + let val = param.name; + if (param.schema && 'type' in param.schema) { + val = param.schema.type as string; } - headers.push({name: param.name, value: val}) + headers.push({ name: param.name, value: val }); } - }) + }); // setting 'Content-Type' as a default header - const hasContentType = headers.some(header => header.name === 'Content-Type'); + const hasContentType = headers.some((header) => header.name === 'Content-Type'); if (!hasContentType) { headers.push({ name: 'Content-Type', value: inferredContentType }); } - return headers -} + return headers; +}; const getQueryParams = (params: DeRefResponse[], document: OpenAPIV3.Document): QueryString[] => { - const queryParams = params.filter(param => param.in === 'query' && param.required) + const queryParams = params.filter((param) => param.in === 'query' && param.required); - const paramsWithValue: QueryString[] = queryParams.map(param => { - const paramName = param.name + const paramsWithValue: QueryString[] = queryParams.map((param) => { + const paramName = param.name; if (param.example) { - return {name: paramName, value: param.example} + return { name: paramName, value: param.example }; } - const paramSchema = param.schema ? deRef(param.schema, document) : undefined + const paramSchema = param.schema ? deRef(param.schema, document) : undefined; if (paramSchema && paramSchema.default) { - return {name: paramName, value: paramSchema.default} + return { name: paramName, value: paramSchema.default }; } if (param.examples) { - const example = Object.values(param.examples)[0] + const example = Object.values(param.examples)[0]; if ('value' in example) { - return {name: paramName, value: example.value} + return { name: paramName, value: example.value }; } } if (paramSchema && paramSchema.enum) { - const enums = paramSchema.enum + const enums = paramSchema.enum; if (enums.length > 0) { - return {name: paramName, value: enums[0]} + return { name: paramName, value: enums[0] }; } } - return {name: paramName, value: ''} - }) + return { name: paramName, value: '' }; + }); - return paramsWithValue -} + return paramsWithValue; +}; -const getPostData = (requestBody: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject | undefined, document: OpenAPIV3.Document): PostData | undefined => { +const getPostData = ( + requestBody: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject | undefined, + document: OpenAPIV3.Document, +): PostData | undefined => { if (!requestBody) { - return undefined + return undefined; } const deRefResponse = deRef(requestBody, document); if (!deRefResponse.content || !(deRefResponse.content && deRefResponse.content['application/json']?.schema)) { - return undefined + return undefined; } const jsonSchema = recursiveDeRef(deRefResponse.content['application/json'].schema, document); const requestBodyText = JSON.stringify(mock(jsonSchema), undefined, 2); - return {mimeType: 'application/json', text: requestBodyText} -} + return { mimeType: 'application/json', text: requestBodyText }; +}; -const inferContentType = (requestBody: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject | undefined, responses: OpenAPIV3.ResponsesObject): string => { +const inferContentType = ( + requestBody: OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject | undefined, + responses: OpenAPIV3.ResponsesObject, +): string => { let requestBodyContentTypes: string[] = []; if (requestBody && 'content' in requestBody) { - requestBodyContentTypes = Object.keys(requestBody.content) + requestBodyContentTypes = Object.keys(requestBody.content); } - const responsesContentTypes = Object.values(responses).map((value) => { - if ('content' in value && value.content !== undefined) { - return Object.keys(value.content)[0] - } - return undefined - }).filter(val => val !== undefined) as string[] + const responsesContentTypes = Object.values(responses) + .map((value) => { + if ('content' in value && value.content !== undefined) { + return Object.keys(value.content)[0]; + } + return undefined; + }) + .filter((val) => val !== undefined) as string[]; // giving precedence to the content type mentioned in the requestBody first if (requestBodyContentTypes.length > 0) { - return requestBodyContentTypes[0] + return requestBodyContentTypes[0]; } if (responsesContentTypes.length > 0) { - return responsesContentTypes[0] + return responsesContentTypes[0]; } // applicaton/json is the default content type if content type cannot be inferred - return "application/json" -} + return 'application/json'; +}; export interface BuildCodeSampleDataParams { verb: string; @@ -124,18 +131,18 @@ export interface BuildCodeSampleDataParams { responses: OpenAPIV3.ResponsesObject; document: OpenAPIV3.Document; } -export const buildCodeSampleData = ({verb, baseUrl, path, params, requestBody, responses, document}: BuildCodeSampleDataParams): RequestFormat => { - const inferredContentType = inferContentType(requestBody, responses) +export const buildCodeSampleData = ({ verb, baseUrl, path, params, requestBody, responses, document }: BuildCodeSampleDataParams): RequestFormat => { + const inferredContentType = inferContentType(requestBody, responses); - return ({ + return { method: verb.toUpperCase(), - url: baseUrl+path, - httpVersion: "HTTP/1.1", + url: baseUrl + path, + httpVersion: 'HTTP/1.1', cookies: [], headers: getHeaders(inferredContentType, params, document), queryString: getQueryParams(params, document), postData: getPostData(requestBody, document), headersSize: -1, bodySize: -1, - }) -} + }; +}; diff --git a/tsconfig.json b/tsconfig.json index b4b0b412..6d88c280 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2016", + "target": "ES2017", "lib": [ "dom", "dom.iterable", @@ -8,20 +8,37 @@ ], "allowJs": true, "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, + "noEmit": true, + "esModuleInterop": true, "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "Node", "resolveJsonModule": true, "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "importHelpers": true + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./src/*" + ] + }, + "forceConsistentCasingInFileNames": true }, "include": [ - "src" + "packages/common/**/*.ts", + "packages/common/**/*.tsx", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + "next-env.d.ts", + "out/types/**/*.ts" + ], + "exclude": [ + "node_modules" ] }