Skip to content

AstroEco is Contributing…

Display your GitHub pull requests using astro-loader-github-prs

withastro/starlight

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@astrojs/[email protected]

Minor Changes

  • #2261 778b743 Thanks @shubham-padia! - Adds support for the icon attribute in the aside tag, allowing the use of any of Starlight’s built-in icons.

@astrojs/[email protected]

Minor Changes

  • #2261 778b743 Thanks @shubham-padia! - Adds support for using any of Starlight’s built-in icons in asides.

  • #3276 3917b20 Thanks @delucis! - Excludes banner content from search results

    Previously, content set in banner in page frontmatter was indexed by Starlight’s default search provider Pagefind. This could cause unexpected search results, especially for sites setting a common banner content on multiple pages. Starlight’s default Banner component is now excluded from search indexing.

    This change does not impact Banner overrides using custom components.

  • #3274 80ccff7 Thanks @HiDeoo! - Fixes an issue where some Starlight remark and rehype plugins were transforming Markdown and MDX content in non-Starlight pages.

    ⚠️ BREAKING CHANGE:

    Previously, some of Starlight’s remark and rehype plugins, most notably the plugin transforming Starlight's custom Markdown syntax for rendering asides, were applied to all Markdown and MDX content. This included content from individual Markdown pages and content from content collections other than the docs collection used by Starlight.

    This change restricts the application of Starlight’s remark and rehype plugins to only Markdown and MDX content loaded using Starlight's docsLoader(). If you were relying on this behavior, please let us know about your use case in the dedicated #starlight channel in the Astro Discord or by opening an issue.

Patch Changes

  • #3274 80ccff7 Thanks @HiDeoo! - Prevents Starlight remark and rehype plugins from transforming Markdown and MDX content when using the Astro renderMarkdown() content loader API.
withastro/starlight

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@astrojs/[email protected]

Patch Changes

  • #3306 21fcd94 Thanks @HiDeoo! - Fixes a regression in Starlight version 0.34.5 that caused multilingual sites with a default locale explicitly set to root to report a configuration error.
withastro/astro

Changes

  • Moves user routes to always be preferred over internal routes (the default 404 page and server islands)
  • Fixes #14016

Testing

  • New tests were added to check for this behavior. (I was unable to get the tests running locally, will check the CI output)

Docs

N/A

withastro/starlight

Description

This PR updates the Starlight Tailwind template to address several issues:

  • updates README.md

    • revises the Project Structure - removes tailwind.config.mjs and adds styles/global.css

    • adds a note about customizing included Tailwind CSS styles:

      The project includes Tailwind CSS for styling. Customize your design by modifying src/styles/global.css.

  • fixes a typo in Example Reference: what your documenting --> what you're documenting

withastro/starlight

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@astrojs/[email protected]

Patch Changes

withastro/astro

Changes

This PR tackles a couple of issues that came up with the Netlify adapter's Vite plugin dev mode features.

First, the Vite plugin was injecting env vars from linked Netlify sites. This is nice DX, but is a change that could surprise peopel - suddenly their dev environment had variables they weren't expecting, which could mess with their local setup.

Second, remote images were broken in the image CDN. The local image server didn't take account of the permitted remote image domains injected by Astro during the build, meaning all remote images were shown as forbidden.

The fixes:

  • Added a new devFeatures option to the adapter config to allow enabling or disabling features
  • Environment variables now default to disabled - You need to explicitly opt in with devFeatures: { environmentVariables: true } or devFeatures: true. We can change the default in a major in future
  • Netlify is releasing an update to their Vite plugin that allows us to inject the allowed domains for remote images, which this now implements

Testing

Adds new tests (and runs the dev tests in CI, which they weren't before)

Docs

withastro/docs#12030

withastro/astro

Changes

  • Removes the web vitals integration, since it relied on Astro Studio
  • Adds a README pointing to the StudioCMS integration, as a migration path

Testing

N/A

Docs

I couldn't find any docs anywhere. NPM deprecation suggestion message:

This integration is no longer maintained by Astro. Please see https://github.com/withstudiocms/web-vitals which is now maintained by the StudioCMS organization.
npm deprecate @astrojs/[email protected] "..."

Plan

withastro/astro

Changes

  • Fixes a build failure that occurs when an integration enables the imageService option.
  • Prevents the core assets Vite plugin from resolving server-only image service entrypoints during the client build.
  • The plugin now checks for options.ssr and resolves to a noop service for client builds, stopping Node.js built-ins from leaking into the client pipeline.

Testing

This change was tested locally using the reproduction repository provided in issue #14056.

  1. Linked the local, patched astro package to the reproduction project.
  2. Enabled imageService: true in the astro.config.mjs via the @astrojs/vercel adapter.
  3. Ran pnpm build.
  4. The build completed successfully, whereas it previously failed. All warnings related to Node.js modules being externalized for the browser were also eliminated.

No new automated tests were added as this fix corrects existing plugin behavior at the configuration level, and the impact is validated by the successful build of a previously failing project structure.

Docs

This change does not affect user-facing behavior or public APIs; it corrects a bug in the internal build process. Therefore, no documentation updates are required.

withastro/starlight

Description

This PR fixes an issue with the absolutePathToLang() helper function not handling absolute paths with spaces correctly.

  • absolutePathToLang() is meant to be called with the path property of a virtual file (altho not mandatory), which is always a POSIX-style path (using / as a separator) no matter the operating system.
  • It calls getCollectionPath() that relies on an URL pathname which will also be POSIX-style but also encoded, e.g. spaces are replaced with %20.
  • A virtual file's path property does not encodes special characters like spaces.

This can lead to issues when the path contains spaces which can be solved in different approaches:

  • Using fileURLToPath() in getCollectionPath() to convert the URL to a file path, altho depending on the OS, different separators will be used and would require an additional step to convert it again to a POSIX-style path.
  • Relying on pathToFileURL() on the input path of absolutePathToLang() to convert it to a URL-encoded path also using POSIX-style separators and using its pathname.

I went with the second approach which replaces an existing step instead of adding a new one.

On top of the added test, I also manually tested on Windows using a path with spaces:

Before After
before after
withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

[email protected]

Patch Changes

  • #14064 2eb77d8 Thanks @jp-knj! - Allows using tsconfig compilerOptions.paths without setting compilerOptions.baseUrl

  • #14068 10189c0 Thanks @jsparkdev! - Fixes the incorrect CSS import path shown in the terminal message during Tailwind integration setup.

withastro/starlight

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@astrojs/[email protected]

Patch Changes

withastro/astro

Changes

  • Exported BundledLanguage, SpecialLanguage, and LanguageRegistration types from Astro's public API.
  • Enables users to type-check the lang prop in custom components without workarounds.
  • Fixes #14009.

Testing

  • Manually verified that the types can be imported from astro in a test project.
  • Confirmed that valid values (e.g., 'ts') pass type checking and invalid values fail.

Docs

No user-facing docs changes required, but this improves DX for custom code block components.
Consider adding a note in the component API docs about the new type exports.

/cc @withastro/maintainers-docs for feedback!

  • No user-facing documentation changes are needed because this PR only exports internal types for advanced TypeScript usage. The public API and user experience remain unchanged for most users.
withastro/starlight

Description

This PR fixes an issue preventing to override the slug of a page with the slug frontmatter property using the / value.

Huge thanks to @ArmandPhilippot for all the help in debugging this issue and setting up many reproductions pinpointing the problem.

As visible in this StackBlitz example, a dynamic route parameter set to the / value ends being undefined in Astro.params. In Starlight, we have a slugToParam function which does not handle this case.

With Starlight 0.32 and the introduction of route data, we are now always calling getRoute() (which uses getRouteBySlugParam) with the context.params.slug value (whereas before this was only used in SSR). When explicitly setting the slug frontmatter property to /, this results in the getRouteBySlugParam() being called with an undefined parameter but as the slugToParam() function does not handle this case, it's failing to find the route (which instead of having a key of undefined has a key of /).

Another local test to verify the fix:

  1. Run pnpm dev in the docs/ directory.

  2. Delete the docs/src/content/docs/index.mdx file.

  3. Add the following frontmatter field to docs/src/content/docs/reference/configuration.mdx:

    slug: /

Before the fix, opening http://localhost:4321/ would result in a 404 error. After the fix, it correctly displays the configuration reference page.

withastro/astro

Changes

Fixes the incorrect CSS import path shown in the terminal message during Tailwind integration setup.

Testing

should pass

Docs

N/A

withastro/starlight

Description

  • This PR reverts the changes made in #3281

  • In #3281 we initially agreed to add a class name to every link in the sidebar. After approving and merging, I realised I hadn’t considered all the implications.

  • Sidebars are one of the heftier parts of Starlight’s HTML output. Especially for larger sites. For example, Astro’s docs currently include 215 links in its sidebar. This means any changes to sidebar entry markup can quickly accumulate given they can be reproduced 100s of time on every page (in the uncached HTML). Using the Astro docs example, this adds up to multiple kilobytes per page.

  • Given this, we discussed it a bit with the team and decided adding a class name like this is not justified. It is already feasible to target these links with CSS:

    .sidebar-content a { /* styles */ }

    Adding a dedicated class name doesn’t provide any new functionality that is not currently available, and adds bloat to the HTML output, which may prove significant for content-heavy sites.

withastro/astro

Changes

Testing

  • tests should still pass
  • now new test is needed

Docs

  • not needed bugfix
withastro/astro

Related PR : #12731
Related Discussion: channels

Motivation

TypeScript ≥ 4.1 no longer needs compilerOptions.baseUrl when using paths; the compiler implicitly anchors look-ups at the folder that contains the tsconfig.json. The TypeScript handbook now discourages setting baseUrl outside AMD-loader scenarios. Astro still throws an error when paths is present but baseUrl is absent, forcing every new TS project to add boilerplate that is neither required nor recommended.

Changes

  • If compilerOptions.baseUrl is undefined, we now default to "." (project root) before resolving aliases.

Testing

New fixture alias-tsconfig-no-baseurl (identical to existing alias fixture but without baseUrl).

  • Added Vitest covering dev/build alias resolution without baseUrl.

Docs

No external dependencies and no public API changes.

withastro/astro

Changes

The allows domains in imagesConfig to be undefined. Previously, if it was not defined, you would get an error that it is not iterable. Leaving it undefined allows for using remotePatterns to create patterns to essentially optimize any image from any website.

Testing

Docs

withastro/starlight

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@astrojs/[email protected]

Patch Changes

  • #3282 7680e87 Thanks @alvinometric! - Moves padding of <main> element to a --sl-main-pad CSS custom property to simplify setting custom values

  • #3288 131371e Thanks @HiDeoo! - Fixes a potential configuration issue for multilingual sites with a default language including a regional subtag.

withastro/astro

Changes

Added a simple declare module definition to get rid of TypeScript errors for Vite's '...?no-inline' import feature.
The typing is currently only defined for '...?url&no-inline' imports, but not for '...?no-inline' imports, for some reason.

Before

Screenshot of an IDE with an import error

After

Screenshot of an IDE with no errors

Note: The two errors reported on client.d.ts are from lines 182 and 189 - pretty unrelated to my change.

Testing

Manually modified the minimal example from /examples/minimal to import the SVG favicon with '...?no-inline'. Then checked the output of astro check before and after my change.

No unit tests or other forms of scripted tests were added, since I didn't find any for the already existing module declarations. Let me know in case I should add tests and how.

Docs

Since the current module declarations don't have specific docs either, except for maybe references to Vite's docs, I don't think we need to add any.

withastro/starlight

Added the --sl-main-pad custom prop so I could get rid of the pesky bottom padding on StarlightPage

I would rather get rid of it altogether, but this works for now

withastro/starlight

Description

  • Closes #3264
  • Added a new 'sl-sidebar-link' class to sidebar links.
  • Exported the SidebarEntry type
withastro/astro

This PR contains the following updates:

Package Change Age Confidence
pretty-bytes ^6.1.1 -> ^7.0.0 age confidence

Release Notes

sindresorhus/pretty-bytes (pretty-bytes)

v7.0.0

Compare Source

Breaking
Improvements


Configuration

📅 Schedule: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

withastro/starlight

Description

This PR contains an addition of a link to a new community plugin.

withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@astrojs/[email protected]

Minor Changes

  • #13768 faa0eff Thanks @eduardoboucas! - Updates the adapter to use Netlify's Vite plugin in development.

    This is an implementation update that does not require any change to your project code, but means that astro dev will run with an environment closer to a production deploy on Netlify. This brings several benefits you'll now notice working in dev mode!

    For example, your project running in development mode will now use local versions of the Netlify Image CDN for images, and a local Blobs server for sessions. It will also will populate your environment with the variables from your linked Netlify site.

    While not required for fully static, prerendered web sites, you may still wish to add this for the additional benefits of now working in a dev environment closer to your Netlify production deploy, as well as to take advantage of Netlify-exclusive features such as the Netlify Image CDN.

Patch Changes

[email protected]

Patch Changes

  • #14045 3276b79 Thanks @ghubo! - Fixes a problem where importing animated .avif files returns a NoImageMetadata error.

  • #14041 0c4d5f8 Thanks @dixslyf! - Fixes a <ClientRouter /> bug where the fallback view transition animations when exiting a page
    ran too early for browsers that do not support the View Transition API.
    This bug prevented event.viewTransition?.skipTransition() from skipping the page exit animation
    when used in an astro:before-swap event hook.

@astrojs/[email protected]

Patch Changes

  • #14063 de5a253 Thanks @RobbieTheWagner! - Allow setting domains to undefined in imagesConfig so that remotePatterns can be better utilized for images from a variety of domains.
withastro/astro

Changes

  • add avis brand for animated avif file

Testing

Manually tested using animated avif file

Docs

/cc @withastro/maintainers-docs for feedback!

withastro/astro

Changes

  • Add support for async customPages function in sitemap integration
  • customPages option now accepts either an array of URLs or an async function that returns URLs
  • Updated schema validation to support both array and function types
  • Function receives the site URL as parameter for dynamic URL generation

Testing

  • Added test case to verify async customPages function works in SSR mode
  • Created new test fixture page /solutions/[...solution].astro for catch-all route
  • Updated SSR test config to use async function that generates solution URLs
  • Verified generated sitemap includes custom pages from async function

Docs

/cc @withastro/maintainers-docs for feedback!

withastro/starlight

Description

  • Closes #3267
  • Partially addresses the issue raised in #3267 where a banner’s content would end up indexed by Pagefind and displayed in search results by excluding the default Banner.astro component from indexing.
  • #3271 will address the styling issues more fully for cases where this still occurs, but I think it makes sense for us to exclude banner content nonetheless as it’s often unexpected for this content to show up in search results, especially for sites where people set banners to show up on all pages for example.
withastro/astro

Changes

Fallback view transition animations for browsers that do not support the View Transition API were running too early when using ClientRouter. Specifically, the exit animation for the current page during navigation would run before the astro:before-swap event, even though it should run after it (but before the actual swap).

This bug only affects browsers that do not support the View Transition API and was first discovered in #14034 (the original issue was about navigating to self, but discussion led to finding this bug). The consequence of the bug is that calling .skipTransition() in the astro:before-swap event would only skip the enter animation of the new page, but not the exit animation of the current page — this is inconsistent with browsers that do support native view transitions, where both animations would be skipped. E.g.:

document.addEventListener("astro:before-swap", (e) => {
  e.viewTransition?.skipTransition();
});

The fix is quite simple: we just need to move the code for the fallback exit animation so that it's after dispatch of the astro:before-swap event (so that hooks can run), but before the actual swap occurs.

Closes #14034.

Testing

2 E2E tests added by @martrapp (thanks!):

  • skipTransition() should skip transition animations when called in astro:before-swap event hook (Firefox only)
  • Transition animations should run when not skipped (Firefox only)

Docs

I don't think this requires changes to the documentation since it's just a bug fix.

withastro/astro

Changes

Closes #13996

The information regarding the headers were saved in the wrong place. This PR fixes that by putting the information in the routes field: https://github.com/vercel/examples/blob/main/build-output-api/routes/.vercel/output/config.json

Testing

Updated the tests

Docs

N/A

withastro/starlight

Description

This PR builds on top of #3241 where I cherry-picked and co-auhored the initial fix preventing errors when using the Astro renderMarkdown() content loader API.

This PR also:

  • Refactor such fix to make it easier to check if we should transform a file or not using remark and rehype plugins.
  • Apply such check to other Starlight remark and rehype plugins like #3181 initially did for heading anchor links, e.g. at the moment, Starlight asides are rendered in non-Starlight pages.
withastro/starlight

Closes #3227

This PR makes it possible to pass generateId to Starlight’s docsLoader().

Currently, using generateId to customize content slugs is only possible by ejecting back up to Astro’s generic glob() loader, but this requires figuring out the pattern and base Starlight uses if you want to mirror the docsLoader() behaviour, e.g.:

-   loader: docsLoader(),
+   loader: glob({
+     pattern: "**/[^_]*.{md,mdx}",
+     base: "./src/content/docs",
+     generateId: customMethod
+   }),

After this PR you can keep using docsLoader(), and just add your ID method:

-   loader: docsLoader(),
+   loader: docsLoader({ generateId: customMethod }),

I did not also add an equivalent method to the i18nLoader as customizing slugs for languages seems much less common, and it would be more liable to break given how we load translation files in non-content collection contexts.

A big part of this PR was also figuring out how best to document this, as we currently only document our loaders in passing. This PR adds a “Configuring content collections” section to the config reference which documents all our loaders and schemas. I kept this minimal for now and linked out to existing relevant docs rather than duplicating or moving things around, but I’d welcome feedback on this new section.


It’s perhaps worth noting that there is some risk in supporting custom generateId methods. Especially for multilingual sites.

There are a few code paths running outside of the Astro/Vite context where Starlight uses raw file paths directly rather than the content collection ID. This is notably the case for remark/rehype plugins. For example, we use the file path to work out the current language for remark plugins. This means it won’t be possible to use generateId for entirely novel structures like storing localized content in sub-directories or something.

For example, moving the locale from a file name to the front of the ID like this wouldn’t work for our remark plugins:

// Example input: { entry: 'tutorials/intro/en.md' }
generateId: ({ entry }) => {
  const extensionlessPath = entry.split('.').slice(0, -1).join('.'); // "tutorials/intro/en"
  const segments = extensionlessPath.split('/');                     // ["tutorials", "intro", "en"]
  return [segments.at(-1), ...segments.slice(0, -1)].join('/');      // "en/tutorials/intro"
},

But for common scenarios like preserving uppercase characters or special characters like . inside IDs, it should work pretty OK although it is likely to break compatibility with plugins like https://github.com/HiDeoo/starlight-links-validator that rely on being able to predict the ID format based on the filepath.

withastro/astro

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

[email protected]

Minor Changes

  • #13972 db8f8be Thanks @ematipico! - Updates the NodeApp.match() function in the Adapter API to accept a second, optional parameter to allow adapter authors to add headers to static, prerendered pages.

    NodeApp.match(request) currently checks whether there is a route that matches the given Request. If there is a prerendered route, the function returns undefined, because static routes are already rendered and their headers cannot be updated.

    When the new, optional boolean parameter is passed (e.g. NodeApp.match(request, true)), Astro will return the first matched route, even when it's a prerendered route. This allows your adapter to now access static routes and provides the opportunity to set headers for these pages, for example, to implement a Content Security Policy (CSP).

Patch Changes

  • #14029 42562f9 Thanks @ematipico! - Fixes a bug where server islands wouldn't be correctly rendered when they are rendered inside fragments.

    Now the following examples work as expected:

    ---
    import { Cart } from '../components/Cart.astro';
    ---
    
    <>
      <Cart server:defer />
    </>
    
    <Fragment slot="rest">
      <Cart server:defer>
        <div slot="fallback">Not working</div>
      </Cart>
    </Fragment>
  • #14017 8d238bc Thanks @dmgawel! - Fixes a bug where i18n fallback rewrites didn't work in dynamic pages.

@astrojs/[email protected]

Minor Changes

  • #14012 a125a14 Thanks @florian-lefebvre! - Adds a new experimental configuration option experimentalDisableStreaming to allow you to opt out of Astro's default HTML streaming for pages rendered on demand.

    HTML streaming helps with performance and generally provides a better visitor experience. In most cases, disabling streaming is not recommended.

    However, when you need to disable HTML streaming (e.g. your host only supports non-streamed HTML caching at the CDN level), you can now opt out of the default behavior:

    import { defineConfig } from 'astro/config';
    import node from '@astrojs/node';
    
    export default defineConfig({
      adapter: node({
        mode: 'standalone',
    +    experimentalDisableStreaming: true,
      }),
    });
  • #13972 db8f8be Thanks @ematipico! - Adds support for the experimental static headers Astro feature.

    When the feature is enabled via the option experimentalStaticHeaders, and experimental Content Security Policy is enabled, the adapter will generate Response headers for static pages, which allows support for CSP directives that are not supported inside a <meta> tag (e.g. frame-ancestors).

    import { defineConfig } from 'astro/config';
    import node from '@astrojs/node';
    
    export default defineConfig({
      adapter: node({
        mode: 'standalone',
        experimentalStaticHeaders: true,
      }),
      experimental: {
        cps: true,
      },
    });

@astrojs/[email protected]

Patch Changes

  • #13972 db8f8be Thanks @ematipico! - Fixes the internal implementation of the new feature experimentalStaticHeaders, where dynamic routes
    were mapped to use always the same header.
  • Updated dependencies []:

@astrojs/[email protected]

Patch Changes

  • #13972 db8f8be Thanks @ematipico! - Fixes the internal implementation of the new feature experimentalStaticHeaders, where dynamic routes
    were mapped to use always the same header.
withastro/starlight

Description

  • Closes #3268
  • What does this PR change? Give us a brief description.
    This PR fixes a typo in the Chinese authoring guide: the <TabItem> label was incorrectly written as "Markdown/MDX" and is corrected to "Markdoc".
  • Did you change something visual? A before/after screenshot can be helpful.
    image
    image
withastro/starlight

Description

This PR adds support for custom HTML attributes on autogenerated sidebar links using the autogenerate.attrs option.

  • The autogenerate.attrs is used rather than just attrs as attrs is only supported for links and not groups at the moment. This could be confusing to support attrs on autogenerated groups but not on manually defined groups, so autogenerate.attrs is used to clarify that this is only for links in an autogenerated groups.
  • Using attrs on sidebar groups now results in a type error on top of the existing runtime error. I added some type tests to ensure this is the case.
  • Individual pages can override custom attributes using the sidebar.attrs frontmatter field.
withastro/astro

Closes #13910

This PR implements content-based deduplication for SVG assets during the build process, addressing deployment compatibility issues with platforms like GitHub Pages that reject hard links in uploaded artifacts.

Changes

  • re-use the first emitFile() handle when the content hash matches.
  • works in both emitESMImage() and emitImageMetadata().
  • removes the hard/symlink workaround

Testing

  • asset-hash-deduplication.test.js ensures emitFile() is called once per unique hash.
  • verifies that only two SVGs are written to dist/_astro/ when three source files contain two unique byte sequences.

Docs

No documentation changes required
this optimization is automatically applied during builds and is transparent to users.

Related PR: #13968

withastro/astro

Changes

Closes #13969

This is a "weird" fix. When rendering the server island inside a fragment, the init function (where we calculate content and hostId, the undefined info of the issue) is called after the render function. So put the generation of hostId and islandContent inside a shared function, and saved it inside the class.

Here's the weird part: when calling render, the props are correctly present and evaluated. However, and init is called, the props aren't there anymore. I'm not sure if this is a bug coming from somewhere else, or that's the expected behaviour.

As a workaround, I created two new functions where we save these props inside the class. Doing so fixes the bug and the rest of the tests keep passing. Still, it's weird

Testing

Added two new tests:

  • simple fragment
  • fragment with slots

Docs

N/A


Last fetched:  |  Scheduled refresh: Every Saturday

See Customizing GitHub Activity Pages to configure your own

Inspired by prs.atinux.com