From d046b95c7cc03b30fca84314062ea97aa5a5c8c5 Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 07:54:50 +0100 Subject: [PATCH 01/14] Define an extensible type for `dither` prop --- packages/astro/image-props.d.ts | 17 +++++++++++++++++ packages/astro/index.ts | 2 ++ 2 files changed, 19 insertions(+) create mode 100644 packages/astro/image-props.d.ts diff --git a/packages/astro/image-props.d.ts b/packages/astro/image-props.d.ts new file mode 100644 index 0000000..c7d306f --- /dev/null +++ b/packages/astro/image-props.d.ts @@ -0,0 +1,17 @@ +declare namespace Astro { + interface CustomImageProps { + /** Dither this image with the specified algorithm. Set to `false` to disable dithering. */ + dither?: + | import('sweetcorn').DitheringAlgorithm + | false + | (keyof Sweetcorn.Astro extends never ? never : Sweetcorn.Astro['CustomAlgorithms']); + } +} + +declare namespace Sweetcorn { + export interface Astro { + /** We don’t define this here to allow us to later set it during Astro’s type generation based + * on a user’s provided custom algorithms. */ + // CustomAlgorithms: never; + } +} diff --git a/packages/astro/index.ts b/packages/astro/index.ts index 0f1d117..087f6ae 100644 --- a/packages/astro/index.ts +++ b/packages/astro/index.ts @@ -1,3 +1,5 @@ +/// + import type { AstroIntegration } from 'astro'; import type { SweetcornImageConfig } from './types'; From 937e8561753a7a2f3bb6002734d5081af7e5c0d4 Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 07:55:18 +0100 Subject: [PATCH 02/14] Inject types for user-defined algorithms --- packages/astro/index.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/astro/index.ts b/packages/astro/index.ts index 087f6ae..aff5462 100644 --- a/packages/astro/index.ts +++ b/packages/astro/index.ts @@ -29,6 +29,29 @@ export default function sweetcornAstro 0) { + injectTypes({ + filename: 'custom-algorithms.d.ts', + content: + 'declare namespace Sweetcorn {\n' + + ' export interface Astro {\n' + + ' /** Custom dithering algorithms provided by the user. */\n' + + ` CustomAlgorithms: ${customAlgorithms.map((a) => JSON.stringify(a)).join(' | ')};\n` + + ' }\n' + + '}', + }); + } + }, }, } satisfies AstroIntegration; } From 2546926518f55158927bcea6216ab23397611a3b Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 07:57:26 +0100 Subject: [PATCH 03/14] Require peer of Astro 5.16.6 for type support --- packages/astro/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/astro/package.json b/packages/astro/package.json index 5c3c67c..4583cde 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -23,7 +23,7 @@ "sharp": "^0.34.5" }, "peerDependencies": { - "astro": "^5.16.5", + "astro": "^5.16.6", "sharp": ">=0.33.0" }, "publishConfig": { From 56a611ddedab3969f6983ba9f421ebde8c49ef5e Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 07:57:42 +0100 Subject: [PATCH 04/14] Add changeset --- .changeset/cyan-berries-wear.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cyan-berries-wear.md diff --git a/.changeset/cyan-berries-wear.md b/.changeset/cyan-berries-wear.md new file mode 100644 index 0000000..c2eac51 --- /dev/null +++ b/.changeset/cyan-berries-wear.md @@ -0,0 +1,5 @@ +--- +"@sweetcorn/astro": minor +--- + +Adds proper types for the `dither` prop in Astro’s image APIs. Requires Astro 5.16.6 or higher. From 45a9df64cba82f3cda0cfaf79f14673ebaf7f0ac Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:16:44 +0100 Subject: [PATCH 05/14] Export `DitheringAlgorithm` type from Astro package --- .changeset/goofy-trains-joke.md | 9 +++++++++ packages/astro/index.ts | 2 ++ 2 files changed, 11 insertions(+) create mode 100644 .changeset/goofy-trains-joke.md diff --git a/.changeset/goofy-trains-joke.md b/.changeset/goofy-trains-joke.md new file mode 100644 index 0000000..978b37f --- /dev/null +++ b/.changeset/goofy-trains-joke.md @@ -0,0 +1,9 @@ +--- +"@sweetcorn/astro": minor +--- + +Exports a type to help with typing code that interfaces with the `dither` prop: + +```ts +import type { DitheringAlgorithm } from '@astrojs/sweetcorn`; +``` diff --git a/packages/astro/index.ts b/packages/astro/index.ts index aff5462..ecf8271 100644 --- a/packages/astro/index.ts +++ b/packages/astro/index.ts @@ -3,6 +3,8 @@ import type { AstroIntegration } from 'astro'; import type { SweetcornImageConfig } from './types'; +export type DitheringAlgorithm = Exclude; + export default function sweetcornAstro( config: SweetcornImageConfig = {} ) { From caf8cb89f2e6526bc02f59ad966dbda67da5ecc3 Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:27:00 +0100 Subject: [PATCH 06/14] Document `DitheringAlgorithm` type --- docs/src/content/docs/guides/astro.mdx | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docs/src/content/docs/guides/astro.mdx b/docs/src/content/docs/guides/astro.mdx index c5dd267..d47eb57 100644 --- a/docs/src/content/docs/guides/astro.mdx +++ b/docs/src/content/docs/guides/astro.mdx @@ -165,3 +165,36 @@ You can then use your custom diffusion kernels using the `dither` prop: ``` See [“Error diffusion dithering”](/sweetcorn/guides/byo-algorithm/#error-diffusion-dithering) for more details. + +## Types + +### `DitheringAlgorithm` type + +```ts +import type { DitheringAlgorithm } from '@sweetcorn/astro'; +``` + +The `DitheringAlgorithm` type represents all valid algorithms that can be passed to the `dither` prop in Astro’s image APIs. +It can be helpful when typing a component that excepts a dither algorithm as a prop: + +```astro {3,8} +--- +// src/components/DitheredFigure.astro +import type { DitheringAlgorithm } from '@sweetcorn/astro'; +import type { ImageMetadata } from 'astro'; +import { Image } from 'astro:assets'; + +interface Props { + algorithm: DitheringAlgorithm; + image: ImageMetadata; +} + +const { algorithm, image } = Astro.props; +--- + +
+ +
+
+ +``` From bb5ce615ef78a2b217a53b08384fd04efdfef417 Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:27:27 +0100 Subject: [PATCH 07/14] Fix types in docs component --- docs/src/components/AlgorithmDemo.astro | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/components/AlgorithmDemo.astro b/docs/src/components/AlgorithmDemo.astro index af6b13f..fcddc8c 100644 --- a/docs/src/components/AlgorithmDemo.astro +++ b/docs/src/components/AlgorithmDemo.astro @@ -1,4 +1,5 @@ --- +import type { DitheringAlgorithm } from '@sweetcorn/astro'; import { Image } from 'astro:assets'; import diffusionKernels from '../../../packages/sweetcorn/src/diffusion-kernels.ts'; import thresholdMaps from '../../../packages/sweetcorn/src/threshold-maps.json'; @@ -23,7 +24,7 @@ const algorithms = { {algorithm} - + )) } From da7c433d9da7e3daebdbf0758294b2bd7dc44e09 Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:29:34 +0100 Subject: [PATCH 08/14] Type check docs in CI --- .github/workflows/ci.yml | 24 ++ docs/package.json | 4 +- pnpm-lock.yaml | 641 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 645 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 51830c6..a5c59be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,3 +31,27 @@ jobs: - name: Run tests run: pnpm -r test + + typecheck: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + persist-credentials: false + + - name: Setup pnpm + uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0 + + - name: Setup Node.js + uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + with: + node-version: 24.12.0 + cache: pnpm + + - name: Install dependencies + run: pnpm install + + - name: Type check docs + run: pnpm -F docs astro check diff --git a/docs/package.json b/docs/package.json index b501817..4fdd598 100644 --- a/docs/package.json +++ b/docs/package.json @@ -13,12 +13,14 @@ "astro": "astro" }, "dependencies": { + "@astrojs/check": "^0.9.6", "@astrojs/starlight": "^0.37.1", "@sweetcorn/astro": "workspace:*", "astro": "^5.16.6", "sharp": "^0.34.5", "starlight-package-managers": "^0.11.1", - "starlight-theme-flexoki": "^0.2.1" + "starlight-theme-flexoki": "^0.2.1", + "typescript": "^5.9.3" }, "private": true } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a1bdd1..b61e957 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,24 +17,30 @@ importers: docs: dependencies: + '@astrojs/check': + specifier: ^0.9.6 + version: 0.9.6(prettier@3.7.4)(typescript@5.9.3) '@astrojs/starlight': specifier: ^0.37.1 - version: 0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)) + version: 0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2)) '@sweetcorn/astro': specifier: workspace:* version: link:../packages/astro astro: specifier: ^5.16.6 - version: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3) + version: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2) sharp: specifier: ^0.34.5 version: 0.34.5 starlight-package-managers: specifier: ^0.11.1 - version: 0.11.1(@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3))) + version: 0.11.1(@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2))) starlight-theme-flexoki: specifier: ^0.2.1 - version: 0.2.1(@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3))) + version: 0.2.1(@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2))) + typescript: + specifier: ^5.9.3 + version: 5.9.3 packages/astro: dependencies: @@ -44,7 +50,7 @@ importers: devDependencies: astro: specifier: ^5.16.6 - version: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3) + version: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2) sharp: specifier: ^0.34.5 version: 0.34.5 @@ -60,12 +66,30 @@ importers: packages: + '@astrojs/check@0.9.6': + resolution: {integrity: sha512-jlaEu5SxvSgmfGIFfNgcn5/f+29H61NJzEMfAZ82Xopr4XBchXB1GVlcJsE+elUlsYSbXlptZLX+JMG3b/wZEA==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + '@astrojs/compiler@2.13.0': resolution: {integrity: sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==} '@astrojs/internal-helpers@0.7.5': resolution: {integrity: sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==} + '@astrojs/language-server@2.16.2': + resolution: {integrity: sha512-J3hVx/mFi3FwEzKf8ExYXQNERogD6RXswtbU+TyrxoXRBiQoBO5ooo7/lRWJ+rlUKUd7+rziMPI9jYB7TRlh0w==} + hasBin: true + peerDependencies: + prettier: ^3.0.0 + prettier-plugin-astro: '>=0.11.0' + peerDependenciesMeta: + prettier: + optional: true + prettier-plugin-astro: + optional: true + '@astrojs/markdown-remark@6.3.10': resolution: {integrity: sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==} @@ -91,6 +115,9 @@ packages: resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + '@astrojs/yaml2ts@0.2.2': + resolution: {integrity: sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -181,6 +208,27 @@ packages: resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} engines: {node: '>=14'} + '@emmetio/abbreviation@2.3.3': + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} + + '@emmetio/css-abbreviation@2.1.8': + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} + + '@emmetio/css-parser@0.4.1': + resolution: {integrity: sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==} + + '@emmetio/html-matcher@1.3.0': + resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} + + '@emmetio/scanner@1.0.4': + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} + + '@emmetio/stream-reader-utils@0.1.0': + resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} + + '@emmetio/stream-reader@2.2.0': + resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} @@ -752,6 +800,32 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@volar/kit@2.4.27': + resolution: {integrity: sha512-ilZoQDMLzqmSsImJRWx4YiZ4FcvvPrPnFVmL6hSsIWB6Bn3qc7k88J9yP32dagrs5Y8EXIlvvD/mAFaiuEOACQ==} + peerDependencies: + typescript: '*' + + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} + + '@volar/language-server@2.4.27': + resolution: {integrity: sha512-SymGNkErcHg8GjiG65iQN8sLkhqu1pwKhFySmxeBuYq5xFYagKBW36eiNITXQTdvT0tutI1GXcXdq/FdE/IyjA==} + + '@volar/language-service@2.4.27': + resolution: {integrity: sha512-SxKZ8yLhpWa7Y5e/RDxtNfm7j7xsXp/uf2urijXEffRNpPSmVdfzQrFFy5d7l8PNpZy+bHg+yakmqBPjQN+MOw==} + + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} + + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} + + '@vscode/emmet-helper@2.11.0': + resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} + + '@vscode/l10n@0.0.18': + resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -762,6 +836,17 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -777,6 +862,10 @@ packages: resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} @@ -898,6 +987,10 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} @@ -909,6 +1002,13 @@ packages: collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -1042,6 +1142,9 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} + emmet@2.4.11: + resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} + emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -1074,6 +1177,10 @@ packages: engines: {node: '>=18'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -1126,6 +1233,9 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -1169,6 +1279,10 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.4.0: resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} @@ -1351,6 +1465,15 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + jsonc-parser@2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -1358,6 +1481,10 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} @@ -1369,6 +1496,9 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -1575,6 +1705,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1678,6 +1811,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1727,6 +1863,11 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + prettier@3.7.4: + resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + engines: {node: '>=14'} + hasBin: true + prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -1821,6 +1962,20 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + request-light@0.5.8: + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} + + request-light@0.7.0: + resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -2009,6 +2164,12 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + typesafe-path@0.2.2: + resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} + + typescript-auto-import-cache@0.3.6: + resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -2194,6 +2355,98 @@ packages: vite: optional: true + volar-service-css@0.0.67: + resolution: {integrity: sha512-zV7C6enn9T9tuvQ6iSUyYEs34iPXR69Pf9YYWpbFYPWzVs22w96BtE8p04XYXbmjU6unt5oFt+iLL77bMB5fhA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-emmet@0.0.67: + resolution: {integrity: sha512-UDBL5x7KptmuJZNCCXMlCndMhFult/tj+9jXq3FH1ZGS1E4M/1U5hC06pg1c6e4kn+vnR6bqmvX0vIhL4f98+A==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-html@0.0.67: + resolution: {integrity: sha512-ljREMF79JbcjNvObiv69HK2HCl5UT7WTD10zi6CRFUHMbPfiF2UZ42HGLsEGSzaHGZz6H4IFjSS/qfENRLUviQ==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-prettier@0.0.67: + resolution: {integrity: sha512-B4KnPJPNWFTkEDa6Fn08i5PpO6T1CecmLLTFZoXz2eI4Fxwba/3nDaaVSsEP7e/vEe+U5YqV9fBzayJT71G5xg==} + peerDependencies: + '@volar/language-service': ~2.4.0 + prettier: ^2.2 || ^3.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + prettier: + optional: true + + volar-service-typescript-twoslash-queries@0.0.67: + resolution: {integrity: sha512-LD2R7WivDYp1SPgZrxx/0222xVTitDjm36oKo5+bfYG5kEgnw+BOPVHdwmvpJKg/RfssfxDI1ouwD4XkEDEfbA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-typescript@0.0.67: + resolution: {integrity: sha512-rfQBy36Rm1PU9vLWHk8BYJ4r2j/CI024vocJcH4Nb6K2RTc2Irmw6UOVY5DdGiPRV5r+e10wLMK5njj/EcL8sA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-yaml@0.0.67: + resolution: {integrity: sha512-jkdP/RF6wPIXEE3Ktnd81oJPn7aAvnVSiaqQHThC2Hrvo6xd9pEcqtbBUI+YfqVgvcMtXAkbtNO61K2GPhAiuA==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + vscode-css-languageservice@6.3.9: + resolution: {integrity: sha512-1tLWfp+TDM5ZuVWht3jmaY5y7O6aZmpeXLoHl5bv1QtRsRKt4xYGRMmdJa5Pqx/FTkgRbsna9R+Gn2xE+evVuA==} + + vscode-html-languageservice@5.6.1: + resolution: {integrity: sha512-5Mrqy5CLfFZUgkyhNZLA1Ye5g12Cb/v6VM7SxUzZUaRKWMDz4md+y26PrfRTSU0/eQAl3XpO9m2og+GGtDMuaA==} + + vscode-json-languageservice@4.1.8: + resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} + engines: {npm: '>=7.0.0'} + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-nls@5.2.0: + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -2216,6 +2469,10 @@ packages: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} @@ -2223,10 +2480,32 @@ packages: xxhash-wasm@1.1.0: resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml-language-server@1.19.2: + resolution: {integrity: sha512-9F3myNmJzUN/679jycdMxqtydPSDRAarSj3wPiF7pchEPnO9Dg07Oc+gIYLqXR4L+g+FSEVXXv2+mr54StLFOg==} + hasBin: true + + yaml@2.7.1: + resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} + engines: {node: '>= 14'} + hasBin: true + + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + yocto-queue@1.2.2: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} @@ -2258,10 +2537,46 @@ packages: snapshots: + '@astrojs/check@0.9.6(prettier@3.7.4)(typescript@5.9.3)': + dependencies: + '@astrojs/language-server': 2.16.2(prettier@3.7.4)(typescript@5.9.3) + chokidar: 4.0.3 + kleur: 4.1.5 + typescript: 5.9.3 + yargs: 17.7.2 + transitivePeerDependencies: + - prettier + - prettier-plugin-astro + '@astrojs/compiler@2.13.0': {} '@astrojs/internal-helpers@0.7.5': {} + '@astrojs/language-server@2.16.2(prettier@3.7.4)(typescript@5.9.3)': + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/yaml2ts': 0.2.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@volar/kit': 2.4.27(typescript@5.9.3) + '@volar/language-core': 2.4.27 + '@volar/language-server': 2.4.27 + '@volar/language-service': 2.4.27 + fast-glob: 3.3.3 + muggle-string: 0.4.1 + volar-service-css: 0.0.67(@volar/language-service@2.4.27) + volar-service-emmet: 0.0.67(@volar/language-service@2.4.27) + volar-service-html: 0.0.67(@volar/language-service@2.4.27) + volar-service-prettier: 0.0.67(@volar/language-service@2.4.27)(prettier@3.7.4) + volar-service-typescript: 0.0.67(@volar/language-service@2.4.27) + volar-service-typescript-twoslash-queries: 0.0.67(@volar/language-service@2.4.27) + volar-service-yaml: 0.0.67(@volar/language-service@2.4.27) + vscode-html-languageservice: 5.6.1 + vscode-uri: 3.1.0 + optionalDependencies: + prettier: 3.7.4 + transitivePeerDependencies: + - typescript + '@astrojs/markdown-remark@6.3.10': dependencies: '@astrojs/internal-helpers': 0.7.5 @@ -2288,12 +2603,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.13(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3))': + '@astrojs/mdx@4.3.13(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2))': dependencies: '@astrojs/markdown-remark': 6.3.10 '@mdx-js/mdx': 3.1.1 acorn: 8.15.0 - astro: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3) + astro: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -2317,17 +2632,17 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.25.76 - '@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3))': + '@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2))': dependencies: '@astrojs/markdown-remark': 6.3.10 - '@astrojs/mdx': 4.3.13(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)) + '@astrojs/mdx': 4.3.13(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2)) '@astrojs/sitemap': 3.6.0 '@pagefind/default-ui': 1.4.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3) - astro-expressive-code: 0.41.4(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)) + astro: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2) + astro-expressive-code: 0.41.4(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -2363,6 +2678,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@astrojs/yaml2ts@0.2.2': + dependencies: + yaml: 2.8.2 + '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.28.5': {} @@ -2543,6 +2862,29 @@ snapshots: '@ctrl/tinycolor@4.2.0': {} + '@emmetio/abbreviation@2.3.3': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-abbreviation@2.1.8': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-parser@0.4.1': + dependencies: + '@emmetio/stream-reader': 2.2.0 + '@emmetio/stream-reader-utils': 0.1.0 + + '@emmetio/html-matcher@1.3.0': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/scanner@1.0.4': {} + + '@emmetio/stream-reader-utils@0.1.0': {} + + '@emmetio/stream-reader@2.2.0': {} + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 @@ -2997,12 +3339,73 @@ snapshots: '@ungap/structured-clone@1.3.0': {} + '@volar/kit@2.4.27(typescript@5.9.3)': + dependencies: + '@volar/language-service': 2.4.27 + '@volar/typescript': 2.4.27 + typesafe-path: 0.2.2 + typescript: 5.9.3 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/language-core@2.4.27': + dependencies: + '@volar/source-map': 2.4.27 + + '@volar/language-server@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + '@volar/language-service': 2.4.27 + '@volar/typescript': 2.4.27 + path-browserify: 1.0.1 + request-light: 0.7.0 + vscode-languageserver: 9.0.1 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/language-service@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + + '@volar/source-map@2.4.27': {} + + '@volar/typescript@2.4.27': + dependencies: + '@volar/language-core': 2.4.27 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vscode/emmet-helper@2.11.0': + dependencies: + emmet: 2.4.11 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + '@vscode/l10n@0.0.18': {} + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 acorn@8.15.0: {} + ajv-draft-04@1.0.0(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-align@3.0.1: dependencies: string-width: 4.2.3 @@ -3013,6 +3416,10 @@ snapshots: ansi-regex@6.2.2: {} + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + ansi-styles@6.2.3: {} anymatch@3.1.3: @@ -3036,12 +3443,12 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.41.4(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)): + astro-expressive-code@0.41.4(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2)): dependencies: - astro: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3) + astro: 5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2) rehype-expressive-code: 0.41.4 - astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3): + astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2): dependencies: '@astrojs/compiler': 2.13.0 '@astrojs/internal-helpers': 0.7.5 @@ -3098,8 +3505,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.17.3 vfile: 6.0.3 - vite: 6.4.1(@types/node@25.0.2) - vitefu: 1.1.1(vite@6.4.1(@types/node@25.0.2)) + vite: 6.4.1(@types/node@25.0.2)(yaml@2.8.2) + vitefu: 1.1.1(vite@6.4.1(@types/node@25.0.2)(yaml@2.8.2)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -3210,12 +3617,24 @@ snapshots: cli-boxes@3.0.0: {} + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + clone@2.1.2: {} clsx@2.1.1: {} collapse-white-space@2.1.0: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + comma-separated-tokens@2.0.3: {} commander@11.1.0: {} @@ -3328,6 +3747,11 @@ snapshots: dset@3.1.4: {} + emmet@2.4.11: + dependencies: + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 + emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -3386,6 +3810,8 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 + escalade@3.2.0: {} + escape-string-regexp@5.0.0: {} esprima@4.0.1: {} @@ -3448,6 +3874,8 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-uri@3.1.0: {} + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -3499,6 +3927,8 @@ snapshots: fsevents@2.3.3: optional: true + get-caller-file@2.0.5: {} + get-east-asian-width@1.4.0: {} github-slugger@2.0.0: {} @@ -3795,12 +4225,20 @@ snapshots: dependencies: argparse: 2.0.1 + json-schema-traverse@1.0.0: {} + + jsonc-parser@2.3.1: {} + + jsonc-parser@3.3.1: {} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 kleur@3.0.3: {} + kleur@4.1.5: {} + klona@2.0.6: {} locate-path@5.0.0: @@ -3809,6 +4247,8 @@ snapshots: lodash.startcase@4.4.0: {} + lodash@4.17.21: {} + longest-streak@3.1.0: {} lru-cache@10.4.3: {} @@ -4301,6 +4741,8 @@ snapshots: ms@2.1.3: {} + muggle-string@0.4.1: {} + nanoid@3.3.11: {} neotraverse@0.6.18: {} @@ -4408,6 +4850,8 @@ snapshots: dependencies: entities: 6.0.1 + path-browserify@1.0.1: {} + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -4442,6 +4886,8 @@ snapshots: prettier@2.8.8: {} + prettier@3.7.4: {} + prismjs@1.30.0: {} prompts@2.4.2: @@ -4604,6 +5050,14 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + request-light@0.5.8: {} + + request-light@0.7.0: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + resolve-from@5.0.0: {} restructure@3.0.2: {} @@ -4749,13 +5203,13 @@ snapshots: sprintf-js@1.0.3: {} - starlight-package-managers@0.11.1(@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3))): + starlight-package-managers@0.11.1(@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2))): dependencies: - '@astrojs/starlight': 0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)) + '@astrojs/starlight': 0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2)) - starlight-theme-flexoki@0.2.1(@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3))): + starlight-theme-flexoki@0.2.1(@astrojs/starlight@0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2))): dependencies: - '@astrojs/starlight': 0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)) + '@astrojs/starlight': 0.37.1(astro@5.16.6(@types/node@25.0.2)(rollup@4.53.3)(typescript@5.9.3)(yaml@2.8.2)) stream-replace-string@2.0.0: {} @@ -4833,6 +5287,12 @@ snapshots: type-fest@4.41.0: {} + typesafe-path@0.2.2: {} + + typescript-auto-import-cache@0.3.6: + dependencies: + semver: 7.7.3 + typescript@5.9.3: {} ufo@1.6.1: {} @@ -4945,7 +5405,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@6.4.1(@types/node@25.0.2): + vite@6.4.1(@types/node@25.0.2)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -4956,10 +5416,108 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 fsevents: 2.3.3 + yaml: 2.8.2 + + vitefu@1.1.1(vite@6.4.1(@types/node@25.0.2)(yaml@2.8.2)): + optionalDependencies: + vite: 6.4.1(@types/node@25.0.2)(yaml@2.8.2) - vitefu@1.1.1(vite@6.4.1(@types/node@25.0.2)): + volar-service-css@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-css-languageservice: 6.3.9 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 optionalDependencies: - vite: 6.4.1(@types/node@25.0.2) + '@volar/language-service': 2.4.27 + + volar-service-emmet@0.0.67(@volar/language-service@2.4.27): + dependencies: + '@emmetio/css-parser': 0.4.1 + '@emmetio/html-matcher': 1.3.0 + '@vscode/emmet-helper': 2.11.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-html@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-html-languageservice: 5.6.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-prettier@0.0.67(@volar/language-service@2.4.27)(prettier@3.7.4): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + prettier: 3.7.4 + + volar-service-typescript-twoslash-queries@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-typescript@0.0.67(@volar/language-service@2.4.27): + dependencies: + path-browserify: 1.0.1 + semver: 7.7.3 + typescript-auto-import-cache: 0.3.6 + vscode-languageserver-textdocument: 1.0.12 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + optionalDependencies: + '@volar/language-service': 2.4.27 + + volar-service-yaml@0.0.67(@volar/language-service@2.4.27): + dependencies: + vscode-uri: 3.1.0 + yaml-language-server: 1.19.2 + optionalDependencies: + '@volar/language-service': 2.4.27 + + vscode-css-languageservice@6.3.9: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-html-languageservice@5.6.1: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + + vscode-json-languageservice@4.1.8: + dependencies: + jsonc-parser: 3.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-nls: 5.2.0 + vscode-uri: 3.1.0 + + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-nls@5.2.0: {} + + vscode-uri@3.1.0: {} web-namespaces@2.0.1: {} @@ -4980,6 +5538,12 @@ snapshots: dependencies: string-width: 7.2.0 + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 @@ -4988,8 +5552,39 @@ snapshots: xxhash-wasm@1.1.0: {} + y18n@5.0.8: {} + + yaml-language-server@1.19.2: + dependencies: + '@vscode/l10n': 0.0.18 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + lodash: 4.17.21 + prettier: 3.7.4 + request-light: 0.5.8 + vscode-json-languageservice: 4.1.8 + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.1.0 + yaml: 2.7.1 + + yaml@2.7.1: {} + + yaml@2.8.2: {} + yargs-parser@21.1.1: {} + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yocto-queue@1.2.2: {} yocto-spinner@0.2.3: From ee28350d454d97dae00305b847e91116f00545fe Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:31:54 +0100 Subject: [PATCH 09/14] Fix changeset --- .changeset/goofy-trains-joke.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/goofy-trains-joke.md b/.changeset/goofy-trains-joke.md index 978b37f..1565866 100644 --- a/.changeset/goofy-trains-joke.md +++ b/.changeset/goofy-trains-joke.md @@ -5,5 +5,5 @@ Exports a type to help with typing code that interfaces with the `dither` prop: ```ts -import type { DitheringAlgorithm } from '@astrojs/sweetcorn`; +import type { DitheringAlgorithm } from '@sweetcorn/astro`; ``` From d557fb86735ea3bf0dd5881b3b245cb776d0686a Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:32:27 +0100 Subject: [PATCH 10/14] Fix changeset some more! --- .changeset/goofy-trains-joke.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/goofy-trains-joke.md b/.changeset/goofy-trains-joke.md index 1565866..f464bdc 100644 --- a/.changeset/goofy-trains-joke.md +++ b/.changeset/goofy-trains-joke.md @@ -5,5 +5,5 @@ Exports a type to help with typing code that interfaces with the `dither` prop: ```ts -import type { DitheringAlgorithm } from '@sweetcorn/astro`; +import type { DitheringAlgorithm } from '@sweetcorn/astro'; ``` From 399f87631c50337d7318d6d5fa472e0c204aabc1 Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:34:32 +0100 Subject: [PATCH 11/14] Fix CI typecheck workflow --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a5c59be..fa490c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,4 +54,4 @@ jobs: run: pnpm install - name: Type check docs - run: pnpm -F docs astro check + run: pnpm -F %docs astro check From e2a352386fbd763905ade64b1ae16f33040192e6 Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:35:38 +0100 Subject: [PATCH 12/14] Remove leftover `-F` flag in CI type check command --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa490c5..6c99a4b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,4 +54,4 @@ jobs: run: pnpm install - name: Type check docs - run: pnpm -F %docs astro check + run: pnpm %docs astro check From cbe399c8d70dc80a68db095c09dc797545f2569a Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:36:49 +0100 Subject: [PATCH 13/14] Fix docs typo --- docs/src/content/docs/guides/astro.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/content/docs/guides/astro.mdx b/docs/src/content/docs/guides/astro.mdx index d47eb57..a5ace2d 100644 --- a/docs/src/content/docs/guides/astro.mdx +++ b/docs/src/content/docs/guides/astro.mdx @@ -175,7 +175,7 @@ import type { DitheringAlgorithm } from '@sweetcorn/astro'; ``` The `DitheringAlgorithm` type represents all valid algorithms that can be passed to the `dither` prop in Astro’s image APIs. -It can be helpful when typing a component that excepts a dither algorithm as a prop: +It can be helpful when typing a component that accepts a dither algorithm as a prop: ```astro {3,8} --- From 60e12fc8c0be1708997958bf4cb1ccf074c49d0b Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Wed, 17 Dec 2025 08:38:53 +0100 Subject: [PATCH 14/14] Formatting nit --- packages/astro/image-props.d.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/astro/image-props.d.ts b/packages/astro/image-props.d.ts index c7d306f..b1a3dfb 100644 --- a/packages/astro/image-props.d.ts +++ b/packages/astro/image-props.d.ts @@ -10,8 +10,10 @@ declare namespace Astro { declare namespace Sweetcorn { export interface Astro { - /** We don’t define this here to allow us to later set it during Astro’s type generation based - * on a user’s provided custom algorithms. */ + /** + * We don’t define this here to allow us to later set it during Astro’s type generation based + * on a user’s provided custom algorithms. + */ // CustomAlgorithms: never; } }