diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 6b4d2ba5c..16e7296ce 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -32,9 +32,3 @@ Thanks for submitting a pull request! Please provide enough information so that **Does this PR introduce a breaking change?** - -# Checklist - -Please ensure the following tasks are completed before submitting this pull request. - -- [ ] Read, understood, and followed the [contributing guidelines](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md). \ No newline at end of file diff --git a/.github/workflows/README.md b/.github/workflows/README.md index 615b6739b..4a3620353 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -13,7 +13,7 @@ This document outlines the guidelines for contributing to and maintaining GitHub Our YAML files are organized based on specific roles and event triggers. When creating or modifying workflows, ensure that: - The file roles described below are strictly maintained. -- Job sequences within workflows are preserved using [GitHub Action job dependencies](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/using-jobs-in-a-workflow#defining-prerequisite-jobs). +- Job sequences within workflows are preserved using [GitHub Action job dependencies](https://docs.github.com/en/actions/using-workflows/using-jobs-in-a-workflow#defining-prerequisite-jobs). ### File Categorization @@ -42,7 +42,7 @@ Separate files may be created for workflows that: - Only work correctly if they have a dedicated file. Examples: - - [Preview Deployment](./deploy-preview.yml): Deploys preview environments for pull requests. + - [Preview Deployment](./preview-deployment.yml): Deploys preview environments for pull requests. - [Production Deployment](./production-deployment.yml): Handles production deployments. - [CodeQL Code Scanning](./codeql.yml): Performs code security analysis. - [Check PR Dependencies](./pr-dependencies.yml): Enforces dependencies between PRs based on opening comments. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f78310092..315f1b55e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -81,7 +81,7 @@ jobs: - name: Get Changed Unauthorized files id: changed-unauth-files - uses: tj-actions/changed-files@v46 + uses: tj-actions/changed-files@v45 with: files: | .github/** diff --git a/.github/workflows/pr-body-validation.yml b/.github/workflows/pr-body-validation.yml deleted file mode 100644 index 8b2aaf89f..000000000 --- a/.github/workflows/pr-body-validation.yml +++ /dev/null @@ -1,110 +0,0 @@ -name: PR Body Validation - -on: - pull_request_target: - types: [opened, edited, synchronize, reopened] - -jobs: - check-pr-content: - runs-on: ubuntu-latest - permissions: - pull-requests: write - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Check PR content - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const pr = context.payload.pull_request; - const prBody = pr.body || ''; - - let missingItems = []; - - // Helper function to extract content between section headers - function extractSectionContent(content, sectionHeader) { - const regex = new RegExp(`\\*\\*${sectionHeader}\\*\\*(.*?)(?=\\*\\*|$)`, 's'); - const match = content.match(regex); - if (!match) return ''; - - // Remove HTML comments and trim whitespace - return match[1].replace(//g, '').trim(); - } - - // Helper function to check if content is meaningful - function hasMeaningfulContent(content) { - // Remove HTML comments, markdown symbols, and extra whitespace - const cleanContent = content - .replace(//g, '') - .replace(/[#*\[\]()_]/g, '') - .trim(); - return cleanContent.length >= 3; // Requiring at least 3 characters - } - - // Check for issue links - const issueRegex = /(closes|related to)\s+#\d+/i; - if (!issueRegex.test(prBody)) { - missingItems.push('issue reference'); - } - - // Check for kind of change - const changeContent = extractSectionContent(prBody, 'What kind of change does this PR introduce\\?'); - if (!hasMeaningfulContent(changeContent)) { - missingItems.push('kind of change description'); - } - - // Check for unchecked items in checklist - const checklistMatch = prBody.match(/# Checklist([\s\S]*?)(?=(?:#|$))/); - if (checklistMatch && checklistMatch[1].includes('- [ ]')) { - missingItems.push('completed checklist items'); - } - - // Get current labels - const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number - }); - - const hasNeedsInfoLabel = currentLabels.some(label => label.name === 'needs-info'); - - if (missingItems.length > 0) { - // If there are missing items, add comment and label - const missingItemsList = missingItems.join(', '); - const comment = `Hi @${pr.user.login}! Thanks a lot for your contribution! - - I noticed that the following required information is missing or incomplete: ${missingItemsList} - - Please update the PR description to include this information. You can find placeholders in the PR template for these items. - - Thanks a lot!`; - - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - body: comment - }); - - // Add needs-info label if not already present - if (!hasNeedsInfoLabel) { - await github.rest.issues.addLabels({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - labels: ['needs-info'] - }); - } - core.setFailed(`The following required information is missing or incomplete: ${missingItemsList}`); - } else if (hasNeedsInfoLabel) { - // If all requirements are met and the needs-info label exists, remove it - await github.rest.issues.removeLabel({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - name: 'needs-info' - }); - } diff --git a/INSTALLATION.md b/INSTALLATION.md index 55ee890d0..f78296c42 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -26,7 +26,7 @@ This guide provides step-by-step instructions for installing the JSON Schema Web - [Formatting](#formatting) - [Linting](#linting) - [Husky for Git Hooks](#husky-for-git-hooks) -6. [Run locally using Docker](#run-locally-using-docker) +6. [Run locally using Docker](#docker-deployment) - [Prerequisites](#prerequisites) - [Steps](#steps) diff --git a/components/AmbassadorsBanner.tsx b/components/AmbassadorsBanner.tsx index c159b1e98..68514fb21 100644 --- a/components/AmbassadorsBanner.tsx +++ b/components/AmbassadorsBanner.tsx @@ -15,7 +15,7 @@ const AmbassadorBanner: React.FC = () => {

Become Ambassador diff --git a/components/Layout.tsx b/components/Layout.tsx index 892fe5a76..441b83188 100644 --- a/components/Layout.tsx +++ b/components/Layout.tsx @@ -8,6 +8,7 @@ import useStore from '~/store'; import { SectionContext } from '~/context'; import { useTheme } from 'next-themes'; import DarkModeToggle from './DarkModeToggle'; +import extractPathWithoutFragment from '~/lib/extractPathWithoutFragment'; import ScrollButton from './ScrollButton'; import Image from 'next/image'; @@ -137,7 +138,7 @@ const MainNavLink = ({ className?: string; }) => { const router = useRouter(); - const isActiveNav = router.asPath.startsWith(uri); + const isActiveNav = extractPathWithoutFragment(router.asPath) === uri; return ( JSON Bin Pack" + "summary": "Compress JSON data for storage/transmission. For example: https://jsonbinpack.sourcemeta.com" }, { "title": "Fuzzing, enumeration, and generation", @@ -37,7 +37,7 @@ }, { "title": "Automated Testing", - "summary": "Good definitions of input/output that schemas provide enable contract and property-based testing scenarios. For example: Schemathesis" + "summary": "Good definitions of input/output that schemas provide enable contract and property based testing scenarios. For example: https://schemathesis.readthedocs.io/en/stable/" }, { "title": "Machine-readable profiles of Web resources", diff --git a/package.json b/package.json index c5619ac71..662304e73 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "devDependencies": { "@babel/core": "^7.26.0", "@babel/preset-env": "^7.26.0", - "@cypress/code-coverage": "^3.13.12", + "@cypress/code-coverage": "^3.13.6", "@next/eslint-plugin-next": "^14.0.1", "@svgr/webpack": "^8.1.0", "@types/babel__core": "^7", @@ -72,7 +72,7 @@ "@types/react-text-truncate": "^0.19.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", - "autoprefixer": "^10.4.21", + "autoprefixer": "^10.4.20", "babel-plugin-istanbul": "^7.0.0", "cypress": "^13.13.1", "eslint": "8.57.0", diff --git a/pages/404.page.tsx b/pages/404.page.tsx deleted file mode 100644 index ce3753c68..000000000 --- a/pages/404.page.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import Link from 'next/link'; -import { useTheme } from 'next-themes'; - -const Logo = () => { - const { resolvedTheme } = useTheme(); - const [imageSrc, setImageSrc] = useState('/img/logos/logo-blue.svg'); - - useEffect(() => { - const src = - resolvedTheme === 'dark' - ? '/img/logos/logo-white.svg' - : '/img/logos/logo-blue.svg'; - setImageSrc(src); - }, [resolvedTheme]); - - return ( - - - - ); -}; - -export default function PageNotFound() { - return ( -
- -

- 404 - Page Not Found! -

- -

- 404 -

-

Page Not Found!

- -
- The page you were looking for doesn't exist. -
- - BACK TO HOME - -
- ); -} diff --git a/pages/blog/index.page.tsx b/pages/blog/index.page.tsx index d497f0e60..a866346cf 100644 --- a/pages/blog/index.page.tsx +++ b/pages/blog/index.page.tsx @@ -122,9 +122,9 @@ export default function StaticMarkdownPage({ JSON Schema Blog -
+
{recentBlog[0] && ( -
+
-
+
-
-
-
+
@@ -281,7 +277,7 @@ export default function StaticMarkdownPage({ {frontmatter.type || 'Unknown Type'}
-
+
{frontmatter.title}
diff --git a/pages/blog/posts/[slug].page.tsx b/pages/blog/posts/[slug].page.tsx index 4f4ce4d9a..14301176d 100644 --- a/pages/blog/posts/[slug].page.tsx +++ b/pages/blog/posts/[slug].page.tsx @@ -112,7 +112,7 @@ export default function StaticMarkdownPage({
diff --git a/pages/community/index.page.tsx b/pages/community/index.page.tsx index 6a4c582c3..576467680 100644 --- a/pages/community/index.page.tsx +++ b/pages/community/index.page.tsx @@ -155,19 +155,16 @@ export default function communityPages(props: any) {

Ambassadors Program

-

+

The JSON Schema Ambassadors Program recognize the people who drive adoption, innovation and knowledge sharing in the JSON Schema community.

-
+
Become an ambassador @@ -179,18 +176,15 @@ export default function communityPages(props: any) {
-
-

+
+

Join the JSON Schema Slack workspace!

-

+

Join our Slack to ask questions, get feedback on your projects, and connect with +5000 practitioners and experts.

-

-
-

- We hold monthly Office Hours and weekly Open Community - Working Meetings. Office Hours are every first Tuesday of - the month at 15:00 BST, and by appointment. Open Community - Working Meetings are every Monday at 14:00 PT. -

-
- +

+ We hold monthly Office Hours and weekly Open Community Working + Meetings. Office Hours are every first Tuesday of the month at + 15:00 BST, and by appointment. Open Community Working Meetings + are every Monday at 14:00 PT. +

+
@@ -282,30 +270,28 @@ export default function communityPages(props: any) {
the JSON Schema Blog! -
-

-

- Want to publish a blog post? Check out the  - - guidelines - -  and submit yours! -

-

-
+

+

+ Want to publish a blog post? Check out the  - Read blog + guidelines -

+  and submit yours! +

{' '} + +
diff --git a/pages/implementers/index.page.tsx b/pages/implementers/index.page.tsx index 7579ba030..f62aace0e 100644 --- a/pages/implementers/index.page.tsx +++ b/pages/implementers/index.page.tsx @@ -52,7 +52,7 @@ export default function ContentExample({ diff --git a/pages/index.page.tsx b/pages/index.page.tsx index 5b9c988e0..ab35d29d8 100644 --- a/pages/index.page.tsx +++ b/pages/index.page.tsx @@ -583,13 +583,20 @@ const Home = (props: any) => { > sponsor - or a{' '} + , a{' '} backer {' '} + or hiring our{' '} + + pro services + .

diff --git a/pages/learn/getting-started-step-by-step/getting-started-step-by-step.md b/pages/learn/getting-started-step-by-step/getting-started-step-by-step.md index e768b85ac..df3383540 100644 --- a/pages/learn/getting-started-step-by-step/getting-started-step-by-step.md +++ b/pages/learn/getting-started-step-by-step/getting-started-step-by-step.md @@ -581,10 +581,10 @@ With the external schema reference, the overall schema looks like this: ## Validate JSON data against the schema -Now that you have your JSON Schema, it is time to validate [JSON data](https://json-schema.org/learn/glossary#instance) against it using a [JSON Schema Validator](https://json-schema.org/tools?query=&sortBy=name&sortOrder=ascending&groupBy=toolingTypes&licenses=&languages=&drafts=&toolingTypes=validator). +Now that you have your JSON Schema is time to validate [JSON data](https://json-schema.org/learn/glossary#instance) against it using a [JSON Schema Validator](https://json-schema.org/tools?query=&sortBy=name&sortOrder=ascending&groupBy=toolingTypes&licenses=&languages=&drafts=&toolingTypes=validator). -A Validator is a tool that implements the JSON Schema specification. All validators works in a similar way: they take a JSON Schema and a JSON Instance as input and they return the validation result as output. +A Validator is a tool that implements the JSON Schema specification. All validators works in a similar way: they take a JSON Schema and a JSON Instance as input and they returns the validation result as output. ![How JSON Schema works](https://json-schema.org/img/json_schema.svg) -To try it yourself, please visit [Tools](https://json-schema.org/tools#validators) and select the validator that best suits your needs, or use the editors available below to explore the different Schemas and Instances and see the different validation results. +To try it yourself, please visit [Tools](https://json-schema.org/tools#validators) and select the validator that better suit your needs, or use the editors available below to explore the different Schemas and Instances and see the different validation results. diff --git a/pages/overview/use-cases/index.page.tsx b/pages/overview/use-cases/index.page.tsx index 6dbf7905a..466a59158 100644 --- a/pages/overview/use-cases/index.page.tsx +++ b/pages/overview/use-cases/index.page.tsx @@ -18,12 +18,12 @@ export default function Content() { {newTitle} {newTitle} -

+

Discover everything you can do with JSON Schema. This section presents the most common use cases for JSON Schema, but there may be many more applications waiting to be discovered.

-
+
{data.map((element, index) => ( ; transform: Transform; @@ -91,14 +79,8 @@ export default function Sidebar({ {filters.map(({ label, accessorKey }) => { const checkedValues = transform[accessorKey as keyof Transform] || []; - const IconComponent = - filterIcons[accessorKey as keyof typeof filterIcons]; return ( - } - > + }> {filterCriteria[accessorKey as FilterCriteriaFields] ?.map(String) .map((filterOption) => ( diff --git a/pages/tools/components/ui/DropdownMenu.tsx b/pages/tools/components/ui/DropdownMenu.tsx index 78beb8144..56fc69389 100644 --- a/pages/tools/components/ui/DropdownMenu.tsx +++ b/pages/tools/components/ui/DropdownMenu.tsx @@ -26,7 +26,7 @@ export default function DropdownMenu({ }, [router]); return ( -
+
{ @@ -34,7 +34,7 @@ export default function DropdownMenu({ }} > {React.cloneElement(icon, { - className: 'mr-2 ml-2', + className: 'mr-2', })}
{label} diff --git a/pages/understanding-json-schema/reference/metadata.md b/pages/understanding-json-schema/reference/metadata.md index 4cdd46b8d..55edd9aa7 100644 --- a/pages/understanding-json-schema/reference/metadata.md +++ b/pages/understanding-json-schema/reference/metadata.md @@ -6,7 +6,7 @@ prev: url: /understanding-json-schema/reference/const next: label: Annotations - url: /understanding-json-schema/reference/annotations + url: http://localhost:3000/understanding-json-schema/reference/annotations --- Annotations and comments are not directly related to the core structure and constraints of the JSON Schema itself. As such, keywords for annotations and comments are not required, however, using them can improve the maintainability of your schemas. diff --git a/public/icons/dialect.svg b/public/icons/dialect.svg deleted file mode 100644 index 45d952058..000000000 --- a/public/icons/dialect.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/public/icons/environment.svg b/public/icons/environment.svg deleted file mode 100644 index 976203d0a..000000000 --- a/public/icons/environment.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/public/icons/language.svg b/public/icons/language.svg deleted file mode 100644 index bbc79105e..000000000 --- a/public/icons/language.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/public/icons/license.svg b/public/icons/license.svg deleted file mode 100644 index cbc1dc79d..000000000 --- a/public/icons/license.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/public/icons/tooling.svg b/public/icons/tooling.svg deleted file mode 100644 index 7e32827d1..000000000 --- a/public/icons/tooling.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yarn.lock b/yarn.lock index 49d82b30c..d7233f64a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2846,14 +2846,14 @@ __metadata: languageName: node linkType: hard -"@cypress/code-coverage@npm:^3.13.12": - version: 3.13.12 - resolution: "@cypress/code-coverage@npm:3.13.12" +"@cypress/code-coverage@npm:^3.13.6": + version: 3.13.6 + resolution: "@cypress/code-coverage@npm:3.13.6" dependencies: "@cypress/webpack-preprocessor": "npm:^6.0.0" chalk: "npm:4.1.2" dayjs: "npm:1.11.13" - debug: "npm:4.4.0" + debug: "npm:4.3.7" execa: "npm:4.1.0" globby: "npm:11.1.0" istanbul-lib-coverage: "npm:^3.0.0" @@ -2865,7 +2865,7 @@ __metadata: babel-loader: ^8.3 || ^9 cypress: "*" webpack: ^4 || ^5 - checksum: 10c0/6ec9c618a38d4b0f2a7e415588cf618fd016da56250cc1ac2228b09a9a9be874370168875720c0c157d08a01da00690c65ca51e7656089200027fd2cc1a8e7d2 + checksum: 10c0/2b4407c7edcbf6a8e83d963ebf5c99b6506c2c96f62e18df6cd0addae54b0b4f9abfc180e720b673cd0ad6ba5dbaa4e03dda0ec9b36035bcf2d338979a312511 languageName: node linkType: hard @@ -4482,21 +4482,21 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:^10.4.21": - version: 10.4.21 - resolution: "autoprefixer@npm:10.4.21" +"autoprefixer@npm:^10.4.20": + version: 10.4.20 + resolution: "autoprefixer@npm:10.4.20" dependencies: - browserslist: "npm:^4.24.4" - caniuse-lite: "npm:^1.0.30001702" + browserslist: "npm:^4.23.3" + caniuse-lite: "npm:^1.0.30001646" fraction.js: "npm:^4.3.7" normalize-range: "npm:^0.1.2" - picocolors: "npm:^1.1.1" + picocolors: "npm:^1.0.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.1.0 bin: autoprefixer: bin/autoprefixer - checksum: 10c0/de5b71d26d0baff4bbfb3d59f7cf7114a6030c9eeb66167acf49a32c5b61c68e308f1e0f869d92334436a221035d08b51cd1b2f2c4689b8d955149423c16d4d4 + checksum: 10c0/e1f00978a26e7c5b54ab12036d8c13833fad7222828fc90914771b1263f51b28c7ddb5803049de4e77696cbd02bb25cfc3634e80533025bb26c26aacdf938940 languageName: node linkType: hard @@ -4784,20 +4784,6 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.24.4": - version: 4.24.4 - resolution: "browserslist@npm:4.24.4" - dependencies: - caniuse-lite: "npm:^1.0.30001688" - electron-to-chromium: "npm:^1.5.73" - node-releases: "npm:^2.0.19" - update-browserslist-db: "npm:^1.1.1" - bin: - browserslist: cli.js - checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9 - languageName: node - linkType: hard - "buffer-crc32@npm:~0.2.3": version: 0.2.13 resolution: "buffer-crc32@npm:0.2.13" @@ -4966,13 +4952,6 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001688, caniuse-lite@npm:^1.0.30001702": - version: 1.0.30001705 - resolution: "caniuse-lite@npm:1.0.30001705" - checksum: 10c0/f135a9075e36cc28a66a8f37145dca2bdc45ea18fd9fae2569e781e0f7156962d4fcac374640aa6421a70c6e8d23587bf9386f5561a1fe81bbbf36055b807243 - languageName: node - linkType: hard - "caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -5517,15 +5496,15 @@ __metadata: languageName: node linkType: hard -"debug@npm:4.4.0": - version: 4.4.0 - resolution: "debug@npm:4.4.0" +"debug@npm:4.3.7": + version: 4.3.7 + resolution: "debug@npm:4.3.7" dependencies: ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b languageName: node linkType: hard @@ -5782,13 +5761,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.73": - version: 1.5.119 - resolution: "electron-to-chromium@npm:1.5.119" - checksum: 10c0/f4ca0eb3af21d16d2c1fd480c5a43428ce4423ca887338d69bd3eadae818b6d6e799c62b1baac1bc4f76e4226f5fb15a6b0dc8965f601ac053e86508d3e8e41c - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -8329,7 +8301,7 @@ __metadata: dependencies: "@babel/core": "npm:^7.26.0" "@babel/preset-env": "npm:^7.26.0" - "@cypress/code-coverage": "npm:^3.13.12" + "@cypress/code-coverage": "npm:^3.13.6" "@docsearch/react": "npm:3.8.0" "@next/eslint-plugin-next": "npm:^14.0.1" "@svgr/webpack": "npm:^8.1.0" @@ -8344,7 +8316,7 @@ __metadata: "@types/react-text-truncate": "npm:^0.19.0" "@typescript-eslint/eslint-plugin": "npm:^6.21.0" "@typescript-eslint/parser": "npm:^6.21.0" - autoprefixer: "npm:^10.4.21" + autoprefixer: "npm:^10.4.20" axios: "npm:1.7.7" babel-loader: "npm:^9.2.1" babel-plugin-istanbul: "npm:^7.0.0" @@ -9225,13 +9197,6 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.19": - version: 2.0.19 - resolution: "node-releases@npm:2.0.19" - checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa - languageName: node - linkType: hard - "nopt@npm:^7.0.0": version: 7.2.1 resolution: "nopt@npm:7.2.1" @@ -9708,7 +9673,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": +"picocolors@npm:^1.1.0": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58