From a5b4e3a813c74e74483021f6e9548294662a8450 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Fri, 22 Aug 2025 19:29:57 -0400 Subject: [PATCH 1/7] feat(remark-lint): add strict rules --- packages/remark-lint/package.json | 3 +- packages/remark-lint/src/api.mjs | 3 + .../__tests__/invalid-type-reference.test.mjs | 33 + .../src/rules/duplicate-stability-nodes.mjs | 60 +- .../src/rules/invalid-type-reference.mjs | 25 + pnpm-lock.yaml | 1055 ++++++++++++++++- 6 files changed, 1115 insertions(+), 64 deletions(-) create mode 100644 packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs create mode 100644 packages/remark-lint/src/rules/invalid-type-reference.mjs diff --git a/packages/remark-lint/package.json b/packages/remark-lint/package.json index 1d2f99167a2ae..055e469a4d4d4 100644 --- a/packages/remark-lint/package.json +++ b/packages/remark-lint/package.json @@ -1,7 +1,7 @@ { "name": "@node-core/remark-lint", "type": "module", - "version": "1.0.0", + "version": "1.1.0", "exports": { ".": "./src/index.mjs", "./api": "./src/api.mjs" @@ -20,6 +20,7 @@ "test:unit": "cross-env NODE_NO_WARNINGS=1 node --experimental-test-coverage --test \"**/*.test.mjs\"" }, "dependencies": { + "@nodejs/doc-kit": "github:nodejs/doc-kit", "remark-gfm": "^4.0.1", "remark-lint-blockquote-indentation": "^4.0.1", "remark-lint-checkbox-character-style": "^5.0.1", diff --git a/packages/remark-lint/src/api.mjs b/packages/remark-lint/src/api.mjs index 962ad03e715a6..be572e689a57c 100644 --- a/packages/remark-lint/src/api.mjs +++ b/packages/remark-lint/src/api.mjs @@ -7,6 +7,7 @@ import remarkLintUnorderedListMarkerStyle from 'remark-lint-unordered-list-marke import basePreset from './index.mjs'; import duplicateStabilityNodes from './rules/duplicate-stability-nodes.mjs'; import hashedSelfReference from './rules/hashed-self-reference.mjs'; +import invalidTypeReference from './rules/invalid-type-reference.mjs'; import orderedReferences from './rules/ordered-references.mjs'; import requiredMetadata from './rules/required-metadata.mjs'; import yamlComments from './rules/yaml/index.mjs'; @@ -34,6 +35,7 @@ export default (options = {}) => ({ hashedSelfReference, orderedReferences, requiredMetadata, + invalidTypeReference, ].map(plugin => [plugin, options]), // External Rules @@ -61,6 +63,7 @@ export default (options = {}) => ({ { yes: 'Unix' }, { yes: 'Valgrind' }, { yes: 'V8' }, + { yes: 'npm' }, ], ], ], diff --git a/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs new file mode 100644 index 0000000000000..4bdbc7967cd35 --- /dev/null +++ b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs @@ -0,0 +1,33 @@ +import { describe, it } from 'node:test'; + +import { testRule } from './utils.mjs'; +import invalidTypeReference from '../invalid-type-reference.mjs'; + +const testCases = [ + { + name: 'no references', + input: 'Just some text.', + expected: [], + }, + { + name: 'single reference', + input: 'Just a {number}.', + expected: [], + }, + { + name: 'multiple references', + input: 'Psst, are you a {string} or a {boolean}', + expected: [], + }, + { + name: 'invalid references', + input: 'This is {invalid}.', + expected: ['Invalid type reference: {invalid}'], + }, +]; + +describe('hashed-self-references', () => { + for (const { name, input, expected } of testCases) { + it(name, () => testRule(invalidTypeReference, input, expected)); + } +}); diff --git a/packages/remark-lint/src/rules/duplicate-stability-nodes.mjs b/packages/remark-lint/src/rules/duplicate-stability-nodes.mjs index 0f41b039d145d..992d6036cb94e 100644 --- a/packages/remark-lint/src/rules/duplicate-stability-nodes.mjs +++ b/packages/remark-lint/src/rules/duplicate-stability-nodes.mjs @@ -1,53 +1,43 @@ +import createQueries from '@nodejs/doc-kit/src/utils/queries/index.mjs'; import { lintRule } from 'unified-lint-rule'; import { visit } from 'unist-util-visit'; -// TODO(@avivkeller): This is re-used from doc-kit -// Regex to match "Stability: " in blockquotes -const STABILITY = /Stability: ([0-5](?:\.[0-3])?)/; - /** * Finds and reports duplicate stability nodes * @type {import('unified-lint-rule').Rule} */ const duplicateStabilityNodes = (tree, vfile) => { - let currentDepth = 0; - let currentStability = -1; - let currentHeaderDepth = 0; + // Map depth → stability string recorded at that depth + const stabilityByDepth = new Map(); + let currentHeadingDepth = 0; // Current heading depth (0 for "no heading") - visit(tree, node => { - // Update the current heading depth whenever a heading node is encountered + visit(tree, ['heading', 'blockquote'], node => { if (node.type === 'heading') { - currentHeaderDepth = node.depth; + // Update heading depth and clear deeper recorded stabilities + currentHeadingDepth = node.depth; + for (const depth of stabilityByDepth.keys()) { + if (depth >= currentHeadingDepth) stabilityByDepth.delete(depth); + } + return; } - // Look for blockquotes which may contain stability indicators - if (node.type === 'blockquote') { - // Assume the first child is a paragraph - const paragraph = node.children?.[0]; - // And the first child of that paragraph is text - const text = paragraph?.children?.[0]; + // Handle blockquotes: extract text from paragraph > text structure + const text = node.children?.[0]?.children?.[0]?.value; + if (!text) return; - // Ensure structure is paragraph > text - if (paragraph?.type === 'paragraph' && text?.type === 'text') { - // Try to match "Stability: X" - const match = text.value.match(STABILITY); - if (match) { - const stability = parseFloat(match[1]); - // If the heading got deeper, and stability is valid and matches previous, report a duplicate - if ( - currentHeaderDepth > currentDepth && - stability >= 0 && - stability === currentStability - ) { - vfile.message('Duplicate stability node', node); - } else { - // Otherwise, record this stability and heading depth - currentDepth = currentHeaderDepth; - currentStability = stability; - } - } + const match = createQueries.QUERIES.stabilityIndexPrefix.exec(text); // Match "Stability: X" + if (!match) return; + + const stability = match[1]; + // Report if a duplicate stability exists in a parent heading depth + for (const [depth, prevStability] of stabilityByDepth) { + if (depth < currentHeadingDepth && prevStability === stability) { + vfile.message('Duplicate stability node', node); + break; } } + + stabilityByDepth.set(currentHeadingDepth, stability); }); }; diff --git a/packages/remark-lint/src/rules/invalid-type-reference.mjs b/packages/remark-lint/src/rules/invalid-type-reference.mjs new file mode 100644 index 0000000000000..1ad0184b0ae22 --- /dev/null +++ b/packages/remark-lint/src/rules/invalid-type-reference.mjs @@ -0,0 +1,25 @@ +import { transformTypeToReferenceLink } from '@nodejs/doc-kit/src/utils/parser/index.mjs'; +import createQueries from '@nodejs/doc-kit/src/utils/queries/index.mjs'; +import { lintRule } from 'unified-lint-rule'; +import { visit } from 'unist-util-visit'; + +/** + * Ensures that all self-references begin with `#` + * @type {import('unified-lint-rule').Rule} + */ +const invalidTypeReference = (tree, vfile) => { + visit(tree, createQueries.UNIST.isTextWithType, node => { + const types = node.value.match(createQueries.QUERIES.normalizeTypes); + + types.forEach(type => { + if (transformTypeToReferenceLink(type) === type) { + vfile.message(`Invalid type reference: ${type}`, node); + } + }); + }); +}; + +export default lintRule( + 'node-core:invalid-type-reference', + invalidTypeReference +); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c17f79f6944d3..fa83644b65de6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,10 +59,10 @@ importers: version: 9.34.0(jiti@2.5.1) eslint-import-resolver-typescript: specifier: ~4.4.4 - version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) + version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-import-x: specifier: ~4.16.1 - version: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + version: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) globals: specifier: ^16.3.0 version: 16.3.0 @@ -246,7 +246,7 @@ importers: version: 1.6.0 eslint-config-next: specifier: 15.5.2 - version: 15.5.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + version: 15.5.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) eslint-plugin-mdx: specifier: ~3.6.2 version: 3.6.2(eslint@9.34.0(jiti@2.5.1))(remark-lint-file-extension@3.0.1) @@ -268,9 +268,6 @@ importers: mdast-util-from-markdown: specifier: ^2.0.2 version: 2.0.2 - mdast-util-to-string: - specifier: ^4.0.0 - version: 4.0.0 nock: specifier: ^14.0.10 version: 14.0.10 @@ -341,6 +338,9 @@ importers: packages/remark-lint: dependencies: + '@nodejs/doc-kit': + specifier: github:nodejs/doc-kit + version: https://codeload.github.com/nodejs/doc-kit/tar.gz/a4149a4e19e749693f60bdbc6b21bac5d92404fc(@types/react@19.1.12)(eslint@9.34.0(jiti@2.5.1))(postcss@8.5.6)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3) remark-gfm: specifier: ^4.0.1 version: 4.0.1 @@ -1020,6 +1020,12 @@ packages: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} + '@clack/core@0.5.0': + resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} + + '@clack/prompts@0.11.0': + resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + '@cloudflare/kv-asset-handler@0.4.0': resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} @@ -1124,12 +1130,18 @@ packages: '@emnapi/core@1.4.5': resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/core@1.5.0': + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/runtime@1.5.0': resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} '@emnapi/wasi-threads@1.0.4': resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} @@ -1449,6 +1461,30 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint-react/ast@1.53.1': + resolution: {integrity: sha512-qvUC99ewtriJp9quVEOvZ6+RHcsMLfVQ0OhZ4/LupZUDhjW7GiX1dxJsFaxHdJ9rLNLhQyLSPmbAToeqUrSruQ==} + engines: {node: '>=18.18.0'} + + '@eslint-react/core@1.53.1': + resolution: {integrity: sha512-8prroos5/Uvvh8Tjl1HHCpq4HWD3hV9tYkm7uXgKA6kqj0jHlgRcQzuO6ZPP7feBcK3uOeug7xrq03BuG8QKCA==} + engines: {node: '>=18.18.0'} + + '@eslint-react/eff@1.53.1': + resolution: {integrity: sha512-uq20lPRAmsWRjIZm+mAV/2kZsU2nDqn5IJslxGWe3Vfdw23hoyhEw3S1KKlxbftwbTvsZjKvVP0iw3bZo/NUpg==} + engines: {node: '>=18.18.0'} + + '@eslint-react/kit@1.53.1': + resolution: {integrity: sha512-zOi2le9V4rMrJvQV4OeedGvMGvDT46OyFPOwXKs7m0tQu5vXVJ8qwIPaVQT1n/WIuvOg49OfmAVaHpGxK++xLQ==} + engines: {node: '>=18.18.0'} + + '@eslint-react/shared@1.53.1': + resolution: {integrity: sha512-gomJQmFqQgQVI3Ra4vTMG/s6a4bx3JqeNiTBjxBJt4C9iGaBj458GkP4LJHX7TM6xUzX+fMSKOPX7eV3C/+UCw==} + engines: {node: '>=18.18.0'} + + '@eslint-react/var@1.53.1': + resolution: {integrity: sha512-yzwopvPntcHU7mmDvWzRo1fb8QhjD8eDRRohD11rTV1u7nWO4QbJi0pOyugQakvte1/W11Y0Vr8Of0Ojk/A6zg==} + engines: {node: '>=18.18.0'} + '@eslint/config-array@0.21.0': resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1824,6 +1860,36 @@ packages: '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + '@minify-html/node-darwin-arm64@0.16.4': + resolution: {integrity: sha512-9H8hcywDb8zo2jEJfaIAibgsKjMqE+XF7SyqTtJ5H8lVXHxffOkawH4TQtphf9V/x7zXeb/nByAvHe1orJ/RHA==} + cpu: [arm64] + os: [darwin] + + '@minify-html/node-darwin-x64@0.16.4': + resolution: {integrity: sha512-P0Krf5nwXbccMrC7ragKAIVOENHFoVRQi+v/8k5pmfjrNlxgXGVILacG0FbUZXsH2Z2XaIo39HxuMf70L6wQlA==} + cpu: [x64] + os: [darwin] + + '@minify-html/node-linux-arm64@0.16.4': + resolution: {integrity: sha512-GDRExKf7AmyAdBTdhMkMyzFhJu5VeyJTu0OnNH2ekp69JrhQTrrrt9UYqnjen+7qLIaZB/R8urDRAYNk0HZi5w==} + cpu: [arm64] + os: [linux] + + '@minify-html/node-linux-x64@0.16.4': + resolution: {integrity: sha512-MS/gF1gxJoeHqEGcb1xoUIRv6gVin4cGJszgHPYSikzkK8Yg0p6rVOZdDAE4AAnp/NW0DYNq7fwYgw3igmppFw==} + cpu: [x64] + os: [linux] + + '@minify-html/node-win32-x64@0.16.4': + resolution: {integrity: sha512-SCY7hzIqG1RclU0QzU2MlGtPOujPu6dvaPYqDvhAHpkvRXtX0hnyOrrfqf7GcBdDbASxV8LDlBWpY46JO2cjAA==} + cpu: [x64] + os: [win32] + + '@minify-html/node@0.16.4': + resolution: {integrity: sha512-ykQgl6xcQQDE1shUExeObPSNwAf00DVUt/GrxdjiqFNCVGu7DXK9nuH29sNTyKKYnJJLZAi6OEib2bDfxW3udg==} + engines: {node: '>= 8.6.0'} + hasBin: true + '@mswjs/interceptors@0.39.6': resolution: {integrity: sha512-bndDP83naYYkfayr/qhBHMhk0YGwS1iv6vaEGcr0SQbO0IZtbOPqjKjds/WcG+bJA+1T5vCx6kprKOzn5Bg+Vw==} engines: {node: '>=18'} @@ -1831,6 +1897,9 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@napi-rs/wasm-runtime@1.0.5': + resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==} + '@next/env@15.5.2': resolution: {integrity: sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==} @@ -1897,6 +1966,13 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} + '@node-core/rehype-shiki@1.1.0': + resolution: {integrity: sha512-CieFjBQ1DQl4DBiir0hNjCn3CuvI/ZntAs7ZWRLyVUFdgNEnucKRSoWIifpUTH0t6mOZhFhaVFWmNv/7UvtGPg==} + + '@node-core/ui-components@1.2.0': + resolution: {integrity: sha512-ek2Az9xZf7qxuq5uCHls76tX0GJOuzaTTvtXiVQlM3s6Bad6W/GT5aaNVoMXmE357xo/vBm1RYtw5N9FMd799A==} + engines: {node: '>=20'} + '@node-minify/core@8.0.6': resolution: {integrity: sha512-/vxN46ieWDLU67CmgbArEvOb41zlYFOkOtr9QW9CnTrBLuTyGgkyNWC2y5+khvRw3Br58p2B5ZVSx/PxCTru6g==} engines: {node: '>=16.0.0'} @@ -1909,6 +1985,11 @@ packages: resolution: {integrity: sha512-csY4qcR7jUwiZmkreNTJhcypQfts2aY2CK+a+rXgXUImZiZiySh0FvwHjRnlqWKvg+y6ae9lHFzDRjBTmqlTIQ==} engines: {node: '>=16.0.0'} + '@nodejs/doc-kit@https://codeload.github.com/nodejs/doc-kit/tar.gz/a4149a4e19e749693f60bdbc6b21bac5d92404fc': + resolution: {tarball: https://codeload.github.com/nodejs/doc-kit/tar.gz/a4149a4e19e749693f60bdbc6b21bac5d92404fc} + version: 0.0.0 + hasBin: true + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2047,6 +2128,10 @@ packages: '@orama/highlight@0.1.9': resolution: {integrity: sha512-eH4uZMea4R9x9vBFJyS/87oR4Y8oIKxF7e1SItJ9DhPlexZWMVZRlFYvHS1BM/563/dU240ct4ZaGHoYKiCkyQ==} + '@orama/orama@3.1.14': + resolution: {integrity: sha512-Iq4RxYC7y0pA/hLgcUGpYYs5Vze4qNmJk0Qi1uIrg2bHGpm6A06nbjWcH9h4HQsddkDFFlanLj/zYBH3Sxdb4w==} + engines: {node: '>= 20.0.0'} + '@orama/orama@3.1.6': resolution: {integrity: sha512-qtSrqCqRU93SjEBedz987tvWao1YQSELjBhGkHYGVP7Dg0lBWP6d+uZEIt5gxTAYio/YWWlhivmRABvRfPLmnQ==} engines: {node: '>= 16.0.0'} @@ -2074,6 +2159,9 @@ packages: '@oramacloud/client@2.1.4': resolution: {integrity: sha512-uNPFs4wq/iOPbggCwTkVNbIr64Vfd7ZS/h+cricXVnzXWocjDTfJ3wLL4lr0qiSu41g8z+eCAGBqJ30RO2O4AA==} + '@oxc-project/types@0.93.0': + resolution: {integrity: sha512-yNtwmWZIBtJsMr5TEfoZFDxIWV6OdScOpza/f5YxbqUMJk+j6QX3Cf3jgZShGEFYWQJ5j9mJ6jM0tZHu2J9Yrg==} + '@phosphor-icons/webcomponents@2.1.5': resolution: {integrity: sha512-JcvQkZxvcX2jK+QCclm8+e8HXqtdFW9xV4/kk2aL9Y3dJA2oQVt+pzbv1orkumz3rfx4K9mn9fDoMr1He1yr7Q==} @@ -2506,6 +2594,101 @@ packages: '@reporters/github@1.10.0': resolution: {integrity: sha512-tchP8NR7poV/0H9s8lOqvIcJfjM2AWvq4pMU+WI9HEQR46wkdkNWmx9YGBAUn9kA1WeKDlun0MC7/f+cNtt+4Q==} + '@rolldown/binding-android-arm64@1.0.0-beta.41': + resolution: {integrity: sha512-Edflndd9lU7JVhVIvJlZhdCj5DkhYDJPIRn4Dx0RUdfc8asP9xHOI5gMd8MesDDx+BJpdIT/uAmVTearteU/mQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.41': + resolution: {integrity: sha512-XGCzqfjdk7550PlyZRTBKbypXrB7ATtXhw/+bjtxnklLQs0mKP/XkQVOKyn9qGKSlvH8I56JLYryVxl0PCvSNw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.41': + resolution: {integrity: sha512-Ho6lIwGJed98zub7n0xcRKuEtnZgbxevAmO4x3zn3C3N4GVXZD5xvCvTVxSMoeBJwTcIYzkVDRTIhylQNsTgLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.41': + resolution: {integrity: sha512-ijAZETywvL+gACjbT4zBnCp5ez1JhTRs6OxRN4J+D6AzDRbU2zb01Esl51RP5/8ZOlvB37xxsRQ3X4YRVyYb3g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.41': + resolution: {integrity: sha512-EgIOZt7UildXKFEFvaiLNBXm+4ggQyGe3E5Z1QP9uRcJJs9omihOnm897FwOBQdCuMvI49iBgjFrkhH+wMJ2MA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.41': + resolution: {integrity: sha512-F8bUwJq8v/JAU8HSwgF4dztoqJ+FjdyjuvX4//3+Fbe2we9UktFeZ27U4lRMXF1vxWtdV4ey6oCSqI7yUrSEeg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.41': + resolution: {integrity: sha512-MioXcCIX/wB1pBnBoJx8q4OGucUAfC1+/X1ilKFsjDK05VwbLZGRgOVD5OJJpUQPK86DhQciNBrfOKDiatxNmg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.41': + resolution: {integrity: sha512-m66M61fizvRCwt5pOEiZQMiwBL9/y0bwU/+Kc4Ce/Pef6YfoEkR28y+DzN9rMdjo8Z28NXjsDPq9nH4mXnAP0g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.41': + resolution: {integrity: sha512-yRxlSfBvWnnfrdtJfvi9lg8xfG5mPuyoSHm0X01oiE8ArmLRvoJGHUTJydCYz+wbK2esbq5J4B4Tq9WAsOlP1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.41': + resolution: {integrity: sha512-PHVxYhBpi8UViS3/hcvQQb9RFqCtvFmFU1PvUoTRiUdBtgHA6fONNHU4x796lgzNlVSD3DO/MZNk1s5/ozSMQg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.41': + resolution: {integrity: sha512-OAfcO37ME6GGWmj9qTaDT7jY4rM0T2z0/8ujdQIJQ2x2nl+ztO32EIwURfmXOK0U1tzkyuaKYvE34Pug/ucXlQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.41': + resolution: {integrity: sha512-NIYGuCcuXaq5BC4Q3upbiMBvmZsTsEPG9k/8QKQdmrch+ocSy5Jv9tdpdmXJyighKqm182nh/zBt+tSJkYoNlg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.41': + resolution: {integrity: sha512-kANdsDbE5FkEOb5NrCGBJBCaZ2Sabp3D7d4PRqMYJqyLljwh9mDyYyYSv5+QNvdAmifj+f3lviNEUUuUZPEFPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.41': + resolution: {integrity: sha512-UlpxKmFdik0Y2VjZrgUCgoYArZJiZllXgIipdBRV1hw6uK45UbQabSTW6Kp6enuOu7vouYWftwhuxfpE8J2JAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.41': + resolution: {integrity: sha512-ycMEPrS3StOIeb87BT3/+bu+blEtyvwQ4zmo2IcJQy0Rd1DAAhKksA0iUZ3MYSpJtjlPhg0Eo6mvVS6ggPhRbw==} + + '@rollup/plugin-virtual@3.0.2': + resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-darwin-arm64@4.34.9': resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} cpu: [arm64] @@ -2561,36 +2744,72 @@ packages: '@shikijs/core@3.12.0': resolution: {integrity: sha512-rPfCBd6gHIKBPpf2hKKWn2ISPSrmRKAFi+bYDjvZHpzs3zlksWvEwaF3Z4jnvW+xHxSRef7qDooIJkY0RpA9EA==} + '@shikijs/core@3.13.0': + resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} + + '@shikijs/core@3.8.1': + resolution: {integrity: sha512-uTSXzUBQ/IgFcUa6gmGShCHr4tMdR3pxUiiWKDm8pd42UKJdYhkAYsAmHX5mTwybQ5VyGDgTjW4qKSsRvGSang==} + '@shikijs/engine-javascript@1.29.2': resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} '@shikijs/engine-javascript@3.12.0': resolution: {integrity: sha512-Ni3nm4lnKxyKaDoXQQJYEayX052BL7D0ikU5laHp+ynxPpIF1WIwyhzrMU6WDN7AoAfggVR4Xqx3WN+JTS+BvA==} + '@shikijs/engine-javascript@3.13.0': + resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} + + '@shikijs/engine-javascript@3.8.1': + resolution: {integrity: sha512-rZRp3BM1llrHkuBPAdYAzjlF7OqlM0rm/7EWASeCcY7cRYZIrOnGIHE9qsLz5TCjGefxBFnwgIECzBs2vmOyKA==} + '@shikijs/engine-oniguruma@1.29.2': resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} '@shikijs/engine-oniguruma@3.12.0': resolution: {integrity: sha512-IfDl3oXPbJ/Jr2K8mLeQVpnF+FxjAc7ZPDkgr38uEw/Bg3u638neSrpwqOTnTHXt1aU0Fk1/J+/RBdst1kVqLg==} + '@shikijs/engine-oniguruma@3.13.0': + resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} + + '@shikijs/engine-oniguruma@3.8.1': + resolution: {integrity: sha512-KGQJZHlNY7c656qPFEQpIoqOuC4LrxjyNndRdzk5WKB/Ie87+NJCF1xo9KkOUxwxylk7rT6nhlZyTGTC4fCe1g==} + '@shikijs/langs@1.29.2': resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} '@shikijs/langs@3.12.0': resolution: {integrity: sha512-HIca0daEySJ8zuy9bdrtcBPhcYBo8wR1dyHk1vKrOuwDsITtZuQeGhEkcEfWc6IDyTcom7LRFCH6P7ljGSCEiQ==} + '@shikijs/langs@3.13.0': + resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} + + '@shikijs/langs@3.8.1': + resolution: {integrity: sha512-TjOFg2Wp1w07oKnXjs0AUMb4kJvujML+fJ1C5cmEj45lhjbUXtziT1x2bPQb9Db6kmPhkG5NI2tgYW1/DzhUuQ==} + '@shikijs/themes@1.29.2': resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} '@shikijs/themes@3.12.0': resolution: {integrity: sha512-/lxvQxSI5s4qZLV/AuFaA4Wt61t/0Oka/P9Lmpr1UV+HydNCczO3DMHOC/CsXCCpbv4Zq8sMD0cDa7mvaVoj0Q==} + '@shikijs/themes@3.13.0': + resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} + + '@shikijs/themes@3.8.1': + resolution: {integrity: sha512-Vu3t3BBLifc0GB0UPg2Pox1naTemrrvyZv2lkiSw3QayVV60me1ujFQwPZGgUTmwXl1yhCPW8Lieesm0CYruLQ==} + '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} '@shikijs/types@3.12.0': resolution: {integrity: sha512-jsFzm8hCeTINC3OCmTZdhR9DOl/foJWplH2Px0bTi4m8z59fnsueLsweX82oGcjRQ7mfQAluQYKGoH2VzsWY4A==} + '@shikijs/types@3.13.0': + resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} + + '@shikijs/types@3.8.1': + resolution: {integrity: sha512-5C39Q8/8r1I26suLh+5TPk1DTrbY/kn3IdWA5HdizR0FhlhD05zx5nKCqhzSfDHH3p4S0ZefxWd77DLV+8FhGg==} + '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -3256,6 +3475,9 @@ packages: '@tybys/wasm-util@0.10.0': resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -3403,6 +3625,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.45.0': + resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.31.1': resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3415,6 +3643,10 @@ packages: resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.45.0': + resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.41.0': resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3427,6 +3659,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.45.0': + resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.41.0': resolution: {integrity: sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3441,6 +3679,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.45.0': + resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.31.1': resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3457,6 +3702,10 @@ packages: resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.45.0': + resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.31.1': resolution: {integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3475,6 +3724,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.45.0': + resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.31.1': resolution: {integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3496,6 +3751,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.45.0': + resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.31.1': resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3508,6 +3770,10 @@ packages: resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.45.0': + resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -3856,6 +4122,10 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + engines: {node: '>=14'} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -3975,6 +4245,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + birecord@0.1.1: + resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==} + blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} @@ -4159,6 +4432,10 @@ packages: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -4173,6 +4450,9 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -4256,6 +4536,9 @@ packages: css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + css-selector-parser@3.1.3: + resolution: {integrity: sha512-gJMigczVZqYAk0hPVzx/M4Hm1D9QOtqkdQk9005TNzDIUGzo5cnHEDiKUT7jGPximL/oYb+LIitcHFQ4aKupxg==} + css-tree@3.1.0: resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -4352,6 +4635,14 @@ packages: babel-plugin-macros: optional: true + dedent@1.7.0: + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -4738,6 +5029,19 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + eslint-plugin-react-x@1.53.1: + resolution: {integrity: sha512-MwMNnVwiPem0U6SlejDF/ddA4h/lmP6imL1RDZ2m3pUBrcdcOwOx0gyiRVTA3ENnhRlWfHljHf5y7m8qDSxMEg==} + engines: {node: '>=18.18.0'} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + ts-api-utils: ^2.1.0 + typescript: ^4.9.5 || ^5.3.3 + peerDependenciesMeta: + ts-api-utils: + optional: true + typescript: + optional: true + eslint-plugin-react@7.37.5: resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} engines: {node: '>=4'} @@ -5132,6 +5436,10 @@ packages: resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} engines: {node: '>=18'} + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -5193,12 +5501,21 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + hast-util-heading-rank@3.0.0: resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + hast-util-to-estree@3.1.3: resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} @@ -5208,12 +5525,18 @@ packages: hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + hast-util-to-string@3.0.1: resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -5471,6 +5794,12 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-immutable-type@5.0.1: + resolution: {integrity: sha512-LkHEOGVZZXxGl8vDs+10k3DvP++SEoYEAJLRk6buTFi6kD7QekThV7xHS0j6gpnUCQ0zpud/gMDGiV4dQneLTg==} + peerDependencies: + eslint: '*' + typescript: '>=4.7.4' + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -5920,6 +6249,9 @@ packages: mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + mdast-util-slice-markdown@2.0.1: + resolution: {integrity: sha512-79sT5nWLuY9AUy6vpf3dgfblq6d+UiVm7HjraFNnx5/oc6ct/8/0xTZ+QxaYvEHNikvaI+F1pxwfQxiFwVrBCA==} + mdast-util-to-hast@13.2.0: resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} @@ -6639,6 +6971,14 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + preact-render-to-string@6.6.2: + resolution: {integrity: sha512-VJ++Pkzv6+ZOmeN/9Qvx0mRdXqnei1Lo3uu9bGvYHhoMI1VUkDT44hcpGbiokl/kuuYTayYa3yvmYTLZMplfMA==} + peerDependencies: + preact: '>=10 || >= 11.0.0-0' + + preact@10.27.2: + resolution: {integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -6743,6 +7083,9 @@ packages: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -6906,12 +7249,18 @@ packages: rehype-autolink-headings@7.1.0: resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + rehype-recma@1.0.0: resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} rehype-slug@6.0.0: resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -7121,6 +7470,11 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rolldown@1.0.0-beta.41: + resolution: {integrity: sha512-U+NPR0Bkg3wm61dteD2L4nAM1U9dtaqVrpDXwC36IKRHpEO/Ubpid4Nijpa2imPchcVNHfxVFwSSMJdwdGFUbg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -7232,6 +7586,12 @@ packages: shiki@3.12.0: resolution: {integrity: sha512-E+ke51tciraTHpaXYXfqnPZFSViKHhSQ3fiugThlfs/om/EonlQ0hSldcqgzOWWqX6PcjkKKzFgrjIaiPAXoaA==} + shiki@3.13.0: + resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} + + shiki@3.8.1: + resolution: {integrity: sha512-+MYIyjwGPCaegbpBeFN9+oOifI8CKiKG3awI/6h3JeT85c//H2wDW/xCJEGuQ5jPqtbboKNqNy+JyX9PYpGwNg==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -7258,6 +7618,9 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -7353,6 +7716,9 @@ packages: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} + string-ts@2.2.1: + resolution: {integrity: sha512-Q2u0gko67PLLhbte5HmPfdOjNvUKbKQM+mCNQae6jE91DmoFHY6HH9GcdqCeNx87DZ2KKjiFxmA0R/42OneGWw==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -7648,6 +8014,11 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-declaration-location@1.0.7: + resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==} + peerDependencies: + typescript: '>=4.0.0' + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -7655,6 +8026,9 @@ packages: ts-morph@22.0.0: resolution: {integrity: sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==} + ts-pattern@5.8.0: + resolution: {integrity: sha512-kIjN2qmWiHnhgr5DAkAafF9fwb0T5OhMVSWrm8XEdTFnX6+wfXwYOFjeF86UZ54vduqiR7BfqScFmXSzSaH8oA==} + ts-tqdm@0.8.6: resolution: {integrity: sha512-3X3M1PZcHtgQbnwizL+xU8CAgbYbeLHrrDwL9xxcZZrV5J+e7loJm1XrXozHjSkl44J0Zg0SgA8rXbh83kCkcQ==} @@ -7811,6 +8185,12 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unist-builder@4.0.0: + resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + unist-util-inspect@8.1.0: resolution: {integrity: sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==} @@ -7826,6 +8206,12 @@ packages: unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + unist-util-remove@4.0.0: + resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} + + unist-util-select@5.1.0: + resolution: {integrity: sha512-4A5mfokSHG/rNQ4g7gSbdEs+H586xyd24sdJqF1IWamqrLHvYb+DH48fzxowyOhOfK7YSqX+XlCojAyuuyyT2A==} + unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} @@ -7977,6 +8363,9 @@ packages: resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} engines: {node: '>=10.13.0'} + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-streams-polyfill@4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} @@ -8216,6 +8605,9 @@ packages: zod@3.24.3: resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} + zod@4.1.11: + resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -9367,6 +9759,17 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@clack/core@0.5.0': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.11.0': + dependencies: + '@clack/core': 0.5.0 + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0 @@ -9449,6 +9852,12 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.5.0': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 @@ -9459,6 +9868,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@epic-web/invariant@1.0.0': {} '@esbuild/aix-ppc64@0.25.4': @@ -9621,6 +10035,76 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} + '@eslint-react/ast@1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3)': + dependencies: + '@eslint-react/eff': 1.53.1 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@eslint-react/core@1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3)': + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/shared': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/var': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/type-utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + birecord: 0.1.1 + ts-pattern: 5.8.0 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@eslint-react/eff@1.53.1': {} + + '@eslint-react/kit@1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3)': + dependencies: + '@eslint-react/eff': 1.53.1 + '@typescript-eslint/utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + ts-pattern: 5.8.0 + zod: 4.1.11 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@eslint-react/shared@1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3)': + dependencies: + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + ts-pattern: 5.8.0 + zod: 4.1.11 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@eslint-react/var@1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3)': + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/eff': 1.53.1 + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 @@ -9980,6 +10464,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@minify-html/node-darwin-arm64@0.16.4': + optional: true + + '@minify-html/node-darwin-x64@0.16.4': + optional: true + + '@minify-html/node-linux-arm64@0.16.4': + optional: true + + '@minify-html/node-linux-x64@0.16.4': + optional: true + + '@minify-html/node-win32-x64@0.16.4': + optional: true + + '@minify-html/node@0.16.4': + optionalDependencies: + '@minify-html/node-darwin-arm64': 0.16.4 + '@minify-html/node-darwin-x64': 0.16.4 + '@minify-html/node-linux-arm64': 0.16.4 + '@minify-html/node-linux-x64': 0.16.4 + '@minify-html/node-win32-x64': 0.16.4 + '@mswjs/interceptors@0.39.6': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -9996,6 +10503,13 @@ snapshots: '@tybys/wasm-util': 0.10.0 optional: true + '@napi-rs/wasm-runtime@1.0.5': + dependencies: + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 + optional: true + '@next/env@15.5.2': {} '@next/eslint-plugin-next@15.5.2': @@ -10034,6 +10548,40 @@ snapshots: '@noble/hashes@1.8.0': {} + '@node-core/rehype-shiki@1.1.0': + dependencies: + '@shikijs/core': 3.12.0 + '@shikijs/engine-javascript': 3.12.0 + '@shikijs/engine-oniguruma': 3.12.0 + classnames: 2.5.1 + hast-util-to-string: 3.0.1 + shiki: 3.8.1 + unist-util-visit: 5.0.0 + + '@node-core/ui-components@1.2.0(@types/react@19.1.12)(postcss@8.5.6)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@heroicons/react': 2.2.0(react@19.1.1) + '@radix-ui/react-avatar': 1.1.10(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dialog': 1.1.15(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-label': 2.1.7(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-select': 2.2.6(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-separator': 1.1.7(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-tabs': 1.1.13(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-toast': 1.2.15(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-tooltip': 1.2.8(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tailwindcss/postcss': 4.1.12 + '@vcarl/remark-headings': 0.1.0 + classnames: 2.5.1 + postcss-calc: 10.1.1(postcss@8.5.6) + tailwindcss: 4.0.17 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - postcss + - react + - react-dom + '@node-minify/core@8.0.6': dependencies: '@node-minify/utils': 8.0.6 @@ -10049,11 +10597,71 @@ snapshots: dependencies: gzip-size: 6.0.0 - '@nodelib/fs.scandir@2.1.5': + '@nodejs/doc-kit@https://codeload.github.com/nodejs/doc-kit/tar.gz/a4149a4e19e749693f60bdbc6b21bac5d92404fc(@types/react@19.1.12)(eslint@9.34.0(jiti@2.5.1))(postcss@8.5.6)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - + '@clack/prompts': 0.11.0 + '@heroicons/react': 2.2.0(react@19.1.1) + '@minify-html/node': 0.16.4 + '@node-core/rehype-shiki': 1.1.0 + '@node-core/ui-components': 1.2.0(@types/react@19.1.12)(postcss@8.5.6)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@orama/orama': 3.1.14 + '@orama/react-components': 0.8.1(@stencil/core@4.30.0)(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@rollup/plugin-virtual': 3.0.2 + acorn: 8.15.0 + commander: 14.0.1 + dedent: 1.7.0 + eslint-plugin-react-x: 1.53.1(eslint@9.34.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3) + estree-util-to-js: 2.0.0 + estree-util-visit: 2.0.0 + github-slugger: 2.0.0 + glob: 11.0.3 + globals: 16.4.0 + hast-util-to-string: 3.0.1 + hastscript: 9.0.1 + lightningcss: 1.30.1 + mdast-util-slice-markdown: 2.0.1 + preact: 10.27.2 + preact-render-to-string: 6.6.2(preact@10.27.2) + reading-time: 1.5.0 + recma-jsx: 1.0.1(acorn@8.15.0) + rehype-raw: 7.0.0 + rehype-recma: 1.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-stringify: 11.0.0 + rolldown: 1.0.0-beta.41 + semver: 7.7.2 + shiki: 3.13.0 + unified: 11.0.5 + unist-builder: 4.0.0 + unist-util-find-after: 5.0.0 + unist-util-position: 5.0.0 + unist-util-remove: 4.0.0 + unist-util-select: 5.1.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + yaml: 2.8.1 + transitivePeerDependencies: + - '@stencil/core' + - '@types/react' + - '@types/react-dom' + - babel-plugin-macros + - eslint + - postcss + - react + - react-dom + - rollup + - supports-color + - ts-api-utils + - typescript + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + '@nodelib/fs.stat@2.0.5': {} '@nodelib/fs.walk@1.2.8': @@ -10246,6 +10854,8 @@ snapshots: '@orama/highlight@0.1.9': {} + '@orama/orama@3.1.14': {} + '@orama/orama@3.1.6': {} '@orama/orama@3.1.9': {} @@ -10293,6 +10903,8 @@ snapshots: '@orama/orama': 3.1.6 lodash: 4.17.21 + '@oxc-project/types@0.93.0': {} + '@phosphor-icons/webcomponents@2.1.5': dependencies: lit: 3.3.0 @@ -10705,6 +11317,54 @@ snapshots: '@actions/core': 1.11.1 stack-utils: 2.0.6 + '@rolldown/binding-android-arm64@1.0.0-beta.41': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.41': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.41': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.41': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.41': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.41': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.41': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.41': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.41': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.41': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.41': + dependencies: + '@napi-rs/wasm-runtime': 1.0.5 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.41': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.41': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.41': + optional: true + + '@rolldown/pluginutils@1.0.0-beta.41': {} + + '@rollup/plugin-virtual@3.0.2': {} + '@rollup/rollup-darwin-arm64@4.34.9': optional: true @@ -10751,6 +11411,20 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 + '@shikijs/core@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/core@3.8.1': + dependencies: + '@shikijs/types': 3.8.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + '@shikijs/engine-javascript@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -10763,6 +11437,18 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 + '@shikijs/engine-javascript@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 + + '@shikijs/engine-javascript@3.8.1': + dependencies: + '@shikijs/types': 3.8.1 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 + '@shikijs/engine-oniguruma@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -10773,6 +11459,16 @@ snapshots: '@shikijs/types': 3.12.0 '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/engine-oniguruma@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/engine-oniguruma@3.8.1': + dependencies: + '@shikijs/types': 3.8.1 + '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/langs@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -10781,6 +11477,14 @@ snapshots: dependencies: '@shikijs/types': 3.12.0 + '@shikijs/langs@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + + '@shikijs/langs@3.8.1': + dependencies: + '@shikijs/types': 3.8.1 + '@shikijs/themes@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -10789,6 +11493,14 @@ snapshots: dependencies: '@shikijs/types': 3.12.0 + '@shikijs/themes@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + + '@shikijs/themes@3.8.1': + dependencies: + '@shikijs/types': 3.8.1 + '@shikijs/types@1.29.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -10799,6 +11511,16 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/types@3.13.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/types@3.8.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/vscode-textmate@10.0.2': {} '@sindresorhus/is@7.0.2': {} @@ -11694,6 +12416,11 @@ snapshots: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -11882,6 +12609,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.45.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.8.3) + '@typescript-eslint/types': 8.45.0 + debug: 4.4.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.31.1': dependencies: '@typescript-eslint/types': 8.31.1 @@ -11897,6 +12633,11 @@ snapshots: '@typescript-eslint/types': 8.42.0 '@typescript-eslint/visitor-keys': 8.42.0 + '@typescript-eslint/scope-manager@8.45.0': + dependencies: + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 + '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 @@ -11905,6 +12646,10 @@ snapshots: dependencies: typescript: 5.8.3 + '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + '@typescript-eslint/type-utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.41.0 @@ -11929,6 +12674,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.34.0(jiti@2.5.1) + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.31.1': {} '@typescript-eslint/types@8.38.0': {} @@ -11937,6 +12694,8 @@ snapshots: '@typescript-eslint/types@8.42.0': {} + '@typescript-eslint/types@8.45.0': {} + '@typescript-eslint/typescript-estree@8.31.1(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.31.1 @@ -11983,6 +12742,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.45.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/project-service': 8.45.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.8.3) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 + debug: 4.4.1 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.31.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.8.0(eslint@9.34.0(jiti@2.5.1)) @@ -12016,6 +12791,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.8.0(eslint@9.34.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.8.3) + eslint: 9.34.0(jiti@2.5.1) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.31.1': dependencies: '@typescript-eslint/types': 8.31.1 @@ -12031,6 +12817,11 @@ snapshots: '@typescript-eslint/types': 8.42.0 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.45.0': + dependencies: + '@typescript-eslint/types': 8.45.0 + eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.3.0': {} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -12309,6 +13100,8 @@ snapshots: ansi-styles@6.2.1: {} + ansis@4.2.0: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -12446,6 +13239,8 @@ snapshots: binary-extensions@2.3.0: {} + birecord@0.1.1: {} + blake3-wasm@2.1.5: {} body-parser@2.2.0: @@ -12645,6 +13440,8 @@ snapshots: commander@14.0.0: {} + commander@14.0.1: {} + commander@2.20.3: {} commander@8.3.0: {} @@ -12653,6 +13450,8 @@ snapshots: commondir@1.0.1: {} + compare-versions@6.1.1: {} + concat-map@0.0.1: {} concat-stream@2.0.0: @@ -12740,6 +13539,8 @@ snapshots: domutils: 2.8.0 nth-check: 2.1.1 + css-selector-parser@3.1.3: {} + css-tree@3.1.0: dependencies: mdn-data: 2.12.2 @@ -12809,6 +13610,8 @@ snapshots: dedent@1.6.0: {} + dedent@1.7.0: {} + deep-eql@5.0.2: {} deep-is@0.1.4: {} @@ -13174,7 +13977,7 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-next@15.5.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3): + eslint-config-next@15.5.2(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3): dependencies: '@next/eslint-plugin-next': 15.5.2 '@rushstack/eslint-patch': 1.12.0 @@ -13182,8 +13985,8 @@ snapshots: '@typescript-eslint/parser': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) eslint: 9.34.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.5.1)) eslint-plugin-react-hooks: 5.2.0(eslint@9.34.0(jiti@2.5.1)) @@ -13209,7 +14012,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1 @@ -13220,12 +14023,12 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)): dependencies: debug: 4.4.1 eslint: 9.34.0(jiti@2.5.1) @@ -13236,8 +14039,8 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color @@ -13270,22 +14073,23 @@ snapshots: '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) eslint: 9.34.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color + optional: true - eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: + '@typescript-eslint/parser': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) eslint: 9.34.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - optional: true - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)): dependencies: '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 @@ -13298,7 +14102,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color @@ -13331,8 +14135,9 @@ snapshots: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + optional: true - eslint-plugin-import@2.32.0(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0(jiti@2.5.1)))(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)))(eslint@9.34.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13343,7 +14148,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.34.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13354,11 +14159,12 @@ snapshots: semver: 6.3.1 string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - optional: true eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0(jiti@2.5.1)): dependencies: @@ -13401,6 +14207,29 @@ snapshots: dependencies: eslint: 9.34.0(jiti@2.5.1) + eslint-plugin-react-x@1.53.1(eslint@9.34.0(jiti@2.5.1))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3): + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/core': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/shared': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-react/var': 1.53.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/type-utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + compare-versions: 6.1.1 + eslint: 9.34.0(jiti@2.5.1) + is-immutable-type: 5.0.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + optionalDependencies: + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.5.1)): dependencies: array-includes: 3.1.8 @@ -13918,6 +14747,8 @@ snapshots: globals@16.3.0: {} + globals@16.4.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -13982,6 +14813,17 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + hast-util-heading-rank@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -13990,6 +14832,26 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + hast-util-to-estree@3.1.3: dependencies: '@types/estree': 1.0.8 @@ -14045,6 +14907,16 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-parse5@8.0.0: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + hast-util-to-string@3.0.1: dependencies: '@types/hast': 3.0.4 @@ -14053,6 +14925,14 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + he@1.2.0: {} highlight.js@11.11.1: {} @@ -14312,6 +15192,16 @@ snapshots: is-hexadecimal@2.0.1: {} + is-immutable-type@5.0.1(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3): + dependencies: + '@typescript-eslint/type-utils': 8.45.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.8.3) + eslint: 9.34.0(jiti@2.5.1) + ts-api-utils: 2.1.0(typescript@5.8.3) + ts-declaration-location: 1.0.7(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + is-map@2.0.3: {} is-negative-zero@2.0.3: {} @@ -14873,6 +15763,8 @@ snapshots: '@types/mdast': 4.0.4 unist-util-is: 6.0.0 + mdast-util-slice-markdown@2.0.1: {} + mdast-util-to-hast@13.2.0: dependencies: '@types/hast': 3.0.4 @@ -15642,6 +16534,12 @@ snapshots: postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 + postcss-calc@10.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + postcss-cli@11.0.1(jiti@2.5.1)(postcss@8.5.3)(tsx@4.20.5): dependencies: chokidar: 3.6.0 @@ -15763,6 +16661,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + preact-render-to-string@6.6.2(preact@10.27.2): + dependencies: + preact: 10.27.2 + + preact@10.27.2: {} + prelude-ls@1.2.1: {} prettier-plugin-tailwindcss@0.6.14(prettier@3.6.2): @@ -15801,6 +16705,8 @@ snapshots: propagate@2.0.1: {} + property-information@6.5.0: {} + property-information@7.1.0: {} proxy-addr@2.0.7: @@ -16007,6 +16913,12 @@ snapshots: unified: 11.0.5 unist-util-visit: 5.0.0 + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + rehype-recma@1.0.0: dependencies: '@types/estree': 1.0.8 @@ -16023,6 +16935,12 @@ snapshots: hast-util-to-string: 3.0.1 unist-util-visit: 5.0.0 + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + relateurl@0.2.7: {} remark-frontmatter@5.0.0: @@ -16522,6 +17440,27 @@ snapshots: dependencies: glob: 7.2.3 + rolldown@1.0.0-beta.41: + dependencies: + '@oxc-project/types': 0.93.0 + '@rolldown/pluginutils': 1.0.0-beta.41 + ansis: 4.2.0 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.41 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.41 + '@rolldown/binding-darwin-x64': 1.0.0-beta.41 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.41 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.41 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.41 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.41 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.41 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.41 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.41 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.41 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.41 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.41 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.41 + router@2.2.0: dependencies: debug: 4.4.1 @@ -16732,6 +17671,28 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + shiki@3.13.0: + dependencies: + '@shikijs/core': 3.13.0 + '@shikijs/engine-javascript': 3.13.0 + '@shikijs/engine-oniguruma': 3.13.0 + '@shikijs/langs': 3.13.0 + '@shikijs/themes': 3.13.0 + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + shiki@3.8.1: + dependencies: + '@shikijs/core': 3.8.1 + '@shikijs/engine-javascript': 3.8.1 + '@shikijs/engine-oniguruma': 3.8.1 + '@shikijs/langs': 3.8.1 + '@shikijs/themes': 3.8.1 + '@shikijs/types': 3.8.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -16768,6 +17729,8 @@ snapshots: dependencies: is-arrayish: 0.3.2 + sisteransi@1.0.5: {} + slash@3.0.0: {} slash@5.1.0: {} @@ -16864,6 +17827,8 @@ snapshots: string-argv@0.3.2: {} + string-ts@2.2.1: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -17201,6 +18166,11 @@ snapshots: dependencies: typescript: 5.8.3 + ts-declaration-location@1.0.7(typescript@5.8.3): + dependencies: + picomatch: 4.0.3 + typescript: 5.8.3 + ts-dedent@2.2.0: {} ts-morph@22.0.0: @@ -17208,6 +18178,8 @@ snapshots: '@ts-morph/common': 0.23.0 code-block-writer: 13.0.3 + ts-pattern@5.8.0: {} + ts-tqdm@0.8.6: {} tsconfig-paths@3.15.0: @@ -17429,6 +18401,15 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 + unist-builder@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-inspect@8.1.0: dependencies: '@types/unist': 3.0.3 @@ -17449,6 +18430,20 @@ snapshots: dependencies: '@types/unist': 3.0.3 + unist-util-remove@4.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + unist-util-select@5.1.0: + dependencies: + '@types/unist': 3.0.3 + css-selector-parser: 3.1.3 + devlop: 1.1.0 + nth-check: 2.1.1 + zwitch: 2.0.4 + unist-util-stringify-position@3.0.3: dependencies: '@types/unist': 2.0.11 @@ -17651,6 +18646,8 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + web-namespaces@2.0.1: {} + web-streams-polyfill@4.0.0-beta.3: {} webidl-conversions@3.0.1: {} @@ -17905,4 +18902,6 @@ snapshots: zod@3.24.3: {} + zod@4.1.11: {} + zwitch@2.0.4: {} From 907706dcdf5645506eac681832942637a0635714 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Fri, 22 Aug 2025 19:33:30 -0400 Subject: [PATCH 2/7] fixup! --- .../src/rules/__tests__/invalid-type-reference.test.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs index 4bdbc7967cd35..229d0d80664a8 100644 --- a/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs +++ b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs @@ -26,7 +26,7 @@ const testCases = [ }, ]; -describe('hashed-self-references', () => { +describe('invalid-type-reference', () => { for (const { name, input, expected } of testCases) { it(name, () => testRule(invalidTypeReference, input, expected)); } From 843ae467b84c8e96515e6aadb9861ece7fd9d420 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Sun, 24 Aug 2025 15:38:12 -0400 Subject: [PATCH 3/7] add more checks --- packages/remark-lint/README.md | 16 ++++++++++++++++ .../__tests__/invalid-type-reference.test.mjs | 11 +++++++++-- .../src/rules/invalid-type-reference.mjs | 17 ++++++++++++++++- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/packages/remark-lint/README.md b/packages/remark-lint/README.md index 3097a32207fa7..ebd817f7de55b 100644 --- a/packages/remark-lint/README.md +++ b/packages/remark-lint/README.md @@ -106,6 +106,22 @@ Metadata can be provided in comments: ``` +### `node-core:invalid-type-reference` + +Ensures that all `{type}` references are valid types and formatted correctly. + +**Allowed:** + +```markdown +This is usually a {boolean}, but it could also be a {string|number}. +``` + +**Not allowed:** + +```markdown +This is an {invalid} type, and so is {string | number}. +``` + ### `node-core:yaml-comments` Enforces structure and content of YAML comment blocks: diff --git a/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs index 229d0d80664a8..cce5eb81b7863 100644 --- a/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs +++ b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs @@ -14,10 +14,17 @@ const testCases = [ input: 'Just a {number}.', expected: [], }, + { + name: 'miswrapped reference', + input: 'First a {string}, then a \\.', + expected: ['Type reference must be wrapped in "{}"; saw ""'], + }, { name: 'multiple references', - input: 'Psst, are you a {string} or a {boolean}', - expected: [], + input: 'Psst, are you a {string | boolean}', + expected: [ + 'Type reference should be seperated by "|", without spaces; saw "{string | boolean}"', + ], }, { name: 'invalid references', diff --git a/packages/remark-lint/src/rules/invalid-type-reference.mjs b/packages/remark-lint/src/rules/invalid-type-reference.mjs index 1ad0184b0ae22..047743d8fec2b 100644 --- a/packages/remark-lint/src/rules/invalid-type-reference.mjs +++ b/packages/remark-lint/src/rules/invalid-type-reference.mjs @@ -3,8 +3,10 @@ import createQueries from '@nodejs/doc-kit/src/utils/queries/index.mjs'; import { lintRule } from 'unified-lint-rule'; import { visit } from 'unist-util-visit'; +const SPACED_SEPERATOR_RE = /\s\||\|\s/g; + /** - * Ensures that all self-references begin with `#` + * Ensures that all type references are valid * @type {import('unified-lint-rule').Rule} */ const invalidTypeReference = (tree, vfile) => { @@ -12,6 +14,19 @@ const invalidTypeReference = (tree, vfile) => { const types = node.value.match(createQueries.QUERIES.normalizeTypes); types.forEach(type => { + if (type[0] !== '{' || type.at(-1) !== '}') { + vfile.message( + `Type reference must be wrapped in "{}"; saw "${type}"`, + node + ); + } + + if (SPACED_SEPERATOR_RE.test(type)) { + vfile.message( + `Type reference should be seperated by "|", without spaces; saw "${type}"` + ); + } + if (transformTypeToReferenceLink(type) === type) { vfile.message(`Invalid type reference: ${type}`, node); } From 64dbee757f62a5e1d215a4574a1f6d7da8f95dcb Mon Sep 17 00:00:00 2001 From: Aviv Keller Date: Tue, 26 Aug 2025 16:35:53 -0400 Subject: [PATCH 4/7] Update packages/remark-lint/README.md Co-authored-by: Ethan Arrowood Signed-off-by: Aviv Keller --- packages/remark-lint/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/remark-lint/README.md b/packages/remark-lint/README.md index ebd817f7de55b..c055f9ea5ac2b 100644 --- a/packages/remark-lint/README.md +++ b/packages/remark-lint/README.md @@ -119,7 +119,7 @@ This is usually a {boolean}, but it could also be a {string|number}. **Not allowed:** ```markdown -This is an {invalid} type, and so is {string | number}. +This is an {invalid} type, and so is {string | number} because there should **not** be whitespace around the `|`. ``` ### `node-core:yaml-comments` From 6e746038460f9bc414f7fd949ac4cd13f70a1375 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Tue, 26 Aug 2025 17:08:05 -0400 Subject: [PATCH 5/7] add auto fixing --- .../src/rules/hashed-self-reference.mjs | 1 + .../src/rules/invalid-type-reference.mjs | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/remark-lint/src/rules/hashed-self-reference.mjs b/packages/remark-lint/src/rules/hashed-self-reference.mjs index e00964ac5355c..957b49609484e 100644 --- a/packages/remark-lint/src/rules/hashed-self-reference.mjs +++ b/packages/remark-lint/src/rules/hashed-self-reference.mjs @@ -35,6 +35,7 @@ const hashedSelfReference = (tree, vfile) => { if (targetURL.pathname === currentFileURL.pathname) { const expected = url.includes('#') ? url.slice(url.indexOf('#')) : '#'; + node.url = expected; vfile.message( `Self-reference must start with hash (expected "${expected}", got "${url}")`, diff --git a/packages/remark-lint/src/rules/invalid-type-reference.mjs b/packages/remark-lint/src/rules/invalid-type-reference.mjs index 047743d8fec2b..097b4a7b4e66a 100644 --- a/packages/remark-lint/src/rules/invalid-type-reference.mjs +++ b/packages/remark-lint/src/rules/invalid-type-reference.mjs @@ -3,7 +3,8 @@ import createQueries from '@nodejs/doc-kit/src/utils/queries/index.mjs'; import { lintRule } from 'unified-lint-rule'; import { visit } from 'unist-util-visit'; -const SPACED_SEPERATOR_RE = /\s\||\|\s/g; +const MATCH_RE = /\s\||\|\s/g; +const REPLACE_RE = /\s*\|\s*/g; /** * Ensures that all type references are valid @@ -14,17 +15,25 @@ const invalidTypeReference = (tree, vfile) => { const types = node.value.match(createQueries.QUERIES.normalizeTypes); types.forEach(type => { - if (type[0] !== '{' || type.at(-1) !== '}') { + // Ensure wrapped in {} + if (type[0] !== '{' || type[type.length - 1] !== '}') { vfile.message( `Type reference must be wrapped in "{}"; saw "${type}"`, node ); + + node.value = node.value.replace(type, `{${type.slice(1, -1)}}`); } - if (SPACED_SEPERATOR_RE.test(type)) { + // Fix spaces around | + if (MATCH_RE.test(type)) { vfile.message( - `Type reference should be seperated by "|", without spaces; saw "${type}"` + `Type reference should be separated by "|", without spaces; saw "${type}"`, + node ); + + const normalized = type.replace(REPLACE_RE, '|'); + node.value = node.value.replace(type, normalized); } if (transformTypeToReferenceLink(type) === type) { From 1657f6eee5670ee1164b0e2e43fd57f773421759 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Tue, 26 Aug 2025 17:10:38 -0400 Subject: [PATCH 6/7] fix typo --- .../src/rules/__tests__/invalid-type-reference.test.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs index cce5eb81b7863..e0900a220097c 100644 --- a/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs +++ b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs @@ -23,7 +23,7 @@ const testCases = [ name: 'multiple references', input: 'Psst, are you a {string | boolean}', expected: [ - 'Type reference should be seperated by "|", without spaces; saw "{string | boolean}"', + 'Type reference should be separated by "|", without spaces; saw "{string | boolean}"', ], }, { From 66398eddfd198b40ec46337c5f8033706f0e29c9 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Tue, 30 Sep 2025 15:56:52 -0400 Subject: [PATCH 7/7] fixup! --- .../src/rules/duplicate-stability-nodes.mjs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/remark-lint/src/rules/duplicate-stability-nodes.mjs b/packages/remark-lint/src/rules/duplicate-stability-nodes.mjs index 992d6036cb94e..e5f6211fa5a3e 100644 --- a/packages/remark-lint/src/rules/duplicate-stability-nodes.mjs +++ b/packages/remark-lint/src/rules/duplicate-stability-nodes.mjs @@ -16,17 +16,23 @@ const duplicateStabilityNodes = (tree, vfile) => { // Update heading depth and clear deeper recorded stabilities currentHeadingDepth = node.depth; for (const depth of stabilityByDepth.keys()) { - if (depth >= currentHeadingDepth) stabilityByDepth.delete(depth); + if (depth >= currentHeadingDepth) { + stabilityByDepth.delete(depth); + } } return; } // Handle blockquotes: extract text from paragraph > text structure const text = node.children?.[0]?.children?.[0]?.value; - if (!text) return; + if (!text) { + return; + } const match = createQueries.QUERIES.stabilityIndexPrefix.exec(text); // Match "Stability: X" - if (!match) return; + if (!match) { + return; + } const stability = match[1]; // Report if a duplicate stability exists in a parent heading depth