skeleton@2024.10.0
Patch Changes
-
Stabilize
getSitemap,getSitemapIndexand implement on skeleton (#2589) by @juanpprieto- Update the
getSitemapIndexat/app/routes/[sitemap.xml].tsx
- import {unstable__getSitemapIndex as getSitemapIndex} from '@shopify/hydrogen'; + import {getSitemapIndex} from '@shopify/hydrogen';
- Update the
getSitemapat/app/routes/sitemap.$type.$page[.xml].tsx
- import {unstable__getSitemap as getSitemap} from '@shopify/hydrogen'; + import {getSitemap} from '@shopify/hydrogen';
For a reference implementation please see the skeleton template sitemap routes
- Update the
-
Breaking change by @wizardlyhel
Set up Customer Privacy without the Shopify's cookie banner by default.
If you are using Shopify's cookie banner to handle user consent in your app, you need to set
withPrivacyBanner: trueto the consent config. Without this update, the Shopify cookie banner will not appear.return defer({ ... consent: { checkoutDomain: env.PUBLIC_CHECKOUT_DOMAIN, storefrontAccessToken: env.PUBLIC_STOREFRONT_API_TOKEN, + withPrivacyBanner: true, // localize the privacy banner country: args.context.storefront.i18n.country, language: args.context.storefront.i18n.language, }, }); -
Update to 2024-10 SFAPI (#2570) by @wizardlyhel
-
Breaking change by @frandiox
Update
createWithCacheto make it harder to accidentally cache undesired results.requestis now mandatory prop when initializingcreateWithCache.// server.ts export default { async fetch( request: Request, env: Env, executionContext: ExecutionContext, ): Promise<Response> { try { // ... - const withCache = createWithCache({cache, waitUntil}); + const withCache = createWithCache({cache, waitUntil, request});createWithCachenow returns an object with two utility functions:withCache.runandwithCache.fetch. Both have a new propshouldCacheResultthat must be defined.The original
withCachecallback function is nowwithCache.run. This is useful to run multiple fetch calls and merge their responses, or run any arbitrary code. It caches anything you return, but you can throw if you don't want to cache anything.const withCache = createWithCache({cache, waitUntil, request}); const fetchMyCMS = (query) => { - return withCache(['my-cms', query], CacheLong(), async (params) => { + return withCache.run({ + cacheKey: ['my-cms', query], + cacheStrategy: CacheLong(), + // Cache if there are no data errors or a specific data that make this result not suited for caching + shouldCacheResult: (result) => !result?.errors, + }, async(params) => { const response = await fetch('my-cms.com/api', { method: 'POST', body: query, }); if (!response.ok) throw new Error(response.statusText); const {data, error} = await response.json(); if (error || !data) throw new Error(error ?? 'Missing data'); params.addDebugData({displayName: 'My CMS query', response}); return data; }); };New
withCache.fetchis for caching simple fetch requests. This method caches the responses if they are OK responses, and you can passshouldCacheResponse,cacheKey, etc. to modify behavior.datais the consumed body of the response (we need to consume to cache it).const withCache = createWithCache({cache, waitUntil, request}); const {data, response} = await withCache.fetch<{data: T; error: string}>( 'my-cms.com/api', { method: 'POST', headers: {'Content-type': 'application/json'}, body, }, { cacheStrategy: CacheLong(), // Cache if there are no data errors or a specific data that make this result not suited for caching shouldCacheResponse: (result) => !result?.error, cacheKey: ['my-cms', body], displayName: 'My CMS query', }, );
-
Breaking change by @wizardlyhel
Deprecate usages of
product.options.valuesand useproduct.options.optionValuesinstead.- Update your product graphql query to use the new
optionValuesfield.
const PRODUCT_FRAGMENT = `#graphql fragment Product on Product { id title options { name - values + optionValues { + name + } }- Update your
<VariantSelector>to use the newoptionValuesfield.
<VariantSelector handle={product.handle} - options={product.options.filter((option) => option.values.length > 1)} + options={product.options.filter((option) => option.optionValues.length > 1)} variants={variants} > - Update your product graphql query to use the new
-
Updated dependencies [
d97cd56e,809c9f3d,8c89f298,a253ef97,84a66b1e,227035e7,ac12293c,c7c9f2eb,76cd4f9b,8337e534]:- @Shopify/hydrogen@2024.10.0
- @shopify/remix-oxygen@2.0.9