Major Changes
-
#11861
3ab3b4e
Thanks @bluwy! - Cleans up Astro-specfic metadata attached tovfile.data
in Remark and Rehype plugins. Previously, the metadata was attached in different locations with inconsistent names. The metadata is now renamed as below:vfile.data.__astroHeadings
->vfile.data.astro.headings
vfile.data.imagePaths
->vfile.data.astro.imagePaths
The types of
imagePaths
has also been updated fromSet<string>
tostring[]
. Thevfile.data.astro.frontmatter
metadata is left unchanged.While we don't consider these APIs public, they can be accessed by Remark and Rehype plugins that want to re-use Astro's metadata. If you are using these APIs, make sure to access them in the new locations.
-
#11825
560ef15
Thanks @bluwy! - Updates internal Shiki rehype plugin to highlight code blocks as hast (using Shiki'scodeToHast()
API). This allows a more direct Markdown and MDX processing, and improves the performance when building the project, but may cause issues with existing Shiki transformers.If you are using Shiki transformers passed to
markdown.shikiConfig.transformers
, you must make sure they do not use thepostprocess
hook as it no longer runs on code blocks in.md
and.mdx
files. (See the Shiki documentation on transformer hooks for more information).Code blocks in
.mdoc
files and<Code />
component do not use the internal Shiki rehype plugin and are unaffected. -
#11819
2bdde80
Thanks @bluwy! - Updates the Astro config loading flow to ignore processing locally-linked dependencies with Vite (e.g.npm link
, in a monorepo, etc). Instead, they will be normally imported by the Node.js runtime the same way as other dependencies fromnode_modules
.Previously, Astro would process locally-linked dependencies which were able to use Vite features like TypeScript when imported by the Astro config file.
However, this caused confusion as integration authors may test against a package that worked locally, but not when published. This method also restricts using CJS-only dependencies because Vite requires the code to be ESM. Therefore, Astro's behaviour is now changed to ignore processing any type of dependencies by Vite.
In most cases, make sure your locally-linked dependencies are built to JS before running the Astro project, and the config loading should work as before.
Patch Changes
-
#11878
334948c
Thanks @ascorbic! - Adds a new functionrefreshContent
to theastro:server:setup
hook that allows integrations to refresh the content layer. This can be used, for example, to register a webhook endpoint during dev, or to open a socket to a CMS to listen for changes.By default,
refreshContent
will refresh all collections. You can optionally pass aloaders
property, which is an array of loader names. If provided, only collections that use those loaders will be refreshed. For example, A CMS integration could use this property to only refresh its own collections.You can also pass a
context
object to the loaders. This can be used to pass arbitrary data, such as the webhook body, or an event from the websocket.{ name: 'my-integration', hooks: { 'astro:server:setup': async ({ server, refreshContent }) => { server.middlewares.use('/_refresh', async (req, res) => { if(req.method !== 'POST') { res.statusCode = 405 res.end('Method Not Allowed'); return } let body = ''; req.on('data', chunk => { body += chunk.toString(); }); req.on('end', async () => { try { const webhookBody = JSON.parse(body); await refreshContent({ context: { webhookBody }, loaders: ['my-loader'] }); res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ message: 'Content refreshed successfully' })); } catch (error) { res.writeHead(500, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ error: 'Failed to refresh content: ' + error.message })); } }); }); } } }
-
Updated dependencies [
3ab3b4e
,560ef15
,3ab3b4e
]:- @astrojs/[email protected]