diff --git a/.changeset/RELEASE-10.0.0.md b/.changeset/RELEASE-10.0.0.md deleted file mode 100644 index 066367ddcff..00000000000 --- a/.changeset/RELEASE-10.0.0.md +++ /dev/null @@ -1,587 +0,0 @@ -# GraphCommerce 10.0.0 Release Notes - -GraphCommerce 10.0.0 bring major performance improvements during development, expect a 10x speed improvement with fast refresh and a 5x speed improvements for production builds. We've updated to the latest version of Next.js, React 19, MUI and Apollo Client 4. - -## Next.js 16 - -- [Node.js middleware](https://nextjs.org/blog/next-15-5#nodejs-middleware-stable). -- [Turbopack](https://nextjs.org/blog/next-16#turbopack-stable) with [bundle analyzer](https://nextjs.org/blog/next-16-1#nextjs-bundle-analyzer-experimental) - -## React 19 - -- [Actions](https://react.dev/blog/2024/12/05/react-19#actions) -- [`useActionState`](https://react.dev/blog/2024/12/05/react-19#new-hook-useactionstate) -- [`useOptimistic`](https://react.dev/blog/2024/12/05/react-19#new-hook-optimistic-updates) -- [`use`](https://react.dev/blog/2024/12/05/react-19#new-feature-use) -- [`
`](https://react.dev/blog/2024/12/05/react-19#form-actions) -- [`useFormStatus`](https://react.dev/blog/2024/12/05/react-19#new-hook-useformstatus) -- [`ref` as prop](https://react.dev/blog/2024/12/05/react-19#ref-as-a-prop) and [`ref` cleanup](https://react.dev/blog/2024/12/05/react-19#cleanup-functions-for-refs) -- [`Custom Elements`](https://react.dev/blog/2024/12/05/react-19#support-for-custom-elements) -- [`useEventEffect`](https://react.dev/blog/2025/10/01/react-19-2#use-effect-event) - -## React Compiler + Eslint - -Next.js 16 comes with support for the new [React Compiler 1.0](https://react.dev/blog/2025/10/07/react-compiler-1), although not enabled by default and we're not using it on our side yet, all groundwork has been laid out to start experimenting with it. This also comes with the new advanced `eslint-plugin-react-hooks` which will warn you thoughout the codebase when using unsupported patterns. - -## MUI 7 - -We've updated from MUI 6 yo MUI 7. See release notes of [MUI 6](https://mui.com/blog/material-ui-v6-is-out/) and [MUI 7](https://mui.com/blog/material-ui-v7-is-out/) for more details. - -- [CSS Variables](https://mui.com/blog/material-ui-v6-is-out/#css-theme-variables): All variables can be accessed in JS via `theme.vars.palette.primary.main` or directly with `var(--palette-primary-main)`. -- [Container Queries](https://mui.com/blog/material-ui-v6-is-out/#container-queries): With great browser support it comes as a welcome addition to the framework. -- [CSS Layer support](https://mui.com/blog/material-ui-v7-is-here/#opt-in-support-for-css-layers) - -## Apollo Client 4 - -- [Unified error handling](https://github.com/apollographql/apollo-client/blob/main/CHANGELOG.md#-unified-error-handling) -- [Better typescript support](https://github.com/apollographql/apollo-client/blob/main/CHANGELOG.md#-enhanced-typescript-support) -- [rxjs](https://github.com/apollographql/apollo-client/blob/main/CHANGELOG.md#-modern-observable-implementation) - -## Turbopack - -This major release brings full Turbopack compatibility, dramatically improving development speed. To allow for Turbopack we needed to migrate away from all Webpack plugins and replace them with replacements that do not rely on customizations of the build process. - -- **Plugin/Interceptor system rewrite:** Before we created a FileName.interceptor.tsx that would be loaded when the original file was requested (with a custom Webpack plugin), now we rename the original file to FileName.original.tsx and create the interceptor at Filename.tsx. This does two things: We don't need to copy the original source code to the file, making for cleaner interceptors which work better wiht hot reloading and we don't need to create a custom Turbopack plugin (which isn't even possible yet). New CLI commands: `yarn graphcommerce codegen-interceptors` to generate interceptor files and `yarn graphcommerce cleanup-interceptors` to reset the interceptor system and restore original files. - -- **Treeshakable Configuration System:** Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system. New `yarn graphcommerce codegen-config-values` command generates TypeScript files with precise typing. All configurations are now available as contants `import { myConfig } from '@graphcommerce/next-config/config'` to use in your code. By generating multiple files for nested objects we allow the compiler to understand what can be tree-shaken. - -## Breaking change: Node 18 not supported, 20 and 22 are. - -- Node 18 is EOL -- Added support for Node 20 and 22 -- Node 24 will be added later (After this is fixed https://github.com/ardatan/whatwg-node/issues/2971) -- Migrated to vitest (@paales) [graphql-codegen-markdown-docs](#package-graphql-codegen-markdown-docs) [graphql-codegen-relay-optimizer-plugin](#package-graphql-codegen-relay-optimizer-plugin) [next-config](#package-next-config) - -## Magento improvements - -- Added support for multiple display currencies in the frontend. Multiple currencies were already supported, but this introduces Display Currencies for viewing the cart in different currencies. (@paales) [magento-store](#package-magento-store) - -- Refactored the Store Selector to be more of a form and have multiple nested toggles to switch groups, stores and currencies. It automatically hides features that aren't used: If only a single group is used with multiple stores only the store selector is shown. If multiple groups are used with each a single store is used, only the group selector is shown. If only a single currency is used, there is no currency selector. If multiple currencies are used, the currency selector is shown. (@paales) [magento-store](#package-magento-store) - -- Add billingAddress permission (EDITABLE | READONLY) that controls whether the end user can update their billing address in the account section and checkout. (@Giovanni-Schroevers) [magento-cart](#package-magento-cart) [magento-cart-shipping-address](#package-magento-cart-shipping-address) [magento-customer](#package-magento-customer) [magento-graphcms](#package-magento-graphcms) [magento-open-source](#package-magento-open-source) - -- Magento 2.4.7: Implemented the `customer_account_create` and `customer_account_edit` forms using the `attributeForm` query for the registration page and customer information form. The forms respect the settings configured in the 'Customer Configuration section'. It allows configuration for `prefix`, `middlename`, `suffix`,`dob`, `gender` and other fields. This also makes the frontend compatible with Adobe Commerce's Customer Attributes module. (@paales) [magento-customer](#package-magento-customer) - -- Added support for viewing Invoices/Shipments and Credit Memo's (@paales) [magento-customer](#package-magento-customer) - -- Magento: Introduce a new Product-`uid` to solve an issue where cache normalization was not working properly on the frontend when viewing products with a differen curreny, etc. - - Products now have a more detailed `uid` which will include the scope the product is retrieved from. For example: `NDg5MDM=?store=nl_NL¤cyCode=EUR`. This results in a better cache normalization in Apollo Client and allows for switching between scopes (store/currency/price views/accounts) without creating a broken cache state. - - We have implemented this with a new resolver that rewrites the `uid` passed from Magento to the Mesh Resolver, and additing additonal data to the `uid` based on the headers passed from the client. This also requires each package to implement the `getPrivateQueryContextMesh` method to retrieve the current PrivateQuery context from the GraphQL request headers. (@paales) [magento-graphql](#package-magento-graphql) [magento-store](#package-magento-store) [graphql](#package-graphql) - -- Improved Downloadable products functionality: - - Account Dashboard Link and Download Page - - Download samples / linkSamples and links from the backend. - - CartItem edit functionality for the DownloadableCartItem - - Dynamic ProductPagePrice for downloadable options ([@paales](https://github.com/paales)) - -- Implemented the `query { attributesForm }` to be able to dynamically render forms with useAttributesForm/preloadAttributesForm and AttributesFormAutoLayout, and additional utilities to handle form submissions. (@paales) [magento-store](#package-magento-store) - -## Algolia improvements - -- Algolia stock status fix: Use `in_stock` instead of `is_stock` in Algolia hit to Magento product conversion (@davido-priority) - -- Search Categories through algolia (@paales) [magento-search](#package-magento-search) [algolia-categories](#package-algolia-categories) - -- Added support for Algolia's facetOrdering which allows you to change the presented filters based on rules. (@paales) [algolia-products](#package-algolia-products) - -## Other - -- Make hygraph-cli dependency for the cli package optional, so that resolveDependenciesSync accepts it not being installed. (@Giovanni-Schroevers) [cli](#package-cli) - -## πŸ› Fixes - -- When running a cart mutation and the cartId is already passed to the form we use that value instead of retrieving the current cart again. (@paales) [magento-cart](#package-magento-cart) - -- Allow setting the cartId in the form for useFormGqlMutationCart by setting the cartId in the form AND allow setting the cartId for a whole context by wrapping with CartIdProvider (@paales) [magento-cart](#package-magento-cart) [magento-cart-shipping-address](#package-magento-cart-shipping-address) - -- Allow setting the redirect value in the AddProductsToCartForm as a form value. (@paales) [magento-cart](#package-magento-cart) - -- Forwarded ref to AddProductsToCartButton (@paales) [magento-cart](#package-magento-cart) - -- Solve issue where the total of the cart was zero due to discount or store credit the user couldn't proceed to the checkout. We now check for items and errors instead of the total. (@Giovanni-Schroevers) [magento-cart](#package-magento-cart) - -- Remove all usages of the NoSsr component as the GraphQL layer already handles this. (@paales) [magento-cart](#package-magento-cart) [magento-compare](#package-magento-compare) [magento-customer](#package-magento-customer) [magento-wishlist](#package-magento-wishlist) - -- Solve typescript issue were product types were added incorrectly. (@paales) [magento-cart](#package-magento-cart) [magento-wishlist](#package-magento-wishlist) - -- Removed deprecated fields from AddProductsToCartForm (@paales) [magento-cart](#package-magento-cart) - -- When ordering a virtual product the checkout would still reference a Track & Trace (@paales) [magento-cart](#package-magento-cart) - -- Solve issue where if the onBeforeSubmit would return false, it would still error if submitted while the cart is locked. (@paales) [magento-cart](#package-magento-cart) - -- Moved all functionality from the @graphcommerce/magento-cart-billing-address package to the @graphcommerce/magento-cart package. All occurences of @graphcommerce/magento-cart-billing-address should be removed for your codebase. (@paales) [magento-cart](#package-magento-cart) - -- Allow awaitable async requests for onStart on checkout button (@paales) [magento-cart](#package-magento-cart) [google-datalayer](#package-google-datalayer) - -- When the cart totals are updated via a mutation, make sure to also fetch the id when the query is used so that automatically updates. (@paales) [magento-cart](#package-magento-cart) - -- CartTotals now accepts a readOnly prop to handle plugins showing information based on that prop (@paales) [magento-cart](#package-magento-cart) - -- Solve issue where available_payment_methods would give an apollo client error that it couldn’t be properly merged (@paales) [magento-cart](#package-magento-cart) - -- Prevent rendering "You have not placed an order" before the router resolves. (@carlocarels90) [magento-cart-checkout](#package-magento-cart-checkout) - -- Resolve issue where a 400 error occurred due to missing coupon code data in the request. The coupon input field was being disabled before form submission, preventing the code from being included in the request payload (@joshdavenport) [magento-cart-coupon](#package-magento-cart-coupon) - -- Align coupon accordion with other accordion types that can still expand with chips rendered (@paales) [magento-cart-coupon](#package-magento-cart-coupon) - -- Split out various Cart related fragments to allow for easier extensibility: AppliedCoupon, CartPrices, CartTaxItem, Discount (@paales) [magento-cart-coupon](#package-magento-cart-coupon) - -- fix(checkout): fix faulty check if email exists in the checkout; keep special characters in email on redirect to login (@FrankHarland) [magento-cart-email](#package-magento-cart-email) - -- Added support for TIME and DATE for the customizable options. Added required stars. (@paales) [magento-cart-items](#package-magento-cart-items) [magento-product](#package-magento-product) - -- Created a new PriceModifiers component that is implemented on CartItems, allowing different product types to render their options in a consistent manner and allow rendering a base price so that the sum in the cart is correct. (@paales) [magento-cart-items](#package-magento-cart-items) [magento-store](#package-magento-store) - -- Currency wasn't set properly while rendering custom options for cart items that had a different currency than the current store. (@paales) [magento-cart-items](#package-magento-cart-items) - -- Solve issue where the UpdateItemQuantity would send a wrong query to the backend. (@paales) [magento-cart-items](#package-magento-cart-items) - -- Solve issue where the CartItem href wouldn't be correct (@paales) [magento-cart-items](#package-magento-cart-items) - -- Solve issue where if a product wasn't available in the cart anymore from the server the user wouldn't be able to remove the item from the cart. (@paales) [magento-cart-items](#package-magento-cart-items) - -- Exported cartItemToCartItemInput so it can be extended with plugins (@paales) [magento-cart-items](#package-magento-cart-items) - -- Solve issue where the Place order button would remain in a loading state because the back/forward cache of chrome started working for the checkout and thus React's state would not be reset, thinking we were still exiting the page. (@paales) [magento-cart-payment-method](#package-magento-cart-payment-method) - -- Forward productListRenderer for all locations that can be rendered by pagebuilder (@paales) [magento-category](#package-magento-category) [magento-product](#package-magento-product) [magento-graphcms](#package-magento-graphcms) - -- Added support for meta_keyword for products and categories (@paales) [magento-category](#package-magento-category) [magento-product](#package-magento-product) [next-ui](#package-next-ui) - -- Solve issue where productListRenderer was passed as a DOM element, causing react warnings. (@paales) [magento-category](#package-magento-category) - -- Fix bug where allName would not be translated when switching stores (@Giovanni-Schroevers) [magento-category](#package-magento-category) - -- Move the category fragment to the category prop (@paales) [magento-category](#package-magento-category) - -- Solve issue where in some cases a second ProductList query was made because the category used an `eq` filter instead of an `in` filter. (@paales) [magento-category](#package-magento-category) [magento-product](#package-magento-product) - -- Convert home to render the home CmsPage and add page/\[…url] route for additional pages. (@paales) [magento-cms](#package-magento-cms) - -- Added support for loading CMS Pages from Magento (@paales) [magento-cms](#package-magento-cms) - -- Added cmsBlocks query and `` component. (@paales) [magento-cms](#package-magento-cms) - -- Render the no-route page (or whatever is configured) on the 404 page when running with only Magento. (@paales) [magento-cms](#package-magento-cms) - -- Created a AccountDashboardQueryFragment instead of only a query to allow for adding customerDownloadableProducts to the dashboard query (@paales) [magento-customer](#package-magento-customer) - -- Forward address field props (@paales) [magento-customer](#package-magento-customer) - -- Migrate to default OrderItem resolver and remove useOrderCardItemImages as OrderItem now returns a product. Add a custom resolver for 2.4.5 and 2.4.6 that implements the functionality for older versions. (@paales) [magento-customer](#package-magento-customer) - -- Created a refactored the AccountOrders page and refactored the OrderCard. (@paales) [magento-customer](#package-magento-customer) - -- Implemented order sorting for account overview and account list and implement custom resolver for Magento 2.4.5 (which is slow but works). (@paales) [magento-customer](#package-magento-customer) [magento-graphql](#package-magento-graphql) - -- Deleting an account will now require reauthentication and moved the menu item to the Authentication section (@paales) [magento-customer](#package-magento-customer) - -- Use OrderStateLabel in my account instead of OrderStateLabelInline and deprecate that one. (@paales) [magento-customer](#package-magento-customer) - -- Solve issue where the user is getting a 400 error when logging in because the password is not being sent. The password field was disabled before the form was submitted, causing the password not to be sent. (@paales) [magento-customer](#package-magento-customer) - -- Unset token when on magento 248 to prevent repeated graphql-authentication errors (@Giovanni-Schroevers) [magento-customer](#package-magento-customer) - -- OrderTotals/OrderDetails now only renders addres information if available (@paales) [magento-customer](#package-magento-customer) - -- Order/Invoice/CreditMemo and Shipment views (@paales) [magento-customer](#package-magento-customer) [magento-product-bundle](#package-magento-product-bundle) [magento-product-downloadable](#package-magento-product-downloadable) - -- Remove odd nonNullable that is also available in @graphcommmerce/next-ui (@paales) [magento-customer](#package-magento-customer) - -- `` now accepts all props of the FullPageMessage (@paales) [magento-customer](#package-magento-customer) - -- Add flushMeasurePerf for product page (@paales) [magento-graphql](#package-magento-graphql) - -- Solve issue where the ApolloClient cache wasn't scoped properly causing the wrong currency to be shown when switching currency. (@paales) [magento-graphql](#package-magento-graphql) [graphql](#package-graphql) - -- Magento <= 2.4.6: Solve issue where GraphCommerce's schema compatibility layer would define fields to be always return a value while they would never causing runtime errors which are hard to catch. (@paales) [magento-graphql](#package-magento-graphql) - -- Moved Customer group_id resolver to magento-graphql-rest package where it should belong. (@paales) [magento-graphql-rest](#package-magento-graphql-rest) [algolia-products](#package-algolia-products) - -- Allow passing children to CustomerNewsletterToggle (@paales) [magento-newsletter](#package-magento-newsletter) - -- Use CustomerNewsletterToggle whenever possible (@paales) [magento-newsletter](#package-magento-newsletter) - -- Prevent executing additional query when user is signing out (@paales) [magento-newsletter](#package-magento-newsletter) - -- Remove issuer list from ideal payment method (@Giovanni-Schroevers) [magento-payment-adyen](#package-magento-payment-adyen) [magento-payment-multisafepay](#package-magento-payment-multisafepay) [mollie-magento-payment](#package-mollie-magento-payment) - -- Make checkmo respect the payableTo and sendTo values (@paales) [magento-payment-included](#package-magento-payment-included) - -- Remove issuers field from MultiSafePay in preparation for iDeal 2. Please not that this change requires an upgrade to the Magento module as well. (@Giovanni-Schroevers) [magento-payment-multisafepay](#package-magento-payment-multisafepay) - -- Solve issue where the cart would remain locked if a user would return to the website without going through the checkout/payment step. (@paales) [magento-payment-multisafepay](#package-magento-payment-multisafepay) - -- Solve issue where the MSPPaymentHandler query would be executed multiple times. (@paales) [magento-payment-multisafepay](#package-magento-payment-multisafepay) - -- Created a Payment tokens package to be able to manage stored cards from the account section. (@paales) [magento-payment-tokens](#package-magento-payment-tokens) - -- [@paales](https://github.com/paales)(@paales) [magento-payment-tokens](#package-magento-payment-tokens) - -- Solve issue where the added item couldn't be properly found based on the input filters, causing problems when sending data to the data layer. (@Giovanni-Schroevers) [magento-product](#package-magento-product) - -- [@paales](https://github.com/paales)(@paales) [magento-product](#package-magento-product) - -- Solve issue when a user applies their first filter on a category page, a redundant GraphQL call would be made, even though the user was navigating to the `/c/[..url]` route. (@paales) [magento-product](#package-magento-product) - -- [@paales](https://github.com/paales)(@paales) [magento-product](#package-magento-product) - -- Customizable Product Options wouldn't be properly selected because the parent woudln't rerender anymore. (@paales) [magento-product](#package-magento-product) - -- ProductSpecs now uses `attribute { label }` instead of `useQuery(ProductSpecsTypes)` (@paales) [magento-product](#package-magento-product) - -- Add support for `variant=unit` and `variant=total` rendering of `ProductPagePrice` to include the quantity or not. (@paales) [magento-product](#package-magento-product) - -- Added support for video's on the product page. (@paales) [magento-product](#package-magento-product) [framer-scroller](#package-framer-scroller) - -- Solve issue where the category sidebar navigation would show a Clear button while it wasn't clearable. (@paales) [magento-product](#package-magento-product) [magento-search](#package-magento-search) - -- Make sure CustomizableOptions are sorted correctly (@paales) [magento-product](#package-magento-product) - -- Created a CustomizablePrice component that will highlight the price, to prevent duplicating logic and preventing rerenders. (@paales) [magento-product](#package-magento-product) - -- Created a ProductPagePriceLowest component that switches when the configurable option changes. (@paales) [magento-product](#package-magento-product) - -- `/` would not consider everything after the `/` as part of the search. (@paales) [magento-product](#package-magento-product) [magento-search](#package-magento-search) - -- Forward the cart to AddProductsToCartSnackbarMessage (@paales) [magento-product](#package-magento-product) - -- Support for new_from_date and new_to_date labels (@paales) [magento-product](#package-magento-product) - -- Refactored the price calculation of customizable options on the product page so required options are correctly handled. (@paales) [magento-product](#package-magento-product) - -- feat(GCOM-1577): show product name and link on PDP breadcrumbs (@FrankHarland) [magento-product](#package-magento-product) - -- Translate relevance sort option when a non translated value is communicated from algolia. (@paales) [magento-product](#package-magento-product) - -- Solve issue where the ProductListItemsBase was already wrapped in a form. (@paales) [magento-product](#package-magento-product) - -- Solve issue where grouped products could only be added to the cart correctly once. (@paales) [magento-product](#package-magento-product) [magento-product-grouped](#package-magento-product-grouped) - -- Fix regression issue where the sidebar filter values would be rendered too big and padding was missing on the top when values would be renderd in a bottom sheet. (@paales) [magento-product](#package-magento-product) - -- Solve issue where the tier price doesn't get divided by the quantity, thus showing the wrong price. (@paales) [magento-product](#package-magento-product) - -- When loading the category/search page in the case that there are no filters applied, the amount or product related queries is reduced from 2 to 1 (ProductFilters is skipped). Pagination, sorting and search terms also do not affect this. When a filter is applied we fall back to the previous functionality and do a second query to retrieve the filters. - - This did not matter when the categories/search pages were served by Magento as Magento would cache the result of the ProductFilters query. When the the catalog is served by an external service like Algolia this might be a problem. - - Implementation details: When filters are applied (e.g., filtering by color:blue), the ProductList query only returns products matching that filter, which means other filter options (like other colors) are excluded from the filter options. This behavior is expected since those other options wouldn't return any products. However, when no filters are applied, the ProductList query returns all products along with all available filter options, eliminating the need for a separate ProductFilters query. (@paales) [magento-product](#package-magento-product) [magento-search](#package-magento-search) [magento-search-overlay](#package-magento-search-overlay) - -- Renamed customizable_options_entered to entered_options_record and customizable_options to selected_options_record (@paales) [magento-product](#package-magento-product) - -- Make sure the product price is updated when the quantity of a product is changed. (@paales) [magento-product](#package-magento-product) - -- Add the ability to edit bundle products from the cart page (@paales) [magento-product-bundle](#package-magento-product-bundle) - -- Magento 2.4.7: Render discounts for bundle products (@paales) [magento-product-bundle](#package-magento-product-bundle) - -- Calculate the product page price dynamically based on the options and quantities selected. (@paales) [magento-product-bundle](#package-magento-product-bundle) - -- Implement the Cart options as priceModifiers so the logic can be somewhat re-used for multiple locations (@paales) [magento-product-bundle](#package-magento-product-bundle) [magento-product-configurable](#package-magento-product-configurable) [magento-product-downloadable](#package-magento-product-downloadable) [magento-product-simple](#package-magento-product-simple) [magento-product-virtual](#package-magento-product-virtual) - -- Solve issue where the GetConfigurableOptionsSelection query would be executed even if the product wasn't a ConfigurableProduct. (@paales) [magento-product-configurable](#package-magento-product-configurable) - -- Do not directly update the cache of the defaultConfigurableOptionsSelection, but query the backend. (@paales) [magento-product-configurable](#package-magento-product-configurable) - -- Solve issue where Configurable Options would not respect the option position. (@ThisIsRuddy) [magento-product-configurable](#package-magento-product-configurable) - -- Move the cartItemEdit functionality to a plugin for configurable products (@paales) [magento-product-configurable](#package-magento-product-configurable) - -- Support for links_purchased_separately and links_title (@paales) [magento-product-downloadable](#package-magento-product-downloadable) - -- Use narrower types for grouped products (@paales) [magento-product-grouped](#package-magento-product-grouped) - -- Use ProductListPrice and AddProductsToCartQuantity for grouped product lines (@paales) [magento-product-grouped](#package-magento-product-grouped) - -- Allow setting alternate search input placeholder (@bramvanderholst) [magento-search](#package-magento-search) - -- Solve issue where a magento store reference was added to the graphql-mesh package. (@paales) [magento-store](#package-magento-store) [googlerecaptcha](#package-googlerecaptcha) [graphql-mesh](#package-graphql-mesh) - -- Use the default display currency instead of the base currency in case they differ from one another. (@paales) [magento-store](#package-magento-store) - -- Use the `storeConfig.head_shortcut_icon` when configured, if not configured it will use the favicon.ico and favicon.svg from the public folder. (@paales) [magento-store](#package-magento-store) - -- Support asNumber for Money component to easily render all prices as number (@paales) [magento-store](#package-magento-store) - -- Allow setting alternate store switcher URL (@bramvanderholst) [magento-store](#package-magento-store) - -- Store switcher now allows switching between currencies without navigating and just switches the @privateContext. (@paales) [magento-store](#package-magento-store) - -- Added store switcher to the header and mobile navigation (@paales) [magento-store](#package-magento-store) - -- Added a CurrencySymbol component that renders the current currency symbol (@paales) [magento-store](#package-magento-store) [next-ui](#package-next-ui) - -- Solve compat issue with adobe commerce (@paales) [magento-wishlist](#package-magento-wishlist) - -- Added meta_keywords to CmsPageMeta and CategoryMeta (@paales) [algolia-categories](#package-algolia-categories) [magento-graphcms](#package-magento-graphcms) - -- Allow returning the algolia index name that is being searched (@paales) [algolia-categories](#package-algolia-categories) [algolia-products](#package-algolia-products) - -- Update useSendAlgoliaEvent.ts (@FrankHarland) [algolia-insights](#package-algolia-insights) - -- Solve issue where the useSendEventAlgolia hook would sometimes throw an error during purchase (@Giovanni-Schroevers) [algolia-insights](#package-algolia-insights) - -- Updated Algolia to the latest version of the spec. (@paales) [algolia-products](#package-algolia-products) [algolia-recommend](#package-algolia-recommend) - -- Solve issue when creating an account the group_id would be requested but there wansn't a token available to retrieve the group_id. (@Renzovh) [algolia-products](#package-algolia-products) - -- Normalize input values from Algolia to schema compliant values (@FrankHarland) [algolia-products](#package-algolia-products) - -- Updated Algolia docs for search suggestions and used a different naming scheme where baseIndex+suggestionsSuffix is used (default that algolia suggests). (@paales) [algolia-products](#package-algolia-products) - -- Fixed issue where if a value contains a `/` or a `,` the URL parsing would break. Those values are now replaced with `_AND_` and `_OR_` in the URL. (@paales) [algolia-products](#package-algolia-products) - -- Solve issue where the customer group specific price index wasn't used and added warnings to be able to debug the issue. (@paales) [algolia-products](#package-algolia-products) - -- Solve issue where used configurations might not be scoped to the correct store. Move caching to the mesh cache and scope per store. (@paales) [algolia-products](#package-algolia-products) - -- Solve issue where algolia would return a full product URL instead of only the pathname of the given URL from Magento (@paales) [algolia-products](#package-algolia-products) - -- Solve issue where the generated bucket for price aggregations didn’t contain the correct values. (@paales) [algolia-products](#package-algolia-products) - -- Solve issue where some values wouldn’t be correctly flattened. (@paales) [algolia-products](#package-algolia-products) - -- [@paales](https://github.com/paales)(@paales) [algolia-products](#package-algolia-products) [algolia-recommend](#package-algolia-recommend) - -- Solve issue where Algolia didn't properly handle visibility as the attribute wasn't filterable, it automatically detects when there is a visibility attribute and uses that for filtering. (@paales) [algolia-products](#package-algolia-products) - -- Make sure the short_description and description can be properly returned when retrieved via an Algolia query (@paales) [algolia-products](#package-algolia-products) - -- Make facetName and facetValue optional when retrieving trending products (@paales) [algolia-recommend](#package-algolia-recommend) - -- Solve issue where trendingProducts or trendingFacetValues couldn’t be resolved becasue root would be null (@paales) [algolia-recommend](#package-algolia-recommend) - -- Moved all test routes files to the demo package so they are out of the example directory. (@paales) [demo-magento-graphcommerce](#package-demo-magento-graphcommerce) - -- Make sure the increment step of the NumberInputField rounds to the nearest step. (@paales) [ecommerce-ui](#package-ecommerce-ui) - -- fix issue where stepper could have values such as 8,10000000000 inste… (@FrankHarland) [ecommerce-ui](#package-ecommerce-ui) - -- Fix NumberFieldElement plus button decreasing the number instead of increasing (@paales) [ecommerce-ui](#package-ecommerce-ui) - -- Fix issue where setting required on the controller caused the form to submit without variables (@Giovanni-Schroevers) [ecommerce-ui](#package-ecommerce-ui) - -- Refactor the FormComponents for better TypeScript checking performance. (@paales) [ecommerce-ui](#package-ecommerce-ui) - -- Always log the networkError during development to the console. (@paales) [ecommerce-ui](#package-ecommerce-ui) - -- Solve issue where an individual item in the ActionCardListForm couldn't be disabed. Resulting in configurable options on the product page to be selectable while they shouldn't be. (@paales) [ecommerce-ui](#package-ecommerce-ui) - -- Solve an issue where Analytics and Tagmanager events wouldn't be sent. Split useSendEvent and sendEvent methods into two files so plugins can be correctly applied to each. (@paales) [google-datalayer](#package-google-datalayer) [googleanalytics](#package-googleanalytics) [googletagmanager](#package-googletagmanager) - -- Solve issue where the loaded GA4 script would not include the correct GA ID (@paales) [googleanalytics](#package-googleanalytics) - -- Remove dependencies from `@graphcommerce/googletagmanager` and `@graphcommerce/googleanalytics` on Magento packages and make the datalayer optional (@paales) [googleanalytics](#package-googleanalytics) [googletagmanager](#package-googletagmanager) - -- ReCaptcha now using the `recaptchaV3Config` query and add a fallback for Magento 2.4.6 and earlier to still use the configuration. Magento 2.4.7 doesn't need that configuration anymore. (@paales) [googlerecaptcha](#package-googlerecaptcha) [graphql](#package-graphql) - -- Solve issue where the persistenceMapper didn't use the same typePolicies and other configuration from the cache, causing potential issues. (@paales) [graphql](#package-graphql) - -- usePrivateQuery now disables masking when an error occurs. (@paales) [graphql](#package-graphql) - -- Upgraded to @apollo/client 3.12.3 without impacting typescript compilation performance. (@paales) [graphql](#package-graphql) [hygraph-dynamic-rows](#package-hygraph-dynamic-rows) [react-hook-form](#package-react-hook-form) - -- GraphQL Mesh will now be in read-only mode by default, so only a single instance is created globally. This means it doesn't get recreated on each page compilation and fast refresh. Creating the instance is an expensive operation and can take multiple seconds and during development (and this can happen multiple times during a single change). Now only a single instance is created during development. To make sure changes are picked up during development set the config value `graphqlMeshEditMode: true` in your graphcommerce.config.js or set the env variable `GC_GRAPHQL_MESH_EDIT_MODE=1`. This is the same as the old behavior and this _will_ make the frontend considerably slower. (@paales) [graphql-mesh](#package-graphql-mesh) - -- Migrated `@graphcommerce/hygraph-cli` package to `"type": "module"` (@paales) [hygraph-cli](#package-hygraph-cli) - -- Solve issue where cached data was stale (@paales) [hygraph-ui](#package-hygraph-ui) - -- Prepare the RichTex for embed and code-block (@paales) [hygraph-ui](#package-hygraph-ui) - -- Forward `` component to `` (@paales) [hygraph-ui](#package-hygraph-ui) - -- Export generateSrcSet from Image component so it can be used for the avatar srcSet directly (@paales) [image](#package-image) - -- Created new Tabs and TabItem component to be used for MultiCart setup (@paales) [next-ui](#package-next-ui) - -- cssFlag and cssNotFlag css selector can now select values (@paales) [next-ui](#package-next-ui) - -- Added missing href to secondary menu items (@bramvanderholst) [next-ui](#package-next-ui) - -- Fix LayoutOverlayHeader2 text overflowing beyond overlay size constraints (@paales) [next-ui](#package-next-ui) - -- Added lots of missing icon exports (@paales) [next-ui](#package-next-ui) - -- Do not warn about `:first-child` since all css is hoisted out of the components. (@paales) [next-ui](#package-next-ui) - -- Intl components now accept the sx prop. `` now expects a date prop instead of children. (@paales) [next-ui](#package-next-ui) - -- Allow setting OverlayContainer props, such as event listeners (@paales) [next-ui](#package-next-ui) - -- Modify the type that is exposed for createTheme, should be faster for TypeScript to check. (@paales) [next-ui](#package-next-ui) - -- Also accept false as value for sxx (@paales) [next-ui](#package-next-ui) - -- Nesting multiple Containers will not increase the padding, will only be applied once. (@paales) [next-ui](#package-next-ui) - -- Added an OverlayCloseButton and implemented it for various locations. (@paales) [next-ui](#package-next-ui) - -- Solve hydration error because multiple literals could be in a DateTimeFormat (@paales) [next-ui](#package-next-ui) - -- Fix IconBlocks width (@StefanAngenent) [next-ui](#package-next-ui) - -- Created a LayoutOverlayHeader2 that does not support any floating modes or something and thus is simpler to customize. (@paales) [next-ui](#package-next-ui) - -- Added ripple to BlogTags (@bramvanderholst) [next-ui](#package-next-ui) - -- Created a useCookie hook that is synced between usages (@paales) [next-ui](#package-next-ui) - -- Prevent excessive rerender when multiple images with the same url are in a product (@paales) [next-ui](#package-next-ui) - -- Solve issue where the sidebar wasn't 100% width on the PDP on mobile (@paales) [next-ui](#package-next-ui) - -- Use a more sensible theme var for LayoutHeaderContent gap (@bramvanderholst) [next-ui](#package-next-ui) - -- Fixed gallery zoom breaking on long sidebar content (@bramvanderholst) [next-ui](#package-next-ui) - -- Added search params to NextLink whenever present (@paales) [next-ui](#package-next-ui) - -- Solve issue where the MenuFabSecondaryItem coudn't handle text overflow. (@paales) [next-ui](#package-next-ui) - -- Fixed back button width in overlays with long titles (@bramvanderholst) [next-ui](#package-next-ui) - -- Update various props from ReactElement to ReactNode to allow string values (@bramvanderholst) [next-ui](#package-next-ui) - -- Solve issue where ActionCard would crash the whole app because it forwarded components to string attributes (@paales) [next-ui](#package-next-ui) - -- Remove dependency on Magento for @graphcommerec/react-hook-form (@paales) [react-hook-form](#package-react-hook-form) - -- Fix typescript infer (@paales) [react-hook-form](#package-react-hook-form) - -- Solve an issue where the false value of the useFormGql was incorrectly interpreted as an error while it was a SKIP. Fixes an issue where the CustomerAddressForm is not submitting properly when the user is adding a new address. (@paales) [react-hook-form](#package-react-hook-form) - -- Fix issue where FormAutoSubmit would not listen for changes when no field names were provided (meaning it should watch changes on all fields) (@paales) [react-hook-form](#package-react-hook-form) - -- Solve issue with react-hook-form causing ts errors, now version is fixed and the ts error is solved (@paales) [react-hook-form](#package-react-hook-form) - -- Components must have Theme parameter to avoid significant compiler slowdown. (@paales) [eslint-config-pwa](#package-eslint-config-pwa) - -- Solve a version-skew problem where certain JS files weren't properly cached by the Service Worker, but the page was cached. The moment a user wanted to load the page the JS files would not exist and result in a 404. This in turn caused the the frontend to be broken until the page was reloaded. - - The cause is that if the prefetch requests fail, other prefetch requests are not made anymore. And since the js file wasn't cached by other buckets, it would result in a 404. (@paales) [misc](#package-misc) [magento-graphcms](#package-magento-graphcms) [magento-open-source](#package-magento-open-source) - -- When the added product can't be found, make sure to render just 'Product' instead of an empty string and show a cart icon instead of a placeholder. (@paales) [misc](#package-misc) - -- Solve issue where the performanceLink was only activated during production while it should have been during development. (@paales) [misc](#package-misc) [magento-graphcms](#package-magento-graphcms) [magento-open-source](#package-magento-open-source) - -- Added missing WebWorker tsconfig for magento-open-source example (@paales) [misc](#package-misc) - -- Solve issue where the category and search page would rerender on pageload because the mask value would flip from true to false (@paales) [misc](#package-misc) [magento-graphcms](#package-magento-graphcms) [magento-open-source](#package-magento-open-source) - -- Support for Magento logo and Magento copyright notice in footer (@paales) [misc](#package-misc) [magento-graphcms](#package-magento-graphcms) [magento-open-source](#package-magento-open-source) - -- Solve issue where plurals weren't properly defined (@paales) [misc](#package-misc) [magento-open-source](#package-magento-open-source) - -- Make sure the maxWidth of the newsletter subscribe box is sm instead of ms, making it too wide. (@paales) [misc](#package-misc) - -- When a dependency is optional or has peerDependenciesMeta set to optional, make sure it doesn't crash when it is not found when calling resolveDependenciesSync (@paales) [next-config](#package-next-config) - -- Remove redirects for `/product/$type/[url]` routes, those haven't been used for years anymore. (@paales) [next-config](#package-next-config) - -- Solve issue with chalk compilation because we’re not migrated to esm modules. (@paales) [next-config](#package-next-config) - -- Solve issue where withGraphCommerce had a hard dependency on Magento specific configurations (@paales) [next-config](#package-next-config) - -- Reduce exported scope of config so we dont introduce a hidden dependency on Magento (@paales) [next-config](#package-next-config) - -- Remove the 'ignored' string when loading the graphcommerce config env variable loading, as that isn't always correct (@paales) [next-config](#package-next-config) - -- Remove rewriteLegacyEnv as that hasn't been used for years (@paales) [next-config](#package-next-config) - -- Migrated `@graphcommerce/next-config` package to `"type": "module"` (@paales) [next-config](#package-next-config) - -- If relatedUpsells are not defined, use empty object so mergeDeep… (@FrankHarland) [magento-graphcms](#package-magento-graphcms) [magento-open-source](#package-magento-open-source) - -- Add correct link to demo project (@FrankHarland) [docs](#package-docs) - -## Packages - -- @graphcommerce/magento-cart: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart/CHANGELOG.md)) -- @graphcommerce/magento-cart-checkout: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-checkout) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-checkout/CHANGELOG.md)) -- @graphcommerce/magento-cart-coupon: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-coupon) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-coupon/CHANGELOG.md)) -- @graphcommerce/magento-cart-email: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-email) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-email/CHANGELOG.md)) -- @graphcommerce/magento-cart-items: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-items) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-items/CHANGELOG.md)) -- @graphcommerce/magento-cart-payment-method: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-payment-method) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-payment-method/CHANGELOG.md)) -- @graphcommerce/magento-cart-pickup: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-pickup) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-pickup/CHANGELOG.md)) -- @graphcommerce/magento-cart-shipping-address: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-shipping-address) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-shipping-address/CHANGELOG.md)) -- @graphcommerce/magento-cart-shipping-method: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-shipping-method) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-shipping-method/CHANGELOG.md)) -- @graphcommerce/magento-category: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-category) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-category/CHANGELOG.md)) -- @graphcommerce/magento-cms: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cms) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cms/CHANGELOG.md)) -- @graphcommerce/magento-compare: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-compare) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-compare/CHANGELOG.md)) -- @graphcommerce/magento-customer: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-customer) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-customer/CHANGELOG.md)) -- @graphcommerce/magento-graphql: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-graphql) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-graphql/CHANGELOG.md)) -- @graphcommerce/magento-graphql-rest: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-graphql-rest) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-graphql-rest/CHANGELOG.md)) -- @graphcommerce/magento-newsletter: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-newsletter) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-newsletter/CHANGELOG.md)) -- @graphcommerce/magento-payment-adyen: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-adyen) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-adyen/CHANGELOG.md)) -- @graphcommerce/magento-payment-braintree: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-braintree) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-braintree/CHANGELOG.md)) -- @graphcommerce/magento-payment-included: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-included) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-included/CHANGELOG.md)) -- @graphcommerce/magento-payment-klarna: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-klarna) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-klarna/CHANGELOG.md)) -- @graphcommerce/magento-payment-multisafepay: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-multisafepay) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-multisafepay/CHANGELOG.md)) -- @graphcommerce/magento-payment-paypal: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-paypal) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-paypal/CHANGELOG.md)) -- @graphcommerce/magento-payment-tokens: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-tokens) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-tokens/CHANGELOG.md)) -- @graphcommerce/magento-product: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product/CHANGELOG.md)) -- @graphcommerce/magento-product-bundle: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-bundle) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-bundle/CHANGELOG.md)) -- @graphcommerce/magento-product-configurable: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-configurable) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-configurable/CHANGELOG.md)) -- @graphcommerce/magento-product-downloadable: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-downloadable) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-downloadable/CHANGELOG.md)) -- @graphcommerce/magento-product-grouped: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-grouped) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-grouped/CHANGELOG.md)) -- @graphcommerce/magento-product-simple: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-simple) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-simple/CHANGELOG.md)) -- @graphcommerce/magento-product-virtual: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-virtual) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-virtual/CHANGELOG.md)) -- @graphcommerce/magento-recently-viewed-products: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-recently-viewed-products) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-recently-viewed-products/CHANGELOG.md)) -- @graphcommerce/magento-review: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-review) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-review/CHANGELOG.md)) -- @graphcommerce/magento-search: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-search) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-search/CHANGELOG.md)) -- @graphcommerce/magento-search-overlay: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-search-overlay) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-search-overlay/CHANGELOG.md)) -- @graphcommerce/magento-store: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-store) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-store/CHANGELOG.md)) -- @graphcommerce/magento-wishlist: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-wishlist) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-wishlist/CHANGELOG.md)) -- @graphcommerce/address-fields-nl: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/address-fields-nl) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/address-fields-nl/CHANGELOG.md)) -- @graphcommerce/algolia-categories: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-categories) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-categories/CHANGELOG.md)) -- @graphcommerce/algolia-insights: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-insights) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-insights/CHANGELOG.md)) -- @graphcommerce/algolia-personalization: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-personalization) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-personalization/CHANGELOG.md)) -- @graphcommerce/algolia-products: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-products) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-products/CHANGELOG.md)) -- @graphcommerce/algolia-recommend: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-recommend) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-recommend/CHANGELOG.md)) -- @graphcommerce/algolia-search: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-search) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-search/CHANGELOG.md)) -- @graphcommerce/cli: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/cli) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/cli/CHANGELOG.md)) -- @graphcommerce/demo-magento-graphcommerce: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/demo-magento-graphcommerce) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/demo-magento-graphcommerce/CHANGELOG.md)) -- @graphcommerce/ecommerce-ui: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/ecommerce-ui) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/ecommerce-ui/CHANGELOG.md)) -- @graphcommerce/framer-next-pages: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-next-pages) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-next-pages/CHANGELOG.md)) -- @graphcommerce/framer-next-pages-example: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-next-pages-example) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-next-pages-example/CHANGELOG.md)) -- @graphcommerce/framer-scroller: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-scroller) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-scroller/CHANGELOG.md)) -- @graphcommerce/framer-scroller-example: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-scroller-example) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-scroller-example/CHANGELOG.md)) -- @graphcommerce/framer-utils: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-utils) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-utils/CHANGELOG.md)) -- @graphcommerce/google-datalayer: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/google-datalayer) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/google-datalayer/CHANGELOG.md)) -- @graphcommerce/google-playstore: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/google-playstore) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/google-playstore/CHANGELOG.md)) -- @graphcommerce/googleanalytics: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/googleanalytics) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/googleanalytics/CHANGELOG.md)) -- @graphcommerce/googlerecaptcha: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/googlerecaptcha) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/googlerecaptcha/CHANGELOG.md)) -- @graphcommerce/googletagmanager: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/googletagmanager) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/googletagmanager/CHANGELOG.md)) -- @graphcommerce/graphcms-ui: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphcms-ui) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphcms-ui/CHANGELOG.md)) -- @graphcommerce/graphql: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql/CHANGELOG.md)) -- @graphcommerce/graphql-mesh: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql-mesh) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql-mesh/CHANGELOG.md)) -- @graphcommerce/hygraph-cli: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/hygraph-cli) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/hygraph-cli/CHANGELOG.md)) -- @graphcommerce/hygraph-dynamic-rows: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/hygraph-dynamic-rows) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/hygraph-dynamic-rows/CHANGELOG.md)) -- @graphcommerce/hygraph-dynamic-rows-ui: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/hygraph-dynamic-rows-ui) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/hygraph-dynamic-rows-ui/CHANGELOG.md)) -- @graphcommerce/hygraph-ui: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/hygraph-ui) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/hygraph-ui/CHANGELOG.md)) -- @graphcommerce/image: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/image) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/image/CHANGELOG.md)) -- @graphcommerce/image-example: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/image-example) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/image-example/CHANGELOG.md)) -- @graphcommerce/lingui-next: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/lingui-next) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/lingui-next/CHANGELOG.md)) -- @graphcommerce/mollie-magento-payment: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/mollie-magento-payment) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/mollie-magento-payment/CHANGELOG.md)) -- @graphcommerce/next-ui: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packagesDev/next-ui) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packagesDev/next-ui/CHANGELOG.md)) -- @graphcommerce/react-hook-form: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/react-hook-form) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/react-hook-form/CHANGELOG.md)) -- @graphcommerce/service-worker: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/service-worker) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/service-worker/CHANGELOG.md)) -- @graphcommerce/browserslist-config-pwa: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/browserslist-config-pwa) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/browserslist-config-pwa/CHANGELOG.md)) -- @graphcommerce/changeset-changelog: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/changeset-changelog) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/changeset-changelog/CHANGELOG.md)) -- @graphcommerce/eslint-config-pwa: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/eslint-config-pwa) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/eslint-config-pwa/CHANGELOG.md)) -- @graphcommerce/graphql-codegen-markdown-docs: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql-codegen-markdown-docs) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql-codegen-markdown-docs/CHANGELOG.md)) -- @graphcommerce/graphql-codegen-near-operation-file: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql-codegen-near-operation-file) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql-codegen-near-operation-file/CHANGELOG.md)) -- @graphcommerce/graphql-codegen-relay-optimizer-plugin: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql-codegen-relay-optimizer-plugin) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql-codegen-relay-optimizer-plugin/CHANGELOG.md)) -- @graphcommerce/misc: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/misc) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/misc/CHANGELOG.md)) -- @graphcommerce/next-config: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packagesDev/next-config) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packagesDev/next-config/CHANGELOG.md)) -- @graphcommerce/prettier-config-pwa: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/prettier-config-pwa) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/prettier-config-pwa/CHANGELOG.md)) -- @graphcommerce/typescript-config-pwa: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/typescript-config-pwa) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/typescript-config-pwa/CHANGELOG.md)) -- @graphcommerce/magento-graphcms: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-graphcms) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-graphcms/CHANGELOG.md)) -- @graphcommerce/magento-open-source: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-open-source) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-open-source/CHANGELOG.md)) -- @graphcommerce/docs: ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/docs) β€’ [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/docs/CHANGELOG.md)) diff --git a/.github/workflows/release-canary.yml b/.github/workflows/release-canary.yml index 9ee5c550119..14e52796823 100644 --- a/.github/workflows/release-canary.yml +++ b/.github/workflows/release-canary.yml @@ -59,23 +59,31 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - name: create branch disable pre and version + - name: Create release branch and PR shell: bash run: | + # Exit pre-release mode and version for stable yarn changeset pre exit yarn changeset version yarn install + + # Commit the stable version changes git add . + git commit -m "chore(release): version packages for stable release" + + # Push to release branch (force to update if exists) + git push origin HEAD:changeset-release/from-canary --force + + # Create or update PR using GitHub CLI + PR_URL=$(gh pr list --head changeset-release/from-canary --base main --json url --jq '.[0].url') + if [ -z "$PR_URL" ]; then + gh pr create \ + --base main \ + --head changeset-release/from-canary \ + --title "Release ${{ steps.vars.outputs.date }}" \ + --body "Automated release PR from canary branch" + else + echo "PR already exists: $PR_URL" + fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Create Pull Request - id: cpr - uses: peter-evans/create-pull-request@v7 - with: - branch: changeset-release/from-canary - title: 'Release ${{ steps.vars.outputs.date }}' - - name: Check outputs - if: ${{ steps.cpr.outputs.pull-request-number }} - run: | - echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" - echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" diff --git a/RELEASE-10.0.0.md b/RELEASE-10.0.0.md new file mode 100644 index 00000000000..882283f1622 --- /dev/null +++ b/RELEASE-10.0.0.md @@ -0,0 +1,1265 @@ +# GraphCommerce 10.0.0 Release Notes + +GraphCommerce 10.0.0 bring major performance improvements during development, +expect a 10x speed improvement with fast refresh and a 5x speed improvements for +production builds. We've updated to the latest version of Next.js, React 19, MUI +and Apollo Client 4. + +## Next.js 16 + +- [Node.js middleware](https://nextjs.org/blog/next-15-5#nodejs-middleware-stable). +- [Turbopack](https://nextjs.org/blog/next-16#turbopack-stable) with + [bundle analyzer](https://nextjs.org/blog/next-16-1#nextjs-bundle-analyzer-experimental) + +## React 19 + +- [Actions](https://react.dev/blog/2024/12/05/react-19#actions) +- [`useActionState`](https://react.dev/blog/2024/12/05/react-19#new-hook-useactionstate) +- [`useOptimistic`](https://react.dev/blog/2024/12/05/react-19#new-hook-optimistic-updates) +- [`use`](https://react.dev/blog/2024/12/05/react-19#new-feature-use) +- [``](https://react.dev/blog/2024/12/05/react-19#form-actions) +- [`useFormStatus`](https://react.dev/blog/2024/12/05/react-19#new-hook-useformstatus) +- [`ref` as prop](https://react.dev/blog/2024/12/05/react-19#ref-as-a-prop) and + [`ref` cleanup](https://react.dev/blog/2024/12/05/react-19#cleanup-functions-for-refs) +- [`Custom Elements`](https://react.dev/blog/2024/12/05/react-19#support-for-custom-elements) +- [`useEventEffect`](https://react.dev/blog/2025/10/01/react-19-2#use-effect-event) + +## React Compiler + Eslint + +Next.js 16 comes with support for the new +[React Compiler 1.0](https://react.dev/blog/2025/10/07/react-compiler-1), +although not enabled by default and we're not using it on our side yet, all +groundwork has been laid out to start experimenting with it. This also comes +with the new advanced `eslint-plugin-react-hooks` which will warn you thoughout +the codebase when using unsupported patterns. + +## MUI 7 + +We've updated from MUI 6 yo MUI 7. See release notes of +[MUI 6](https://mui.com/blog/material-ui-v6-is-out/) and +[MUI 7](https://mui.com/blog/material-ui-v7-is-out/) for more details. + +- [CSS Variables](https://mui.com/blog/material-ui-v6-is-out/#css-theme-variables): + All variables can be accessed in JS via `theme.vars.palette.primary.main` or + directly with `var(--palette-primary-main)`. +- [Container Queries](https://mui.com/blog/material-ui-v6-is-out/#container-queries): + With great browser support it comes as a welcome addition to the framework. +- [CSS Layer support](https://mui.com/blog/material-ui-v7-is-here/#opt-in-support-for-css-layers) + +## Apollo Client 4 + +- [Unified error handling](https://github.com/apollographql/apollo-client/blob/main/CHANGELOG.md#-unified-error-handling) +- [Better typescript support](https://github.com/apollographql/apollo-client/blob/main/CHANGELOG.md#-enhanced-typescript-support) +- [rxjs](https://github.com/apollographql/apollo-client/blob/main/CHANGELOG.md#-modern-observable-implementation) + +## Turbopack + +This major release brings full Turbopack compatibility, dramatically improving +development speed. To allow for Turbopack we needed to migrate away from all +Webpack plugins and replace them with replacements that do not rely on +customizations of the build process. + +- **Plugin/Interceptor system rewrite:** Before we created a + FileName.interceptor.tsx that would be loaded when the original file was + requested (with a custom Webpack plugin), now we rename the original file to + FileName.original.tsx and create the interceptor at Filename.tsx. This does + two things: We don't need to copy the original source code to the file, making + for cleaner interceptors which work better wiht hot reloading and we don't + need to create a custom Turbopack plugin (which isn't even possible yet). New + CLI commands: `yarn graphcommerce codegen-interceptors` to generate + interceptor files and `yarn graphcommerce cleanup-interceptors` to reset the + interceptor system and restore original files. + +- **Treeshakable Configuration System:** Replaced Webpack `DefinePlugin`-based + `import.meta.graphCommerce` with a new generated configuration system. New + `yarn graphcommerce codegen-config-values` command generates TypeScript files + with precise typing. All configurations are now available as contants + `import { myConfig } from '@graphcommerce/next-config/config'` to use in your + code. By generating multiple files for nested objects we allow the compiler to + understand what can be tree-shaken. + +## Breaking change: Node 18 not supported, 20 and 22 are. + +- Node 18 is EOL +- Added support for Node 20 and 22 +- Node 24 will be added later (After this is fixed + https://github.com/ardatan/whatwg-node/issues/2971) +- Migrated to vitest (@paales) + [graphql-codegen-markdown-docs](#package-graphql-codegen-markdown-docs) + [graphql-codegen-relay-optimizer-plugin](#package-graphql-codegen-relay-optimizer-plugin) + [next-config](#package-next-config) + +## Magento improvements + +- Added support for multiple display currencies in the frontend. Multiple + currencies were already supported, but this introduces Display Currencies for + viewing the cart in different currencies. (@paales) + [magento-store](#package-magento-store) + +- Refactored the Store Selector to be more of a form and have multiple nested + toggles to switch groups, stores and currencies. It automatically hides + features that aren't used: If only a single group is used with multiple stores + only the store selector is shown. If multiple groups are used with each a + single store is used, only the group selector is shown. If only a single + currency is used, there is no currency selector. If multiple currencies are + used, the currency selector is shown. (@paales) + [magento-store](#package-magento-store) + +- Add billingAddress permission (EDITABLE | READONLY) that controls whether the + end user can update their billing address in the account section and checkout. + (@Giovanni-Schroevers) [magento-cart](#package-magento-cart) + [magento-cart-shipping-address](#package-magento-cart-shipping-address) + [magento-customer](#package-magento-customer) + [magento-graphcms](#package-magento-graphcms) + [magento-open-source](#package-magento-open-source) + +- Magento 2.4.7: Implemented the `customer_account_create` and + `customer_account_edit` forms using the `attributeForm` query for the + registration page and customer information form. The forms respect the + settings configured in the 'Customer Configuration section'. It allows + configuration for `prefix`, `middlename`, `suffix`,`dob`, `gender` and other + fields. This also makes the frontend compatible with Adobe Commerce's Customer + Attributes module. (@paales) [magento-customer](#package-magento-customer) + +- Added support for viewing Invoices/Shipments and Credit Memo's (@paales) + [magento-customer](#package-magento-customer) + +- Magento: Introduce a new Product-`uid` to solve an issue where cache + normalization was not working properly on the frontend when viewing products + with a differen curreny, etc. + + Products now have a more detailed `uid` which will include the scope the + product is retrieved from. For example: + `NDg5MDM=?store=nl_NL¤cyCode=EUR`. This results in a better cache + normalization in Apollo Client and allows for switching between scopes + (store/currency/price views/accounts) without creating a broken cache state. + + We have implemented this with a new resolver that rewrites the `uid` passed + from Magento to the Mesh Resolver, and additing additonal data to the `uid` + based on the headers passed from the client. This also requires each package + to implement the `getPrivateQueryContextMesh` method to retrieve the current + PrivateQuery context from the GraphQL request headers. (@paales) + [magento-graphql](#package-magento-graphql) + [magento-store](#package-magento-store) [graphql](#package-graphql) + +- Improved Downloadable products functionality: + - Account Dashboard Link and Download Page + - Download samples / linkSamples and links from the backend. + - CartItem edit functionality for the DownloadableCartItem + - Dynamic ProductPagePrice for downloadable options + ([@paales](https://github.com/paales)) + +- Implemented the `query { attributesForm }` to be able to dynamically render + forms with useAttributesForm/preloadAttributesForm and + AttributesFormAutoLayout, and additional utilities to handle form submissions. + (@paales) [magento-store](#package-magento-store) + +## Algolia improvements + +- Algolia stock status fix: Use `in_stock` instead of `is_stock` in Algolia hit + to Magento product conversion (@davido-priority) + +- Search Categories through algolia (@paales) + [magento-search](#package-magento-search) + [algolia-categories](#package-algolia-categories) + +- Added support for Algolia's facetOrdering which allows you to change the + presented filters based on rules. (@paales) + [algolia-products](#package-algolia-products) + +## Other + +- Make hygraph-cli dependency for the cli package optional, so that + resolveDependenciesSync accepts it not being installed. (@Giovanni-Schroevers) + [cli](#package-cli) + +## πŸ› Fixes + +- When running a cart mutation and the cartId is already passed to the form we + use that value instead of retrieving the current cart again. (@paales) + [magento-cart](#package-magento-cart) + +- Allow setting the cartId in the form for useFormGqlMutationCart by setting the + cartId in the form AND allow setting the cartId for a whole context by + wrapping with CartIdProvider (@paales) [magento-cart](#package-magento-cart) + [magento-cart-shipping-address](#package-magento-cart-shipping-address) + +- Allow setting the redirect value in the AddProductsToCartForm as a form value. + (@paales) [magento-cart](#package-magento-cart) + +- Forwarded ref to AddProductsToCartButton (@paales) + [magento-cart](#package-magento-cart) + +- Solve issue where the total of the cart was zero due to discount or store + credit the user couldn't proceed to the checkout. We now check for items and + errors instead of the total. (@Giovanni-Schroevers) + [magento-cart](#package-magento-cart) + +- Remove all usages of the NoSsr component as the GraphQL layer already handles + this. (@paales) [magento-cart](#package-magento-cart) + [magento-compare](#package-magento-compare) + [magento-customer](#package-magento-customer) + [magento-wishlist](#package-magento-wishlist) + +- Solve typescript issue were product types were added incorrectly. (@paales) + [magento-cart](#package-magento-cart) + [magento-wishlist](#package-magento-wishlist) + +- Removed deprecated fields from AddProductsToCartForm (@paales) + [magento-cart](#package-magento-cart) + +- When ordering a virtual product the checkout would still reference a Track & + Trace (@paales) [magento-cart](#package-magento-cart) + +- Solve issue where if the onBeforeSubmit would return false, it would still + error if submitted while the cart is locked. (@paales) + [magento-cart](#package-magento-cart) + +- Moved all functionality from the @graphcommerce/magento-cart-billing-address + package to the @graphcommerce/magento-cart package. All occurences of + @graphcommerce/magento-cart-billing-address should be removed for your + codebase. (@paales) [magento-cart](#package-magento-cart) + +- Allow awaitable async requests for onStart on checkout button (@paales) + [magento-cart](#package-magento-cart) + [google-datalayer](#package-google-datalayer) + +- When the cart totals are updated via a mutation, make sure to also fetch the + id when the query is used so that automatically updates. (@paales) + [magento-cart](#package-magento-cart) + +- CartTotals now accepts a readOnly prop to handle plugins showing information + based on that prop (@paales) [magento-cart](#package-magento-cart) + +- Solve issue where available_payment_methods would give an apollo client error + that it couldn’t be properly merged (@paales) + [magento-cart](#package-magento-cart) + +- Prevent rendering "You have not placed an order" before the router resolves. + (@carlocarels90) [magento-cart-checkout](#package-magento-cart-checkout) + +- Resolve issue where a 400 error occurred due to missing coupon code data in + the request. The coupon input field was being disabled before form submission, + preventing the code from being included in the request payload + (@joshdavenport) [magento-cart-coupon](#package-magento-cart-coupon) + +- Align coupon accordion with other accordion types that can still expand with + chips rendered (@paales) [magento-cart-coupon](#package-magento-cart-coupon) + +- Split out various Cart related fragments to allow for easier extensibility: + AppliedCoupon, CartPrices, CartTaxItem, Discount (@paales) + [magento-cart-coupon](#package-magento-cart-coupon) + +- fix(checkout): fix faulty check if email exists in the checkout; keep special + characters in email on redirect to login (@FrankHarland) + [magento-cart-email](#package-magento-cart-email) + +- Added support for TIME and DATE for the customizable options. Added required + stars. (@paales) [magento-cart-items](#package-magento-cart-items) + [magento-product](#package-magento-product) + +- Created a new PriceModifiers component that is implemented on CartItems, + allowing different product types to render their options in a consistent + manner and allow rendering a base price so that the sum in the cart is + correct. (@paales) [magento-cart-items](#package-magento-cart-items) + [magento-store](#package-magento-store) + +- Currency wasn't set properly while rendering custom options for cart items + that had a different currency than the current store. (@paales) + [magento-cart-items](#package-magento-cart-items) + +- Solve issue where the UpdateItemQuantity would send a wrong query to the + backend. (@paales) [magento-cart-items](#package-magento-cart-items) + +- Solve issue where the CartItem href wouldn't be correct (@paales) + [magento-cart-items](#package-magento-cart-items) + +- Solve issue where if a product wasn't available in the cart anymore from the + server the user wouldn't be able to remove the item from the cart. (@paales) + [magento-cart-items](#package-magento-cart-items) + +- Exported cartItemToCartItemInput so it can be extended with plugins (@paales) + [magento-cart-items](#package-magento-cart-items) + +- Solve issue where the Place order button would remain in a loading state + because the back/forward cache of chrome started working for the checkout and + thus React's state would not be reset, thinking we were still exiting the + page. (@paales) + [magento-cart-payment-method](#package-magento-cart-payment-method) + +- Forward productListRenderer for all locations that can be rendered by + pagebuilder (@paales) [magento-category](#package-magento-category) + [magento-product](#package-magento-product) + [magento-graphcms](#package-magento-graphcms) + +- Added support for meta_keyword for products and categories (@paales) + [magento-category](#package-magento-category) + [magento-product](#package-magento-product) [next-ui](#package-next-ui) + +- Solve issue where productListRenderer was passed as a DOM element, causing + react warnings. (@paales) [magento-category](#package-magento-category) + +- Fix bug where allName would not be translated when switching stores + (@Giovanni-Schroevers) [magento-category](#package-magento-category) + +- Move the category fragment to the category prop (@paales) + [magento-category](#package-magento-category) + +- Solve issue where in some cases a second ProductList query was made because + the category used an `eq` filter instead of an `in` filter. (@paales) + [magento-category](#package-magento-category) + [magento-product](#package-magento-product) + +- Convert home to render the home CmsPage and add page/\[…url] route for + additional pages. (@paales) [magento-cms](#package-magento-cms) + +- Added support for loading CMS Pages from Magento (@paales) + [magento-cms](#package-magento-cms) + +- Added cmsBlocks query and `` component. (@paales) + [magento-cms](#package-magento-cms) + +- Render the no-route page (or whatever is configured) on the 404 page when + running with only Magento. (@paales) [magento-cms](#package-magento-cms) + +- Created a AccountDashboardQueryFragment instead of only a query to allow for + adding customerDownloadableProducts to the dashboard query (@paales) + [magento-customer](#package-magento-customer) + +- Forward address field props (@paales) + [magento-customer](#package-magento-customer) + +- Migrate to default OrderItem resolver and remove useOrderCardItemImages as + OrderItem now returns a product. Add a custom resolver for 2.4.5 and 2.4.6 + that implements the functionality for older versions. (@paales) + [magento-customer](#package-magento-customer) + +- Created a refactored the AccountOrders page and refactored the OrderCard. + (@paales) [magento-customer](#package-magento-customer) + +- Implemented order sorting for account overview and account list and implement + custom resolver for Magento 2.4.5 (which is slow but works). (@paales) + [magento-customer](#package-magento-customer) + [magento-graphql](#package-magento-graphql) + +- Deleting an account will now require reauthentication and moved the menu item + to the Authentication section (@paales) + [magento-customer](#package-magento-customer) + +- Use OrderStateLabel in my account instead of OrderStateLabelInline and + deprecate that one. (@paales) [magento-customer](#package-magento-customer) + +- Solve issue where the user is getting a 400 error when logging in because the + password is not being sent. The password field was disabled before the form + was submitted, causing the password not to be sent. (@paales) + [magento-customer](#package-magento-customer) + +- Unset token when on magento 248 to prevent repeated graphql-authentication + errors (@Giovanni-Schroevers) [magento-customer](#package-magento-customer) + +- OrderTotals/OrderDetails now only renders addres information if available + (@paales) [magento-customer](#package-magento-customer) + +- Order/Invoice/CreditMemo and Shipment views (@paales) + [magento-customer](#package-magento-customer) + [magento-product-bundle](#package-magento-product-bundle) + [magento-product-downloadable](#package-magento-product-downloadable) + +- Remove odd nonNullable that is also available in @graphcommmerce/next-ui + (@paales) [magento-customer](#package-magento-customer) + +- `` now accepts all props of the FullPageMessage (@paales) + [magento-customer](#package-magento-customer) + +- Add flushMeasurePerf for product page (@paales) + [magento-graphql](#package-magento-graphql) + +- Solve issue where the ApolloClient cache wasn't scoped properly causing the + wrong currency to be shown when switching currency. (@paales) + [magento-graphql](#package-magento-graphql) [graphql](#package-graphql) + +- Magento <= 2.4.6: Solve issue where GraphCommerce's schema compatibility layer + would define fields to be always return a value while they would never causing + runtime errors which are hard to catch. (@paales) + [magento-graphql](#package-magento-graphql) + +- Moved Customer group_id resolver to magento-graphql-rest package where it + should belong. (@paales) [magento-graphql-rest](#package-magento-graphql-rest) + [algolia-products](#package-algolia-products) + +- Allow passing children to CustomerNewsletterToggle (@paales) + [magento-newsletter](#package-magento-newsletter) + +- Use CustomerNewsletterToggle whenever possible (@paales) + [magento-newsletter](#package-magento-newsletter) + +- Prevent executing additional query when user is signing out (@paales) + [magento-newsletter](#package-magento-newsletter) + +- Remove issuer list from ideal payment method (@Giovanni-Schroevers) + [magento-payment-adyen](#package-magento-payment-adyen) + [magento-payment-multisafepay](#package-magento-payment-multisafepay) + [mollie-magento-payment](#package-mollie-magento-payment) + +- Make checkmo respect the payableTo and sendTo values (@paales) + [magento-payment-included](#package-magento-payment-included) + +- Remove issuers field from MultiSafePay in preparation for iDeal 2. Please not + that this change requires an upgrade to the Magento module as well. + (@Giovanni-Schroevers) + [magento-payment-multisafepay](#package-magento-payment-multisafepay) + +- Solve issue where the cart would remain locked if a user would return to the + website without going through the checkout/payment step. (@paales) + [magento-payment-multisafepay](#package-magento-payment-multisafepay) + +- Solve issue where the MSPPaymentHandler query would be executed multiple + times. (@paales) + [magento-payment-multisafepay](#package-magento-payment-multisafepay) + +- Created a Payment tokens package to be able to manage stored cards from the + account section. (@paales) + [magento-payment-tokens](#package-magento-payment-tokens) + +- [@paales](https://github.com/paales)(@paales) + [magento-payment-tokens](#package-magento-payment-tokens) + +- Solve issue where the added item couldn't be properly found based on the input + filters, causing problems when sending data to the data layer. + (@Giovanni-Schroevers) [magento-product](#package-magento-product) + +- [@paales](https://github.com/paales)(@paales) + [magento-product](#package-magento-product) + +- Solve issue when a user applies their first filter on a category page, a + redundant GraphQL call would be made, even though the user was navigating to + the `/c/[..url]` route. (@paales) [magento-product](#package-magento-product) + +- [@paales](https://github.com/paales)(@paales) + [magento-product](#package-magento-product) + +- Customizable Product Options wouldn't be properly selected because the parent + woudln't rerender anymore. (@paales) + [magento-product](#package-magento-product) + +- ProductSpecs now uses `attribute { label }` instead of + `useQuery(ProductSpecsTypes)` (@paales) + [magento-product](#package-magento-product) + +- Add support for `variant=unit` and `variant=total` rendering of + `ProductPagePrice` to include the quantity or not. (@paales) + [magento-product](#package-magento-product) + +- Added support for video's on the product page. (@paales) + [magento-product](#package-magento-product) + [framer-scroller](#package-framer-scroller) + +- Solve issue where the category sidebar navigation would show a Clear button + while it wasn't clearable. (@paales) + [magento-product](#package-magento-product) + [magento-search](#package-magento-search) + +- Make sure CustomizableOptions are sorted correctly (@paales) + [magento-product](#package-magento-product) + +- Created a CustomizablePrice component that will highlight the price, to + prevent duplicating logic and preventing rerenders. (@paales) + [magento-product](#package-magento-product) + +- Created a ProductPagePriceLowest component that switches when the configurable + option changes. (@paales) [magento-product](#package-magento-product) + +- `/` would not consider everything after the `/` as part of the search. + (@paales) [magento-product](#package-magento-product) + [magento-search](#package-magento-search) + +- Forward the cart to AddProductsToCartSnackbarMessage (@paales) + [magento-product](#package-magento-product) + +- Support for new_from_date and new_to_date labels (@paales) + [magento-product](#package-magento-product) + +- Refactored the price calculation of customizable options on the product page + so required options are correctly handled. (@paales) + [magento-product](#package-magento-product) + +- feat(GCOM-1577): show product name and link on PDP breadcrumbs (@FrankHarland) + [magento-product](#package-magento-product) + +- Translate relevance sort option when a non translated value is communicated + from algolia. (@paales) [magento-product](#package-magento-product) + +- Solve issue where the ProductListItemsBase was already wrapped in a form. + (@paales) [magento-product](#package-magento-product) + +- Solve issue where grouped products could only be added to the cart correctly + once. (@paales) [magento-product](#package-magento-product) + [magento-product-grouped](#package-magento-product-grouped) + +- Fix regression issue where the sidebar filter values would be rendered too big + and padding was missing on the top when values would be renderd in a bottom + sheet. (@paales) [magento-product](#package-magento-product) + +- Solve issue where the tier price doesn't get divided by the quantity, thus + showing the wrong price. (@paales) [magento-product](#package-magento-product) + +- When loading the category/search page in the case that there are no filters + applied, the amount or product related queries is reduced from 2 to 1 + (ProductFilters is skipped). Pagination, sorting and search terms also do not + affect this. When a filter is applied we fall back to the previous + functionality and do a second query to retrieve the filters. + + This did not matter when the categories/search pages were served by Magento as + Magento would cache the result of the ProductFilters query. When the the + catalog is served by an external service like Algolia this might be a problem. + + Implementation details: When filters are applied (e.g., filtering by + color:blue), the ProductList query only returns products matching that filter, + which means other filter options (like other colors) are excluded from the + filter options. This behavior is expected since those other options wouldn't + return any products. However, when no filters are applied, the ProductList + query returns all products along with all available filter options, + eliminating the need for a separate ProductFilters query. (@paales) + [magento-product](#package-magento-product) + [magento-search](#package-magento-search) + [magento-search-overlay](#package-magento-search-overlay) + +- Renamed customizable_options_entered to entered_options_record and + customizable_options to selected_options_record (@paales) + [magento-product](#package-magento-product) + +- Make sure the product price is updated when the quantity of a product is + changed. (@paales) [magento-product](#package-magento-product) + +- Add the ability to edit bundle products from the cart page (@paales) + [magento-product-bundle](#package-magento-product-bundle) + +- Magento 2.4.7: Render discounts for bundle products (@paales) + [magento-product-bundle](#package-magento-product-bundle) + +- Calculate the product page price dynamically based on the options and + quantities selected. (@paales) + [magento-product-bundle](#package-magento-product-bundle) + +- Implement the Cart options as priceModifiers so the logic can be somewhat + re-used for multiple locations (@paales) + [magento-product-bundle](#package-magento-product-bundle) + [magento-product-configurable](#package-magento-product-configurable) + [magento-product-downloadable](#package-magento-product-downloadable) + [magento-product-simple](#package-magento-product-simple) + [magento-product-virtual](#package-magento-product-virtual) + +- Solve issue where the GetConfigurableOptionsSelection query would be executed + even if the product wasn't a ConfigurableProduct. (@paales) + [magento-product-configurable](#package-magento-product-configurable) + +- Do not directly update the cache of the defaultConfigurableOptionsSelection, + but query the backend. (@paales) + [magento-product-configurable](#package-magento-product-configurable) + +- Solve issue where Configurable Options would not respect the option position. + (@ThisIsRuddy) + [magento-product-configurable](#package-magento-product-configurable) + +- Move the cartItemEdit functionality to a plugin for configurable products + (@paales) + [magento-product-configurable](#package-magento-product-configurable) + +- Support for links_purchased_separately and links_title (@paales) + [magento-product-downloadable](#package-magento-product-downloadable) + +- Use narrower types for grouped products (@paales) + [magento-product-grouped](#package-magento-product-grouped) + +- Use ProductListPrice and AddProductsToCartQuantity for grouped product lines + (@paales) [magento-product-grouped](#package-magento-product-grouped) + +- Allow setting alternate search input placeholder (@bramvanderholst) + [magento-search](#package-magento-search) + +- Solve issue where a magento store reference was added to the graphql-mesh + package. (@paales) [magento-store](#package-magento-store) + [googlerecaptcha](#package-googlerecaptcha) + [graphql-mesh](#package-graphql-mesh) + +- Use the default display currency instead of the base currency in case they + differ from one another. (@paales) [magento-store](#package-magento-store) + +- Use the `storeConfig.head_shortcut_icon` when configured, if not configured it + will use the favicon.ico and favicon.svg from the public folder. (@paales) + [magento-store](#package-magento-store) + +- Support asNumber for Money component to easily render all prices as number + (@paales) [magento-store](#package-magento-store) + +- Allow setting alternate store switcher URL (@bramvanderholst) + [magento-store](#package-magento-store) + +- Store switcher now allows switching between currencies without navigating and + just switches the @privateContext. (@paales) + [magento-store](#package-magento-store) + +- Added store switcher to the header and mobile navigation (@paales) + [magento-store](#package-magento-store) + +- Added a CurrencySymbol component that renders the current currency symbol + (@paales) [magento-store](#package-magento-store) [next-ui](#package-next-ui) + +- Solve compat issue with adobe commerce (@paales) + [magento-wishlist](#package-magento-wishlist) + +- Added meta_keywords to CmsPageMeta and CategoryMeta (@paales) + [algolia-categories](#package-algolia-categories) + [magento-graphcms](#package-magento-graphcms) + +- Allow returning the algolia index name that is being searched (@paales) + [algolia-categories](#package-algolia-categories) + [algolia-products](#package-algolia-products) + +- Update useSendAlgoliaEvent.ts (@FrankHarland) + [algolia-insights](#package-algolia-insights) + +- Solve issue where the useSendEventAlgolia hook would sometimes throw an error + during purchase (@Giovanni-Schroevers) + [algolia-insights](#package-algolia-insights) + +- Updated Algolia to the latest version of the spec. (@paales) + [algolia-products](#package-algolia-products) + [algolia-recommend](#package-algolia-recommend) + +- Solve issue when creating an account the group_id would be requested but there + wansn't a token available to retrieve the group_id. (@Renzovh) + [algolia-products](#package-algolia-products) + +- Normalize input values from Algolia to schema compliant values (@FrankHarland) + [algolia-products](#package-algolia-products) + +- Updated Algolia docs for search suggestions and used a different naming scheme + where baseIndex+suggestionsSuffix is used (default that algolia suggests). + (@paales) [algolia-products](#package-algolia-products) + +- Fixed issue where if a value contains a `/` or a `,` the URL parsing would + break. Those values are now replaced with `_AND_` and `_OR_` in the URL. + (@paales) [algolia-products](#package-algolia-products) + +- Solve issue where the customer group specific price index wasn't used and + added warnings to be able to debug the issue. (@paales) + [algolia-products](#package-algolia-products) + +- Solve issue where used configurations might not be scoped to the correct + store. Move caching to the mesh cache and scope per store. (@paales) + [algolia-products](#package-algolia-products) + +- Solve issue where algolia would return a full product URL instead of only the + pathname of the given URL from Magento (@paales) + [algolia-products](#package-algolia-products) + +- Solve issue where the generated bucket for price aggregations didn’t contain + the correct values. (@paales) [algolia-products](#package-algolia-products) + +- Solve issue where some values wouldn’t be correctly flattened. (@paales) + [algolia-products](#package-algolia-products) + +- [@paales](https://github.com/paales)(@paales) + [algolia-products](#package-algolia-products) + [algolia-recommend](#package-algolia-recommend) + +- Solve issue where Algolia didn't properly handle visibility as the attribute + wasn't filterable, it automatically detects when there is a visibility + attribute and uses that for filtering. (@paales) + [algolia-products](#package-algolia-products) + +- Make sure the short_description and description can be properly returned when + retrieved via an Algolia query (@paales) + [algolia-products](#package-algolia-products) + +- Make facetName and facetValue optional when retrieving trending products + (@paales) [algolia-recommend](#package-algolia-recommend) + +- Solve issue where trendingProducts or trendingFacetValues couldn’t be resolved + becasue root would be null (@paales) + [algolia-recommend](#package-algolia-recommend) + +- Moved all test routes files to the demo package so they are out of the example + directory. (@paales) + [demo-magento-graphcommerce](#package-demo-magento-graphcommerce) + +- Make sure the increment step of the NumberInputField rounds to the nearest + step. (@paales) [ecommerce-ui](#package-ecommerce-ui) + +- fix issue where stepper could have values such as 8,10000000000 inste… + (@FrankHarland) [ecommerce-ui](#package-ecommerce-ui) + +- Fix NumberFieldElement plus button decreasing the number instead of increasing + (@paales) [ecommerce-ui](#package-ecommerce-ui) + +- Fix issue where setting required on the controller caused the form to submit + without variables (@Giovanni-Schroevers) [ecommerce-ui](#package-ecommerce-ui) + +- Refactor the FormComponents for better TypeScript checking performance. + (@paales) [ecommerce-ui](#package-ecommerce-ui) + +- Always log the networkError during development to the console. (@paales) + [ecommerce-ui](#package-ecommerce-ui) + +- Solve issue where an individual item in the ActionCardListForm couldn't be + disabed. Resulting in configurable options on the product page to be + selectable while they shouldn't be. (@paales) + [ecommerce-ui](#package-ecommerce-ui) + +- Solve an issue where Analytics and Tagmanager events wouldn't be sent. Split + useSendEvent and sendEvent methods into two files so plugins can be correctly + applied to each. (@paales) [google-datalayer](#package-google-datalayer) + [googleanalytics](#package-googleanalytics) + [googletagmanager](#package-googletagmanager) + +- Solve issue where the loaded GA4 script would not include the correct GA ID + (@paales) [googleanalytics](#package-googleanalytics) + +- Remove dependencies from `@graphcommerce/googletagmanager` and + `@graphcommerce/googleanalytics` on Magento packages and make the datalayer + optional (@paales) [googleanalytics](#package-googleanalytics) + [googletagmanager](#package-googletagmanager) + +- ReCaptcha now using the `recaptchaV3Config` query and add a fallback for + Magento 2.4.6 and earlier to still use the configuration. Magento 2.4.7 + doesn't need that configuration anymore. (@paales) + [googlerecaptcha](#package-googlerecaptcha) [graphql](#package-graphql) + +- Solve issue where the persistenceMapper didn't use the same typePolicies and + other configuration from the cache, causing potential issues. (@paales) + [graphql](#package-graphql) + +- usePrivateQuery now disables masking when an error occurs. (@paales) + [graphql](#package-graphql) + +- Upgraded to @apollo/client 3.12.3 without impacting typescript compilation + performance. (@paales) [graphql](#package-graphql) + [hygraph-dynamic-rows](#package-hygraph-dynamic-rows) + [react-hook-form](#package-react-hook-form) + +- GraphQL Mesh will now be in read-only mode by default, so only a single + instance is created globally. This means it doesn't get recreated on each page + compilation and fast refresh. Creating the instance is an expensive operation + and can take multiple seconds and during development (and this can happen + multiple times during a single change). Now only a single instance is created + during development. To make sure changes are picked up during development set + the config value `graphqlMeshEditMode: true` in your graphcommerce.config.js + or set the env variable `GC_GRAPHQL_MESH_EDIT_MODE=1`. This is the same as the + old behavior and this _will_ make the frontend considerably slower. (@paales) + [graphql-mesh](#package-graphql-mesh) + +- Migrated `@graphcommerce/hygraph-cli` package to `"type": "module"` (@paales) + [hygraph-cli](#package-hygraph-cli) + +- Solve issue where cached data was stale (@paales) + [hygraph-ui](#package-hygraph-ui) + +- Prepare the RichTex for embed and code-block (@paales) + [hygraph-ui](#package-hygraph-ui) + +- Forward `` component to `` (@paales) + [hygraph-ui](#package-hygraph-ui) + +- Export generateSrcSet from Image component so it can be used for the avatar + srcSet directly (@paales) [image](#package-image) + +- Created new Tabs and TabItem component to be used for MultiCart setup + (@paales) [next-ui](#package-next-ui) + +- cssFlag and cssNotFlag css selector can now select values (@paales) + [next-ui](#package-next-ui) + +- Added missing href to secondary menu items (@bramvanderholst) + [next-ui](#package-next-ui) + +- Fix LayoutOverlayHeader2 text overflowing beyond overlay size constraints + (@paales) [next-ui](#package-next-ui) + +- Added lots of missing icon exports (@paales) [next-ui](#package-next-ui) + +- Do not warn about `:first-child` since all css is hoisted out of the + components. (@paales) [next-ui](#package-next-ui) + +- Intl components now accept the sx prop. `` now expects + a date prop instead of children. (@paales) [next-ui](#package-next-ui) + +- Allow setting OverlayContainer props, such as event listeners (@paales) + [next-ui](#package-next-ui) + +- Modify the type that is exposed for createTheme, should be faster for + TypeScript to check. (@paales) [next-ui](#package-next-ui) + +- Also accept false as value for sxx (@paales) [next-ui](#package-next-ui) + +- Nesting multiple Containers will not increase the padding, will only be + applied once. (@paales) [next-ui](#package-next-ui) + +- Added an OverlayCloseButton and implemented it for various locations. + (@paales) [next-ui](#package-next-ui) + +- Solve hydration error because multiple literals could be in a DateTimeFormat + (@paales) [next-ui](#package-next-ui) + +- Fix IconBlocks width (@StefanAngenent) [next-ui](#package-next-ui) + +- Created a LayoutOverlayHeader2 that does not support any floating modes or + something and thus is simpler to customize. (@paales) + [next-ui](#package-next-ui) + +- Added ripple to BlogTags (@bramvanderholst) [next-ui](#package-next-ui) + +- Created a useCookie hook that is synced between usages (@paales) + [next-ui](#package-next-ui) + +- Prevent excessive rerender when multiple images with the same url are in a + product (@paales) [next-ui](#package-next-ui) + +- Solve issue where the sidebar wasn't 100% width on the PDP on mobile (@paales) + [next-ui](#package-next-ui) + +- Use a more sensible theme var for LayoutHeaderContent gap (@bramvanderholst) + [next-ui](#package-next-ui) + +- Fixed gallery zoom breaking on long sidebar content (@bramvanderholst) + [next-ui](#package-next-ui) + +- Added search params to NextLink whenever present (@paales) + [next-ui](#package-next-ui) + +- Solve issue where the MenuFabSecondaryItem coudn't handle text overflow. + (@paales) [next-ui](#package-next-ui) + +- Fixed back button width in overlays with long titles (@bramvanderholst) + [next-ui](#package-next-ui) + +- Update various props from ReactElement to ReactNode to allow string values + (@bramvanderholst) [next-ui](#package-next-ui) + +- Solve issue where ActionCard would crash the whole app because it forwarded + components to string attributes (@paales) [next-ui](#package-next-ui) + +- Remove dependency on Magento for @graphcommerec/react-hook-form (@paales) + [react-hook-form](#package-react-hook-form) + +- Fix typescript infer (@paales) [react-hook-form](#package-react-hook-form) + +- Solve an issue where the false value of the useFormGql was incorrectly + interpreted as an error while it was a SKIP. Fixes an issue where the + CustomerAddressForm is not submitting properly when the user is adding a new + address. (@paales) [react-hook-form](#package-react-hook-form) + +- Fix issue where FormAutoSubmit would not listen for changes when no field + names were provided (meaning it should watch changes on all fields) (@paales) + [react-hook-form](#package-react-hook-form) + +- Solve issue with react-hook-form causing ts errors, now version is fixed and + the ts error is solved (@paales) [react-hook-form](#package-react-hook-form) + +- Components must have Theme parameter to avoid significant compiler slowdown. + (@paales) [eslint-config-pwa](#package-eslint-config-pwa) + +- Solve a version-skew problem where certain JS files weren't properly cached by + the Service Worker, but the page was cached. The moment a user wanted to load + the page the JS files would not exist and result in a 404. This in turn caused + the the frontend to be broken until the page was reloaded. + + The cause is that if the prefetch requests fail, other prefetch requests are + not made anymore. And since the js file wasn't cached by other buckets, it + would result in a 404. (@paales) [misc](#package-misc) + [magento-graphcms](#package-magento-graphcms) + [magento-open-source](#package-magento-open-source) + +- When the added product can't be found, make sure to render just 'Product' + instead of an empty string and show a cart icon instead of a placeholder. + (@paales) [misc](#package-misc) + +- Solve issue where the performanceLink was only activated during production + while it should have been during development. (@paales) [misc](#package-misc) + [magento-graphcms](#package-magento-graphcms) + [magento-open-source](#package-magento-open-source) + +- Added missing WebWorker tsconfig for magento-open-source example (@paales) + [misc](#package-misc) + +- Solve issue where the category and search page would rerender on pageload + because the mask value would flip from true to false (@paales) + [misc](#package-misc) [magento-graphcms](#package-magento-graphcms) + [magento-open-source](#package-magento-open-source) + +- Support for Magento logo and Magento copyright notice in footer (@paales) + [misc](#package-misc) [magento-graphcms](#package-magento-graphcms) + [magento-open-source](#package-magento-open-source) + +- Solve issue where plurals weren't properly defined (@paales) + [misc](#package-misc) [magento-open-source](#package-magento-open-source) + +- Make sure the maxWidth of the newsletter subscribe box is sm instead of ms, + making it too wide. (@paales) [misc](#package-misc) + +- When a dependency is optional or has peerDependenciesMeta set to optional, + make sure it doesn't crash when it is not found when calling + resolveDependenciesSync (@paales) [next-config](#package-next-config) + +- Remove redirects for `/product/$type/[url]` routes, those haven't been used + for years anymore. (@paales) [next-config](#package-next-config) + +- Solve issue with chalk compilation because we’re not migrated to esm modules. + (@paales) [next-config](#package-next-config) + +- Solve issue where withGraphCommerce had a hard dependency on Magento specific + configurations (@paales) [next-config](#package-next-config) + +- Reduce exported scope of config so we dont introduce a hidden dependency on + Magento (@paales) [next-config](#package-next-config) + +- Remove the 'ignored' string when loading the graphcommerce config env variable + loading, as that isn't always correct (@paales) + [next-config](#package-next-config) + +- Remove rewriteLegacyEnv as that hasn't been used for years (@paales) + [next-config](#package-next-config) + +- Migrated `@graphcommerce/next-config` package to `"type": "module"` (@paales) + [next-config](#package-next-config) + +- If relatedUpsells are not defined, use empty object so mergeDeep… + (@FrankHarland) [magento-graphcms](#package-magento-graphcms) + [magento-open-source](#package-magento-open-source) + +- Add correct link to demo project (@FrankHarland) [docs](#package-docs) + +## Packages + +- @graphcommerce/magento-cart: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart/CHANGELOG.md)) +- @graphcommerce/magento-cart-checkout: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-checkout) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-checkout/CHANGELOG.md)) +- @graphcommerce/magento-cart-coupon: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-coupon) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-coupon/CHANGELOG.md)) +- @graphcommerce/magento-cart-email: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-email) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-email/CHANGELOG.md)) +- @graphcommerce/magento-cart-items: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-items) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-items/CHANGELOG.md)) +- @graphcommerce/magento-cart-payment-method: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-payment-method) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-payment-method/CHANGELOG.md)) +- @graphcommerce/magento-cart-pickup: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-pickup) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-pickup/CHANGELOG.md)) +- @graphcommerce/magento-cart-shipping-address: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-shipping-address) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-shipping-address/CHANGELOG.md)) +- @graphcommerce/magento-cart-shipping-method: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cart-shipping-method) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cart-shipping-method/CHANGELOG.md)) +- @graphcommerce/magento-category: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-category) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-category/CHANGELOG.md)) +- @graphcommerce/magento-cms: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-cms) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-cms/CHANGELOG.md)) +- @graphcommerce/magento-compare: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-compare) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-compare/CHANGELOG.md)) +- @graphcommerce/magento-customer: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-customer) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-customer/CHANGELOG.md)) +- @graphcommerce/magento-graphql: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-graphql) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-graphql/CHANGELOG.md)) +- @graphcommerce/magento-graphql-rest: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-graphql-rest) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-graphql-rest/CHANGELOG.md)) +- @graphcommerce/magento-newsletter: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-newsletter) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-newsletter/CHANGELOG.md)) +- @graphcommerce/magento-payment-adyen: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-adyen) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-adyen/CHANGELOG.md)) +- @graphcommerce/magento-payment-braintree: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-braintree) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-braintree/CHANGELOG.md)) +- @graphcommerce/magento-payment-included: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-included) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-included/CHANGELOG.md)) +- @graphcommerce/magento-payment-klarna: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-klarna) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-klarna/CHANGELOG.md)) +- @graphcommerce/magento-payment-multisafepay: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-multisafepay) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-multisafepay/CHANGELOG.md)) +- @graphcommerce/magento-payment-paypal: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-paypal) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-paypal/CHANGELOG.md)) +- @graphcommerce/magento-payment-tokens: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-payment-tokens) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-payment-tokens/CHANGELOG.md)) +- @graphcommerce/magento-product: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product/CHANGELOG.md)) +- @graphcommerce/magento-product-bundle: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-bundle) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-bundle/CHANGELOG.md)) +- @graphcommerce/magento-product-configurable: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-configurable) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-configurable/CHANGELOG.md)) +- @graphcommerce/magento-product-downloadable: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-downloadable) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-downloadable/CHANGELOG.md)) +- @graphcommerce/magento-product-grouped: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-grouped) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-grouped/CHANGELOG.md)) +- @graphcommerce/magento-product-simple: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-simple) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-simple/CHANGELOG.md)) +- @graphcommerce/magento-product-virtual: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-product-virtual) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product-virtual/CHANGELOG.md)) +- @graphcommerce/magento-recently-viewed-products: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-recently-viewed-products) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-recently-viewed-products/CHANGELOG.md)) +- @graphcommerce/magento-review: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-review) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-review/CHANGELOG.md)) +- @graphcommerce/magento-search: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-search) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-search/CHANGELOG.md)) +- @graphcommerce/magento-search-overlay: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-search-overlay) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-search-overlay/CHANGELOG.md)) +- @graphcommerce/magento-store: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-store) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-store/CHANGELOG.md)) +- @graphcommerce/magento-wishlist: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-wishlist) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-wishlist/CHANGELOG.md)) +- @graphcommerce/address-fields-nl: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/address-fields-nl) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/address-fields-nl/CHANGELOG.md)) +- @graphcommerce/algolia-categories: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-categories) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-categories/CHANGELOG.md)) +- @graphcommerce/algolia-insights: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-insights) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-insights/CHANGELOG.md)) +- @graphcommerce/algolia-personalization: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-personalization) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-personalization/CHANGELOG.md)) +- @graphcommerce/algolia-products: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-products) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-products/CHANGELOG.md)) +- @graphcommerce/algolia-recommend: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-recommend) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-recommend/CHANGELOG.md)) +- @graphcommerce/algolia-search: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/algolia-search) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/algolia-search/CHANGELOG.md)) +- @graphcommerce/cli: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/cli) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/cli/CHANGELOG.md)) +- @graphcommerce/demo-magento-graphcommerce: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/demo-magento-graphcommerce) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/demo-magento-graphcommerce/CHANGELOG.md)) +- @graphcommerce/ecommerce-ui: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/ecommerce-ui) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/ecommerce-ui/CHANGELOG.md)) +- @graphcommerce/framer-next-pages: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-next-pages) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-next-pages/CHANGELOG.md)) +- @graphcommerce/framer-next-pages-example: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-next-pages-example) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-next-pages-example/CHANGELOG.md)) +- @graphcommerce/framer-scroller: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-scroller) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-scroller/CHANGELOG.md)) +- @graphcommerce/framer-scroller-example: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-scroller-example) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-scroller-example/CHANGELOG.md)) +- @graphcommerce/framer-utils: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/framer-utils) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/framer-utils/CHANGELOG.md)) +- @graphcommerce/google-datalayer: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/google-datalayer) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/google-datalayer/CHANGELOG.md)) +- @graphcommerce/google-playstore: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/google-playstore) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/google-playstore/CHANGELOG.md)) +- @graphcommerce/googleanalytics: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/googleanalytics) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/googleanalytics/CHANGELOG.md)) +- @graphcommerce/googlerecaptcha: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/googlerecaptcha) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/googlerecaptcha/CHANGELOG.md)) +- @graphcommerce/googletagmanager: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/googletagmanager) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/googletagmanager/CHANGELOG.md)) +- @graphcommerce/graphcms-ui: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphcms-ui) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphcms-ui/CHANGELOG.md)) +- @graphcommerce/graphql: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql/CHANGELOG.md)) +- @graphcommerce/graphql-mesh: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql-mesh) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql-mesh/CHANGELOG.md)) +- @graphcommerce/hygraph-cli: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/hygraph-cli) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/hygraph-cli/CHANGELOG.md)) +- @graphcommerce/hygraph-dynamic-rows: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/hygraph-dynamic-rows) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/hygraph-dynamic-rows/CHANGELOG.md)) +- @graphcommerce/hygraph-dynamic-rows-ui: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/hygraph-dynamic-rows-ui) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/hygraph-dynamic-rows-ui/CHANGELOG.md)) +- @graphcommerce/hygraph-ui: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/hygraph-ui) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/hygraph-ui/CHANGELOG.md)) +- @graphcommerce/image: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/image) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/image/CHANGELOG.md)) +- @graphcommerce/image-example: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/image-example) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/image-example/CHANGELOG.md)) +- @graphcommerce/lingui-next: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/lingui-next) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/lingui-next/CHANGELOG.md)) +- @graphcommerce/mollie-magento-payment: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/mollie-magento-payment) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/mollie-magento-payment/CHANGELOG.md)) +- @graphcommerce/next-ui: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packagesDev/next-ui) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packagesDev/next-ui/CHANGELOG.md)) +- @graphcommerce/react-hook-form: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/react-hook-form) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/react-hook-form/CHANGELOG.md)) +- @graphcommerce/service-worker: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/service-worker) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/service-worker/CHANGELOG.md)) +- @graphcommerce/browserslist-config-pwa: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/browserslist-config-pwa) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/browserslist-config-pwa/CHANGELOG.md)) +- @graphcommerce/changeset-changelog: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/changeset-changelog) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/changeset-changelog/CHANGELOG.md)) +- @graphcommerce/eslint-config-pwa: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/eslint-config-pwa) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/eslint-config-pwa/CHANGELOG.md)) +- @graphcommerce/graphql-codegen-markdown-docs: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql-codegen-markdown-docs) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql-codegen-markdown-docs/CHANGELOG.md)) +- @graphcommerce/graphql-codegen-near-operation-file: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql-codegen-near-operation-file) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql-codegen-near-operation-file/CHANGELOG.md)) +- @graphcommerce/graphql-codegen-relay-optimizer-plugin: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/graphql-codegen-relay-optimizer-plugin) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/graphql-codegen-relay-optimizer-plugin/CHANGELOG.md)) +- @graphcommerce/misc: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/misc) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/misc/CHANGELOG.md)) +- @graphcommerce/next-config: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packagesDev/next-config) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packagesDev/next-config/CHANGELOG.md)) +- @graphcommerce/prettier-config-pwa: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/prettier-config-pwa) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/prettier-config-pwa/CHANGELOG.md)) +- @graphcommerce/typescript-config-pwa: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/typescript-config-pwa) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/typescript-config-pwa/CHANGELOG.md)) +- @graphcommerce/magento-graphcms: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-graphcms) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-graphcms/CHANGELOG.md)) +- @graphcommerce/magento-open-source: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/magento-open-source) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-open-source/CHANGELOG.md)) +- @graphcommerce/docs: + ([source](https://github.com/graphcommerce-org/graphcommerce/tree/main/packages/docs) + β€’ + [CHANGELOG.md](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/docs/CHANGELOG.md)) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 9339922596f..5051257be63 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -207,6 +228,7 @@ ### Patch Changes - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh @@ -225,6 +247,7 @@ - [#1729](https://github.com/graphcommerce-org/graphcommerce/pull/1729) [`c37187a51`](https://github.com/graphcommerce-org/graphcommerce/commit/c37187a513670ebcf09e99eb4a762c8bdb5df7e4) - Moved Magento Cart Pickup shipping method to the [GraphCommerce plugin system](https://www.graphcommerce.org/docs/framework/plugins) Upgrade guide: + - The upgrade removes `@graphcommerce/magento-cart-pickup` package from your `package.json`, remove them for now. - Proceed to upgrade normally - Add back `@graphcommerce/magento-cart-pickup`, following the [GraphCommerce Magento docs](https://graphcommerce.org/docs/magento). ([@paales](https://github.com/paales)) @@ -242,6 +265,7 @@ - [#1718](https://github.com/graphcommerce-org/graphcommerce/pull/1718) [`f08bffd63`](https://github.com/graphcommerce-org/graphcommerce/commit/f08bffd63780cb626f072b25c2fd4da37543b6f7) - Moved all Payment methods to the [GraphCommerce plugin system](https://www.graphcommerce.org/docs/framework/plugins) Upgrade guide: + - The upgrade removes all the payment gateway packages from the `package.json`, remove them for now. - Proceed to upgrade normally - Add back all the payment modules following the [GraphCommerce Magento docs](https://graphcommerce.org/docs/magento). @@ -547,6 +571,7 @@ * [#1278](https://github.com/ho-nl/m2-pwa/pull/1278) [`81ea406d5`](https://github.com/ho-nl/m2-pwa/commit/81ea406d54d6b5c662c030a7fea444abc4117a20) Thanks [@ErwinOtten](https://github.com/ErwinOtten)! - Written documentation for GraphCommerce! πŸ‘©β€πŸ«πŸ§‘β€πŸ«πŸ“šπŸ“– - [#1284](https://github.com/ho-nl/m2-pwa/pull/1284) [`5ffcb56bf`](https://github.com/ho-nl/m2-pwa/commit/5ffcb56bfcbe49ebeaf24f9341e819a145ab9a14) Thanks [@paales](https://github.com/paales)! - SvgIcon is now more extenable and flexible: + - It will automatically calculate the stroke-width of the SVG based on the rendered size, allowing for a more flexible use for icons. - Make SvgIcon themable in your own Theme. diff --git a/docs/feature-list.md b/docs/feature-list.md index 77a6718847a..ade43a55e28 100644 --- a/docs/feature-list.md +++ b/docs/feature-list.md @@ -13,6 +13,7 @@ metaUrl: magento-open-source-full-feature-list-with-graphcommerce - [Feature] GraphCommerce _unique_ feature - [Commerce] Requires Adobe Commerce +- [Pro] Requires [GraphCommerce Pro](./gc-pro) @@ -86,9 +87,11 @@ Features taken from the Magento Commerce 2 Feature List [Enhanced] - [x] Blend content and commerce by adding products to content pages and rich content to product pages. β€” [Enhanced] -- [x] Create reusable dynamic blocks targeted to customer segments. β€” [Commerce] +- [x] Create reusable dynamic blocks targeted to customer segments. β€” [Pro] + `@graphcommerce/adobe-commerce-dynamic-blocks` - [x] Easily stage and preview content for seamless updates. β€” [Partial] -- [x] Manage upcoming site changes with a timeline dashboard. - [Commerce] +- [x] Manage upcoming site changes with a timeline dashboard. β€” [Pro] + `@graphcommerce/adobe-commerce` (staging preview) - [x] Organize content pages and add pagination, navigation, and menus with a page hierarchy tool. β€” [Enhanced] - [x] Track and restore previous versions of content pages. β€” [Enhanced] @@ -110,7 +113,8 @@ Features taken from the Magento Commerce 2 Feature List - [x] Decrease time to market using the multi-language Venia reference storefront. β€” [Enhanced] - [x] Give marketers control with Page Builder to manage content and layouts on - PWA Studio-powered storefronts. β€” [Enhanced] + PWA Studio-powered storefronts. β€” [Pro] + `@graphcommerce/magento-pagebuilder` - [x] Build PWA experiences using open standards including React, Redux, and Webpack. β€” [Enhanced] - [x] Boost developer productivity with real-time, guided development. β€” @@ -158,6 +162,11 @@ Features taken from the Magento Commerce 2 Feature List automated sorting rules. β€” [Commerce] - [ ] Control which products and categories can be viewed by each customer group. β€” [Commerce] +- [x] Hide prices for guest users with "Login for prices" messaging. β€” [Pro] + `@graphcommerce/magento-private-pricing` +- [x] Frontend price display mode switcher (Incl./Excl. VAT). β€” [Pro] + `@graphcommerce/magento-price-view` + `@graphcommerce/magento-price-view-vat` - [x] Show side-by-side product comparisons with two or more products. β€” [Enhanced] - [x] Display recently viewed products. β€” [Enhanced] @@ -224,8 +233,13 @@ Features taken from the Magento Commerce 2 Feature List checkout thank you page. - [x] Allow customers to save their shopping carts to complete their purchases later. -- [ ] Offer gift wrapping and gift messages per order and per item. β€” [Todo] -- [ ] Configure pricing and taxes for gift-wrapping options. β€” [Todo] +- [x] Manage multiple shopping carts per customer. β€” [Pro] + `@graphcommerce/magento-multi-cart` +- [x] Offer gift wrapping and gift messages per order and per item. β€” [Pro] + `@graphcommerce/adobe-commerce-gift-wrapping` + `@graphcommerce/magento-gift-message` +- [x] Configure pricing and taxes for gift-wrapping options. β€” [Pro] + `@graphcommerce/adobe-commerce-gift-wrapping` - [x] Manage complex tax calculations and prepare signature-ready returns with Vertex. - [x] Improve order processing capacity with the option to defer stock updates @@ -264,8 +278,8 @@ Features taken from the Magento Commerce 2 Feature List for split fulfillment. - [x] Print invoices, packing slips, and shipping labels. - [x] Create custom order status labels to track progress. -- [ ] Use return management authorization (RMA) to efficiently process returns. - β€” [Commerce] +- [x] Use return management authorization (RMA) to efficiently process returns. + β€” [Pro] `@graphcommerce/adobe-commerce-returns` - [x] Enable customer service representatives to create orders and customer accounts. - [x] Allow customer service to update products, prices, and coupons in @@ -280,17 +294,18 @@ Features taken from the Magento Commerce 2 Feature List ### Customer loyalty -- [ ] Offer reward points for purchases, registration, product reviews and other - actions. β€” [Commerce] -- [ ] Configure reward point redemption rules, caps, and expiration dates. β€” - [Commerce] -- [ ] Enable customers to save products to multiple wish lists that can be made - public. β€” [Commerce] -- [ ] Allow customers to create gift registries and send emails to shop the - registry. β€” [Commerce] -- [ ] Automatically update item counts and notify the registry owner as - purchases are made. β€” [Commerce] -- [x] Allow customers to purchase physical and virtual gift cards. β€” [Commerce] +- [x] Offer reward points for purchases, registration, product reviews and other + actions. β€” [Pro] `@graphcommerce/adobe-commerce-reward-points` +- [x] Configure reward point redemption rules, caps, and expiration dates. β€” + [Pro] `@graphcommerce/adobe-commerce-reward-points` +- [x] Enable customers to save products to multiple wish lists that can be made + public. β€” [Pro] `@graphcommerce/adobe-commerce-multi-wishlists` +- [x] Allow customers to create gift registries and send emails to shop the + registry. β€” [Pro] `@graphcommerce/adobe-commerce-gift-registry` +- [x] Automatically update item counts and notify the registry owner as + purchases are made. β€” [Pro] `@graphcommerce/adobe-commerce-gift-registry` +- [x] Allow customers to purchase physical and virtual gift cards. β€” [Pro] + `@graphcommerce/adobe-commerce-gift-c` - [ ] Offer exclusive shopping experiences with private or flash sale sites. β€” [Commerce] - [ ] Streamline re-ordering by enabling shoppers to add products to the cart by @@ -307,9 +322,10 @@ Features taken from the Magento Commerce 2 Feature List - [x] See order status and history. - [x] Re-order from the customer account. - [x] View recently ordered items. -- [x] Track available store credits β€” [Commerce] -- [ ] Track gift card totals β€” [Commerce] -- [ ] Track reward points β€” [Commerce] +- [x] Track available store credits β€” [Pro] + `@graphcommerce/adobe-commerce-store-credit` +- [x] Track gift card totals β€” [Pro] `@graphcommerce/adobe-commerce-gift-c` +- [x] Track reward points β€” [Pro] `@graphcommerce/adobe-commerce-reward-points` - [x] Manage newsletter subscriptions. - [x] View submitted product reviews. - [ ] Access downloadable/digital products. β€” [Todo] @@ -461,6 +477,10 @@ Features taken from the Magento Commerce 2 Feature List [Feature] - [x] Accelerate site performance with image compression, srcset, and edge CDN level caching. β€” [Feature] +- [x] Near-realtime SSG revalidation via webhooks from Magento/Hygraph. β€” [Pro] + `@graphcommerce/cache-notify` +- [x] Cache GraphQL POST requests in Varnish. β€” [Pro] + `@graphcommerce/graphql-mesh-cache-varnish` ### Managed cloud diff --git a/docs/framework/config.md b/docs/framework/config.md index 8375d7f434c..50ad99381a6 100644 --- a/docs/framework/config.md +++ b/docs/framework/config.md @@ -7,6 +7,73 @@ GoogleDatalayerConfig to allow enabling certain aspects of the datalayer Enable core web vitals tracking for GraphCommerce +### GraphCommerceAlgoliaConfig + +Algolia configuration for GraphCommerce. + +#### applicationId: string (required) + +Configure your Algolia application ID. [Algolia API Keys Dashboard](https://www.algolia.com/account/api-keys) + +#### indexNamePrefix: string (required) + +Stores > Configuration > Algolia Search > Credentials and Basic Setup > Index name prefix + +#### searchOnlyApiKey: string (required) + +Configure your Search API Key. [Algolia API Keys Dashboard](https://www.algolia.com/account/api-keys) + +Make sure the API key has the following ACL: search, listIndexes and settings [Lookup here](https://dashboard.algolia.com/account/api-keys/restricted) + +#### catalogEnabled: boolean + +By default the catalog will not use algolia. Set this to true to enable Algolia for the catalog. + +#### customerGroupPricingEnabled: boolean + +Enable Algolia customer group pricing. + +Please be aware that personalization needs to be enabled to make this work. + +#### frequentlyBoughtTogether: CROSSSELL_PRODUCTS | DISABLED | RELATED_PRODUCTS | UPSELL_PRODUCTS + +https://www.algolia.com/doc/guides/algolia-recommend/overview/#frequently-bought-together + +Set the location where the frequently bought together model should be shown. +Good default is CROSSSELL_PRODUCTS, which is shown on the Cart page. + +Before enabling, make sure the model is trained in Algolia. +Do not assign multiple recommendation models to the same location. + +#### lookingSimilar: CROSSSELL_PRODUCTS | DISABLED | RELATED_PRODUCTS | UPSELL_PRODUCTS + +https://www.algolia.com/doc/guides/algolia-recommend/overview/#looking-similar + +Set the location where the looking similar model should be shown. +Good default is UPSELL_PRODUCTS, which is shown on the Product page by default. + +Before enabling, make sure the model is trained in Algolia. +Do not assign multiple recommendation models to the same location. + +#### relatedProducts: CROSSSELL_PRODUCTS | DISABLED | RELATED_PRODUCTS | UPSELL_PRODUCTS + +https://www.algolia.com/doc/guides/algolia-recommend/overview/#related-products-and-related-content + +Set the location where the related products model should be shown. +Good default is RELATED_PRODUCTS, which is shown on the Product page by default. + +Before enabling, make sure the model is trained in Algolia. +Do not assign multiple recommendation models to the same location. + +#### suggestionsSuffix: string + +To enable Algolia suggestions, please provide the Suffix that is used for your suggestions index. + +The pattern is `${indexNamePrefix}_{storeCode}_{suggestionsSuffix}`. +Something like `_suggestions` or `_query_suggestions` + +For the index `magento2_demo_en_US_suggestions` this would be `_suggestions` + # GraphCommerce configuration system Global GraphCommerce configuration can be configured in your `graphcommerce.config.js` file @@ -85,6 +152,12 @@ Below is a list of all possible configurations that can be set by GraphCommerce. ### GraphCommerceConfig +#### algolia: [GraphCommerceAlgoliaConfig](#GraphCommerceAlgoliaConfig) (required) + +Configure your Algolia application ID. + +Stores > Configuration > Algolia Search > Credentials and Basic Setup > Application ID + #### canonicalBaseUrl: string (required) The canonical base URL is used for SEO purposes. @@ -399,6 +472,10 @@ Allows customers to change their billing address or locks it down. Changes the availability of the add to cart buttons and the cart page to either customer only or completely disables it. +#### catalogPricing: CUSTOMER_ONLY | ENABLED + +Permissions to show the catalog pricing on the frontend. + #### checkout: CUSTOMER_ONLY | DISABLED | ENABLED Changes the availability of the checkout to either customer only or completely disables it. diff --git a/docs/gc-pro-adobe-commerce.md b/docs/gc-pro-adobe-commerce.md new file mode 100644 index 00000000000..541e28e8166 --- /dev/null +++ b/docs/gc-pro-adobe-commerce.md @@ -0,0 +1,100 @@ +--- +menu: GraphCommerce Pro Adobe Commerce +metaTitle: GraphCommerce Pro - Adobe Commerce packages +metaDescription: + 'Production-ready packages for Adobe Commerce: Gift Cards, Store Credit, + Reward Points, Returns, and more.' +metaUrl: graphcommerce-pro-adobe-commerce +--- + +# GraphCommerce Pro for Adobe Commerce + +Production-ready packages extending GraphCommerce with Adobe Commerce features. + +For Magento Open Source features, see [GraphCommerce Pro](./gc-pro). + +GC Pro for Adobe Commerce license is €2500 per year, send an email to +sales@graphcommerce.org for a license. Multi year bundles available. Each +license is valid for one brand or installation, we'll send details. + +--- + +## `@graphcommerce/adobe-commerce` + +Adobe Commerce staging preview support. Adds datetime picker to preview mode +toolbar for previewing scheduled content changes. + +**Plugin:** `AdobeCommercePreviewModeToolbar` β€” sets `magentoPreviewVersion` +(unix timestamp) in preview mode. + +--- + +## `@graphcommerce/adobe-commerce-gift-c` + +Gift card products, cart application, and account management. Supports virtual, +physical, and combined gift cards. + +Note: Package named `gift-c` because `gift-card` is forbidden on npm. + +**Components:** `ProductPageGiftCard`, `ApplyGiftCardToCartForm`, +`GiftCardCartAccordion`, `GiftCardTotals`, `GiftCardAccount`, `GiftCardPage` + +**Mutations:** `applyGiftCardToCart`, `removeGiftCardFromCart` + +**Query:** `giftCardAccount` β€” check balance by code + +--- + +## `@graphcommerce/adobe-commerce-store-credit` + +Apply store credit at checkout, view balance and history in customer account. + +**Components:** `StoreCreditAccordion`, `StoreCreditCurrentBalance`, +`StoreCreditHistory`, `StoreCreditPage`, `StoreCreditAccountMenuItem` + +**Mutations:** `applyStoreCreditToCart`, `removeStoreCreditFromCart` + +**Known issue:** `applied_store_credit` throws error for guest carts (patch +included). + +--- + +## `@graphcommerce/adobe-commerce-reward-points` + +Earn and redeem reward points. Shows earnings for cart, registration, and +newsletter signup. + +**Components:** `RewardPointsAccordion`, `RewardPointsCurrentPoints`, +`RewardPointsHistory`, `RewardPointsEarningsCart`, +`RewardPointsEarningsRegister`, `RewardPointsEarningsNewsletterCustomer`, +`RewardPointsBanner`, `RewardPointsPage`, `RewardPointsMenuItem` + +--- + +## `@graphcommerce/adobe-commerce-returns` + +Customer-facing RMA (Return Merchandise Authorization) flow. Customers can +request returns, select items/quantities, add tracking, and communicate with the +store. + +Limitation: Customer-only, no guest return support via GraphQL API. + +**Queries:** `OrdersEligibleForReturns`, `ReturnsAttributeList`, +`Return_Details` + +**Mutations:** `requestReturn`, `addReturnTracking`, `removeReturnTracking`, +`addReturnComment` + +--- + +## Additional Packages + +| Package | Description | +| --------------------------------------------------- | ------------------------------------ | +| `@graphcommerce/adobe-commerce-gift-c-store-credit` | Gift card purchase with store credit | +| `@graphcommerce/adobe-commerce-gift-registry` | Gift registry creation and sharing | +| `@graphcommerce/adobe-commerce-gift-wrapping` | Gift wrapping options per order/item | +| `@graphcommerce/adobe-commerce-multi-coupon` | Multiple coupon codes per cart | +| `@graphcommerce/adobe-commerce-multi-wishlists` | Multiple wishlists per customer | +| `@graphcommerce/adobe-commerce-dynamic-blocks` | Customer segment targeted content | +| `@graphcommerce/adobe-commerce-cart` | `clearCart` mutation | diff --git a/docs/gc-pro.md b/docs/gc-pro.md new file mode 100644 index 00000000000..4877deb2aed --- /dev/null +++ b/docs/gc-pro.md @@ -0,0 +1,130 @@ +--- +menu: GraphCommerce Pro +metaTitle: GraphCommerce Pro - Magento packages +metaDescription: + 'Production-ready packages for Magento: PageBuilder, Multi-Cart, Cache + Invalidation, Private Pricing, and more.' +metaUrl: graphcommerce-pro +--- + +# GraphCommerce Pro + +Production-ready packages extending GraphCommerce with Magento Open Source +compatible features. Also see +[GraphCommerce Pro for Adobe Commerce](./gc-pro-adobe-commerce) + +GC Pro license is €1000 per year, send an email to sales@graphcommerce.org for a +license. Multi year bundles available. Each license is valid for one brand or +installation, we'll send details. All of the packages belof will are included. + +--- + +## `@graphcommerce/magento-multi-cart` + +Flexible product list system supporting multiple named carts per customer. +Supports various use cases beyond shopping carts: + +**B2C:** Wishlists, Save for Later, Room/Project Lists + +**B2B:** Requisition Lists, Project Carts, Spare Parts / Reorder Lists + +Requires: `GraphCommerce_MultiCart` Magento module. + +**Features:** + +- Multiple cart groups with configurable behavior +- Tab-based UI to switch between lists +- Create/rename/delete lists within each group +- Move or copy items between lists +- Convert entire list to another group +- Checkout from any list + +**Mutations:** `multiCartCreate`, `multiCartUpdate`, `multiCartTrash`, +`multiCartSelectCart`, `multiCartMakeReal`, `multiCartCopyItemsToCart`, +`multiCartMoveItemsBetweenCarts`, `multiCartMoveToOtherCartGroup` + +--- + +## `@graphcommerce/cache-notify` + +Near-realtime SSG revalidation via webhooks. GraphCommerce by default statically +generates pages (SSG) and revalidates after 20 minutes (sometimes more). This +package adds a `/api/cache-notify` endpoint to handle notifications from Magento +and Hygraph, so pages are revalidated immediately after content changes. + +Requires: `GraphCommerce_GraphQLCacheNotify` Magento module. + +**Handlers:** + +- `@graphcommerce/cache-notify-magento` β€” Revalidates on `product.create`, + `product.update`, `product.delete`, `category.update` events +- `@graphcommerce/cache-notify-hygraph` β€” Revalidates on page publish/unpublish + +--- + +## `@graphcommerce/graphql-mesh-cache-varnish` + +Cache GraphQL POST requests in Varnish. Computes SHA256 hash of operation + +variables and sends as `X-Document-ID` header. Varnish uses this header as cache +key. + +Requires: Varnish VCL modifications (included in package as `varnish6.vcl`). + +--- + +## `@graphcommerce/magento-pagebuilder` + +Renders Magento PageBuilder content in the headless storefront. Implementation +strives to match the source Magento visual implementation. + +**Content Types:** `PageBuilderRow`, `PageBuilderColumn`, +`PageBuilderColumnGroup`, `PageBuilderText`, `PageBuilderHeading`, +`PageBuilderImage`, `PageBuilderVideo`, `PageBuilderBanner`, +`PageBuilderSlider`, `PageBuilderSlide`, `PageBuilderTabs`, +`PageBuilderButtonsList`, `PageBuilderDivider`, `PageBuilderHtml`, +`PageBuilderMap`, `PageBuilderProductList`, `PageBuilderStaticBlock` + +**Features:** Background images/videos, parallax effects (Jarallax), responsive +columns. + +Demo: +https://graphcommerce-pro-ac-git-canary-reachdigital.vercel.app/page/test-page +Test Page: https://graphcommerce-pro-ac-git-canary-reachdigital.vercel.app/ + +--- + +## `@graphcommerce/magento-private-pricing` + +Hide prices for guests with "Login for prices" messaging. Adds `catalogPricing` +permission to the GraphCommerce permissions system. + +**Config:** + +```ts +const config = { + permissions: { + catalogPricing: 'CUSTOMER_ONLY', + }, +} +``` + +**Components:** `PrivatePricingMessage`, `PrivatePricingProductListPrice`, +`PrivatePricingProductPagePriceTiers`, `PrivatePricingSignInButton` + +Components can be replaced via plugins for custom rendering. + +--- + +## `@graphcommerce/magento-price-view` + +Frontend price display mode switcher. Adds a section to the Store Switcher for +price view configuration. Stores selection in cookie, sends as header to backend +for custom price logic. + +**Components:** `StoreSwitcherPriceView`, `PriceViewOption` + +--- + +## `@graphcommerce/magento-price-view-vat` + +Adds Incl./Excl. VAT toggle option to the price view switcher. diff --git a/docs/package.json b/docs/package.json index 257b306a542..8ae5cb2ace9 100644 --- a/docs/package.json +++ b/docs/package.json @@ -2,10 +2,10 @@ "name": "@graphcommerce/docs", "homepage": "https://www.graphcommerce.org/docs", "repository": "github:graphcommerce-org/graphcommerce/docs", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": true, "peerDependencies": { - "@graphcommerce/prettier-config-pwa": "^10.0.0" + "@graphcommerce/prettier-config-pwa": "^10.0.1" }, "prettier": "@graphcommerce/prettier-config-pwa" } diff --git a/examples/magento-graphcms/CHANGELOG.md b/examples/magento-graphcms/CHANGELOG.md index 593fb7a1e78..510fca1f5b6 100644 --- a/examples/magento-graphcms/CHANGELOG.md +++ b/examples/magento-graphcms/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -116,6 +145,7 @@ - [#2223](https://github.com/graphcommerce-org/graphcommerce/pull/2223) [`7652234`](https://github.com/graphcommerce-org/graphcommerce/commit/7652234e222c3f4d8de3817fe907b5b6925a5493) - Fully replaced the sitemap and robots.txt generation. We previously relied on next-sitemap to generate the sitemap based on static generated pages. However with bigger shops the SSG woudn't be complete. Full support for multi domain setups. ([@bramvanderholst](https://github.com/bramvanderholst)) - [#2366](https://github.com/graphcommerce-org/graphcommerce/pull/2366) [`3612c99`](https://github.com/graphcommerce-org/graphcommerce/commit/3612c994b80bb3b1bc02de10668f69a332402dc4) - Add `permissions` configuration to disable functionalities. + - Added new `permissions` configuration for GraphCommerce - Added `permissions.cart`: `ENABLED` | `CUSTOMER_ONLY` | `DISABLED` - Added `permissions.checkout`: `ENABLED` | `CUSTOMER_ONLY` | `DISABLED` @@ -288,6 +318,7 @@ - [#1749](https://github.com/graphcommerce-org/graphcommerce/pull/1749) [`0cc472915`](https://github.com/graphcommerce-org/graphcommerce/commit/0cc4729154d316227a41712b5f0adf514768e91f) - Introducing the new ProductFiltersPro component set with completely new filter and UI behavior. Filters will appear as a popper on the md and up breakpoints and as an overlay on sm and below breakpoints. Filters now have an Apply button instead of applying directly. ([@paales](https://github.com/paales)) - [#1766](https://github.com/graphcommerce-org/graphcommerce/pull/1766) [`e34169ee2`](https://github.com/graphcommerce-org/graphcommerce/commit/e34169ee2e0fdc052ff589ceca0bc67557584c1f) - Upgraded to Next.js 13 + - NextLink integrates the next/link functionality with @mui/material's Link and ButtonBase (and all it's derivatives) components. - NextLink automatically adds `target="_blank"` when the href is external. - NextLink makes all relative href absolute. `href="my-page"` will be rendered as `href="/my-page"`. ([@paales](https://github.com/paales)) @@ -362,11 +393,13 @@ - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`f0816973b`](https://github.com/graphcommerce-org/graphcommerce/commit/f0816973ba38ed091189338b1863983da8c6e806) - Redirect old product URLs to the new /p/ route ([@paales](https://github.com/paales)) - [#1756](https://github.com/graphcommerce-org/graphcommerce/pull/1756) [`1abaaedde`](https://github.com/graphcommerce-org/graphcommerce/commit/1abaaedde4062d3b19696e333d0016972681afaf) - Show cart item error messages when running Magento >= 2.4.5 or this [patch is applied](https://raw.githubusercontent.com/graphcommerce-org/graphcommerce/main/packages/magento-cart/243-244-magento-module-quote-graphql-cart-item-errors.patch) + - Fixes an issue where the cart can get into a broken state, if items contain errors. - AddToCartForm now shows a success message if there is an error but the error is related to another item in the cart. - Disable checkout buttons when there are cart item errors and show a message. ([@paales](https://github.com/paales)) - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh @@ -1342,6 +1375,7 @@ - [#1590](https://github.com/graphcommerce-org/graphcommerce/pull/1590) [`9660fe5d1`](https://github.com/graphcommerce-org/graphcommerce/commit/9660fe5d1839662a5064943538c4a15ce36364cc) Thanks [@paales](https://github.com/paales)! - Leverage Magento Varnish caching by enabling useGETForQueries to backends * [#1604](https://github.com/graphcommerce-org/graphcommerce/pull/1604) [`c98cef65e`](https://github.com/graphcommerce-org/graphcommerce/commit/c98cef65eb7cfed42f016b6134d10bf5d3c67d92) Thanks [@paales](https://github.com/paales)! - Downgrade next-pwa because there are issue with the latest release: + - https://github.com/shadowwalker/next-pwa/issues/375 - https://github.com/shadowwalker/next-pwa/pull/384 diff --git a/examples/magento-graphcms/README.md b/examples/magento-graphcms/README.md index aafc59b172f..865df4e6dfe 100644 --- a/examples/magento-graphcms/README.md +++ b/examples/magento-graphcms/README.md @@ -16,6 +16,25 @@ React and Next.js. It provides a best-in-class example, including components and utilities, to deliver a high-performance, high-quality ecommerce Progressive Web App (PWA). +### GraphCommerce Demo's: + +- [GraphCommerce Demo: Magento 2.4.7 + Hygraph + Contained sidebar layout + Algolia](https://demo.graphcommerce.org/men/photography) + ([canary branch](https://demo-canary.graphcommerce.org/men/photography)) +- [GraphCommerce Demo: Magento 2.4.6 + Hygraph + Full width layout](https://graphcommerce.vercel.app/men/photography) +- [GraphCommerce Demo: Magento 2.4.7 + No CMS](https://graphcommerce-os.vercel.app/) + +### GraphCommerce Pro + +GraphCommerce Pro is the paid verison of GraphCommerce, default Open Source +license is €1000 per year, please contact us for a license. For Adobe Commerce +its €2500 per year. Multi year bundles available. + +- [GraphCommerce Pro Demo: Magento 2.4.7 + Cache Notify + Private Pricing + Multi Cart](https://graphcommerce-pro-os-git-canary-reachdigital.vercel.app/men/photography) +- [GraphCommerce Pro Demo: Adobe Commerce 2.4.7 + Pagebuilder + Returns, Store Credits, Gift Cards, Reward Points](https://graphcommerce-pro-ac-git-canary-reachdigital.vercel.app/page/test-page) + +Please note that Pagebuilder is also available for Magento Open Source, just not +available in the Open Source demo. + Explore the [GraphCommerce demo](https://graphcommerce.vercel.app/) or start building your custom GraphCommerce ecommerce frontend. diff --git a/examples/magento-graphcms/components/Layout/LayoutNavigation.tsx b/examples/magento-graphcms/components/Layout/LayoutNavigation.tsx index 4954e16a0ad..89a5fa95457 100644 --- a/examples/magento-graphcms/components/Layout/LayoutNavigation.tsx +++ b/examples/magento-graphcms/components/Layout/LayoutNavigation.tsx @@ -33,6 +33,7 @@ import { Logo } from './Logo' import { productListRenderer } from '../ProductListItems/productListRenderer' import { StoreSwitcherButton, + StoreSwitcherFab, StoreSwitcherMenuFabSecondaryItem, } from '@graphcommerce/magento-store' @@ -157,6 +158,7 @@ export function LayoutNavigation(props: LayoutNavigationProps) { + diff --git a/examples/magento-graphcms/package.json b/examples/magento-graphcms/package.json index 828e1b5f76a..d46c780ffe6 100644 --- a/examples/magento-graphcms/package.json +++ b/examples/magento-graphcms/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-graphcms", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "private": true, "sideEffects": false, "packageManager": "yarn@4.5.3", @@ -27,59 +27,59 @@ "@emotion/react": "^11.14.0", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.14.1", - "@graphcommerce/cli": "10.0.0", - "@graphcommerce/demo-magento-graphcommerce": "10.0.0", - "@graphcommerce/ecommerce-ui": "10.0.0", - "@graphcommerce/framer-next-pages": "10.0.0", - "@graphcommerce/framer-scroller": "10.0.0", - "@graphcommerce/framer-utils": "10.0.0", - "@graphcommerce/google-datalayer": "10.0.0", - "@graphcommerce/google-playstore": "10.0.0", - "@graphcommerce/googleanalytics": "10.0.0", - "@graphcommerce/googlerecaptcha": "10.0.0", - "@graphcommerce/googletagmanager": "10.0.0", - "@graphcommerce/graphql": "10.0.0", - "@graphcommerce/graphql-codegen-near-operation-file": "10.0.0", - "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.0.0", - "@graphcommerce/graphql-mesh": "10.0.0", - "@graphcommerce/hygraph-cli": "10.0.0", - "@graphcommerce/hygraph-dynamic-rows": "10.0.0", - "@graphcommerce/hygraph-ui": "10.0.0", - "@graphcommerce/image": "10.0.0", - "@graphcommerce/lingui-next": "10.0.0", - "@graphcommerce/magento-cart": "10.0.0", - "@graphcommerce/magento-cart-checkout": "10.0.0", - "@graphcommerce/magento-cart-coupon": "10.0.0", - "@graphcommerce/magento-cart-email": "10.0.0", - "@graphcommerce/magento-cart-items": "10.0.0", - "@graphcommerce/magento-cart-payment-method": "10.0.0", - "@graphcommerce/magento-cart-shipping-address": "10.0.0", - "@graphcommerce/magento-cart-shipping-method": "10.0.0", - "@graphcommerce/magento-category": "10.0.0", - "@graphcommerce/magento-cms": "10.0.0", - "@graphcommerce/magento-compare": "10.0.0", - "@graphcommerce/magento-customer": "10.0.0", - "@graphcommerce/magento-graphql": "10.0.0", - "@graphcommerce/magento-graphql-rest": "10.0.0", - "@graphcommerce/magento-newsletter": "10.0.0", - "@graphcommerce/magento-payment-included": "10.0.0", - "@graphcommerce/magento-payment-tokens": "10.0.0", - "@graphcommerce/magento-product": "10.0.0", - "@graphcommerce/magento-product-bundle": "10.0.0", - "@graphcommerce/magento-product-configurable": "10.0.0", - "@graphcommerce/magento-product-downloadable": "10.0.0", - "@graphcommerce/magento-product-grouped": "10.0.0", - "@graphcommerce/magento-product-simple": "10.0.0", - "@graphcommerce/magento-product-virtual": "10.0.0", - "@graphcommerce/magento-recently-viewed-products": "10.0.0", - "@graphcommerce/magento-review": "10.0.0", - "@graphcommerce/magento-search": "10.0.0", - "@graphcommerce/magento-store": "10.0.0", - "@graphcommerce/magento-wishlist": "10.0.0", - "@graphcommerce/next-config": "10.0.0", - "@graphcommerce/next-ui": "10.0.0", - "@graphcommerce/react-hook-form": "10.0.0", - "@graphcommerce/service-worker": "10.0.0", + "@graphcommerce/cli": "10.0.1", + "@graphcommerce/demo-magento-graphcommerce": "10.0.1", + "@graphcommerce/ecommerce-ui": "10.0.1", + "@graphcommerce/framer-next-pages": "10.0.1", + "@graphcommerce/framer-scroller": "10.0.1", + "@graphcommerce/framer-utils": "10.0.1", + "@graphcommerce/google-datalayer": "10.0.1", + "@graphcommerce/google-playstore": "10.0.1", + "@graphcommerce/googleanalytics": "10.0.1", + "@graphcommerce/googlerecaptcha": "10.0.1", + "@graphcommerce/googletagmanager": "10.0.1", + "@graphcommerce/graphql": "10.0.1", + "@graphcommerce/graphql-codegen-near-operation-file": "10.0.1", + "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.0.1", + "@graphcommerce/graphql-mesh": "10.0.1", + "@graphcommerce/hygraph-cli": "10.0.1", + "@graphcommerce/hygraph-dynamic-rows": "10.0.1", + "@graphcommerce/hygraph-ui": "10.0.1", + "@graphcommerce/image": "10.0.1", + "@graphcommerce/lingui-next": "10.0.1", + "@graphcommerce/magento-cart": "10.0.1", + "@graphcommerce/magento-cart-checkout": "10.0.1", + "@graphcommerce/magento-cart-coupon": "10.0.1", + "@graphcommerce/magento-cart-email": "10.0.1", + "@graphcommerce/magento-cart-items": "10.0.1", + "@graphcommerce/magento-cart-payment-method": "10.0.1", + "@graphcommerce/magento-cart-shipping-address": "10.0.1", + "@graphcommerce/magento-cart-shipping-method": "10.0.1", + "@graphcommerce/magento-category": "10.0.1", + "@graphcommerce/magento-cms": "10.0.1", + "@graphcommerce/magento-compare": "10.0.1", + "@graphcommerce/magento-customer": "10.0.1", + "@graphcommerce/magento-graphql": "10.0.1", + "@graphcommerce/magento-graphql-rest": "10.0.1", + "@graphcommerce/magento-newsletter": "10.0.1", + "@graphcommerce/magento-payment-included": "10.0.1", + "@graphcommerce/magento-payment-tokens": "10.0.1", + "@graphcommerce/magento-product": "10.0.1", + "@graphcommerce/magento-product-bundle": "10.0.1", + "@graphcommerce/magento-product-configurable": "10.0.1", + "@graphcommerce/magento-product-downloadable": "10.0.1", + "@graphcommerce/magento-product-grouped": "10.0.1", + "@graphcommerce/magento-product-simple": "10.0.1", + "@graphcommerce/magento-product-virtual": "10.0.1", + "@graphcommerce/magento-recently-viewed-products": "10.0.1", + "@graphcommerce/magento-review": "10.0.1", + "@graphcommerce/magento-search": "10.0.1", + "@graphcommerce/magento-store": "10.0.1", + "@graphcommerce/magento-wishlist": "10.0.1", + "@graphcommerce/next-config": "10.0.1", + "@graphcommerce/next-ui": "10.0.1", + "@graphcommerce/react-hook-form": "10.0.1", + "@graphcommerce/service-worker": "10.0.1", "@graphql-mesh/cli": "0.100.21", "@graphql-mesh/config": "0.108.21", "@graphql-mesh/cross-helpers": "0.4.11", @@ -124,15 +124,16 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "react-hook-form": "7.67.0", + "rxjs": "^7.8.2", "serwist": "10.0.0-preview.14", "sharp": "0.34.5", "ts-node": "^10.9.2", "webpack": "^5.103.0" }, "devDependencies": { - "@graphcommerce/eslint-config-pwa": "10.0.0", - "@graphcommerce/prettier-config-pwa": "10.0.0", - "@graphcommerce/typescript-config-pwa": "10.0.0", + "@graphcommerce/eslint-config-pwa": "10.0.1", + "@graphcommerce/prettier-config-pwa": "10.0.1", + "@graphcommerce/typescript-config-pwa": "10.0.1", "@lingui/cli": "5.7.0", "@playwright/test": "1.57.0", "@types/node": "^20.19.27", diff --git a/examples/magento-open-source/CHANGELOG.md b/examples/magento-open-source/CHANGELOG.md index 7a1103d5147..57828d1d9af 100644 --- a/examples/magento-open-source/CHANGELOG.md +++ b/examples/magento-open-source/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/examples/magento-open-source/components/Layout/LayoutNavigation.tsx b/examples/magento-open-source/components/Layout/LayoutNavigation.tsx index 52aa58bcc3c..485654a5516 100644 --- a/examples/magento-open-source/components/Layout/LayoutNavigation.tsx +++ b/examples/magento-open-source/components/Layout/LayoutNavigation.tsx @@ -5,6 +5,7 @@ import { CustomerFab, CustomerMenuFabItem } from '@graphcommerce/magento-custome import { SearchFab, SearchField } from '@graphcommerce/magento-search' import { StoreSwitcherButton, + StoreSwitcherFab, StoreSwitcherMenuFabSecondaryItem, } from '@graphcommerce/magento-store' import { WishlistFab, WishlistMenuFabItem } from '@graphcommerce/magento-wishlist' @@ -161,6 +162,7 @@ export function LayoutNavigation(props: LayoutNavigationProps) { + diff --git a/examples/magento-open-source/next.config.ts b/examples/magento-open-source/next.config.ts index d86b637ec41..3ea0ad659a1 100644 --- a/examples/magento-open-source/next.config.ts +++ b/examples/magento-open-source/next.config.ts @@ -22,7 +22,6 @@ const nextConfig: NextConfig = { qualities: [52, 75], remotePatterns: [{ hostname: 'configurator.reachdigital.dev' }], }, - reactCompiler: true, } export default withGraphCommerce(withPWA(nextConfig)) diff --git a/examples/magento-open-source/package.json b/examples/magento-open-source/package.json index 6bdd3d39f33..4f41912e9b3 100644 --- a/examples/magento-open-source/package.json +++ b/examples/magento-open-source/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-open-source", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "private": true, "sideEffects": false, "packageManager": "yarn@4.1.1", @@ -27,55 +27,55 @@ "@emotion/react": "^11.14.0", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.14.1", - "@graphcommerce/cli": "10.0.0", - "@graphcommerce/ecommerce-ui": "10.0.0", - "@graphcommerce/framer-next-pages": "10.0.0", - "@graphcommerce/framer-scroller": "10.0.0", - "@graphcommerce/framer-utils": "10.0.0", - "@graphcommerce/google-datalayer": "10.0.0", - "@graphcommerce/google-playstore": "10.0.0", - "@graphcommerce/googleanalytics": "10.0.0", - "@graphcommerce/googlerecaptcha": "10.0.0", - "@graphcommerce/googletagmanager": "10.0.0", - "@graphcommerce/graphql": "10.0.0", - "@graphcommerce/graphql-codegen-near-operation-file": "10.0.0", - "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.0.0", - "@graphcommerce/graphql-mesh": "10.0.0", - "@graphcommerce/image": "10.0.0", - "@graphcommerce/lingui-next": "10.0.0", - "@graphcommerce/magento-cart": "10.0.0", - "@graphcommerce/magento-cart-checkout": "10.0.0", - "@graphcommerce/magento-cart-coupon": "10.0.0", - "@graphcommerce/magento-cart-email": "10.0.0", - "@graphcommerce/magento-cart-items": "10.0.0", - "@graphcommerce/magento-cart-payment-method": "10.0.0", - "@graphcommerce/magento-cart-shipping-address": "10.0.0", - "@graphcommerce/magento-cart-shipping-method": "10.0.0", - "@graphcommerce/magento-category": "10.0.0", - "@graphcommerce/magento-cms": "10.0.0", - "@graphcommerce/magento-compare": "10.0.0", - "@graphcommerce/magento-customer": "10.0.0", - "@graphcommerce/magento-graphql": "10.0.0", - "@graphcommerce/magento-graphql-rest": "10.0.0", - "@graphcommerce/magento-newsletter": "10.0.0", - "@graphcommerce/magento-payment-included": "10.0.0", - "@graphcommerce/magento-payment-tokens": "10.0.0", - "@graphcommerce/magento-product": "10.0.0", - "@graphcommerce/magento-product-bundle": "10.0.0", - "@graphcommerce/magento-product-configurable": "10.0.0", - "@graphcommerce/magento-product-downloadable": "10.0.0", - "@graphcommerce/magento-product-grouped": "10.0.0", - "@graphcommerce/magento-product-simple": "10.0.0", - "@graphcommerce/magento-product-virtual": "10.0.0", - "@graphcommerce/magento-recently-viewed-products": "10.0.0", - "@graphcommerce/magento-review": "10.0.0", - "@graphcommerce/magento-search": "10.0.0", - "@graphcommerce/magento-store": "10.0.0", - "@graphcommerce/magento-wishlist": "10.0.0", - "@graphcommerce/next-config": "10.0.0", - "@graphcommerce/next-ui": "10.0.0", - "@graphcommerce/react-hook-form": "10.0.0", - "@graphcommerce/service-worker": "10.0.0", + "@graphcommerce/cli": "10.0.1", + "@graphcommerce/ecommerce-ui": "10.0.1", + "@graphcommerce/framer-next-pages": "10.0.1", + "@graphcommerce/framer-scroller": "10.0.1", + "@graphcommerce/framer-utils": "10.0.1", + "@graphcommerce/google-datalayer": "10.0.1", + "@graphcommerce/google-playstore": "10.0.1", + "@graphcommerce/googleanalytics": "10.0.1", + "@graphcommerce/googlerecaptcha": "10.0.1", + "@graphcommerce/googletagmanager": "10.0.1", + "@graphcommerce/graphql": "10.0.1", + "@graphcommerce/graphql-codegen-near-operation-file": "10.0.1", + "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.0.1", + "@graphcommerce/graphql-mesh": "10.0.1", + "@graphcommerce/image": "10.0.1", + "@graphcommerce/lingui-next": "10.0.1", + "@graphcommerce/magento-cart": "10.0.1", + "@graphcommerce/magento-cart-checkout": "10.0.1", + "@graphcommerce/magento-cart-coupon": "10.0.1", + "@graphcommerce/magento-cart-email": "10.0.1", + "@graphcommerce/magento-cart-items": "10.0.1", + "@graphcommerce/magento-cart-payment-method": "10.0.1", + "@graphcommerce/magento-cart-shipping-address": "10.0.1", + "@graphcommerce/magento-cart-shipping-method": "10.0.1", + "@graphcommerce/magento-category": "10.0.1", + "@graphcommerce/magento-cms": "10.0.1", + "@graphcommerce/magento-compare": "10.0.1", + "@graphcommerce/magento-customer": "10.0.1", + "@graphcommerce/magento-graphql": "10.0.1", + "@graphcommerce/magento-graphql-rest": "10.0.1", + "@graphcommerce/magento-newsletter": "10.0.1", + "@graphcommerce/magento-payment-included": "10.0.1", + "@graphcommerce/magento-payment-tokens": "10.0.1", + "@graphcommerce/magento-product": "10.0.1", + "@graphcommerce/magento-product-bundle": "10.0.1", + "@graphcommerce/magento-product-configurable": "10.0.1", + "@graphcommerce/magento-product-downloadable": "10.0.1", + "@graphcommerce/magento-product-grouped": "10.0.1", + "@graphcommerce/magento-product-simple": "10.0.1", + "@graphcommerce/magento-product-virtual": "10.0.1", + "@graphcommerce/magento-recently-viewed-products": "10.0.1", + "@graphcommerce/magento-review": "10.0.1", + "@graphcommerce/magento-search": "10.0.1", + "@graphcommerce/magento-store": "10.0.1", + "@graphcommerce/magento-wishlist": "10.0.1", + "@graphcommerce/next-config": "10.0.1", + "@graphcommerce/next-ui": "10.0.1", + "@graphcommerce/react-hook-form": "10.0.1", + "@graphcommerce/service-worker": "10.0.1", "@graphql-mesh/cli": "0.100.21", "@graphql-mesh/config": "0.108.21", "@graphql-mesh/cross-helpers": "0.4.11", @@ -120,15 +120,16 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "react-hook-form": "7.67.0", + "rxjs": "^7.8.2", "serwist": "10.0.0-preview.14", "sharp": "0.34.5", "ts-node": "^10.9.2", "webpack": "^5.103.0" }, "devDependencies": { - "@graphcommerce/eslint-config-pwa": "10.0.0", - "@graphcommerce/prettier-config-pwa": "10.0.0", - "@graphcommerce/typescript-config-pwa": "10.0.0", + "@graphcommerce/eslint-config-pwa": "10.0.1", + "@graphcommerce/prettier-config-pwa": "10.0.1", + "@graphcommerce/typescript-config-pwa": "10.0.1", "@lingui/cli": "5.7.0", "@playwright/test": "1.57.0", "@types/node": "^20.19.27", diff --git a/examples/magento-open-source/pages/404.tsx b/examples/magento-open-source/pages/404.tsx index 7f20dcbea13..2879fc63584 100644 --- a/examples/magento-open-source/pages/404.tsx +++ b/examples/magento-open-source/pages/404.tsx @@ -3,7 +3,7 @@ import { cacheFirst } from '@graphcommerce/graphql' import { CmsPageContent, CmsPageDocument, type CmsPageFragment } from '@graphcommerce/magento-cms' import { SearchLink } from '@graphcommerce/magento-search' import { PageMeta, StoreConfigDocument } from '@graphcommerce/magento-store' -import { icon404, IconSvg, isTypename, revalidate } from '@graphcommerce/next-ui' +import { icon404, IconSvg, revalidate } from '@graphcommerce/next-ui' import type { GetStaticProps } from '@graphcommerce/next-ui' import { t } from '@lingui/core/macro' import { Trans } from '@lingui/react/macro' @@ -62,14 +62,14 @@ export const getStaticProps: GetPageStaticProps = async (context) => { fetchPolicy: cacheFirst(staticClient), }) const confData = (await conf).data - const url = confData?.storeConfig?.cms_no_route ?? '' - const cmsPageQuery = staticClient.query({ query: CmsPageDocument, variables: { url } }) - const cmsPage = (await cmsPageQuery).data?.route + const identifier = confData?.storeConfig?.cms_no_route ?? '' + const cmsPageQuery = staticClient.query({ query: CmsPageDocument, variables: { identifier } }) + const cmsPage = (await cmsPageQuery).data?.cmsPage return { props: { ...(await layout).data, - cmsPage: cmsPage && isTypename(cmsPage, ['CmsPage']) ? cmsPage : null, + cmsPage: cmsPage ?? null, up: { href: '/', title: t`Home` }, apolloState: await conf.then(() => client.cache.extract()), }, diff --git a/examples/magento-open-source/pages/index.tsx b/examples/magento-open-source/pages/index.tsx index 0ec64e1561e..3dc4c9f7e9d 100644 --- a/examples/magento-open-source/pages/index.tsx +++ b/examples/magento-open-source/pages/index.tsx @@ -4,7 +4,7 @@ import type { CmsPageFragment } from '@graphcommerce/magento-cms' import { CmsPageContent, CmsPageDocument } from '@graphcommerce/magento-cms' import { StoreConfigDocument } from '@graphcommerce/magento-store' import { breadcrumbs } from '@graphcommerce/next-config/config' -import { Container, isTypename, LayoutHeader, PageMeta, revalidate } from '@graphcommerce/next-ui' +import { Container, LayoutHeader, PageMeta, revalidate } from '@graphcommerce/next-ui' import type { GetStaticProps } from '@graphcommerce/next-ui' import { t } from '@lingui/core/macro' import type { LayoutNavigationProps } from '../components' @@ -45,17 +45,17 @@ export const getStaticProps: GetPageStaticProps = async (context) => { const staticClient = graphqlSsrClient(context) const confData = (await conf).data - const url = confData?.storeConfig?.cms_home_page ?? 'home' - const cmsPageQuery = staticClient.query({ query: CmsPageDocument, variables: { url } }) + const identifier = confData?.storeConfig?.cms_home_page ?? 'home' + const cmsPageQuery = staticClient.query({ query: CmsPageDocument, variables: { identifier } }) const layout = staticClient.query({ query: LayoutDocument, fetchPolicy: cacheFirst(staticClient), }) - const cmsPage = (await cmsPageQuery).data?.route + const cmsPage = (await cmsPageQuery).data?.cmsPage const result = { props: { - cmsPage: cmsPage && isTypename(cmsPage, ['CmsPage']) ? cmsPage : null, + cmsPage: cmsPage ?? null, ...(await layout).data, apolloState: await conf.then(() => client.cache.extract()), }, diff --git a/examples/magento-open-source/pages/p/[url].tsx b/examples/magento-open-source/pages/p/[url].tsx index 48ce8ebae82..c03a554814e 100644 --- a/examples/magento-open-source/pages/p/[url].tsx +++ b/examples/magento-open-source/pages/p/[url].tsx @@ -33,6 +33,7 @@ import { redirectOrNotFound, StoreConfigDocument } from '@graphcommerce/magento- import { ProductWishlistChipDetail } from '@graphcommerce/magento-wishlist' import { breadcrumbs, magentoVersion } from '@graphcommerce/next-config/config' import { + Container, isTypename, LayoutHeader, LayoutTitle, @@ -99,17 +100,20 @@ function ProductPage(props: Props) { {breadcrumbs && ( - ({ - py: `calc(${theme.spacings.xxs} / 2)`, - pl: theme.page.horizontal, - background: theme.vars.palette.background.paper, - [theme.breakpoints.down('md')]: { - '& .MuiBreadcrumbs-ol': { justifyContent: 'center' }, - }, - })} - /> + ({ py: `calc(${theme.spacings.xxs} / 2)`, bgcolor: 'background.paper' })} + breakoutRight + > + ({ + [theme.breakpoints.down('md')]: { + '& .MuiBreadcrumbs-ol': { justifyContent: 'center' }, + }, + })} + /> + )} { export const getStaticProps: GetPageStaticProps = async (context) => { const { params, locale } = context - const url = params?.url?.join('/') ?? '' - if (!url) return { notFound: true } + const identifier = params?.url?.join('/') ?? '' + if (!identifier) return { notFound: true } const client = graphqlSharedClient(context) const conf = client.query({ query: StoreConfigDocument }) const staticClient = graphqlSsrClient(context) - const cmsPageQuery = staticClient.query({ query: CmsPageDocument, variables: { url } }) + const cmsPageQuery = staticClient.query({ query: CmsPageDocument, variables: { identifier } }) const layout = staticClient.query({ query: LayoutDocument, fetchPolicy: cacheFirst(staticClient), }) - const cmsPage = (await cmsPageQuery).data?.route - if (!cmsPage || !isTypename(cmsPage, ['CmsPage'])) - return redirectOrNotFound(staticClient, conf, params, locale) + const cmsPage = (await cmsPageQuery).data?.cmsPage + if (!cmsPage) return redirectOrNotFound(staticClient, conf, params, locale) const result = { props: { diff --git a/package.json b/package.json index 080ec6240d5..6f6dbeb1cfb 100644 --- a/package.json +++ b/package.json @@ -89,9 +89,11 @@ "prettier": "^3.7.4", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", + "rxjs": "^7.8.2", "tsx": "^4.21.0", "typescript": "5.9.3", "unified": "^11.0.5", + "vite": "^7.3.0", "vitest": "^3.0.0", "webpack": "^5.103.0" }, diff --git a/packages/address-fields-nl/CHANGELOG.md b/packages/address-fields-nl/CHANGELOG.md index d31850f765c..645f0d5bddf 100644 --- a/packages/address-fields-nl/CHANGELOG.md +++ b/packages/address-fields-nl/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/address-fields-nl +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/address-fields-nl/package.json b/packages/address-fields-nl/package.json index d14beb63609..a5c2fb61f23 100644 --- a/packages/address-fields-nl/package.json +++ b/packages/address-fields-nl/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/address-fields-nl", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,14 +12,14 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/algolia-categories/CHANGELOG.md b/packages/algolia-categories/CHANGELOG.md index 191423caab4..f40aa1cfb5e 100644 --- a/packages/algolia-categories/CHANGELOG.md +++ b/packages/algolia-categories/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/algolia-categories +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/algolia-categories/package.json b/packages/algolia-categories/package.json index 013c0899963..a11fb14d7d7 100644 --- a/packages/algolia-categories/package.json +++ b/packages/algolia-categories/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/algolia-categories", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -22,15 +22,15 @@ "generate": "tsx scripts/generate-spec.mts" }, "peerDependencies": { - "@graphcommerce/algolia-products": "^10.0.0", - "@graphcommerce/google-datalayer": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-search": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", + "@graphcommerce/algolia-products": "^10.0.1", + "@graphcommerce/google-datalayer": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-search": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", "react": "^19.2.0" }, "devDependencies": { diff --git a/packages/algolia-insights/CHANGELOG.md b/packages/algolia-insights/CHANGELOG.md index 4fd077dd8bf..e2ce406a2cc 100644 --- a/packages/algolia-insights/CHANGELOG.md +++ b/packages/algolia-insights/CHANGELOG.md @@ -1,5 +1,25 @@ # @graphcommerce/algolia-personalization +## 10.0.1 + +### Patch Changes + +- [#2569](https://github.com/graphcommerce-org/graphcommerce/pull/2569) [`1ba54d4`](https://github.com/graphcommerce-org/graphcommerce/commit/1ba54d4e1af20514c1ef25a2feadbbbe5497e7e0) - Properly handle the new uid stuff ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2569](https://github.com/graphcommerce-org/graphcommerce/pull/2569) [`1ba54d4`](https://github.com/graphcommerce-org/graphcommerce/commit/1ba54d4e1af20514c1ef25a2feadbbbe5497e7e0) - Properly handle the new uid stuff ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/algolia-insights/hooks/useSendAlgoliaEvent.ts b/packages/algolia-insights/hooks/useSendAlgoliaEvent.ts index 33a8a08aa59..0cd85c29881 100644 --- a/packages/algolia-insights/hooks/useSendAlgoliaEvent.ts +++ b/packages/algolia-insights/hooks/useSendAlgoliaEvent.ts @@ -12,6 +12,9 @@ import { useEventCallback } from '@mui/material' import { useRef } from 'react' import { AlgoliaSendEventDocument } from '../graphql/AlgoliaSendEvent.gql' +/** Decodes a base64 UID, stripping any query parameters that may be appended (e.g. ?store_name=...) */ +const decodeUid = (uid: string) => atob(uid.split('?')[0]) + const getSHA256Hash = async (input: string) => { const textAsBuffer = new TextEncoder().encode(input) const hashBuffer = await window.crypto.subtle.digest('SHA-256', textAsBuffer) @@ -30,7 +33,7 @@ function mapSelectedFiltersToAlgoliaEvent(filters: ProductFilterParams['filters' const valueArray = (filter.eq ? [filter.eq] : (filter.in ?? [])) as string[] valueArray.forEach((value) => { if (key === 'category_uid') { - flattenedFilters.push(`categoryIds:${atob(value)}`) + flattenedFilters.push(`categoryIds:${decodeUid(value)}`) } else { flattenedFilters.push(`${key}:${encodeURIComponent(value)}`) } @@ -87,7 +90,7 @@ const dataLayerToAlgoliaMap: { } = { // todo should we use view_item or view_item_list? view_item_list: (eventName, eventData, { queryID, ...common }) => { - const objectIDs = eventData.items.map((item) => atob(item.item_uid)) + const objectIDs = eventData.items.map((item) => decodeUid(item.item_uid)) const events: AlgoliaEventsItems_Input[] = [] @@ -146,7 +149,7 @@ const dataLayerToAlgoliaMap: { }, select_item: (eventName, eventData, { queryID, ...common }) => { - const objectIDs = eventData.items.map((item) => atob(item.item_uid)) + const objectIDs = eventData.items.map((item) => decodeUid(item.item_uid)) if (queryID) saveAlgoliaIdToQuery(objectIDs, queryID, eventData.filter_params?.filters ?? {}) return queryID @@ -167,7 +170,7 @@ const dataLayerToAlgoliaMap: { Clicked_object_IDs_Input: { eventName, eventType: 'click', - objectIDs: eventData.items.map((item) => atob(item.item_uid)), + objectIDs: eventData.items.map((item) => decodeUid(item.item_uid)), ...common, }, } satisfies AlgoliaEventsItems_Input, @@ -181,7 +184,7 @@ const dataLayerToAlgoliaMap: { const events: AlgoliaEventsItems_Input[] = [] const mapping = getObjectIDToQuery() - const objectIDs = eventData.items.map((item) => atob(item.item_uid)) + const objectIDs = eventData.items.map((item) => decodeUid(item.item_uid)) const relevant = objectIDs.map((objectID) => mapping[objectID]).filter(Boolean) const queryID = relevant?.[0]?.queryID @@ -209,7 +212,7 @@ const dataLayerToAlgoliaMap: { eventName, eventType: 'conversion', eventSubtype: 'addToCart', - objectIDs: eventData.items.map((item) => atob(item.item_uid)), + objectIDs: eventData.items.map((item) => decodeUid(item.item_uid)), objectData: eventData.items.map((item) => ({ discount: { Float: Number(item.discount?.toFixed(14)) ?? 0 }, price: { Float: Number(item.price.toFixed(14)) }, @@ -226,7 +229,7 @@ const dataLayerToAlgoliaMap: { eventName, eventType: 'conversion', eventSubtype: 'addToCart', - objectIDs: eventData.items.map((item) => atob(item.item_uid)), + objectIDs: eventData.items.map((item) => decodeUid(item.item_uid)), objectData: eventData.items.map((item) => ({ discount: { Float: item.discount ?? 0 }, price: { Float: Number(item.price.toFixed(14)) }, @@ -244,11 +247,13 @@ const dataLayerToAlgoliaMap: { purchase: (eventName, eventData, common) => { const mapping = getObjectIDToQuery() - const isAfterSearch = !!eventData.items.find((item) => mapping[atob(item.item_uid)]?.queryID) + const isAfterSearch = !!eventData.items.find( + (item) => mapping[decodeUid(item.item_uid)]?.queryID, + ) const events: AlgoliaEventsItems_Input[] = [] - const objectIDs = eventData.items.map((item) => atob(item.item_uid)) + const objectIDs = eventData.items.map((item) => decodeUid(item.item_uid)) const relevant = objectIDs.map((objectID) => mapping[objectID]).filter(Boolean) const filters = [...new Set(...relevant.map((item) => item?.filters ?? []))] @@ -273,12 +278,12 @@ const dataLayerToAlgoliaMap: { eventName, eventType: 'conversion', eventSubtype: 'purchase', - objectIDs: eventData.items.map((item) => atob(item.item_uid)), + objectIDs: eventData.items.map((item) => decodeUid(item.item_uid)), objectData: eventData.items.map((item) => ({ discount: { Float: Number(item.discount?.toFixed(14)) ?? 0 }, price: { Float: Number(item.price.toFixed(14)) }, quantity: item.quantity, - queryID: mapping[atob(item.item_uid)]?.queryID, + queryID: mapping[decodeUid(item.item_uid)]?.queryID, })), currency: eventData.currency, value: { Float: Number(eventData.value.toFixed(13)) }, @@ -291,7 +296,7 @@ const dataLayerToAlgoliaMap: { eventName, eventType: 'conversion', eventSubtype: 'purchase', - objectIDs: eventData.items.map((item) => atob(item.item_uid)), + objectIDs: eventData.items.map((item) => decodeUid(item.item_uid)), objectData: eventData.items.map((item) => ({ discount: { Float: Number(item.discount?.toFixed(14)) ?? 0 }, price: { Float: Number(item.price.toFixed(14)) }, diff --git a/packages/algolia-insights/package.json b/packages/algolia-insights/package.json index d161f514465..f281c13b13c 100644 --- a/packages/algolia-insights/package.json +++ b/packages/algolia-insights/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/algolia-insights", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,15 +15,15 @@ "generate": "tsx scripts/generate-insights-spec.mts" }, "peerDependencies": { - "@graphcommerce/algolia-products": "^10.0.0", - "@graphcommerce/google-datalayer": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", + "@graphcommerce/algolia-products": "^10.0.1", + "@graphcommerce/google-datalayer": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", "@mui/material": "*", "react": "^19.2.0" }, diff --git a/packages/algolia-personalization/CHANGELOG.md b/packages/algolia-personalization/CHANGELOG.md index c2c0c2d4ee3..7546de91dc7 100644 --- a/packages/algolia-personalization/CHANGELOG.md +++ b/packages/algolia-personalization/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/algolia-personalization +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/algolia-personalization/package.json b/packages/algolia-personalization/package.json index b54786b70bc..da4855be547 100644 --- a/packages/algolia-personalization/package.json +++ b/packages/algolia-personalization/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/algolia-personalization", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,15 +15,15 @@ "generate": "tsx scripts/generate-insights-spec.mts" }, "peerDependencies": { - "@graphcommerce/algolia-insights": "^10.0.0", - "@graphcommerce/algolia-products": "^10.0.0", - "@graphcommerce/google-datalayer": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", + "@graphcommerce/algolia-insights": "^10.0.1", + "@graphcommerce/algolia-products": "^10.0.1", + "@graphcommerce/google-datalayer": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", "react": "^19.2.0" }, "devDependencies": { diff --git a/packages/algolia-products/CHANGELOG.md b/packages/algolia-products/CHANGELOG.md index 8e74de2c56c..4ffbc558951 100644 --- a/packages/algolia-products/CHANGELOG.md +++ b/packages/algolia-products/CHANGELOG.md @@ -1,5 +1,31 @@ # @graphcommerce/algolia-products +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`f1b60ac`](https://github.com/graphcommerce-org/graphcommerce/commit/f1b60accf5e8fdbcba15b7567dce7ff68f37db88) - Solve issue where the cache wasn't available from the context anymore in @apollo/client@4 now uses the operation.client.cache ([@paales](https://github.com/paales)) + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`591fb82`](https://github.com/graphcommerce-org/graphcommerce/commit/591fb827b2db87dd138cf05e443089355e8883d1) - Make sure the default_display_currency_code is always fetched properly for Algolia ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`591fb82`](https://github.com/graphcommerce-org/graphcommerce/commit/591fb827b2db87dd138cf05e443089355e8883d1) - Make sure the default_display_currency_code is always fetched properly for Algolia ([@paales](https://github.com/paales)) + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`f1b60ac`](https://github.com/graphcommerce-org/graphcommerce/commit/f1b60accf5e8fdbcba15b7567dce7ff68f37db88) - Solve issue where the cache wasn't available from the context anymore in @apollo/client@4 now uses the operation.client.cache ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +37,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +49,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +57,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +67,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +99,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/algolia-products/link/customerGroupIdLink.ts b/packages/algolia-products/link/customerGroupIdLink.ts index fcc9c74619a..7521d92ad74 100644 --- a/packages/algolia-products/link/customerGroupIdLink.ts +++ b/packages/algolia-products/link/customerGroupIdLink.ts @@ -1,21 +1,20 @@ -import type { ApolloCache } from '@graphcommerce/graphql' -import { setContext } from '@graphcommerce/graphql' +import { SetContextLink } from '@graphcommerce/graphql' import { CustomerDocument } from '@graphcommerce/magento-customer' declare module '@apollo/client' { interface DefaultContext { - cache?: ApolloCache headers?: Record } } -export const customerGroupIdLink = setContext((_, context) => { - if (!context.headers) context.headers = {} +export const customerGroupIdLink = new SetContextLink((prevContext, operation) => { + const headers: Record = { ...prevContext.headers } try { - const group_id = context.cache?.readQuery({ query: CustomerDocument })?.customer?.group_id - if (group_id) context.headers['x-magento-group-id'] = `${group_id}` - return context - } catch (error) { - return context + const group_id = operation.client.cache.readQuery({ query: CustomerDocument })?.customer + ?.group_id + if (group_id) headers['x-magento-group-id'] = `${group_id}` + return { headers } + } catch { + return { headers } } }) diff --git a/packages/algolia-products/mesh/algoliaFacetsToAggregations.ts b/packages/algolia-products/mesh/algoliaFacetsToAggregations.ts index 6fb90c585c1..15554fcb06b 100644 --- a/packages/algolia-products/mesh/algoliaFacetsToAggregations.ts +++ b/packages/algolia-products/mesh/algoliaFacetsToAggregations.ts @@ -81,7 +81,10 @@ export function algoliaFacetsToAggregations( categoryList?: null | CategoryResult, groupId?: number, ): Aggregation[] { - if (!storeConfig?.default_display_currency_code) throw new Error('Currency is required') + if (!storeConfig?.default_display_currency_code) + throw new Error( + `Currency is required. StoreConfig default_display_currency_code is not set. This usually means the storeConfig query failed or the store doesn't have a default currency configured.`, + ) const aggregations: Aggregation[] = [] if (!assertAlgoliaFacets(algoliaFacets)) throw Error('these are not facets') diff --git a/packages/algolia-products/mesh/algoliaHitToMagentoProduct.ts b/packages/algolia-products/mesh/algoliaHitToMagentoProduct.ts index 0b5373078e0..c9fea07f562 100644 --- a/packages/algolia-products/mesh/algoliaHitToMagentoProduct.ts +++ b/packages/algolia-products/mesh/algoliaHitToMagentoProduct.ts @@ -35,7 +35,10 @@ function mapPriceRange( customerGroup = 0, currencyHeader?: string, ): PriceRange { - if (!storeConfig?.default_display_currency_code) throw new Error('Currency is required') + if (!storeConfig?.default_display_currency_code) + throw new Error( + `Currency is required. StoreConfig default_display_currency_code is not set. This usually means the storeConfig query failed or the store doesn't have a default currency configured.`, + ) const curr = currencyHeader ?? storeConfig.default_display_currency_code diff --git a/packages/algolia-products/mesh/getStoreConfig.ts b/packages/algolia-products/mesh/getStoreConfig.ts index 2aed1344919..f2eb8443de5 100644 --- a/packages/algolia-products/mesh/getStoreConfig.ts +++ b/packages/algolia-products/mesh/getStoreConfig.ts @@ -1,6 +1,11 @@ import type { Maybe, MeshContext, StoreConfig } from '@graphcommerce/graphql-mesh' +import { storefrontConfigDefault } from '@graphcommerce/next-ui' import { getIndexName } from './getIndexName' +function getStoreHeader(context: MeshContext) { + return (context as MeshContext & { headers: Record }).headers?.store +} + export type GetStoreConfigReturn = | Maybe< Pick< @@ -18,8 +23,13 @@ export async function getStoreConfig(context: MeshContext): Promise const configCached = context.cache.get(cacheKey) if (configCached) return configCached as StoreConfig + // Ensure we have a store header set for the storeConfig query + const storeCode = getStoreHeader(context) ?? storefrontConfigDefault().magentoStoreCode + const contextWithHeaders = context as MeshContext & { headers?: Record } + const storeContext = { ...context, headers: { ...contextWithHeaders.headers, store: storeCode } } + const configCache = await context.m2.Query.storeConfig({ - context, + context: storeContext, selectionSet: /* GraphQL */ ` { root_category_uid diff --git a/packages/algolia-products/package.json b/packages/algolia-products/package.json index 97cabb21371..e05fd43a19e 100644 --- a/packages/algolia-products/package.json +++ b/packages/algolia-products/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/algolia-products", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,14 +15,14 @@ "generate": "tsx scripts/generate-spec.mts" }, "peerDependencies": { - "@graphcommerce/google-datalayer": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-search": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", + "@graphcommerce/google-datalayer": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-search": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", "react": "^19.2.0" }, "devDependencies": { diff --git a/packages/algolia-recommend/CHANGELOG.md b/packages/algolia-recommend/CHANGELOG.md index c2b6687f55a..eb30aa4ca01 100644 --- a/packages/algolia-recommend/CHANGELOG.md +++ b/packages/algolia-recommend/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/algolia-recommend +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/algolia-recommend/package.json b/packages/algolia-recommend/package.json index 282f06e4ac3..ee3fe1e1a37 100644 --- a/packages/algolia-recommend/package.json +++ b/packages/algolia-recommend/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/algolia-recommend", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -22,11 +22,11 @@ "generate": "tsx scripts/generate-recommend-spec.mts" }, "peerDependencies": { - "@graphcommerce/algolia-products": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", + "@graphcommerce/algolia-products": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", "react": "^19.2.0" }, "devDependencies": { diff --git a/packages/algolia-search/CHANGELOG.md b/packages/algolia-search/CHANGELOG.md index 58fd7ad662c..aaa8e1d614c 100644 --- a/packages/algolia-search/CHANGELOG.md +++ b/packages/algolia-search/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/algolia-search +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/algolia-search/package.json b/packages/algolia-search/package.json index dcbbf17c31a..ed4bdc8e228 100644 --- a/packages/algolia-search/package.json +++ b/packages/algolia-search/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/algolia-search", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,17 +15,17 @@ "algoliasearch": "^4.25.3" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-search": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-search": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index e840552058e..1fe5027e28a 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/cli +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -148,6 +169,7 @@ - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`188f23452`](https://github.com/graphcommerce-org/graphcommerce/commit/188f2345255aacd7665d8e443cf42e20a3070a01) - Implement a custom fetch that has an exponential backoff so that build don’t fail as often ([@paales](https://github.com/paales)) - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packages/cli/package.json b/packages/cli/package.json index faae7529170..d272d1ead5a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/cli", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "scripts": { "dev": "pkgroll --clean-dist --watch", "build": "pkgroll --clean-dist", @@ -36,12 +36,12 @@ "zod": "^3.25.76" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/hygraph-cli": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/hygraph-cli": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@graphql-mesh/cli": "*", "@graphql-mesh/types": "*", "@graphql-mesh/utils": "*", diff --git a/packages/demo-magento-graphcommerce/CHANGELOG.md b/packages/demo-magento-graphcommerce/CHANGELOG.md index 22579c60c66..cc2f7f5db86 100644 --- a/packages/demo-magento-graphcommerce/CHANGELOG.md +++ b/packages/demo-magento-graphcommerce/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/demo-magento-graphcommerce +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/demo-magento-graphcommerce/package.json b/packages/demo-magento-graphcommerce/package.json index e71602844b7..4ac7030727f 100644 --- a/packages/demo-magento-graphcommerce/package.json +++ b/packages/demo-magento-graphcommerce/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/demo-magento-graphcommerce", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "scripts": { "dev": "tsc -W" @@ -21,14 +21,14 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-scroller": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-configurable": "^10.0.0", - "@graphcommerce/magento-recently-viewed-products": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-scroller": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-configurable": "^10.0.1", + "@graphcommerce/magento-recently-viewed-products": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/material": "^7.0.0", "framer-motion": "^11.0.0", "next": "*", diff --git a/packages/ecommerce-ui/CHANGELOG.md b/packages/ecommerce-ui/CHANGELOG.md index 1f8bea13a4d..092bf5b6cde 100644 --- a/packages/ecommerce-ui/CHANGELOG.md +++ b/packages/ecommerce-ui/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/ecommerce-ui +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -204,6 +225,7 @@ - [#1745](https://github.com/graphcommerce-org/graphcommerce/pull/1745) [`b1444b933`](https://github.com/graphcommerce-org/graphcommerce/commit/b1444b9336107d3ac111563f9b62a884f1b26a8d) - Bring password reset page more in line with standard forms, add missing translations. ([@github-actions](https://github.com/apps/github-actions)) - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packages/ecommerce-ui/package.json b/packages/ecommerce-ui/package.json index a32681d14c2..2ff00a7d4e9 100644 --- a/packages/ecommerce-ui/package.json +++ b/packages/ecommerce-ui/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/ecommerce-ui", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,12 +12,12 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/framer-next-pages/CHANGELOG.md b/packages/framer-next-pages/CHANGELOG.md index 9744e51dc5c..cbab5904d0e 100644 --- a/packages/framer-next-pages/CHANGELOG.md +++ b/packages/framer-next-pages/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -116,6 +137,7 @@ - [#1755](https://github.com/graphcommerce-org/graphcommerce/pull/1755) [`0025ad80f`](https://github.com/graphcommerce-org/graphcommerce/commit/0025ad80fb82d5d1e6c786bb8b5f39b2456c0932) - Renamed clientSizeCssVar.y/x to dvh(100) and dvw(100) ([@paales](https://github.com/paales)) - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packages/framer-next-pages/example/CHANGELOG.md b/packages/framer-next-pages/example/CHANGELOG.md index 67044c686ec..f0516b6b729 100644 --- a/packages/framer-next-pages/example/CHANGELOG.md +++ b/packages/framer-next-pages/example/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/framer-next-pages/example/package.json b/packages/framer-next-pages/example/package.json index f5f797a046f..f99c91e021b 100644 --- a/packages/framer-next-pages/example/package.json +++ b/packages/framer-next-pages/example/package.json @@ -3,7 +3,7 @@ "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", "private": true, - "version": "10.0.0", + "version": "10.0.1", "scripts": { "dev": "next", "build": "next build", @@ -21,11 +21,11 @@ "@emotion/react": "^11.14.0", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.14.1", - "@graphcommerce/framer-next-pages": "10.0.0", - "@graphcommerce/framer-scroller": "10.0.0", - "@graphcommerce/framer-utils": "10.0.0", - "@graphcommerce/image": "10.0.0", - "@graphcommerce/next-ui": "10.0.0", + "@graphcommerce/framer-next-pages": "10.0.1", + "@graphcommerce/framer-scroller": "10.0.1", + "@graphcommerce/framer-utils": "10.0.1", + "@graphcommerce/image": "10.0.1", + "@graphcommerce/next-ui": "10.0.1", "@lingui/core": "5.7.0", "@lingui/macro": "5.7.0", "@lingui/react": "5.7.0", @@ -46,9 +46,9 @@ "sharp": "0.34.5" }, "devDependencies": { - "@graphcommerce/eslint-config-pwa": "10.0.0", - "@graphcommerce/prettier-config-pwa": "10.0.0", - "@graphcommerce/typescript-config-pwa": "10.0.0", + "@graphcommerce/eslint-config-pwa": "10.0.1", + "@graphcommerce/prettier-config-pwa": "10.0.1", + "@graphcommerce/typescript-config-pwa": "10.0.1", "@lingui/cli": "5.7.0", "@playwright/test": "1.57.0", "@types/node": "^20.19.27", diff --git a/packages/framer-next-pages/package.json b/packages/framer-next-pages/package.json index 3b55f25e19a..aac4bae79d6 100644 --- a/packages/framer-next-pages/package.json +++ b/packages/framer-next-pages/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/framer-next-pages", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,10 +12,10 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "framer-motion": "^11.0.0", "next": "*", "react": "^19.2.0", diff --git a/packages/framer-scroller/CHANGELOG.md b/packages/framer-scroller/CHANGELOG.md index fffea399a1c..5ca88257fcd 100644 --- a/packages/framer-scroller/CHANGELOG.md +++ b/packages/framer-scroller/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -150,6 +171,7 @@ - [`b8bd4abcd`](https://github.com/graphcommerce-org/graphcommerce/commit/b8bd4abcdfb9fc96ec5a724b449df713b99af23b) - Do not change the behavior of the useScrollTo, only warn about possible problems. ([@paales](https://github.com/paales)) - [#1895](https://github.com/graphcommerce-org/graphcommerce/pull/1895) [`e6dbddc01`](https://github.com/graphcommerce-org/graphcommerce/commit/e6dbddc019358f13886288ae065da2def0c1b335) - `useScrollTo` improvements for easier debugging: + - When a `scrollTo` animation is requesed while an animation is is progress it will throw an error - When a `scrollTo` animation is retriggered more than 5 times, it will throw an error - When a `scrollTo` detects the overlay is resized after the animation it will show a warning. ([@paales](https://github.com/paales)) @@ -181,6 +203,7 @@ ### Patch Changes - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh @@ -453,6 +476,7 @@ ### Patch Changes - [#1509](https://github.com/graphcommerce-org/graphcommerce/pull/1509) [`0ab7c5465`](https://github.com/graphcommerce-org/graphcommerce/commit/0ab7c5465441cba9bf8cd185a6790ce2f443f4ed) Thanks [@paales](https://github.com/paales)! - SidebarGallery improvements (product page): + - Prevent vertical scrolling - Disable zoom fab when there are no images - Hide scroller dots when there in only one image diff --git a/packages/framer-scroller/example/CHANGELOG.md b/packages/framer-scroller/example/CHANGELOG.md index de582d0520c..8b4296697dd 100644 --- a/packages/framer-scroller/example/CHANGELOG.md +++ b/packages/framer-scroller/example/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/framer-scroller/example/package.json b/packages/framer-scroller/example/package.json index f2ccc7f1be6..7d60c9c9490 100644 --- a/packages/framer-scroller/example/package.json +++ b/packages/framer-scroller/example/package.json @@ -3,24 +3,25 @@ "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", "private": true, - "version": "10.0.0", + "version": "10.0.1", "scripts": { "dev": "next", "build": "next build", "start": "next start" }, "dependencies": { + "@apollo/client": "^4.0.11", "@emotion/cache": "^11.14.0", "@emotion/react": "^11.14.0", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.14.1", - "@graphcommerce/framer-next-pages": "10.0.0", - "@graphcommerce/framer-scroller": "10.0.0", - "@graphcommerce/framer-utils": "10.0.0", - "@graphcommerce/image": "10.0.0", - "@graphcommerce/lingui-next": "10.0.0", - "@graphcommerce/next-config": "10.0.0", - "@graphcommerce/next-ui": "10.0.0", + "@graphcommerce/framer-next-pages": "10.0.1", + "@graphcommerce/framer-scroller": "10.0.1", + "@graphcommerce/framer-utils": "10.0.1", + "@graphcommerce/image": "10.0.1", + "@graphcommerce/lingui-next": "10.0.1", + "@graphcommerce/next-config": "10.0.1", + "@graphcommerce/next-ui": "10.0.1", "@lingui/conf": "5.7.0", "@lingui/core": "5.7.0", "@lingui/format-po": "5.7.0", @@ -41,13 +42,14 @@ "next-sitemap": "4.2.3", "react": "^19.2.0", "react-dom": "^19.2.0", + "rxjs": "^7.8.2", "sharp": "0.34.5", "webpack": "^5.103.0" }, "devDependencies": { - "@graphcommerce/eslint-config-pwa": "10.0.0", - "@graphcommerce/prettier-config-pwa": "10.0.0", - "@graphcommerce/typescript-config-pwa": "10.0.0", + "@graphcommerce/eslint-config-pwa": "10.0.1", + "@graphcommerce/prettier-config-pwa": "10.0.1", + "@graphcommerce/typescript-config-pwa": "10.0.1", "@lingui/cli": "5.7.0", "@playwright/test": "1.57.0", "@types/node": "^20.19.27", diff --git a/packages/framer-scroller/package.json b/packages/framer-scroller/package.json index f55f3161b9b..d8b9d69f6b4 100644 --- a/packages/framer-scroller/package.json +++ b/packages/framer-scroller/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/framer-scroller", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "scripts": { "dev": "tsc -W" @@ -21,11 +21,11 @@ "popmotion": "11.0.5" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/react": "^5", "@mui/material": "^7.0.0", diff --git a/packages/framer-utils/CHANGELOG.md b/packages/framer-utils/CHANGELOG.md index 93865600f70..495751c56ce 100644 --- a/packages/framer-utils/CHANGELOG.md +++ b/packages/framer-utils/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -96,6 +117,7 @@ - [#1755](https://github.com/graphcommerce-org/graphcommerce/pull/1755) [`0025ad80f`](https://github.com/graphcommerce-org/graphcommerce/commit/0025ad80fb82d5d1e6c786bb8b5f39b2456c0932) - Renamed clientSizeCssVar.y/x to dvh(100) and dvw(100) ([@paales](https://github.com/paales)) - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packages/framer-utils/package.json b/packages/framer-utils/package.json index 420fb3bcf43..b06956b4977 100644 --- a/packages/framer-utils/package.json +++ b/packages/framer-utils/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/framer-utils", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "scripts": { "dev": "tsc -W" @@ -18,9 +18,9 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "framer-motion": "^11.0.0", "react": "^19.2.0", "react-dom": "^19.2.0" diff --git a/packages/google-datalayer/CHANGELOG.md b/packages/google-datalayer/CHANGELOG.md index 8dede57245b..1f20963d65a 100644 --- a/packages/google-datalayer/CHANGELOG.md +++ b/packages/google-datalayer/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/google-datalayer +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -100,6 +121,7 @@ ### Patch Changes - [#2233](https://github.com/graphcommerce-org/graphcommerce/pull/2233) [`f120bce`](https://github.com/graphcommerce-org/graphcommerce/commit/f120bce617808d756aebb7c500aa1deb9e4cf487) - Google Datalayer, Analytics and Tagmanager improvements. + - Removed `eventFormat` as we could automatically detec the correct event format and it is now the responsibility of GTM or the GTAG to handle the event format. - Created cartItemToGoogleDatalayerItem and productToGoogleDatalayerItem for easier modifications. ([@paales](https://github.com/paales)) diff --git a/packages/google-datalayer/package.json b/packages/google-datalayer/package.json index 0905f73583f..70e24190d1b 100644 --- a/packages/google-datalayer/package.json +++ b/packages/google-datalayer/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/google-datalayer", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,15 +12,15 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-cart-shipping-method": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-cart-shipping-method": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/material": "^7.0.0", "next": "*", "react": "^19.2.0", diff --git a/packages/google-playstore/CHANGELOG.md b/packages/google-playstore/CHANGELOG.md index 67c5bbc6ebf..6feffb3e7ed 100644 --- a/packages/google-playstore/CHANGELOG.md +++ b/packages/google-playstore/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/google-playstore +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/google-playstore/package.json b/packages/google-playstore/package.json index af74172e053..e5aa160244b 100644 --- a/packages/google-playstore/package.json +++ b/packages/google-playstore/package.json @@ -1,6 +1,6 @@ { "name": "@graphcommerce/google-playstore", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "browserslist": [ @@ -13,10 +13,10 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "next": "*", "react": "^19.2.0", "react-dom": "^19.2.0" diff --git a/packages/googleanalytics/CHANGELOG.md b/packages/googleanalytics/CHANGELOG.md index 80d85b78478..029e1f80a58 100644 --- a/packages/googleanalytics/CHANGELOG.md +++ b/packages/googleanalytics/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -154,6 +175,7 @@ ### Patch Changes - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packages/googleanalytics/package.json b/packages/googleanalytics/package.json index 4bf04a269fb..1e5dabc0df5 100644 --- a/packages/googleanalytics/package.json +++ b/packages/googleanalytics/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/googleanalytics", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,13 +12,13 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/google-datalayer": "10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/google-datalayer": "10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/material": "^7.0.0", "next": "*", "react": "^19.2.0", diff --git a/packages/googlerecaptcha/CHANGELOG.md b/packages/googlerecaptcha/CHANGELOG.md index b9bf2dcedad..e59db59e3a4 100644 --- a/packages/googlerecaptcha/CHANGELOG.md +++ b/packages/googlerecaptcha/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`f1b60ac`](https://github.com/graphcommerce-org/graphcommerce/commit/f1b60accf5e8fdbcba15b7567dce7ff68f37db88) - Solve issue where the cache wasn't available from the context anymore in @apollo/client@4 now uses the operation.client.cache ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`f1b60ac`](https://github.com/graphcommerce-org/graphcommerce/commit/f1b60accf5e8fdbcba15b7567dce7ff68f37db88) - Solve issue where the cache wasn't available from the context anymore in @apollo/client@4 now uses the operation.client.cache ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/googlerecaptcha/link/recaptchaLink.ts b/packages/googlerecaptcha/link/recaptchaLink.ts index 36d3cdfda8c..c56d2304289 100644 --- a/packages/googlerecaptcha/link/recaptchaLink.ts +++ b/packages/googlerecaptcha/link/recaptchaLink.ts @@ -12,7 +12,7 @@ const isMutation = (operation: ApolloLink.Request) => /** Apollo link that adds the Google reCAPTCHA token to the request context. */ export const recaptchaLink = new SetContextLink(async (prevContext, operation) => { - const siteKey = prevContext.cache?.readQuery({ query: RecaptchaV3ConfigDocument }) + const siteKey = operation.client.cache.readQuery({ query: RecaptchaV3ConfigDocument }) ?.recaptchaV3Config?.website_key if (!siteKey || !globalThis.grecaptcha || !isMutation(operation)) return {} diff --git a/packages/googlerecaptcha/package.json b/packages/googlerecaptcha/package.json index ac427f11d08..4650b6c00c5 100644 --- a/packages/googlerecaptcha/package.json +++ b/packages/googlerecaptcha/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/googlerecaptcha", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -23,13 +23,13 @@ "@types/grecaptcha": "^3.0.9" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/material": "^7.0.0", "graphql": "^16.9.0", "next": "*", diff --git a/packages/googletagmanager/CHANGELOG.md b/packages/googletagmanager/CHANGELOG.md index e23823fa5e8..b69ec01c535 100644 --- a/packages/googletagmanager/CHANGELOG.md +++ b/packages/googletagmanager/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/googletagmanager/package.json b/packages/googletagmanager/package.json index 226117e48d2..495e61bebe8 100644 --- a/packages/googletagmanager/package.json +++ b/packages/googletagmanager/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/googletagmanager", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,11 +15,11 @@ "@types/gapi.client.tagmanager": "^2.0.4" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/google-datalayer": "10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/google-datalayer": "10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/material": "^7.0.0", "next": "*", "react": "^19.2.0", diff --git a/packages/graphcms-ui/CHANGELOG.md b/packages/graphcms-ui/CHANGELOG.md index 8f8ef690bc9..e855cb8daa9 100644 --- a/packages/graphcms-ui/CHANGELOG.md +++ b/packages/graphcms-ui/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/graphcms-ui/package.json b/packages/graphcms-ui/package.json index 69ff9247256..4148e0a71eb 100644 --- a/packages/graphcms-ui/package.json +++ b/packages/graphcms-ui/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/graphcms-ui", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,7 +12,7 @@ } }, "peerDependencies": { - "@graphcommerce/hygraph-ui": "^10.0.0" + "@graphcommerce/hygraph-ui": "^10.0.1" }, "exports": { ".": "./index.ts" diff --git a/packages/graphql-mesh/CHANGELOG.md b/packages/graphql-mesh/CHANGELOG.md index 7cb6b18dc26..4b25180ad33 100644 --- a/packages/graphql-mesh/CHANGELOG.md +++ b/packages/graphql-mesh/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -92,7 +113,9 @@ ### Patch Changes - [#2380](https://github.com/graphcommerce-org/graphcommerce/pull/2380) [`3710d8b`](https://github.com/graphcommerce-org/graphcommerce/commit/3710d8bf1cceb5a991e5cfdfc15d42e462704c6d) - Solves the issue `TypeError: url?.startsWith is not a function`. The generated `.mesh/index.ts` would be generated as a requirejs module while next.js expects an esm module. In the end we properly generated the mesh correctly and now there is an `import.meta.url` instead of using `require('node:url')`. To solve this we needed to solve a chain of issues: + 1. The generation of the mesh is based on the version of the mesh that is imported (esm or commonjs). See [source](https://github.com/ardatan/graphql-mesh/blob/bf588d372c0078378aaa24beea2da794af7949e6/scripts/replace-import-meta-url-in-cjs.ts#L9-L10) for the lines that need to be different. This meant that we needed to change the @graphcommerce/cli package to be of type:module instead of a commonjs module. + 2) To properly convert the module to an esm module we've migrated the build of the cli package to use 'pkgroll' instead of tsc, because tsc is limited in what it outputs and can't really convert classic imports to esm. 3) To load possible mesh plugins we require additional .ts files to be loaded with [tsx](https://tsx.is/). To get the tsx loader to work properly in combination with esm modules, we need at least [node 18.19.0](https://nodejs.org/en/blog/release/v18.19.0#new-nodemodule-api-register-for-module-customization-hooks-new-initialize-hook). Minimal Node version upped to 18.19.0 and add support for node 22. ([@paales](https://github.com/paales)) diff --git a/packages/graphql-mesh/package.json b/packages/graphql-mesh/package.json index 777bed4843a..45c96aef4b4 100644 --- a/packages/graphql-mesh/package.json +++ b/packages/graphql-mesh/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/graphql-mesh", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "dependencies": { "@whatwg-node/fetch": "^0.10.13", "fetch-retry": "^5.0.6", @@ -20,9 +20,9 @@ }, "peerDependencies": { "@apollo/client": "*", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@graphql-mesh/runtime": "*", "@graphql-mesh/types": "*" }, diff --git a/packages/graphql/CHANGELOG.md b/packages/graphql/CHANGELOG.md index cca96476470..f6a46cfa7d2 100644 --- a/packages/graphql/CHANGELOG.md +++ b/packages/graphql/CHANGELOG.md @@ -1,5 +1,31 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`6714cbb`](https://github.com/graphcommerce-org/graphcommerce/commit/6714cbb912ed64217cb04c4355cc2b63762e6ea1) - Deprecated globalApolloClient ([@paales](https://github.com/paales)) + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`2350c13`](https://github.com/graphcommerce-org/graphcommerce/commit/2350c13baab476fde83778e3e0b397f54c0cd7de) - Show loading skeleton when loading and there is no data, but show when there is an error so we dont get in a stuck state. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`2350c13`](https://github.com/graphcommerce-org/graphcommerce/commit/2350c13baab476fde83778e3e0b397f54c0cd7de) - Show loading skeleton when loading and there is no data, but show when there is an error so we dont get in a stuck state. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`6714cbb`](https://github.com/graphcommerce-org/graphcommerce/commit/6714cbb912ed64217cb04c4355cc2b63762e6ea1) - Deprecated globalApolloClient ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +37,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +49,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +57,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +67,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +99,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/graphql/components/GraphQLProvider/GraphQLProvider.tsx b/packages/graphql/components/GraphQLProvider/GraphQLProvider.tsx index a1ef66a5cd0..9a098cdbafc 100644 --- a/packages/graphql/components/GraphQLProvider/GraphQLProvider.tsx +++ b/packages/graphql/components/GraphQLProvider/GraphQLProvider.tsx @@ -14,6 +14,7 @@ import { errorLink } from './errorLink' import { measurePerformanceLink } from './measurePerformanceLink' import { mergeTypePolicies } from './typePolicies' +/** @deprecated You can probably use operation.client instead */ export const globalApolloClient: { current: ApolloClient | null } = { current: null, } diff --git a/packages/graphql/components/PrivateQueryMask/PrivateQueryMask.tsx b/packages/graphql/components/PrivateQueryMask/PrivateQueryMask.tsx index 98a498ef47e..075d6166f5b 100644 --- a/packages/graphql/components/PrivateQueryMask/PrivateQueryMask.tsx +++ b/packages/graphql/components/PrivateQueryMask/PrivateQueryMask.tsx @@ -3,7 +3,8 @@ import { cssFlag, cssNotFlag, sxx, useIsSSR } from '@graphcommerce/next-ui' import type { SkeletonOwnProps, SkeletonProps, SxProps, Theme } from '@mui/material' import { Box, Skeleton } from '@mui/material' import type { OverrideProps } from '@mui/material/OverridableComponent' -import React, { createContext, useContext, useMemo } from 'react' +import type React from 'react' +import { createContext, useContext, useMemo } from 'react' type MaskProp = { skeleton?: SkeletonProps } diff --git a/packages/graphql/hooks/usePrivateQuery.ts b/packages/graphql/hooks/usePrivateQuery.ts index 50c0b20a6cc..d4be491096d 100644 --- a/packages/graphql/hooks/usePrivateQuery.ts +++ b/packages/graphql/hooks/usePrivateQuery.ts @@ -57,9 +57,10 @@ export function usePrivateQuery< // If the user is logged in we might need to show a skeleton: let mask = isSsr if (!isSsr && context) { + // Show skeleton while loading, but not when there's an error mask = !skip ? !clientQuery.data && !clientQuery.previousData && !clientQuery.error - : !clientQuery.data + : !clientQuery.data && !clientQuery.error } // If this method is called within an PrivateQueryMask, we skip this complete functionality so we show the parent mask. diff --git a/packages/graphql/package.json b/packages/graphql/package.json index 6f7737bd177..9bce3726ea1 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/graphql", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "main": "index.ts", "prettier": "@graphcommerce/prettier-config-pwa", @@ -28,12 +28,12 @@ "rxjs": "^7.8.2" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql-codegen-near-operation-file": "10.0.0", - "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql-codegen-near-operation-file": "10.0.1", + "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@graphql-mesh/plugin-http-details-extensions": "*", "react": "^19.2.0", "react-dom": "^19.2.0" diff --git a/packages/hygraph-cli/CHANGELOG.md b/packages/hygraph-cli/CHANGELOG.md index 1c1d4392f38..25b15817d13 100644 --- a/packages/hygraph-cli/CHANGELOG.md +++ b/packages/hygraph-cli/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/hygraph-cli +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/hygraph-cli/package.json b/packages/hygraph-cli/package.json index a1e8bddbb58..88ddde0c0e4 100644 --- a/packages/hygraph-cli/package.json +++ b/packages/hygraph-cli/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/hygraph-cli", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "type": "module", "exports": { ".": { @@ -25,10 +25,10 @@ }, "peerDependencies": { "@apollo/client": "*", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "dotenv": "^16.1.4" }, "devDependencies": { diff --git a/packages/hygraph-dynamic-rows-ui/CHANGELOG.md b/packages/hygraph-dynamic-rows-ui/CHANGELOG.md index b9b61f5b031..d610e81d430 100644 --- a/packages/hygraph-dynamic-rows-ui/CHANGELOG.md +++ b/packages/hygraph-dynamic-rows-ui/CHANGELOG.md @@ -1,5 +1,25 @@ # @graphcommerce/hygraph-dynamic-rows-ui +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/hygraph-dynamic-rows-ui/package.json b/packages/hygraph-dynamic-rows-ui/package.json index 3701896872a..87536b4ba46 100644 --- a/packages/hygraph-dynamic-rows-ui/package.json +++ b/packages/hygraph-dynamic-rows-ui/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/hygraph-dynamic-rows-ui", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "type": "module", "prettier": "@graphcommerce/prettier-config-pwa", @@ -20,7 +20,7 @@ }, "dependencies": { "@apollo/client": "^4.0.11", - "@graphcommerce/next-config": "10.0.0", + "@graphcommerce/next-config": "10.0.1", "@hygraph/app-sdk-react": "^0.0.6", "@lingui/conf": "5.7.0", "@lingui/core": "5.7.0", @@ -36,12 +36,13 @@ "next": "16.1.1", "react": "^19.2.0", "react-dom": "^19.2.0", + "rxjs": "^7.8.2", "webpack": "^5.103.0" }, "devDependencies": { - "@graphcommerce/eslint-config-pwa": "10.0.0", - "@graphcommerce/prettier-config-pwa": "10.0.0", - "@graphcommerce/typescript-config-pwa": "10.0.0", + "@graphcommerce/eslint-config-pwa": "10.0.1", + "@graphcommerce/prettier-config-pwa": "10.0.1", + "@graphcommerce/typescript-config-pwa": "10.0.1", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "@types/react-is": "^19.2.0", diff --git a/packages/hygraph-dynamic-rows/CHANGELOG.md b/packages/hygraph-dynamic-rows/CHANGELOG.md index 2618236de2c..31c6910f308 100644 --- a/packages/hygraph-dynamic-rows/CHANGELOG.md +++ b/packages/hygraph-dynamic-rows/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/hygraph-dynamic-rows +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/hygraph-dynamic-rows/package.json b/packages/hygraph-dynamic-rows/package.json index 39630f9d871..459bffd3d10 100644 --- a/packages/hygraph-dynamic-rows/package.json +++ b/packages/hygraph-dynamic-rows/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/hygraph-dynamic-rows", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,13 +12,13 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/hygraph-ui": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/hygraph-ui": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/material": "^7.0.0", "next": "*", "react": "^19.2.0", diff --git a/packages/hygraph-ui/CHANGELOG.md b/packages/hygraph-ui/CHANGELOG.md index 3d8f5cc285c..ed44fbb4127 100644 --- a/packages/hygraph-ui/CHANGELOG.md +++ b/packages/hygraph-ui/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/hygraph-ui/package.json b/packages/hygraph-ui/package.json index 20afb197b8c..30c85f414f1 100644 --- a/packages/hygraph-ui/package.json +++ b/packages/hygraph-ui/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/hygraph-ui", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,13 +12,13 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/material": "^7.0.0", "next": "*", "react": "^19.2.0", diff --git a/packages/image/CHANGELOG.md b/packages/image/CHANGELOG.md index 97aeaec28d8..43867e1268c 100644 --- a/packages/image/CHANGELOG.md +++ b/packages/image/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -202,6 +223,7 @@ ### Minor Changes - [#1284](https://github.com/ho-nl/m2-pwa/pull/1284) [`5ffcb56bf`](https://github.com/ho-nl/m2-pwa/commit/5ffcb56bfcbe49ebeaf24f9341e819a145ab9a14) Thanks [@paales](https://github.com/paales)! - SvgIcon is now more extenable and flexible: + - It will automatically calculate the stroke-width of the SVG based on the rendered size, allowing for a more flexible use for icons. - Make SvgIcon themable in your own Theme. diff --git a/packages/image/example/CHANGELOG.md b/packages/image/example/CHANGELOG.md index f2c64a10db5..3484f9d4773 100644 --- a/packages/image/example/CHANGELOG.md +++ b/packages/image/example/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/image/example/package.json b/packages/image/example/package.json index 29bf4b39983..f00e9c6f7dc 100644 --- a/packages/image/example/package.json +++ b/packages/image/example/package.json @@ -3,14 +3,14 @@ "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", "private": true, - "version": "10.0.0", + "version": "10.0.1", "scripts": { "dev": "next", "build": "next build", "start": "next start" }, "dependencies": { - "@graphcommerce/framer-utils": "10.0.0", + "@graphcommerce/framer-utils": "10.0.1", "@lingui/core": "5.7.0", "@lingui/format-po": "5.7.0", "@lingui/macro": "5.7.0", @@ -32,9 +32,9 @@ "sharp": "0.34.5" }, "devDependencies": { - "@graphcommerce/eslint-config-pwa": "10.0.0", - "@graphcommerce/prettier-config-pwa": "10.0.0", - "@graphcommerce/typescript-config-pwa": "10.0.0", + "@graphcommerce/eslint-config-pwa": "10.0.1", + "@graphcommerce/prettier-config-pwa": "10.0.1", + "@graphcommerce/typescript-config-pwa": "10.0.1", "@lingui/cli": "5.7.0", "@types/node": "^20.19.27", "@types/react": "^19.2.7", diff --git a/packages/image/package.json b/packages/image/package.json index 8fe732fcb0d..aef1320b0b3 100644 --- a/packages/image/package.json +++ b/packages/image/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/image", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "scripts": { "dev": "tsc -W" @@ -18,10 +18,10 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/material": "^7.0.0", "next": "*", "react": "^19.2.0", diff --git a/packages/lingui-next/CHANGELOG.md b/packages/lingui-next/CHANGELOG.md index c6c4ce82df4..f0778fb8fa9 100644 --- a/packages/lingui-next/CHANGELOG.md +++ b/packages/lingui-next/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/lingui-next/package.json b/packages/lingui-next/package.json index 7f66099c424..267cfd752d2 100644 --- a/packages/lingui-next/package.json +++ b/packages/lingui-next/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/lingui-next", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "scripts": { "dev": "tsc -W" @@ -21,11 +21,11 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/conf": "^5", "@lingui/core": "^5", "@lingui/format-po": "^5", diff --git a/packages/magento-cart-checkout/CHANGELOG.md b/packages/magento-cart-checkout/CHANGELOG.md index 7bc7db8b5d4..567ac606235 100644 --- a/packages/magento-cart-checkout/CHANGELOG.md +++ b/packages/magento-cart-checkout/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-cart-checkout/package.json b/packages/magento-cart-checkout/package.json index 4a19567627b..9f5094048d7 100644 --- a/packages/magento-cart-checkout/package.json +++ b/packages/magento-cart-checkout/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cart-checkout", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,18 +15,18 @@ ".": "./index.ts" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-coupon": "^10.0.0", - "@graphcommerce/magento-cart-items": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-coupon": "^10.0.1", + "@graphcommerce/magento-cart-items": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cart-coupon/CHANGELOG.md b/packages/magento-cart-coupon/CHANGELOG.md index d573850a027..0f177e33bbf 100644 --- a/packages/magento-cart-coupon/CHANGELOG.md +++ b/packages/magento-cart-coupon/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-cart-coupon/package.json b/packages/magento-cart-coupon/package.json index 8ced3984290..e361dd632e5 100644 --- a/packages/magento-cart-coupon/package.json +++ b/packages/magento-cart-coupon/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cart-coupon", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,16 +15,16 @@ ".": "./index.ts" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cart-email/CHANGELOG.md b/packages/magento-cart-email/CHANGELOG.md index 5f56b9e197d..283c5201911 100644 --- a/packages/magento-cart-email/CHANGELOG.md +++ b/packages/magento-cart-email/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-cart-email/EmailForm/EmailForm.tsx b/packages/magento-cart-email/EmailForm/EmailForm.tsx index 5a40b37c4e7..84aeeacdf75 100644 --- a/packages/magento-cart-email/EmailForm/EmailForm.tsx +++ b/packages/magento-cart-email/EmailForm/EmailForm.tsx @@ -13,7 +13,7 @@ import { import { enableGuestCheckoutLogin } from '@graphcommerce/next-config/config' import { extendableComponent, FormRow } from '@graphcommerce/next-ui' import type { UseFormComposeOptions } from '@graphcommerce/react-hook-form' -import { FormAutoSubmit, useFormCompose } from '@graphcommerce/react-hook-form' +import { FormAutoSubmit, useFormCompose, useWatch } from '@graphcommerce/react-hook-form' import { Trans } from '@lingui/react/macro' // eslint-disable-next-line @typescript-eslint/no-restricted-imports import type { SxProps, Theme } from '@mui/material' @@ -42,7 +42,7 @@ const EmailFormBase = React.memo((props) => { skipUnchanged: true, defaultValues: { email: cartEmail.data?.cart?.email ?? '' }, }) - const email = form.watch('email') + const email = useWatch({ control: form.control, name: 'email' }) const isEmailAvailable = useQuery(IsEmailAvailableDocument, { variables: { email }, diff --git a/packages/magento-cart-email/package.json b/packages/magento-cart-email/package.json index 57db3c28947..9ac40f54e71 100644 --- a/packages/magento-cart-email/package.json +++ b/packages/magento-cart-email/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cart-email", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,18 +15,18 @@ ".": "./index.ts" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cart-items/CHANGELOG.md b/packages/magento-cart-items/CHANGELOG.md index a89b007bc93..b4fd3b3c7dd 100644 --- a/packages/magento-cart-items/CHANGELOG.md +++ b/packages/magento-cart-items/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-cart-items/package.json b/packages/magento-cart-items/package.json index e74ef1acfc6..8355095d4b0 100644 --- a/packages/magento-cart-items/package.json +++ b/packages/magento-cart-items/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cart-items", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,19 +15,19 @@ ".": "./index.ts" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-next-pages": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-next-pages": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cart-payment-method/CHANGELOG.md b/packages/magento-cart-payment-method/CHANGELOG.md index cc5533f28d4..f827ea00d9b 100644 --- a/packages/magento-cart-payment-method/CHANGELOG.md +++ b/packages/magento-cart-payment-method/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-cart-payment-method/PaymentMethodActionCardList/PaymentMethodActionCardListForm.tsx b/packages/magento-cart-payment-method/PaymentMethodActionCardList/PaymentMethodActionCardListForm.tsx index 1f052119d6f..ef49959ed36 100644 --- a/packages/magento-cart-payment-method/PaymentMethodActionCardList/PaymentMethodActionCardListForm.tsx +++ b/packages/magento-cart-payment-method/PaymentMethodActionCardList/PaymentMethodActionCardListForm.tsx @@ -3,7 +3,7 @@ import { ActionCardListForm } from '@graphcommerce/ecommerce-ui' import type { ActionCardProps } from '@graphcommerce/next-ui' import { ActionCard, Button, FormDiv, sxx } from '@graphcommerce/next-ui' import type { UseFormComposeOptions } from '@graphcommerce/react-hook-form' -import { FormPersist, useForm, useFormCompose } from '@graphcommerce/react-hook-form' +import { FormPersist, useForm, useFormCompose, useWatch } from '@graphcommerce/react-hook-form' import { t } from '@lingui/core/macro' import { Trans } from '@lingui/react/macro' import type { SxProps, Theme } from '@mui/material' @@ -71,10 +71,10 @@ export function PaymentMethodActionCardListForm(props: PaymentMethodActionCardLi type FormFields = { code: string | null; paymentMethod?: string } const form = useForm({}) - const { control, handleSubmit, watch, setValue } = form + const { control, handleSubmit, setValue } = form const submit = handleSubmit(() => {}) - const paymentMethod = watch('paymentMethod') + const paymentMethod = useWatch({ control, name: 'paymentMethod' }) useEffect(() => { if (lockState.method) setValue('code', lockState.method) diff --git a/packages/magento-cart-payment-method/PaymentMethodToggles/PaymentMethodToggles.tsx b/packages/magento-cart-payment-method/PaymentMethodToggles/PaymentMethodToggles.tsx index 04137a7ba3a..d8724507340 100644 --- a/packages/magento-cart-payment-method/PaymentMethodToggles/PaymentMethodToggles.tsx +++ b/packages/magento-cart-payment-method/PaymentMethodToggles/PaymentMethodToggles.tsx @@ -11,7 +11,13 @@ import { ToggleButton, } from '@graphcommerce/next-ui' import type { UseFormComposeOptions } from '@graphcommerce/react-hook-form' -import { Controller, FormPersist, useForm, useFormCompose } from '@graphcommerce/react-hook-form' +import { + Controller, + FormPersist, + useForm, + useFormCompose, + useWatch, +} from '@graphcommerce/react-hook-form' import { t } from '@lingui/core/macro' import type { SxProps, Theme } from '@mui/material' import { Box, FormControl, FormHelperText } from '@mui/material' @@ -52,7 +58,7 @@ export function PaymentMethodToggles(props: PaymentMethodTogglesProps) { defaultValues: { code: lockState.method }, }) - const { control, handleSubmit, watch, register, setValue, formState } = form + const { control, handleSubmit, register, setValue, formState } = form const submitHandler = handleSubmit(() => {}) @@ -62,7 +68,7 @@ export function PaymentMethodToggles(props: PaymentMethodTogglesProps) { if (selectedMethod?.code) setValue('code', selectedMethod.code) }, [selectedMethod?.code, setValue]) - const paymentMethod = watch('paymentMethod') + const paymentMethod = useWatch({ control, name: 'paymentMethod' }) useEffect(() => { const [code, child] = paymentMethod?.split('___') ?? [''] if (code === selectedMethod?.code) return diff --git a/packages/magento-cart-payment-method/package.json b/packages/magento-cart-payment-method/package.json index 6613c9f00d1..b252e5c4a64 100644 --- a/packages/magento-cart-payment-method/package.json +++ b/packages/magento-cart-payment-method/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cart-payment-method", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -18,18 +18,18 @@ "./PaymentMethodPlaceOrderNoop/PaymentMethodPlaceOrderNoop": "./PaymentMethodPlaceOrderNoop/PaymentMethodPlaceOrderNoop.tsx" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-scroller": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-shipping-address": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-scroller": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-shipping-address": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cart-pickup/CHANGELOG.md b/packages/magento-cart-pickup/CHANGELOG.md index b0784f19a5c..71b3a4d3e22 100644 --- a/packages/magento-cart-pickup/CHANGELOG.md +++ b/packages/magento-cart-pickup/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -110,6 +139,7 @@ - [#1729](https://github.com/graphcommerce-org/graphcommerce/pull/1729) [`c37187a51`](https://github.com/graphcommerce-org/graphcommerce/commit/c37187a513670ebcf09e99eb4a762c8bdb5df7e4) - Moved Magento Cart Pickup shipping method to the [GraphCommerce plugin system](https://www.graphcommerce.org/docs/framework/plugins) Upgrade guide: + - The upgrade removes `@graphcommerce/magento-cart-pickup` package from your `package.json`, remove them for now. - Proceed to upgrade normally - Add back `@graphcommerce/magento-cart-pickup`, following the [GraphCommerce Magento docs](https://graphcommerce.org/docs/magento). ([@paales](https://github.com/paales)) diff --git a/packages/magento-cart-pickup/components/PickupLocationForm.tsx b/packages/magento-cart-pickup/components/PickupLocationForm.tsx index 352ca0129c3..1c71fc0ffd0 100644 --- a/packages/magento-cart-pickup/components/PickupLocationForm.tsx +++ b/packages/magento-cart-pickup/components/PickupLocationForm.tsx @@ -4,6 +4,7 @@ import { ApolloErrorAlert, TextFieldElement, useFormCompose, + useWatch, } from '@graphcommerce/ecommerce-ui' import { useQuery } from '@graphcommerce/graphql' import type { ProductInfoInput } from '@graphcommerce/graphql-mesh' @@ -77,7 +78,8 @@ export function PickupLocationForm(props: PickupLocationFormProps) { useFormCompose({ form, step, submit, key: 'PickupLocationForm' }) - const searchTerm = useDeferredValue((form.watch('searchTerm') || defaultSearchTerm) ?? '') + const watchedSearchTerm = useWatch({ control, name: 'searchTerm' }) + const searchTerm = useDeferredValue((watchedSearchTerm || defaultSearchTerm) ?? '') const locationsQuery = useQuery(GetPickupLocationsForProductsDocument, { variables: { productInput, @@ -92,7 +94,7 @@ export function PickupLocationForm(props: PickupLocationFormProps) { [locationData?.pickupLocations?.items], ) - const selected = form.watch('pickupLocationCode') + const selected = useWatch({ control, name: 'pickupLocationCode' }) // What to do when shippingForm is pickup but there aren't any available pickup locations? if (!isAvailable) return null diff --git a/packages/magento-cart-pickup/package.json b/packages/magento-cart-pickup/package.json index 6063d0005ae..ef145e740f7 100644 --- a/packages/magento-cart-pickup/package.json +++ b/packages/magento-cart-pickup/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cart-pickup", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -16,18 +16,18 @@ "./plugins/AddPickupInStore": "./plugins/AddPickupInStore.tsx" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-shipping-method": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-shipping-method": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cart-shipping-address/CHANGELOG.md b/packages/magento-cart-shipping-address/CHANGELOG.md index 0f26dea6958..e98f4ec483f 100644 --- a/packages/magento-cart-shipping-address/CHANGELOG.md +++ b/packages/magento-cart-shipping-address/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-cart-shipping-address/components/CustomerAddressForm/CustomerAddressForm.tsx b/packages/magento-cart-shipping-address/components/CustomerAddressForm/CustomerAddressForm.tsx index 722fded5a99..1048047a3f9 100644 --- a/packages/magento-cart-shipping-address/components/CustomerAddressForm/CustomerAddressForm.tsx +++ b/packages/magento-cart-shipping-address/components/CustomerAddressForm/CustomerAddressForm.tsx @@ -5,6 +5,7 @@ import { FormPersist, TextFieldElement, useFormCompose, + useWatch, } from '@graphcommerce/ecommerce-ui' import { useQuery } from '@graphcommerce/graphql' import { @@ -125,8 +126,8 @@ export function CustomerAddressForm(props: CustomerAddressListProps) { }, }) - const { handleSubmit, error, control, setValue, watch } = form - const formAddressId = watch('customer_address_id') + const { handleSubmit, error, control, setValue } = form + const formAddressId = useWatch({ control, name: 'customer_address_id' }) useEffect(() => { if (mode === 'both' || mode === 'shipping') { diff --git a/packages/magento-cart-shipping-address/package.json b/packages/magento-cart-shipping-address/package.json index ef2bd3dba80..bf6ce6bae42 100644 --- a/packages/magento-cart-shipping-address/package.json +++ b/packages/magento-cart-shipping-address/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cart-shipping-address", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,17 +15,17 @@ ".": "./index.ts" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cart-shipping-method/CHANGELOG.md b/packages/magento-cart-shipping-method/CHANGELOG.md index c2391a1e14d..5e019f80bc0 100644 --- a/packages/magento-cart-shipping-method/CHANGELOG.md +++ b/packages/magento-cart-shipping-method/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-cart-shipping-method/package.json b/packages/magento-cart-shipping-method/package.json index d77ca2bebdb..6e8f196476f 100644 --- a/packages/magento-cart-shipping-method/package.json +++ b/packages/magento-cart-shipping-method/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cart-shipping-method", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,19 +15,19 @@ ".": "./index.ts" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-scroller": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-shipping-address": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-scroller": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-shipping-address": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cart/CHANGELOG.md b/packages/magento-cart/CHANGELOG.md index 4e257f96f3c..d8eeda3b271 100644 --- a/packages/magento-cart/CHANGELOG.md +++ b/packages/magento-cart/CHANGELOG.md @@ -1,5 +1,31 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`78a2a8a`](https://github.com/graphcommerce-org/graphcommerce/commit/78a2a8a919346e1f9bccddf7e52682f4adb9a4e0) - Solve issue where the @client fields could not be resolved correctly. ([@paales](https://github.com/paales)) + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`f1b60ac`](https://github.com/graphcommerce-org/graphcommerce/commit/f1b60accf5e8fdbcba15b7567dce7ff68f37db88) - Solve issue where the cache wasn't available from the context anymore in @apollo/client@4 now uses the operation.client.cache ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`78a2a8a`](https://github.com/graphcommerce-org/graphcommerce/commit/78a2a8a919346e1f9bccddf7e52682f4adb9a4e0) - Solve issue where the @client fields could not be resolved correctly. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`f1b60ac`](https://github.com/graphcommerce-org/graphcommerce/commit/f1b60accf5e8fdbcba15b7567dce7ff68f37db88) - Solve issue where the cache wasn't available from the context anymore in @apollo/client@4 now uses the operation.client.cache ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +37,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +49,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +57,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +67,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +99,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -122,6 +157,7 @@ - [#2305](https://github.com/graphcommerce-org/graphcommerce/pull/2305) [`77e8297`](https://github.com/graphcommerce-org/graphcommerce/commit/77e82976816994336c616208a651cb18ce9ea270) - Added `` with `` and `` to shipping and billing forms. ([@Giovanni-Schroevers](https://github.com/Giovanni-Schroevers)) - [#2366](https://github.com/graphcommerce-org/graphcommerce/pull/2366) [`3612c99`](https://github.com/graphcommerce-org/graphcommerce/commit/3612c994b80bb3b1bc02de10668f69a332402dc4) - Add `permissions` configuration to disable functionalities. + - Added new `permissions` configuration for GraphCommerce - Added `permissions.cart`: `ENABLED` | `CUSTOMER_ONLY` | `DISABLED` - Added `permissions.checkout`: `ENABLED` | `CUSTOMER_ONLY` | `DISABLED` diff --git a/packages/magento-cart/hooks/useCartQuery.ts b/packages/magento-cart/hooks/useCartQuery.ts index c2ea44ecf63..7e49fe79d6f 100644 --- a/packages/magento-cart/hooks/useCartQuery.ts +++ b/packages/magento-cart/hooks/useCartQuery.ts @@ -3,9 +3,9 @@ import type { TypedDocumentNode, WatchQueryFetchPolicy, } from '@graphcommerce/graphql' -import { useQuery } from '@graphcommerce/graphql' -import { CombinedGraphQLErrors } from '@apollo/client/errors' +import { CombinedGraphQLErrors, useQuery } from '@graphcommerce/graphql' import type { useQuery as useQueryType } from '@apollo/client/react' +import { t } from '@lingui/core/macro' import { GraphQLError } from 'graphql' import { useRouter } from 'next/router' import { useCartShouldLoginToContinue } from './useCartPermissions' @@ -61,7 +61,7 @@ export function useCartQuery< ...query, error: new CombinedGraphQLErrors({ errors: [ - new GraphQLError('Action can not be performed by the current user', { + new GraphQLError(t`You must be logged in to view your cart.`, { extensions: { category: 'graphql-authorization' }, }), ], diff --git a/packages/magento-cart/hooks/useFormGqlMutationCart.ts b/packages/magento-cart/hooks/useFormGqlMutationCart.ts index 3b084819609..dd3502d1ff2 100644 --- a/packages/magento-cart/hooks/useFormGqlMutationCart.ts +++ b/packages/magento-cart/hooks/useFormGqlMutationCart.ts @@ -1,14 +1,11 @@ -import { - CombinedGraphQLErrors, - TypedDocumentNode, - useApolloClient, - useMutation, -} from '@graphcommerce/graphql' +import type { TypedDocumentNode, useMutation } from '@graphcommerce/graphql' +import { CombinedGraphQLErrors, useApolloClient } from '@graphcommerce/graphql' import type { UseFormGqlMutationReturn, UseFormGraphQlOptions, } from '@graphcommerce/react-hook-form' import { useFormGqlMutation } from '@graphcommerce/react-hook-form' +import { t } from '@lingui/core/macro' import { GraphQLError, Kind } from 'graphql' import { useCartIdContext } from '../components/CartIdContext' import { isProtectedCartOperation } from '../link/isProtectedCartOperation' @@ -69,7 +66,7 @@ export function useFormGqlMutationCart< ...result, error: new CombinedGraphQLErrors({ errors: [ - new GraphQLError('Action can not be performed by the current user', { + new GraphQLError(t`You must be logged in to modify your cart.`, { extensions: { category: 'graphql-authorization' }, }), ], diff --git a/packages/magento-cart/link/cartLink.ts b/packages/magento-cart/link/cartLink.ts index c9417fe6b2c..e94f7695173 100644 --- a/packages/magento-cart/link/cartLink.ts +++ b/packages/magento-cart/link/cartLink.ts @@ -1,4 +1,3 @@ -import { globalApolloClient } from '@graphcommerce/graphql' import { ApolloLink, CombinedGraphQLErrors, ErrorLink } from '@graphcommerce/graphql/apollo' import { filter, from, of, switchMap } from '@graphcommerce/graphql/rxjs' import { CustomerTokenDocument, getCustomerAccountCanSignIn } from '@graphcommerce/magento-customer' @@ -25,11 +24,6 @@ function errorIsIncluded(errorPath: readonly (string | number)[] | undefined, ke } const cartErrorLink = new ErrorLink(({ error, operation, forward }) => { - if (!globalApolloClient.current) return undefined - - const client = globalApolloClient.current - const { cache } = client - // Check if this is a GraphQL error if (!CombinedGraphQLErrors.is(error)) return undefined @@ -66,13 +60,13 @@ const cartErrorLink = new ErrorLink(({ error, operation, forward }) => { if (urlParams.get('cart_id')) return forward(operation) } - return from(client?.mutate({ mutation: CreateEmptyCartDocument })).pipe( + return from(operation.client.mutate({ mutation: CreateEmptyCartDocument })).pipe( filter((value) => Boolean(value)), switchMap((cartData) => { const cartId = cartData.data?.createEmptyCart if (!cartId) return forward(operation) - writeCartId(cache, cartId) + writeCartId(operation.client.cache, cartId) operation.variables = { ...operation.variables, cartId } // retry the request, returning the new observable @@ -84,11 +78,10 @@ const cartErrorLink = new ErrorLink(({ error, operation, forward }) => { const cartPermissionLink = (router: PushRouter) => new ApolloLink((operation, forward) => { const { locale } = router - const { cache } = operation.getContext() if (!isProtectedCartOperation(operation.operationName ?? '')) return forward(operation) - const check = () => Boolean(cache?.readQuery({ query: CustomerTokenDocument })) + const check = () => Boolean(operation.client.cache.readQuery({ query: CustomerTokenDocument })) if (getCartEnabledForUser(locale, check)) return forward(operation) if (!getCustomerAccountCanSignIn(locale)) @@ -101,7 +94,7 @@ const cartPermissionLink = (router: PushRouter) => return from(signInAgainPromise).pipe( switchMap(() => { - const tokenQuery = cache?.readQuery({ query: CustomerTokenDocument }) + const tokenQuery = operation.client.cache.readQuery({ query: CustomerTokenDocument }) if (tokenQuery?.customerToken?.valid) { // Customer is authenticated, retrying request. diff --git a/packages/magento-cart/package.json b/packages/magento-cart/package.json index 8761f92f9e9..ac80c189dae 100644 --- a/packages/magento-cart/package.json +++ b/packages/magento-cart/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cart", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -20,20 +20,20 @@ "./plugins/useSignInFormMergeCart": "./plugins/useSignInFormMergeCart.ts" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-next-pages": "^10.0.0", - "@graphcommerce/framer-scroller": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-graphql": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-next-pages": "^10.0.1", + "@graphcommerce/framer-scroller": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-graphql": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cart/typePolicies.ts b/packages/magento-cart/typePolicies.ts index cfce7dcf8cc..8a027fef36a 100644 --- a/packages/magento-cart/typePolicies.ts +++ b/packages/magento-cart/typePolicies.ts @@ -35,6 +35,8 @@ export const cartTypePolicies: StrictTypedTypePolicies = { fields: { cart: (_, { args, toReference }) => toReference({ __typename: 'Cart', id: (args as QuerycartArgs)?.cart_id }), + // https://github.com/apollographql/apollo-client/issues/12930 + currentCartId: { merge: (existing, incoming) => incoming ?? existing }, }, }, Mutation: { diff --git a/packages/magento-category/CHANGELOG.md b/packages/magento-category/CHANGELOG.md index d1f4598da68..5bff20939a5 100644 --- a/packages/magento-category/CHANGELOG.md +++ b/packages/magento-category/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-category/package.json b/packages/magento-category/package.json index 3bb1031d9cf..e96f0e3827c 100644 --- a/packages/magento-category/package.json +++ b/packages/magento-category/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-category", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -17,15 +17,15 @@ "./components/CategoryBreadcrumb/categoryToBreadcrumbs": "./components/CategoryBreadcrumb/categoryToBreadcrumbs.ts" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-scroller": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-scroller": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-cms/CHANGELOG.md b/packages/magento-cms/CHANGELOG.md index 505f6186d40..1e56fcdf14f 100644 --- a/packages/magento-cms/CHANGELOG.md +++ b/packages/magento-cms/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`0188c30`](https://github.com/graphcommerce-org/graphcommerce/commit/0188c307e44a641f31c9cbe1c2d75a04e2ad5174) - Moved the CmsPage query from the route query to the cmsPage query ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`0188c30`](https://github.com/graphcommerce-org/graphcommerce/commit/0188c307e44a641f31c9cbe1c2d75a04e2ad5174) - Moved the CmsPage query from the route query to the cmsPage query ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-cms/graphql/CmsPage.graphql b/packages/magento-cms/graphql/CmsPage.graphql index 662a7e325ca..a48717f93d1 100644 --- a/packages/magento-cms/graphql/CmsPage.graphql +++ b/packages/magento-cms/graphql/CmsPage.graphql @@ -1,11 +1,5 @@ -query CmsPage($url: String!) { - route(url: $url) { - __typename - relative_url - redirect_code - type - ... on CmsPage { - ...CmsPageFragment - } +query CmsPage($identifier: String!) { + cmsPage(identifier: $identifier) { + ...CmsPageFragment } } diff --git a/packages/magento-cms/package.json b/packages/magento-cms/package.json index 049b3c0ce32..f8ca64fcf7d 100644 --- a/packages/magento-cms/package.json +++ b/packages/magento-cms/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-cms", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,11 +15,11 @@ ".": "./index.ts" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-compare/CHANGELOG.md b/packages/magento-compare/CHANGELOG.md index d36a9702dac..76506d81b99 100644 --- a/packages/magento-compare/CHANGELOG.md +++ b/packages/magento-compare/CHANGELOG.md @@ -1,5 +1,31 @@ # @graphcommerce/magento-compare +## 10.0.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`78a2a8a`](https://github.com/graphcommerce-org/graphcommerce/commit/78a2a8a919346e1f9bccddf7e52682f4adb9a4e0) - Solve issue where the @client fields could not be resolved correctly. ([@paales](https://github.com/paales)) + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`78a2a8a`](https://github.com/graphcommerce-org/graphcommerce/commit/78a2a8a919346e1f9bccddf7e52682f4adb9a4e0) - Solve issue where the @client fields could not be resolved correctly. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +37,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +49,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +57,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +67,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +99,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-compare/components/CompareListForm.tsx b/packages/magento-compare/components/CompareListForm.tsx index 06f26ffaf2d..9ebf4cffb2f 100644 --- a/packages/magento-compare/components/CompareListForm.tsx +++ b/packages/magento-compare/components/CompareListForm.tsx @@ -26,7 +26,7 @@ export function CompareListForm(props: CompareListFormProps) { defaultValues: { selected: [...Array(gridColumns).keys()] }, }) - const selectedState = form.watch('selected') + const selectedState = useWatch({ control: form.control, name: 'selected' }) const selectedPrevious = useRef(selectedState) const compareAbleItems = compareListData?.compareList?.items diff --git a/packages/magento-compare/package.json b/packages/magento-compare/package.json index d9291d4bf34..630962050f2 100644 --- a/packages/magento-compare/package.json +++ b/packages/magento-compare/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-compare", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -19,16 +19,16 @@ "./plugins/AddCompareTypePolicies": "./plugins/AddCompareTypePolicies.tsx" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-next-pages": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-next-pages": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-compare/typePolicies.ts b/packages/magento-compare/typePolicies.ts index 37cf7ac5a38..9cba412d5bd 100644 --- a/packages/magento-compare/typePolicies.ts +++ b/packages/magento-compare/typePolicies.ts @@ -6,6 +6,8 @@ export const compareTypePolicies: StrictTypedTypePolicies = { fields: { compareList: (_, { args, toReference }) => toReference({ __typename: 'CompareList', uid: (args as QuerycompareListArgs)?.uid }), + // https://github.com/apollographql/apollo-client/issues/12930 + currentCompareUid: { merge: (existing, incoming) => incoming ?? existing }, }, }, } diff --git a/packages/magento-customer/CHANGELOG.md b/packages/magento-customer/CHANGELOG.md index 707564d4d93..54351ed2ca5 100644 --- a/packages/magento-customer/CHANGELOG.md +++ b/packages/magento-customer/CHANGELOG.md @@ -1,5 +1,39 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`78a2a8a`](https://github.com/graphcommerce-org/graphcommerce/commit/78a2a8a919346e1f9bccddf7e52682f4adb9a4e0) - Solve issue where the @client fields could not be resolved correctly. ([@paales](https://github.com/paales)) + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`0146abe`](https://github.com/graphcommerce-org/graphcommerce/commit/0146abe0d8362a09b48af42db12f8a0e7670ff8d) - Created a new GuestOrCustomerMask to show information based on their loggedIn state respecting the masking of private content. ([@paales](https://github.com/paales)) + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`f1b60ac`](https://github.com/graphcommerce-org/graphcommerce/commit/f1b60accf5e8fdbcba15b7567dce7ff68f37db88) - Solve issue where the cache wasn't available from the context anymore in @apollo/client@4 now uses the operation.client.cache ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`78a2a8a`](https://github.com/graphcommerce-org/graphcommerce/commit/78a2a8a919346e1f9bccddf7e52682f4adb9a4e0) - Solve issue where the @client fields could not be resolved correctly. ([@paales](https://github.com/paales)) + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`0146abe`](https://github.com/graphcommerce-org/graphcommerce/commit/0146abe0d8362a09b48af42db12f8a0e7670ff8d) - Created a new GuestOrCustomerMask to show information based on their loggedIn state respecting the masking of private content. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`dc57da4`](https://github.com/graphcommerce-org/graphcommerce/commit/dc57da4897365ddb2b779eab3ad2b3a350ed115c) - Moved from form.watch to useWatch everywhere which works even if the fields are later initialized. ([@paales](https://github.com/paales)) + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`f1b60ac`](https://github.com/graphcommerce-org/graphcommerce/commit/f1b60accf5e8fdbcba15b7567dce7ff68f37db88) - Solve issue where the cache wasn't available from the context anymore in @apollo/client@4 now uses the operation.client.cache ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +45,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +57,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +65,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +75,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +107,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -130,6 +173,7 @@ - [#2327](https://github.com/graphcommerce-org/graphcommerce/pull/2327) [`af83d81`](https://github.com/graphcommerce-org/graphcommerce/commit/af83d81656a4c1a014802fb052a94a079e9f60c1) - Add `reorderItems` mutation, add `reorder` button to order detail page. ([@Giovanni-Schroevers](https://github.com/Giovanni-Schroevers)) - [#2366](https://github.com/graphcommerce-org/graphcommerce/pull/2366) [`3612c99`](https://github.com/graphcommerce-org/graphcommerce/commit/3612c994b80bb3b1bc02de10668f69a332402dc4) - Add `permissions` configuration to disable functionalities. + - Added new `permissions` configuration for GraphCommerce - Added `permissions.cart`: `ENABLED` | `CUSTOMER_ONLY` | `DISABLED` - Added `permissions.checkout`: `ENABLED` | `CUSTOMER_ONLY` | `DISABLED` diff --git a/packages/magento-customer/components/AccountSignInUpForm/AccountSignInUpForm.tsx b/packages/magento-customer/components/AccountSignInUpForm/AccountSignInUpForm.tsx index a2de8668f54..3fc5a465749 100644 --- a/packages/magento-customer/components/AccountSignInUpForm/AccountSignInUpForm.tsx +++ b/packages/magento-customer/components/AccountSignInUpForm/AccountSignInUpForm.tsx @@ -10,6 +10,7 @@ import { FormRow, LayoutTitle, } from '@graphcommerce/next-ui' +import { useWatch } from '@graphcommerce/react-hook-form' import { Trans } from '@lingui/react/macro' import type { SxProps, Theme } from '@mui/material' import { Alert, Box, CircularProgress, Link, Typography } from '@mui/material' @@ -43,7 +44,7 @@ export function AccountSignInUpForm(props: AccountSignInUpFormProps) { const { firstname = '' } = customerQuery.data?.customer ?? {} const { mode, form, submit } = useAccountSignInUpForm() - const { formState, control, error, setError, clearErrors, watch } = form + const { formState, control, error, setError, clearErrors } = form const router = useRouter() const client = useApolloClient() @@ -57,7 +58,7 @@ export function AccountSignInUpForm(props: AccountSignInUpFormProps) { mode === 'signin' || (mode === 'signup' && canSignUp) - const emailValue = watch('email') + const emailValue = useWatch({ control, name: 'email' }) return ( diff --git a/packages/magento-customer/components/GuestOrCustomerMask/GuestOrCustomerMask.tsx b/packages/magento-customer/components/GuestOrCustomerMask/GuestOrCustomerMask.tsx new file mode 100644 index 00000000000..8d4222c7b86 --- /dev/null +++ b/packages/magento-customer/components/GuestOrCustomerMask/GuestOrCustomerMask.tsx @@ -0,0 +1,44 @@ +import { usePrivateQueryMask } from '@graphcommerce/graphql' +import { cssFlag, cssNotFlag } from '@graphcommerce/next-ui' +import { Box } from '@mui/material' +import { useCustomerSession } from '../../hooks/useCustomerSession' + +export type CustomerGuestMaskProps = { + /** Allowed to pass null */ + loggedOut: React.ReactNode + /** Allowed to pass null */ + loggedIn: React.ReactNode + /** Allowed to pass null */ + skeleton: React.ReactNode +} + +export function GuestOrCustomerMask(props: CustomerGuestMaskProps) { + const { loggedOut: loggedOutContent, loggedIn: loggedInContent, skeleton } = props + const { mask } = usePrivateQueryMask() + const { loggedIn } = useCustomerSession() + + return ( + <> + {mask && loggedOutContent && ( + + {loggedOutContent} + + )} + + {mask ? skeleton : loggedIn ? loggedInContent : loggedOutContent} + + + ) +} diff --git a/packages/magento-customer/components/SignInForm/SignInForm.tsx b/packages/magento-customer/components/SignInForm/SignInForm.tsx index ead6a413e64..395ef93d218 100644 --- a/packages/magento-customer/components/SignInForm/SignInForm.tsx +++ b/packages/magento-customer/components/SignInForm/SignInForm.tsx @@ -23,11 +23,9 @@ export function SignInForm(props: SignInFormProps) { email, onBeforeSubmit(variables) { if (!email) { - // eslint-disable-next-line @typescript-eslint/no-use-before-define setError('email', { message: t`Please enter a valid email address` }) return false } - // eslint-disable-next-line @typescript-eslint/no-use-before-define clearErrors() return variables }, diff --git a/packages/magento-customer/components/UpdateCustomerEmailForm/UpdateCustomerEmailForm.tsx b/packages/magento-customer/components/UpdateCustomerEmailForm/UpdateCustomerEmailForm.tsx index e1131d5ebf1..5346397e9d5 100644 --- a/packages/magento-customer/components/UpdateCustomerEmailForm/UpdateCustomerEmailForm.tsx +++ b/packages/magento-customer/components/UpdateCustomerEmailForm/UpdateCustomerEmailForm.tsx @@ -9,7 +9,7 @@ import { FormRow, MessageSnackbar, } from '@graphcommerce/next-ui' -import { emailPattern, useFormGqlMutation } from '@graphcommerce/react-hook-form' +import { emailPattern, useFormGqlMutation, useWatch } from '@graphcommerce/react-hook-form' import { t } from '@lingui/core/macro' import { Trans } from '@lingui/react/macro' import { ApolloCustomerErrorSnackbar } from '../ApolloCustomerError' @@ -41,7 +41,7 @@ export function UpdateCustomerEmailForm(props: UpdateCustomerEmailFormProps) { }, ) - const { handleSubmit, error, required, formState, watch, reset, control } = form + const { handleSubmit, error, required, formState, reset, control } = form const [remainingError, authenticationError] = graphqlErrorByCategory({ category: 'graphql-authentication', error, @@ -49,7 +49,7 @@ export function UpdateCustomerEmailForm(props: UpdateCustomerEmailFormProps) { const submit = handleSubmit(() => { reset() }) - const watchNewEmail = watch('email') + const watchNewEmail = useWatch({ control, name: 'email' }) return ( diff --git a/packages/magento-customer/components/index.ts b/packages/magento-customer/components/index.ts index aa8bbf38b41..f9f42cd3723 100644 --- a/packages/magento-customer/components/index.ts +++ b/packages/magento-customer/components/index.ts @@ -28,6 +28,7 @@ export * from './DeleteCustomerAddressForm/DeleteCustomerAddressForm' export * from './EditAddressForm/EditAddressForm' export * from './ForgotPasswordForm/ForgotPassword.gql' export * from './ForgotPasswordForm/ForgotPasswordForm' +export * from './GuestOrCustomerMask/GuestOrCustomerMask' export * from './GuestOrderOverview/GuestOrderOverviewForm' export * from './Invoice' export * from './NameFields/NameFields' diff --git a/packages/magento-customer/hooks/useAccountSignInUpForm.tsx b/packages/magento-customer/hooks/useAccountSignInUpForm.tsx index 1a3d36709f9..ffa94e03eb2 100644 --- a/packages/magento-customer/hooks/useAccountSignInUpForm.tsx +++ b/packages/magento-customer/hooks/useAccountSignInUpForm.tsx @@ -2,7 +2,7 @@ import { usePageContext } from '@graphcommerce/framer-next-pages' import { useQuery } from '@graphcommerce/graphql' import { enableGuestCheckoutLogin } from '@graphcommerce/next-config/config' import { useUrlQuery } from '@graphcommerce/next-ui' -import { useFormGqlQuery } from '@graphcommerce/react-hook-form' +import { useFormGqlQuery, useWatch } from '@graphcommerce/react-hook-form' import { useEffect } from 'react' import type { IsEmailAvailableQuery, IsEmailAvailableQueryVariables } from './IsEmailAvailable.gql' import { IsEmailAvailableDocument } from './IsEmailAvailable.gql' @@ -40,8 +40,9 @@ export function useAccountSignInUpForm(props: UseFormIsEmailAvailableProps = {}) }, { fetchPolicy: 'cache-and-network' }, ) - const { formState, data, handleSubmit, setValue, trigger } = form + const { formState, data, handleSubmit, setValue, trigger, control } = form const { isSubmitSuccessful, isValid } = formState + const requestedMode = useWatch({ control, name: 'requestedMode' }) useEffect(() => { // eslint-disable-next-line @typescript-eslint/no-floating-promises @@ -68,7 +69,7 @@ export function useAccountSignInUpForm(props: UseFormIsEmailAvailableProps = {}) if (token && valid) mode = 'signedin' else if (token && !valid) mode = 'session-expired' else if (isToggleMethod) { - mode = form.watch('requestedMode') ?? 'signin' + mode = requestedMode ?? 'signin' } else { // 1. Nothing is entered mode = 'email' diff --git a/packages/magento-customer/link/customerLink.ts b/packages/magento-customer/link/customerLink.ts index b3792d30b6c..1c2eda223e9 100644 --- a/packages/magento-customer/link/customerLink.ts +++ b/packages/magento-customer/link/customerLink.ts @@ -1,5 +1,3 @@ -import { globalApolloClient } from '@graphcommerce/graphql' -import type { ApolloCache } from '@graphcommerce/graphql/apollo' import { ApolloLink, CombinedGraphQLErrors, @@ -17,7 +15,6 @@ export type PushRouter = Pick declare module '@apollo/client' { interface DefaultContext { - cache?: ApolloCache headers?: Record } } @@ -51,25 +48,24 @@ export async function pushWithPromise(router: Pick { +const addTokenHeader = new SetContextLink((prevContext, operation) => { const headers: Record = { ...prevContext.headers } try { - const query = prevContext.cache?.readQuery({ query: CustomerTokenDocument }) + const query = operation.client.cache.readQuery({ query: CustomerTokenDocument }) if (query?.customerToken?.token && query?.customerToken?.valid !== false) { headers.authorization = `Bearer ${query?.customerToken?.token}` } return { headers } - } catch (error) { + } catch { return { headers } } }) const customerErrorLink = (router: PushRouter) => new ErrorLink(({ error, operation, forward }) => { - const client = globalApolloClient.current - if (!client) return undefined + const { client } = operation // Check if this is a GraphQL error if (!CombinedGraphQLErrors.is(error)) return undefined diff --git a/packages/magento-customer/link/xMagentoCacheIdHeader.ts b/packages/magento-customer/link/xMagentoCacheIdHeader.ts index 2cc1fe9550e..66bb4525124 100644 --- a/packages/magento-customer/link/xMagentoCacheIdHeader.ts +++ b/packages/magento-customer/link/xMagentoCacheIdHeader.ts @@ -4,9 +4,11 @@ import { map } from '@graphcommerce/graphql/rxjs' import { CustomerTokenDocument } from '../hooks' export const xMagentoCacheIdHeader = new ApolloLink((operation, forward) => { + const { cache } = operation.client + operation.setContext((context: DefaultContext) => { - const xMagentoCacheId = context.cache?.readQuery({ query: CustomerTokenDocument }) - ?.customerToken?.xMagentoCacheId + const xMagentoCacheId = cache?.readQuery({ query: CustomerTokenDocument })?.customerToken + ?.xMagentoCacheId if (!xMagentoCacheId) return context return { ...context, headers: { ...context.headers, 'x-magento-cache-id': xMagentoCacheId } } @@ -14,7 +16,6 @@ export const xMagentoCacheIdHeader = new ApolloLink((operation, forward) => { return forward(operation).pipe( map((data) => { - const { cache } = operation.getContext() if (!cache) return data const xMagentoCacheId = ( diff --git a/packages/magento-customer/package.json b/packages/magento-customer/package.json index 4bd5bf4a4a8..050a96c1b83 100644 --- a/packages/magento-customer/package.json +++ b/packages/magento-customer/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-customer", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -21,20 +21,20 @@ "./plugins/magentoCustomerPrivateQueryContext": "./plugins/magentoCustomerPrivateQueryContext.ts" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-next-pages": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-graphql": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-next-pages": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-graphql": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-customer/typePolicies.ts b/packages/magento-customer/typePolicies.ts index b39585faac3..94014288fd9 100644 --- a/packages/magento-customer/typePolicies.ts +++ b/packages/magento-customer/typePolicies.ts @@ -5,15 +5,22 @@ import { CustomerTokenDocument } from './hooks/CustomerToken.gql' const generateCustomerToken: FieldPolicy = { keyArgs: () => '', merge(_existing, incoming, options) { + console.log('[generateCustomerToken] merge called', { + isReference: options.isReference(incoming), + incoming, + }) if (!options.isReference(incoming)) return incoming + const token = options.readField('token', incoming) as string + console.log('[generateCustomerToken] Writing token to cache:', token?.substring(0, 20)) + options.cache.writeQuery({ query: CustomerTokenDocument, broadcast: true, data: { customerToken: { __typename: 'CustomerToken', - token: options.readField('token', incoming) as string, + token, createdAt: new Date().toUTCString(), valid: true, xMagentoCacheId: null, @@ -21,11 +28,21 @@ const generateCustomerToken: FieldPolicy = { }, }) + // Verify write + const verify = options.cache.readQuery({ query: CustomerTokenDocument }) + console.log('[generateCustomerToken] Verify after write:', verify) + return incoming }, } export const customerTypePolicies: StrictTypedTypePolicies = { + Query: { + fields: { + // https://github.com/apollographql/apollo-client/issues/12930 + customerToken: { merge: (existing, incoming) => incoming ?? existing }, + }, + }, Mutation: { fields: { generateCustomerToken } }, } diff --git a/packages/magento-graphql-rest/CHANGELOG.md b/packages/magento-graphql-rest/CHANGELOG.md index 9d28f10f500..202551acead 100644 --- a/packages/magento-graphql-rest/CHANGELOG.md +++ b/packages/magento-graphql-rest/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/magento-graphql-rest +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-graphql-rest/package.json b/packages/magento-graphql-rest/package.json index 59ec30456a1..2f8ee6af29f 100644 --- a/packages/magento-graphql-rest/package.json +++ b/packages/magento-graphql-rest/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-graphql-rest", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "main": "index.ts", "prettier": "@graphcommerce/prettier-config-pwa", @@ -21,11 +21,11 @@ "generate": "tsx ./scripts/generate-spec.mts" }, "peerDependencies": { - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-search": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-search": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", "graphql": "^16.0.0" }, "devDependencies": { diff --git a/packages/magento-graphql/CHANGELOG.md b/packages/magento-graphql/CHANGELOG.md index dcb3f336138..97434f64780 100644 --- a/packages/magento-graphql/CHANGELOG.md +++ b/packages/magento-graphql/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-graphql/package.json b/packages/magento-graphql/package.json index 3fb1541d41a..0f73ad37296 100644 --- a/packages/magento-graphql/package.json +++ b/packages/magento-graphql/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-graphql", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "main": "index.ts", "prettier": "@graphcommerce/prettier-config-pwa", @@ -25,10 +25,10 @@ "./mesh/magentoOrderItemResolvers.ts": "./mesh/magentoOrderItemResolvers.ts" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "graphql": "^16.0.0", "next": "*", "react": "^19.2.0", diff --git a/packages/magento-newsletter/CHANGELOG.md b/packages/magento-newsletter/CHANGELOG.md index c21bef8c595..796ee777c7c 100644 --- a/packages/magento-newsletter/CHANGELOG.md +++ b/packages/magento-newsletter/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-newsletter/package.json b/packages/magento-newsletter/package.json index 01a92d87bcd..238ad4082d7 100644 --- a/packages/magento-newsletter/package.json +++ b/packages/magento-newsletter/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-newsletter", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -15,15 +15,15 @@ ".": "./index.ts" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-payment-adyen/CHANGELOG.md b/packages/magento-payment-adyen/CHANGELOG.md index 77c7f5d490e..f4e6becaa11 100644 --- a/packages/magento-payment-adyen/CHANGELOG.md +++ b/packages/magento-payment-adyen/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/magento-payment-adyen +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-payment-adyen/package.json b/packages/magento-payment-adyen/package.json index e07c7c81ba2..293df133338 100644 --- a/packages/magento-payment-adyen/package.json +++ b/packages/magento-payment-adyen/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-payment-adyen", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -16,18 +16,18 @@ "./plugins/AddAdyenMethods": "./plugins/AddAdyenMethods.tsx" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-payment-afterpay/CHANGELOG.md b/packages/magento-payment-afterpay/CHANGELOG.md index e98fb1e7dd1..7a673e5dd17 100644 --- a/packages/magento-payment-afterpay/CHANGELOG.md +++ b/packages/magento-payment-afterpay/CHANGELOG.md @@ -1 +1,13 @@ # @graphcommerce/magento-payment-afterpay + +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 diff --git a/packages/magento-payment-afterpay/package.json b/packages/magento-payment-afterpay/package.json index 84c9be9b816..4122f4945be 100644 --- a/packages/magento-payment-afterpay/package.json +++ b/packages/magento-payment-afterpay/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-payment-afterpay", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -16,17 +16,17 @@ "./plugins/AddAfterpayMethods": "./plugins/AddAfterpayMethods.tsx" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-payment-braintree/CHANGELOG.md b/packages/magento-payment-braintree/CHANGELOG.md index 5b00e3e848b..247901fcbfa 100644 --- a/packages/magento-payment-braintree/CHANGELOG.md +++ b/packages/magento-payment-braintree/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -135,6 +156,7 @@ - [#1718](https://github.com/graphcommerce-org/graphcommerce/pull/1718) [`f08bffd63`](https://github.com/graphcommerce-org/graphcommerce/commit/f08bffd63780cb626f072b25c2fd4da37543b6f7) - Moved all Payment methods to the [GraphCommerce plugin system](https://www.graphcommerce.org/docs/framework/plugins) Upgrade guide: + - The upgrade removes all the payment gateway packages from the `package.json`, remove them for now. - Proceed to upgrade normally - Add back all the payment modules following the [GraphCommerce Magento docs](https://graphcommerce.org/docs/magento). diff --git a/packages/magento-payment-braintree/package.json b/packages/magento-payment-braintree/package.json index 35ec9702ed0..ec1ebce219a 100644 --- a/packages/magento-payment-braintree/package.json +++ b/packages/magento-payment-braintree/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-payment-braintree", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -22,19 +22,19 @@ "braintree-web": "^3.134.0" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-cart-shipping-address": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-configurable": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-cart-shipping-address": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-configurable": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-payment-included/CHANGELOG.md b/packages/magento-payment-included/CHANGELOG.md index 23ee44f2ac5..3007a388663 100644 --- a/packages/magento-payment-included/CHANGELOG.md +++ b/packages/magento-payment-included/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -108,6 +129,7 @@ - [#1718](https://github.com/graphcommerce-org/graphcommerce/pull/1718) [`f08bffd63`](https://github.com/graphcommerce-org/graphcommerce/commit/f08bffd63780cb626f072b25c2fd4da37543b6f7) - Moved all Payment methods to the [GraphCommerce plugin system](https://www.graphcommerce.org/docs/framework/plugins) Upgrade guide: + - The upgrade removes all the payment gateway packages from the `package.json`, remove them for now. - Proceed to upgrade normally - Add back all the payment modules following the [GraphCommerce Magento docs](https://graphcommerce.org/docs/magento). diff --git a/packages/magento-payment-included/package.json b/packages/magento-payment-included/package.json index 43716535b63..d645e5b8222 100644 --- a/packages/magento-payment-included/package.json +++ b/packages/magento-payment-included/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-payment-included", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -16,20 +16,20 @@ "./plugins/AddIncludedMethods": "./plugins/AddIncludedMethods.tsx" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-cart-shipping-address": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-configurable": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-cart-shipping-address": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-configurable": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-payment-klarna/CHANGELOG.md b/packages/magento-payment-klarna/CHANGELOG.md index c94944d86e4..a1a0fa42f37 100644 --- a/packages/magento-payment-klarna/CHANGELOG.md +++ b/packages/magento-payment-klarna/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-payment-klarna/package.json b/packages/magento-payment-klarna/package.json index 23e33bce5b7..cfd9d777802 100644 --- a/packages/magento-payment-klarna/package.json +++ b/packages/magento-payment-klarna/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-payment-klarna", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -16,18 +16,18 @@ "./plugins/AddKlarnaMethods": "./plugins/AddKlarnaMethods.tsx" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-checkout": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-checkout": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-payment-multisafepay/CHANGELOG.md b/packages/magento-payment-multisafepay/CHANGELOG.md index 5c87f5cd2ea..cc3a14405db 100644 --- a/packages/magento-payment-multisafepay/CHANGELOG.md +++ b/packages/magento-payment-multisafepay/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/magento-payment-multisafepay +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-payment-multisafepay/package.json b/packages/magento-payment-multisafepay/package.json index 1e95d1c024a..4b8b1e18568 100644 --- a/packages/magento-payment-multisafepay/package.json +++ b/packages/magento-payment-multisafepay/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-payment-multisafepay", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,22 +12,22 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-checkout": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-cart-shipping-address": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-configurable": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-checkout": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-cart-shipping-address": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-configurable": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-payment-paypal/CHANGELOG.md b/packages/magento-payment-paypal/CHANGELOG.md index b66c5266f9e..4a94029f299 100644 --- a/packages/magento-payment-paypal/CHANGELOG.md +++ b/packages/magento-payment-paypal/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/magento-payment-paypal +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -118,6 +139,7 @@ - [#1718](https://github.com/graphcommerce-org/graphcommerce/pull/1718) [`f08bffd63`](https://github.com/graphcommerce-org/graphcommerce/commit/f08bffd63780cb626f072b25c2fd4da37543b6f7) - Moved all Payment methods to the [GraphCommerce plugin system](https://www.graphcommerce.org/docs/framework/plugins) Upgrade guide: + - The upgrade removes all the payment gateway packages from the `package.json`, remove them for now. - Proceed to upgrade normally - Add back all the payment modules following the [GraphCommerce Magento docs](https://graphcommerce.org/docs/magento). diff --git a/packages/magento-payment-paypal/package.json b/packages/magento-payment-paypal/package.json index c7b5aee52b4..bb84f4bccd2 100644 --- a/packages/magento-payment-paypal/package.json +++ b/packages/magento-payment-paypal/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-payment-paypal", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,16 +12,16 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-payment-tokens/CHANGELOG.md b/packages/magento-payment-tokens/CHANGELOG.md index 34c62a575b0..397d90257d4 100644 --- a/packages/magento-payment-tokens/CHANGELOG.md +++ b/packages/magento-payment-tokens/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/magento-payment-tokens +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-payment-tokens/package.json b/packages/magento-payment-tokens/package.json index e3555b5593d..b59e2fb543e 100644 --- a/packages/magento-payment-tokens/package.json +++ b/packages/magento-payment-tokens/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-payment-tokens", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,17 +12,17 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-product-bundle/CHANGELOG.md b/packages/magento-product-bundle/CHANGELOG.md index e8ef492d6ee..3f73c9946fb 100644 --- a/packages/magento-product-bundle/CHANGELOG.md +++ b/packages/magento-product-bundle/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-product-bundle/package.json b/packages/magento-product-bundle/package.json index b7b93fc0713..2935f8a3614 100644 --- a/packages/magento-product-bundle/package.json +++ b/packages/magento-product-bundle/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-product-bundle", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,19 +12,19 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-items": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-simple": "^10.0.0", - "@graphcommerce/magento-product-virtual": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-items": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-simple": "^10.0.1", + "@graphcommerce/magento-product-virtual": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-product-configurable/CHANGELOG.md b/packages/magento-product-configurable/CHANGELOG.md index 163deb03b49..36fdd63417c 100644 --- a/packages/magento-product-configurable/CHANGELOG.md +++ b/packages/magento-product-configurable/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-product-configurable/package.json b/packages/magento-product-configurable/package.json index 05c38b975ac..e54628d3380 100644 --- a/packages/magento-product-configurable/package.json +++ b/packages/magento-product-configurable/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-product-configurable", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,23 +12,23 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/lingui-next": "10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-items": "^10.0.0", - "@graphcommerce/magento-category": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-simple": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/lingui-next": "10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-items": "^10.0.1", + "@graphcommerce/magento-category": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-simple": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-product-downloadable/CHANGELOG.md b/packages/magento-product-downloadable/CHANGELOG.md index 39a3893029b..82719f7df23 100644 --- a/packages/magento-product-downloadable/CHANGELOG.md +++ b/packages/magento-product-downloadable/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-product-downloadable/package.json b/packages/magento-product-downloadable/package.json index 50264c2a13c..73237e7a4eb 100644 --- a/packages/magento-product-downloadable/package.json +++ b/packages/magento-product-downloadable/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-product-downloadable", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,17 +12,17 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-items": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-items": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-product-grouped/CHANGELOG.md b/packages/magento-product-grouped/CHANGELOG.md index c2c3519304d..d6d2f05cb88 100644 --- a/packages/magento-product-grouped/CHANGELOG.md +++ b/packages/magento-product-grouped/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-product-grouped/package.json b/packages/magento-product-grouped/package.json index ef965d2c448..b8cd6ae32b9 100644 --- a/packages/magento-product-grouped/package.json +++ b/packages/magento-product-grouped/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-product-grouped", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,18 +12,18 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-simple": "^10.0.0", - "@graphcommerce/magento-product-virtual": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-simple": "^10.0.1", + "@graphcommerce/magento-product-virtual": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-product-simple/CHANGELOG.md b/packages/magento-product-simple/CHANGELOG.md index 25416df5bd3..bd69e17ef84 100644 --- a/packages/magento-product-simple/CHANGELOG.md +++ b/packages/magento-product-simple/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-product-simple/package.json b/packages/magento-product-simple/package.json index 789dfcf92a0..8caebd1867b 100644 --- a/packages/magento-product-simple/package.json +++ b/packages/magento-product-simple/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-product-simple", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,14 +12,14 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-items": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-items": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-product-virtual/CHANGELOG.md b/packages/magento-product-virtual/CHANGELOG.md index 79b8c58b4bf..5cb2dfd1cae 100644 --- a/packages/magento-product-virtual/CHANGELOG.md +++ b/packages/magento-product-virtual/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-product-virtual/package.json b/packages/magento-product-virtual/package.json index 7b92107ffe4..474d15806b7 100644 --- a/packages/magento-product-virtual/package.json +++ b/packages/magento-product-virtual/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-product-virtual", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,14 +12,14 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-items": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-items": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-product/CHANGELOG.md b/packages/magento-product/CHANGELOG.md index 582f18249c3..072f6663085 100644 --- a/packages/magento-product/CHANGELOG.md +++ b/packages/magento-product/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -349,6 +370,7 @@ ### Minor Changes - [#1822](https://github.com/graphcommerce-org/graphcommerce/pull/1822) [`cc02c46e3`](https://github.com/graphcommerce-org/graphcommerce/commit/cc02c46e32c9a44a90789591f43d91ae234dac84) - Added Facebook Open Graph tags to product pages: + - og:title - og:image - og:url @@ -382,6 +404,7 @@ - [#1757](https://github.com/graphcommerce-org/graphcommerce/pull/1757) [`ca2e2ab59`](https://github.com/graphcommerce-org/graphcommerce/commit/ca2e2ab594ab1cc0fedf908869829811e1f4009f) - Handle stock_status OUT_OF_STOCK properly and show only_x_left_in_stock if feature is enabled ([@paales](https://github.com/paales)) - [#1756](https://github.com/graphcommerce-org/graphcommerce/pull/1756) [`1abaaedde`](https://github.com/graphcommerce-org/graphcommerce/commit/1abaaedde4062d3b19696e333d0016972681afaf) - Show cart item error messages when running Magento >= 2.4.5 or this [patch is applied](https://raw.githubusercontent.com/graphcommerce-org/graphcommerce/main/packages/magento-cart/243-244-magento-module-quote-graphql-cart-item-errors.patch) + - Fixes an issue where the cart can get into a broken state, if items contain errors. - AddToCartForm now shows a success message if there is an error but the error is related to another item in the cart. - Disable checkout buttons when there are cart item errors and show a message. ([@paales](https://github.com/paales)) @@ -391,6 +414,7 @@ ### Patch Changes - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packages/magento-product/package.json b/packages/magento-product/package.json index 35f9874ad56..d7aaa5a07a1 100644 --- a/packages/magento-product/package.json +++ b/packages/magento-product/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-product", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -18,18 +18,18 @@ "typescript": "5.9.3" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-next-pages": "^10.0.0", - "@graphcommerce/framer-scroller": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-next-pages": "^10.0.1", + "@graphcommerce/framer-scroller": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-recently-viewed-products/CHANGELOG.md b/packages/magento-recently-viewed-products/CHANGELOG.md index e2e5912cb1d..14c25047f49 100644 --- a/packages/magento-recently-viewed-products/CHANGELOG.md +++ b/packages/magento-recently-viewed-products/CHANGELOG.md @@ -1,5 +1,25 @@ # @graphcommerce/magento-recently-viewed-products +## 10.0.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`78a2a8a`](https://github.com/graphcommerce-org/graphcommerce/commit/78a2a8a919346e1f9bccddf7e52682f4adb9a4e0) - Solve issue where the @client fields could not be resolved correctly. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`78a2a8a`](https://github.com/graphcommerce-org/graphcommerce/commit/78a2a8a919346e1f9bccddf7e52682f4adb9a4e0) - Solve issue where the @client fields could not be resolved correctly. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-recently-viewed-products/index.ts b/packages/magento-recently-viewed-products/index.ts index c8fd0c7e6e3..8bb1613a59d 100644 --- a/packages/magento-recently-viewed-products/index.ts +++ b/packages/magento-recently-viewed-products/index.ts @@ -1,3 +1,4 @@ export * from './components/RecentlyViewedProducts' export * from './hooks' export * from './graphql/RecentlyViewedProducts.gql' +export * from './typePolicies' diff --git a/packages/magento-recently-viewed-products/package.json b/packages/magento-recently-viewed-products/package.json index 85a1da50285..223c3ae40d7 100644 --- a/packages/magento-recently-viewed-products/package.json +++ b/packages/magento-recently-viewed-products/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-recently-viewed-products", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,16 +12,16 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-configurable": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-configurable": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/material": "^7.0.0", "framer-motion": "^11.0.0", "next": "*", @@ -30,6 +30,7 @@ }, "exports": { ".": "./index.ts", + "./plugins/AddRecentlyViewedProductsTypePolicies": "./plugins/AddRecentlyViewedProductsTypePolicies.tsx", "./plugins/RegisterProductAsRecentlyViewed": "./plugins/RegisterProductAsRecentlyViewed.tsx" } } diff --git a/packages/magento-recently-viewed-products/plugins/AddRecentlyViewedProductsTypePolicies.tsx b/packages/magento-recently-viewed-products/plugins/AddRecentlyViewedProductsTypePolicies.tsx new file mode 100644 index 00000000000..1a787d96d22 --- /dev/null +++ b/packages/magento-recently-viewed-products/plugins/AddRecentlyViewedProductsTypePolicies.tsx @@ -0,0 +1,13 @@ +import type { GraphQLProviderProps } from '@graphcommerce/graphql' +import type { PluginConfig, PluginProps } from '@graphcommerce/next-config' +import { recentlyViewedProductsTypePolicies } from '../typePolicies' + +export const config: PluginConfig = { + type: 'component', + module: '@graphcommerce/graphql', +} + +export function GraphQLProvider(props: PluginProps) { + const { Prev, policies = [], ...rest } = props + return +} diff --git a/packages/magento-recently-viewed-products/typePolicies.ts b/packages/magento-recently-viewed-products/typePolicies.ts new file mode 100644 index 00000000000..bbcedeab648 --- /dev/null +++ b/packages/magento-recently-viewed-products/typePolicies.ts @@ -0,0 +1,10 @@ +import type { StrictTypedTypePolicies } from '@graphcommerce/graphql' + +export const recentlyViewedProductsTypePolicies: StrictTypedTypePolicies = { + Query: { + fields: { + // https://github.com/apollographql/apollo-client/issues/12930 + recentlyViewedProducts: { merge: (existing, incoming) => incoming ?? existing }, + }, + }, +} diff --git a/packages/magento-review/CHANGELOG.md b/packages/magento-review/CHANGELOG.md index aa75414170b..852e2982646 100644 --- a/packages/magento-review/CHANGELOG.md +++ b/packages/magento-review/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`ddeaf5d`](https://github.com/graphcommerce-org/graphcommerce/commit/ddeaf5df2c1f3902a80738a547a703221e02170f) - Solve hydration erorr while loading reviews ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`ddeaf5d`](https://github.com/graphcommerce-org/graphcommerce/commit/ddeaf5df2c1f3902a80738a547a703221e02170f) - Solve hydration erorr while loading reviews ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-review/components/ProductReviews/ProductReviews.tsx b/packages/magento-review/components/ProductReviews/ProductReviews.tsx index 6689e120528..35e3171c05a 100644 --- a/packages/magento-review/components/ProductReviews/ProductReviews.tsx +++ b/packages/magento-review/components/ProductReviews/ProductReviews.tsx @@ -41,7 +41,7 @@ export function ProductReviews(props: ProductReviewsProps) { const [reviewPage, setPage] = useState(1) - const { data: otherReviewsPage, loading } = useQuery(ProductReviewsPageDocument, { + const { data: otherReviewsPage } = useQuery(ProductReviewsPageDocument, { skip: reviewPage === 1, variables: { urlKey: url_key ?? '', @@ -142,96 +142,95 @@ export function ProductReviews(props: ProductReviewsProps) { className={classes.container} sx={sxx((theme) => ({ marginTop: `calc(${theme.spacings.xxs} * -1)` }), sx)} > - {!loading && - myReviews.items.map((review) => ( + {myReviews.items.map((review) => ( + ({ + display: 'grid', + gap: theme.spacings.sm, + borderBottom: `1px solid ${theme.vars.palette.divider}`, + padding: `${theme.spacings.md} 0`, + typography: 'body1', + })} + > ({ display: 'grid', - gap: theme.spacings.sm, - borderBottom: `1px solid ${theme.vars.palette.divider}`, - padding: `${theme.spacings.md} 0`, - typography: 'body1', + gridAutoFlow: 'column', + justifyContent: 'start', + gap: theme.spacings.xs, + alignItems: 'center', })} > + + + {review?.summary} + + + {review?.text} + + {(review?.ratings_breakdown.length ?? 0) > 1 && ( ({ - display: 'grid', - gridAutoFlow: 'column', - justifyContent: 'start', - gap: theme.spacings.xs, - alignItems: 'center', + display: 'flex', + flexWrap: 'wrap', + gap: theme.spacings.sm, + color: theme.vars.palette.text.disabled, + typography: 'body2', })} > - - - {review?.summary} - + {review?.ratings_breakdown.map((ratingBreakdown) => ( + ({ + display: 'grid', + gridAutoFlow: 'column', + gridTemplateColumns: '0.4fr 0.6fr', + justifyContent: 'space-between', + marginRight: theme.spacings.xxs, + rowGap: responsiveVal(8, 16), + gap: 8, + alignItems: 'center', + })} + > + {ratingBreakdown?.name} + + + ))} - {review?.text} - - {(review?.ratings_breakdown.length ?? 0) > 1 && ( - ({ - display: 'flex', - flexWrap: 'wrap', - gap: theme.spacings.sm, - color: theme.vars.palette.text.disabled, - typography: 'body2', - })} - > - {review?.ratings_breakdown.map((ratingBreakdown) => ( - ({ - display: 'grid', - gridAutoFlow: 'column', - gridTemplateColumns: '0.4fr 0.6fr', - justifyContent: 'space-between', - marginRight: theme.spacings.xxs, - rowGap: responsiveVal(8, 16), - gap: 8, - alignItems: 'center', - })} - > - {ratingBreakdown?.name} - - - ))} - - )} + )} + ({ + color: theme.vars.palette.text.disabled, + display: 'grid', + gridAutoFlow: 'column', + justifyContent: 'space-between', + })} + > + + Written by {review?.nickname} + ({ - color: theme.vars.palette.text.disabled, - display: 'grid', - gridAutoFlow: 'column', - justifyContent: 'space-between', - })} + component='time' + className={classes.date} + dateTime={review?.created_at} + sx={{ typography: 'body2' }} > - - Written by {review?.nickname} - - - - + - ))} + + ))} {actions} ) diff --git a/packages/magento-review/package.json b/packages/magento-review/package.json index 90f933a8eb7..d1cbc5a4a76 100644 --- a/packages/magento-review/package.json +++ b/packages/magento-review/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-review", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -18,18 +18,18 @@ "typescript": "5.9.3" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-search-overlay/CHANGELOG.md b/packages/magento-search-overlay/CHANGELOG.md index f8ab9a1af5c..7c857078c6d 100644 --- a/packages/magento-search-overlay/CHANGELOG.md +++ b/packages/magento-search-overlay/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/magento-search-overlay +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-search-overlay/package.json b/packages/magento-search-overlay/package.json index ff334125c67..b9ab01a1a07 100644 --- a/packages/magento-search-overlay/package.json +++ b/packages/magento-search-overlay/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-search-overlay", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,18 +12,18 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-search": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-search": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-search/CHANGELOG.md b/packages/magento-search/CHANGELOG.md index c206188b08e..17a1f22deca 100644 --- a/packages/magento-search/CHANGELOG.md +++ b/packages/magento-search/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/magento-search/package.json b/packages/magento-search/package.json index ddb8efb20f0..31b732a5e35 100644 --- a/packages/magento-search/package.json +++ b/packages/magento-search/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-search", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,17 +12,17 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-store/CHANGELOG.md b/packages/magento-store/CHANGELOG.md index 2846b5ae171..132416aac75 100644 --- a/packages/magento-store/CHANGELOG.md +++ b/packages/magento-store/CHANGELOG.md @@ -1,5 +1,29 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`d9c7545`](https://github.com/graphcommerce-org/graphcommerce/commit/d9c754570cd04da61ee3282bde465cc33395c8d9) - When switching stores unset the currency when there is no selection available for a given store. ([@paales](https://github.com/paales)) + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`6d5ff59`](https://github.com/graphcommerce-org/graphcommerce/commit/6d5ff59090b5fe37bf053a2540fcf13150331a27) - Do not send an unacceptable store currency due to a configuration error and make sure the correct currency is stored. Show a StoreSwitcherFab on mobile. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`d9c7545`](https://github.com/graphcommerce-org/graphcommerce/commit/d9c754570cd04da61ee3282bde465cc33395c8d9) - When switching stores unset the currency when there is no selection available for a given store. ([@paales](https://github.com/paales)) + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`6d5ff59`](https://github.com/graphcommerce-org/graphcommerce/commit/6d5ff59090b5fe37bf053a2540fcf13150331a27) - Do not send an unacceptable store currency due to a configuration error and make sure the correct currency is stored. Show a StoreSwitcherFab on mobile. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +35,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +47,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +55,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +65,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +97,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -178,6 +211,7 @@ ### Minor Changes - [#1822](https://github.com/graphcommerce-org/graphcommerce/pull/1822) [`cc02c46e3`](https://github.com/graphcommerce-org/graphcommerce/commit/cc02c46e32c9a44a90789591f43d91ae234dac84) - Added Facebook Open Graph tags to product pages: + - og:title - og:image - og:url @@ -215,6 +249,7 @@ ### Patch Changes - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packages/magento-store/components/StoreSwitcher/StoreSwitcherStoreSelector.tsx b/packages/magento-store/components/StoreSwitcher/StoreSwitcherStoreSelector.tsx index 0189167803a..d131a52464c 100644 --- a/packages/magento-store/components/StoreSwitcher/StoreSwitcherStoreSelector.tsx +++ b/packages/magento-store/components/StoreSwitcher/StoreSwitcherStoreSelector.tsx @@ -52,10 +52,6 @@ export function StoreSwitcherStoreSelector(props: StoreSwitcherSelectorProps) { ), value: store.store_code, disabled: store.disabled, - slotProps: { - title: { sx: { typography: 'subtitle1' } }, - details: { sx: { typography: 'body1', color: 'text.secondary' } }, - }, }))} {...actionCardProps} /> diff --git a/packages/magento-store/components/StoreSwitcher/useStoreSwitcher.tsx b/packages/magento-store/components/StoreSwitcher/useStoreSwitcher.tsx index 1bc6246845f..58ce1b27d49 100644 --- a/packages/magento-store/components/StoreSwitcher/useStoreSwitcher.tsx +++ b/packages/magento-store/components/StoreSwitcher/useStoreSwitcher.tsx @@ -190,8 +190,12 @@ export function StoreSwitcherFormProvider(props: StoreSwitcherFormProviderProps) const formStore = context.stores.find((s) => s.store_code === formValues.storeCode) const isDefaultDisplayCurrency = formValues.currency === formStore?.default_display_currency_code + const isCurrencyAvailable = formStore?.currency?.available_currency_codes?.includes( + formValues.currency, + ) - if (isDefaultDisplayCurrency) cookie('Magento-Content-Currency', null) + // Clear cookie if using default currency or if the currency is not available for the target store + if (isDefaultDisplayCurrency || !isCurrencyAvailable) cookie('Magento-Content-Currency', null) else cookie('Magento-Content-Currency', formValues.currency) await onSubmit?.(formValues, event) diff --git a/packages/magento-store/components/StoreSwitcherButton/StoreSwitcherFab.tsx b/packages/magento-store/components/StoreSwitcherButton/StoreSwitcherFab.tsx index ce9a581651f..eee38c985e8 100644 --- a/packages/magento-store/components/StoreSwitcherButton/StoreSwitcherFab.tsx +++ b/packages/magento-store/components/StoreSwitcherButton/StoreSwitcherFab.tsx @@ -1,20 +1,24 @@ -import { iconLanguage, IconSvg, sxx } from '@graphcommerce/next-ui' -import { Fab, type FabProps } from '@mui/material' -import { StoreSwitcherText } from './StoreSwitcherText' +import type { FabProps } from '@graphcommerce/next-ui' +import { Fab, iconLanguage } from '@graphcommerce/next-ui' import { useShowStoreSwitcherButton } from './useStoreSwitcherButton' -export function StoreSwitcherFab(props: FabProps) { +export type StoreSwitcherFabProps = Omit + +export function StoreSwitcherFab(props: StoreSwitcherFabProps) { + const { sx, ...fabProps } = props const { show, onClick } = useShowStoreSwitcherButton() + if (!show) return null return ( - - + slotProps={{ icon: { size: 'default' } }} + {...fabProps} + /> ) } diff --git a/packages/magento-store/components/StoreSwitcherButton/useStoreSwitcherButton.ts b/packages/magento-store/components/StoreSwitcherButton/useStoreSwitcherButton.ts index 5875baa1ea2..ca84190f103 100644 --- a/packages/magento-store/components/StoreSwitcherButton/useStoreSwitcherButton.ts +++ b/packages/magento-store/components/StoreSwitcherButton/useStoreSwitcherButton.ts @@ -8,17 +8,23 @@ export function useShowStoreSwitcherButton(options?: Record) { const country = config.data?.storeConfig?.locale?.split('_')?.[1]?.toLowerCase() ?? '' const router = useRouter() const multiLocale = (router.locales?.length ?? 0) > 1 - const multiCurrency = - new Set(config.data?.storeConfig?.currency?.available_currency_codes ?? []).size > 1 + const availableCurrencies = config.data?.storeConfig?.currency?.available_currency_codes ?? [] + const multiCurrency = new Set(availableCurrencies).size > 1 - const [currency] = useCookie('Magento-Content-Currency') + const [cookieCurrency] = useCookie('Magento-Content-Currency') + + // Validate cookie currency against available currencies + const currency = + cookieCurrency && availableCurrencies.includes(cookieCurrency) + ? cookieCurrency + : config.data?.storeConfig?.default_display_currency_code return { show: multiLocale || multiCurrency, multiCurrency, country, multiLocale, - currency: currency ?? config.data?.storeConfig?.default_display_currency_code, + currency, storeName: config.data?.storeConfig?.store_name, onClick: () => router.push('/switch-stores'), } diff --git a/packages/magento-store/package.json b/packages/magento-store/package.json index 9aca6fb078b..5b8217ea35f 100644 --- a/packages/magento-store/package.json +++ b/packages/magento-store/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-store", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -19,15 +19,15 @@ "./mesh/resolvers.ts": "./mesh/resolvers.ts" }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/magento-store/plugins/magentoStoreGraphqlConfig.ts b/packages/magento-store/plugins/magentoStoreGraphqlConfig.ts index 9ad8818b424..f7ccc69ff17 100644 --- a/packages/magento-store/plugins/magentoStoreGraphqlConfig.ts +++ b/packages/magento-store/plugins/magentoStoreGraphqlConfig.ts @@ -1,6 +1,7 @@ import { SetContextLink, type graphqlConfig as graphqlConfigType } from '@graphcommerce/graphql' import type { FunctionPlugin, PluginConfig } from '@graphcommerce/next-config' import { cookie } from '@graphcommerce/next-ui' +import { StoreConfigDocument } from '../graphql/queries/StoreConfig.gql' export const config: PluginConfig = { type: 'function', @@ -14,7 +15,7 @@ export const graphqlConfig: FunctionPlugin = (prev, co ...results, links: [ ...results.links, - new SetContextLink((prevContext) => { + new SetContextLink((prevContext, operation) => { const headers: Record = { ...prevContext.headers } if (!headers.store) { @@ -22,8 +23,16 @@ export const graphqlConfig: FunctionPlugin = (prev, co } const contentCurrency = cookie('Magento-Content-Currency') - if (contentCurrency && typeof headers['content-currency'] === 'undefined') - headers['content-currency'] = contentCurrency + if (contentCurrency && typeof headers['content-currency'] === 'undefined') { + // Validate currency against available currencies from StoreConfig cache + const storeConfig = operation.client.cache.readQuery({ query: StoreConfigDocument }) + const availableCurrencies = storeConfig?.storeConfig?.currency?.available_currency_codes + + if (!availableCurrencies || availableCurrencies.includes(contentCurrency)) { + headers['content-currency'] = contentCurrency + } + // If currency is not valid, don't set the header - backend will use default + } if (conf.preview) { // To disable caching from the backend, we provide a bogus cache ID. diff --git a/packages/magento-wishlist/CHANGELOG.md b/packages/magento-wishlist/CHANGELOG.md index d85cd8c570e..13cb3b66143 100644 --- a/packages/magento-wishlist/CHANGELOG.md +++ b/packages/magento-wishlist/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/magento-wishlist +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -148,6 +169,7 @@ ### Patch Changes - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packages/magento-wishlist/package.json b/packages/magento-wishlist/package.json index 5d93be1ffca..f7ab281afd6 100644 --- a/packages/magento-wishlist/package.json +++ b/packages/magento-wishlist/package.json @@ -1,6 +1,6 @@ { "name": "@graphcommerce/magento-wishlist", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "browserslist": [ @@ -13,20 +13,20 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-customer": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-configurable": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-config": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-customer": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-configurable": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-config": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/mollie-magento-payment/CHANGELOG.md b/packages/mollie-magento-payment/CHANGELOG.md index 1337d96f4cc..8b735632067 100644 --- a/packages/mollie-magento-payment/CHANGELOG.md +++ b/packages/mollie-magento-payment/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -134,6 +155,7 @@ ### Patch Changes - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh @@ -152,6 +174,7 @@ - [#1718](https://github.com/graphcommerce-org/graphcommerce/pull/1718) [`f08bffd63`](https://github.com/graphcommerce-org/graphcommerce/commit/f08bffd63780cb626f072b25c2fd4da37543b6f7) - Moved all Payment methods to the [GraphCommerce plugin system](https://www.graphcommerce.org/docs/framework/plugins) Upgrade guide: + - The upgrade removes all the payment gateway packages from the `package.json`, remove them for now. - Proceed to upgrade normally - Add back all the payment modules following the [GraphCommerce Magento docs](https://graphcommerce.org/docs/magento). diff --git a/packages/mollie-magento-payment/package.json b/packages/mollie-magento-payment/package.json index a9705e7ce77..740030d8f20 100644 --- a/packages/mollie-magento-payment/package.json +++ b/packages/mollie-magento-payment/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/mollie-magento-payment", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,21 +12,21 @@ } }, "peerDependencies": { - "@graphcommerce/ecommerce-ui": "^10.0.0", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/graphql": "^10.0.0", - "@graphcommerce/graphql-mesh": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/magento-cart": "^10.0.0", - "@graphcommerce/magento-cart-payment-method": "^10.0.0", - "@graphcommerce/magento-cart-shipping-address": "^10.0.0", - "@graphcommerce/magento-product": "^10.0.0", - "@graphcommerce/magento-product-configurable": "^10.0.0", - "@graphcommerce/magento-store": "^10.0.0", - "@graphcommerce/next-ui": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/react-hook-form": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/ecommerce-ui": "^10.0.1", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/graphql": "^10.0.1", + "@graphcommerce/graphql-mesh": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/magento-cart": "^10.0.1", + "@graphcommerce/magento-cart-payment-method": "^10.0.1", + "@graphcommerce/magento-cart-shipping-address": "^10.0.1", + "@graphcommerce/magento-product": "^10.0.1", + "@graphcommerce/magento-product-configurable": "^10.0.1", + "@graphcommerce/magento-store": "^10.0.1", + "@graphcommerce/next-ui": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/react-hook-form": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/next-ui/ActionCard/ActionCard.tsx b/packages/next-ui/ActionCard/ActionCard.tsx index 1f71d29c593..0334ca3d99a 100644 --- a/packages/next-ui/ActionCard/ActionCard.tsx +++ b/packages/next-ui/ActionCard/ActionCard.tsx @@ -1,6 +1,6 @@ import type { BoxProps, ButtonProps, SxProps, Theme } from '@mui/material' import { Box, ButtonBase } from '@mui/material' -import React from 'react' +import type React from 'react' import { extendableComponent, responsiveVal } from '../Styles' import { breakpointVal } from '../Styles/breakpointVal' import { sxx } from '../utils/sxx' @@ -345,50 +345,52 @@ export function ActionCard(props: Acti )} - - {(action || reset) && ( - ({ marginBottom: '5px', color: theme.vars.palette[color].main }), - slotProps.action?.sx, - )} - {...slotProps.action} - > - {!selected ? action : reset} - - )} - {price && !disabled && ( - - {price} - - )} - + {(action || reset || (price && !disabled)) && ( + + {(action || reset) && ( + ({ marginBottom: '5px', color: theme.vars.palette[color].main }), + slotProps.action?.sx, + )} + {...slotProps.action} + > + {!selected ? action : reset} + + )} + {price && !disabled && ( + + {price} + + )} + + )} {after && ( diff --git a/packages/next-ui/CHANGELOG.md b/packages/next-ui/CHANGELOG.md index 556b8362f7b..4e48ab709f6 100644 --- a/packages/next-ui/CHANGELOG.md +++ b/packages/next-ui/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`16efe30`](https://github.com/graphcommerce-org/graphcommerce/commit/16efe30d114977d90ee26159a2f6476ef34de3d1) - Hide ActionCard-end if there is no content ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`16efe30`](https://github.com/graphcommerce-org/graphcommerce/commit/16efe30d114977d90ee26159a2f6476ef34de3d1) - Hide ActionCard-end if there is no content ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -162,6 +191,7 @@ ``` When to use, replacement for: + 1. useMediaQuery: When you are now using useMediaQuery to conditionally render content for mobile or desktop. a. Is very slow as it has to wait for the JS to initialize on pageload. b. Can cause CLS problems if the useMediaQuery is used to render elements in the viewport. c. Can cause LCP issues if useMediaQuery is used to render the LCP element. d. Causes TBT problems as a component always needs to be rerendered. (And bad TBT can cause INP problems) e. HTML isn't present in the DOM, which can cause SEO issues. 2. CSS Media query: When you are using CSS to show or hide content based on media queries. a. Causes TBT problems as both code paths need to be rendered. (And bad TBT can cause INP problems) @@ -180,6 +210,7 @@ ### Minor Changes - [#2216](https://github.com/graphcommerce-org/graphcommerce/pull/2216) [`74eb239`](https://github.com/graphcommerce-org/graphcommerce/commit/74eb2393a64988649178d59f53b33d41fecdd769) - Added Intl components, deprecated `useNumberFormat` and `useDateTimeFormatter`, and replaced usage sites. New components and hooks: + - `` and `useIntlDisplayNames` - ``, ``, `` and `useIntlDateTimeFormat` - `` and `useIntlListFormat` @@ -420,6 +451,7 @@ ### Minor Changes - [#1822](https://github.com/graphcommerce-org/graphcommerce/pull/1822) [`cc02c46e3`](https://github.com/graphcommerce-org/graphcommerce/commit/cc02c46e32c9a44a90789591f43d91ae234dac84) - Added Facebook Open Graph tags to product pages: + - og:title - og:image - og:url @@ -431,6 +463,7 @@ - product:category ([@KMalkowski](https://github.com/KMalkowski)) - [#1830](https://github.com/graphcommerce-org/graphcommerce/pull/1830) [`fafa76ba9`](https://github.com/graphcommerce-org/graphcommerce/commit/fafa76ba9e655739171abc553d309795c9d8e5c2) - Overlays now use an additional scroll container to handle vertical scroll, fixing: + - Scrolling on desktop will not close the overlay when there is content to be scrolled - Scrolling will not snap to bottom / top when the content is barely scrollable - Dragging will only open or close the drawer, not something inbetween @@ -498,6 +531,7 @@ - [#1745](https://github.com/graphcommerce-org/graphcommerce/pull/1745) [`b1444b933`](https://github.com/graphcommerce-org/graphcommerce/commit/b1444b9336107d3ac111563f9b62a884f1b26a8d) - Bring password reset page more in line with standard forms, add missing translations. ([@github-actions](https://github.com/apps/github-actions)) - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh @@ -934,6 +968,7 @@ ### Patch Changes - [#1509](https://github.com/graphcommerce-org/graphcommerce/pull/1509) [`0ab7c5465`](https://github.com/graphcommerce-org/graphcommerce/commit/0ab7c5465441cba9bf8cd185a6790ce2f443f4ed) Thanks [@paales](https://github.com/paales)! - SidebarGallery improvements (product page): + - Prevent vertical scrolling - Disable zoom fab when there are no images - Hide scroller dots when there in only one image @@ -1136,6 +1171,7 @@ - [#1353](https://github.com/graphcommerce-org/graphcommerce/pull/1353) [`0e5ee7ba8`](https://github.com/graphcommerce-org/graphcommerce/commit/0e5ee7ba89698e5e711001e846ed182528060cba) Thanks [@paales](https://github.com/paales)! - Eslint: enable rules that were previously disabled and make fixes * [#1360](https://github.com/graphcommerce-org/graphcommerce/pull/1360) [`829b8690b`](https://github.com/graphcommerce-org/graphcommerce/commit/829b8690bc5d0a46e596299e4120e9837a9f179c) Thanks [@paales](https://github.com/paales)! - Lots of fixes for LayoutOverlay: + - When interacting with an overlay it causes browser resizes on mobile and causing a janky experience. - Allow interaction with the previous layer after it has been closed, instead of waiting for the actual route to complete. - Allow scrolling to the the bottom in the overlay when the height is just a bit higher than the window. @@ -1292,6 +1328,7 @@ - [#1281](https://github.com/ho-nl/m2-pwa/pull/1281) [`3a719c88c`](https://github.com/ho-nl/m2-pwa/commit/3a719c88cad1eab58602de28c41adc0fc4827e1d) Thanks [@paales](https://github.com/paales)! - Make sure we're able to style the backdrop and the regular overlay for LayoutOverlay * [#1284](https://github.com/ho-nl/m2-pwa/pull/1284) [`5ffcb56bf`](https://github.com/ho-nl/m2-pwa/commit/5ffcb56bfcbe49ebeaf24f9341e819a145ab9a14) Thanks [@paales](https://github.com/paales)! - SvgIcon is now more extenable and flexible: + - It will automatically calculate the stroke-width of the SVG based on the rendered size, allowing for a more flexible use for icons. - Make SvgIcon themable in your own Theme. diff --git a/packages/next-ui/package.json b/packages/next-ui/package.json index db98cf1cd08..1771a806925 100644 --- a/packages/next-ui/package.json +++ b/packages/next-ui/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/next-ui", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -42,13 +42,13 @@ "@emotion/react": "^11.14.0", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.14.1", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/framer-next-pages": "^10.0.0", - "@graphcommerce/framer-scroller": "^10.0.0", - "@graphcommerce/framer-utils": "^10.0.0", - "@graphcommerce/image": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/framer-next-pages": "^10.0.1", + "@graphcommerce/framer-scroller": "^10.0.1", + "@graphcommerce/framer-utils": "^10.0.1", + "@graphcommerce/image": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@lingui/core": "^5", "@lingui/macro": "^5", "@lingui/react": "^5", diff --git a/packages/react-hook-form/CHANGELOG.md b/packages/react-hook-form/CHANGELOG.md index 425ece0c9c7..1b48442b37e 100644 --- a/packages/react-hook-form/CHANGELOG.md +++ b/packages/react-hook-form/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2574](https://github.com/graphcommerce-org/graphcommerce/pull/2574) [`100cd16`](https://github.com/graphcommerce-org/graphcommerce/commit/100cd1601ade194cc1838598411921cf119126f4) - Forward Step when using assign for the order ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +### Patch Changes + +- [#2574](https://github.com/graphcommerce-org/graphcommerce/pull/2574) [`100cd16`](https://github.com/graphcommerce-org/graphcommerce/commit/100cd1601ade194cc1838598411921cf119126f4) - Forward Step when using assign for the order ([@paales](https://github.com/paales)) + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +31,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +43,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +51,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +61,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +93,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/react-hook-form/package.json b/packages/react-hook-form/package.json index 342a1a57795..cffe7fe3f0c 100644 --- a/packages/react-hook-form/package.json +++ b/packages/react-hook-form/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/react-hook-form", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -13,9 +13,9 @@ }, "peerDependencies": { "@apollo/client": "*", - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@mui/utils": "^7.0.0", "graphql": "^16.6.0", "react": "^19.2.0", diff --git a/packages/react-hook-form/src/ComposedForm/types.ts b/packages/react-hook-form/src/ComposedForm/types.ts index 279358a9cca..59df726df2a 100644 --- a/packages/react-hook-form/src/ComposedForm/types.ts +++ b/packages/react-hook-form/src/ComposedForm/types.ts @@ -60,7 +60,7 @@ export type RegisterAction = { } & Pick /** Assign the current state to the form */ -export type AssignAction = { type: 'ASSIGN' } & Omit +export type AssignAction = { type: 'ASSIGN' } & UseFormComposeOptions /** Cleanup the form if the useFromCompose hook changes */ export type UnregisterAction = { diff --git a/packages/react-hook-form/src/ComposedForm/useFormCompose.ts b/packages/react-hook-form/src/ComposedForm/useFormCompose.ts index 167285b3a9d..f64362e7023 100644 --- a/packages/react-hook-form/src/ComposedForm/useFormCompose.ts +++ b/packages/react-hook-form/src/ComposedForm/useFormCompose.ts @@ -18,8 +18,8 @@ export function useFormCompose( }, [dispatch, key, step]) useEffect(() => { - dispatch({ type: 'ASSIGN', key, form: form as MinimalUseFormReturn, submit }) - }, [dispatch, fields, form, key, submit]) + dispatch({ type: 'ASSIGN', key, form: form as MinimalUseFormReturn, submit, step }) + }, [dispatch, fields, form, key, step, submit]) const error = isFormGqlOperation(form) ? form.error : undefined diff --git a/packages/service-worker/CHANGELOG.md b/packages/service-worker/CHANGELOG.md index a28e2479907..5f77d3a57fe 100644 --- a/packages/service-worker/CHANGELOG.md +++ b/packages/service-worker/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/service-worker +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packages/service-worker/package.json b/packages/service-worker/package.json index 8eb31dba7ba..6c3330d9f65 100644 --- a/packages/service-worker/package.json +++ b/packages/service-worker/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/service-worker", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "prettier": "@graphcommerce/prettier-config-pwa", "eslintConfig": { @@ -12,9 +12,9 @@ } }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0", + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1", "@serwist/next": "*", "next": "*", "serwist": "*" diff --git a/packagesDev/browserslist-config/CHANGELOG.md b/packagesDev/browserslist-config/CHANGELOG.md index a772de94d00..6f2b73240f9 100644 --- a/packagesDev/browserslist-config/CHANGELOG.md +++ b/packagesDev/browserslist-config/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packagesDev/browserslist-config/package.json b/packagesDev/browserslist-config/package.json index 285951b3477..1f0e88fb7bd 100644 --- a/packagesDev/browserslist-config/package.json +++ b/packagesDev/browserslist-config/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/browserslist-config-pwa", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "main": "index.js", "sideEffects": false, "exports": { diff --git a/packagesDev/changeset-changelog/CHANGELOG.md b/packagesDev/changeset-changelog/CHANGELOG.md index bd9f522c374..011e140478c 100644 --- a/packagesDev/changeset-changelog/CHANGELOG.md +++ b/packagesDev/changeset-changelog/CHANGELOG.md @@ -1,5 +1,17 @@ # @graphcommerce/changeset-changelog +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packagesDev/changeset-changelog/package.json b/packagesDev/changeset-changelog/package.json index d75925cf512..7ac5c619e62 100644 --- a/packagesDev/changeset-changelog/package.json +++ b/packagesDev/changeset-changelog/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/changeset-changelog", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "type": "commonjs", "exports": { ".": { diff --git a/packagesDev/eslint-config/CHANGELOG.md b/packagesDev/eslint-config/CHANGELOG.md index 7e3808e1f78..a14eb6c5ede 100644 --- a/packagesDev/eslint-config/CHANGELOG.md +++ b/packagesDev/eslint-config/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -123,6 +144,7 @@ ### Patch Changes - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packagesDev/eslint-config/package.json b/packagesDev/eslint-config/package.json index 962e585bbea..ec7fbe30132 100644 --- a/packagesDev/eslint-config/package.json +++ b/packagesDev/eslint-config/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/eslint-config-pwa", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "type": "module", "main": "index.mjs", "exports": { @@ -12,7 +12,7 @@ "@eslint/compat": "^2.0.0", "@eslint/eslintrc": "^3.3.3", "@eslint/js": "^9.39.2", - "@graphcommerce/typescript-config-pwa": "10.0.0", + "@graphcommerce/typescript-config-pwa": "10.0.1", "@next/eslint-plugin-next": "16.1.1", "@typescript-eslint/eslint-plugin": "^8.50.1", "@typescript-eslint/parser": "^8.50.1", diff --git a/packagesDev/graphql-codegen-markdown-docs/CHANGELOG.md b/packagesDev/graphql-codegen-markdown-docs/CHANGELOG.md index 3393833ef5f..ad8d863eb88 100644 --- a/packagesDev/graphql-codegen-markdown-docs/CHANGELOG.md +++ b/packagesDev/graphql-codegen-markdown-docs/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packagesDev/graphql-codegen-markdown-docs/package.json b/packagesDev/graphql-codegen-markdown-docs/package.json index dca8e1d08c4..edb6e38f116 100644 --- a/packagesDev/graphql-codegen-markdown-docs/package.json +++ b/packagesDev/graphql-codegen-markdown-docs/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/graphql-codegen-markdown-docs", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "type": "commonjs", "exports": { @@ -34,8 +34,8 @@ "parse-filepath": "^1.0.2" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0" + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1" } } diff --git a/packagesDev/graphql-codegen-near-operation-file/CHANGELOG.md b/packagesDev/graphql-codegen-near-operation-file/CHANGELOG.md index bb842ba72ab..c8ae964d903 100644 --- a/packagesDev/graphql-codegen-near-operation-file/CHANGELOG.md +++ b/packagesDev/graphql-codegen-near-operation-file/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packagesDev/graphql-codegen-near-operation-file/package.json b/packagesDev/graphql-codegen-near-operation-file/package.json index ff615813b4f..807fdab0f0c 100644 --- a/packagesDev/graphql-codegen-near-operation-file/package.json +++ b/packagesDev/graphql-codegen-near-operation-file/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/graphql-codegen-near-operation-file", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "type": "commonjs", "scripts": { @@ -27,9 +27,9 @@ "parse-filepath": "^1.0.2" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0", - "@graphcommerce/typescript-config-pwa": "^10.0.0" + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1", + "@graphcommerce/typescript-config-pwa": "^10.0.1" }, "exports": { ".": { diff --git a/packagesDev/graphql-codegen-relay-optimizer-plugin/CHANGELOG.md b/packagesDev/graphql-codegen-relay-optimizer-plugin/CHANGELOG.md index 2f82748404d..fbef9d34aa5 100644 --- a/packagesDev/graphql-codegen-relay-optimizer-plugin/CHANGELOG.md +++ b/packagesDev/graphql-codegen-relay-optimizer-plugin/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packagesDev/graphql-codegen-relay-optimizer-plugin/package.json b/packagesDev/graphql-codegen-relay-optimizer-plugin/package.json index cdb3e9dfe85..3b692ccad0b 100644 --- a/packagesDev/graphql-codegen-relay-optimizer-plugin/package.json +++ b/packagesDev/graphql-codegen-relay-optimizer-plugin/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/graphql-codegen-relay-optimizer-plugin", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "description": "GraphQL Code Generator plugin for optimizing your GraphQL queries relay style.", "type": "commonjs", "exports": { @@ -26,8 +26,8 @@ "typescript": "5.9.3" }, "peerDependencies": { - "@graphcommerce/eslint-config-pwa": "^10.0.0", - "@graphcommerce/prettier-config-pwa": "^10.0.0" + "@graphcommerce/eslint-config-pwa": "^10.0.1", + "@graphcommerce/prettier-config-pwa": "^10.0.1" }, "prettier": "@graphcommerce/prettier-config-pwa", "eslint": { diff --git a/packagesDev/misc/CHANGELOG.md b/packagesDev/misc/CHANGELOG.md index c3635ac414f..fc442fed39b 100644 --- a/packagesDev/misc/CHANGELOG.md +++ b/packagesDev/misc/CHANGELOG.md @@ -1,5 +1,49 @@ # @graphcommerce/misc +## 10.0.1 + +### Patch Changes + +- [#2569](https://github.com/graphcommerce-org/graphcommerce/pull/2569) [`f76edb7`](https://github.com/graphcommerce-org/graphcommerce/commit/f76edb73e7ea172a4f1596e91a76dc7b38ca35ee) - Fix issue with container sizing of breadcrumb ([@paales](https://github.com/paales)) + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`6277f34`](https://github.com/graphcommerce-org/graphcommerce/commit/6277f3417d56f3b6728787d5a4529d801b228a0c) - Solve issue where reactCompiler was enabled but the babel package wasn't installed and thus erroring. ([@paales](https://github.com/paales)) + +- [#2576](https://github.com/graphcommerce-org/graphcommerce/pull/2576) [`4d2adec`](https://github.com/graphcommerce-org/graphcommerce/commit/4d2adecc619278f5129f41b8b844b31f17469c15) - release again ([@paales](https://github.com/paales)) + +- [#2572](https://github.com/graphcommerce-org/graphcommerce/pull/2572) [`acd9973`](https://github.com/graphcommerce-org/graphcommerce/commit/acd997304f704ccbd50b289a62310b1bd2459edc) - Change release ([@paales](https://github.com/paales)) + +- [#2569](https://github.com/graphcommerce-org/graphcommerce/pull/2569) [`93e4c12`](https://github.com/graphcommerce-org/graphcommerce/commit/93e4c1246967c8cdb46f7cd719a87db336b895ab) - Docs ([@paales](https://github.com/paales)) + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +### Patch Changes + +- [#2576](https://github.com/graphcommerce-org/graphcommerce/pull/2576) [`4d2adec`](https://github.com/graphcommerce-org/graphcommerce/commit/4d2adecc619278f5129f41b8b844b31f17469c15) - release again ([@paales](https://github.com/paales)) + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +### Patch Changes + +- [#2572](https://github.com/graphcommerce-org/graphcommerce/pull/2572) [`acd9973`](https://github.com/graphcommerce-org/graphcommerce/commit/acd997304f704ccbd50b289a62310b1bd2459edc) - Change release ([@paales](https://github.com/paales)) + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2569](https://github.com/graphcommerce-org/graphcommerce/pull/2569) [`f76edb7`](https://github.com/graphcommerce-org/graphcommerce/commit/f76edb73e7ea172a4f1596e91a76dc7b38ca35ee) - Fix issue with container sizing of breadcrumb ([@paales](https://github.com/paales)) + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`6277f34`](https://github.com/graphcommerce-org/graphcommerce/commit/6277f3417d56f3b6728787d5a4529d801b228a0c) - Solve issue where reactCompiler was enabled but the babel package wasn't installed and thus erroring. ([@paales](https://github.com/paales)) + +- [#2569](https://github.com/graphcommerce-org/graphcommerce/pull/2569) [`93e4c12`](https://github.com/graphcommerce-org/graphcommerce/commit/93e4c1246967c8cdb46f7cd719a87db336b895ab) - Docs ([@paales](https://github.com/paales)) + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +55,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +67,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +75,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +85,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +117,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packagesDev/misc/package.json b/packagesDev/misc/package.json index 1d21f887b39..986223e365f 100644 --- a/packagesDev/misc/package.json +++ b/packagesDev/misc/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/misc", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "exports": { ".": "./index.ts" } diff --git a/packagesDev/next-config/CHANGELOG.md b/packagesDev/next-config/CHANGELOG.md index b4085a6e15f..747c026f52b 100644 --- a/packagesDev/next-config/CHANGELOG.md +++ b/packagesDev/next-config/CHANGELOG.md @@ -1,5 +1,31 @@ # Change Log +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`64d843e`](https://github.com/graphcommerce-org/graphcommerce/commit/64d843e4b98edbc2779ae75930d657dd7c7fdda2) - "No graphcommerce.config.js found in the project, using demo config" should have referenced 'graphcommerce.config.ts' ([@paales](https://github.com/paales)) + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`a16bed1`](https://github.com/graphcommerce-org/graphcommerce/commit/a16bed1b8670932e273d5ea7114bf01fda40f2f8) - Always copy the file if the original file is a core file, allowing overrides. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +### Patch Changes + +- [#2571](https://github.com/graphcommerce-org/graphcommerce/pull/2571) [`a16bed1`](https://github.com/graphcommerce-org/graphcommerce/commit/a16bed1b8670932e273d5ea7114bf01fda40f2f8) - Always copy the file if the original file is a core file, allowing overrides. ([@paales](https://github.com/paales)) + +## 10.0.1-canary.0 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`64d843e`](https://github.com/graphcommerce-org/graphcommerce/commit/64d843e4b98edbc2779ae75930d657dd7c7fdda2) - "No graphcommerce.config.js found in the project, using demo config" should have referenced 'graphcommerce.config.ts' ([@paales](https://github.com/paales)) + ## 10.0.0 ### Major Changes @@ -11,6 +37,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +49,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +57,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +67,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +99,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config @@ -112,6 +147,7 @@ - [#2305](https://github.com/graphcommerce-org/graphcommerce/pull/2305) [`77e8297`](https://github.com/graphcommerce-org/graphcommerce/commit/77e82976816994336c616208a651cb18ce9ea270) - Added `` with `` and `` to shipping and billing forms. ([@Giovanni-Schroevers](https://github.com/Giovanni-Schroevers)) - [#2226](https://github.com/graphcommerce-org/graphcommerce/pull/2226) [`8939df2`](https://github.com/graphcommerce-org/graphcommerce/commit/8939df22eda57e681f83076707e856700f8b2e21) - Big improvements to the plugin system: Typescript validated, deeper resolution, new configuration object, replace plugins, and more ifConfig options. + 1. Plugins now use TypeScript's `"moduleSuffixes": [".interceptor", ""]` [functionality](https://www.typescriptlang.org/tsconfig#moduleSuffixes) which means that plugins now correctly resolve via TypeScript. So if you _go to reference_ in VSCode (or any other editor), you go to the interceptor directly and see which plugins are applied there. This also means that plugins are automatically checked during build (and will fail if there are errors). 2. The exported type of an _intercepted component_ now has the types of all plugins applied. This means that plugins can modify the props of components (and is still validated with TypeScript). To make this work a plugin must always forward props to the `` to ensure that values are correctly passed on. 3. Plugins will now always be applied to deepest resolved path. This means that a plugin automatically applies to internal usages as well. This thus means that plugins do not need to be written with an internal path, but can keep the parent path. Istead of writing `@graphcommerce/magento-cart-items/components/RemoveItemFromCart/RemoveItemFromCartFab` you can now write `@graphcommerce/magento-cart-items`. @@ -181,7 +217,9 @@ ### Patch Changes - [#2380](https://github.com/graphcommerce-org/graphcommerce/pull/2380) [`3710d8b`](https://github.com/graphcommerce-org/graphcommerce/commit/3710d8bf1cceb5a991e5cfdfc15d42e462704c6d) - Solves the issue `TypeError: url?.startsWith is not a function`. The generated `.mesh/index.ts` would be generated as a requirejs module while next.js expects an esm module. In the end we properly generated the mesh correctly and now there is an `import.meta.url` instead of using `require('node:url')`. To solve this we needed to solve a chain of issues: + 1. The generation of the mesh is based on the version of the mesh that is imported (esm or commonjs). See [source](https://github.com/ardatan/graphql-mesh/blob/bf588d372c0078378aaa24beea2da794af7949e6/scripts/replace-import-meta-url-in-cjs.ts#L9-L10) for the lines that need to be different. This meant that we needed to change the @graphcommerce/cli package to be of type:module instead of a commonjs module. + 2) To properly convert the module to an esm module we've migrated the build of the cli package to use 'pkgroll' instead of tsc, because tsc is limited in what it outputs and can't really convert classic imports to esm. 3) To load possible mesh plugins we require additional .ts files to be loaded with [tsx](https://tsx.is/). To get the tsx loader to work properly in combination with esm modules, we need at least [node 18.19.0](https://nodejs.org/en/blog/release/v18.19.0#new-nodemodule-api-register-for-module-customization-hooks-new-initialize-hook). Minimal Node version upped to 18.19.0 and add support for node 22. ([@paales](https://github.com/paales)) @@ -320,6 +358,7 @@ ### Major Changes - [#1766](https://github.com/graphcommerce-org/graphcommerce/pull/1766) [`e34169ee2`](https://github.com/graphcommerce-org/graphcommerce/commit/e34169ee2e0fdc052ff589ceca0bc67557584c1f) - Upgraded to Next.js 13 + - NextLink integrates the next/link functionality with @mui/material's Link and ButtonBase (and all it's derivatives) components. - NextLink automatically adds `target="_blank"` when the href is external. - NextLink makes all relative href absolute. `href="my-page"` will be rendered as `href="/my-page"`. ([@paales](https://github.com/paales)) @@ -354,6 +393,7 @@ - [#1760](https://github.com/graphcommerce-org/graphcommerce/pull/1760) [`8badc8550`](https://github.com/graphcommerce-org/graphcommerce/commit/8badc8550c402ac7b80c8d3238d313550c28a055) - Updated dependencies ([@paales](https://github.com/paales)) - [#1752](https://github.com/graphcommerce-org/graphcommerce/pull/1752) [`2a6a4d9ec`](https://github.com/graphcommerce-org/graphcommerce/commit/2a6a4d9ecfa1b58a66ba9b9d00016d6feda9aa95) - Updated dependencies to latest versions, except for nextjs; Solve tons of peer dependency issues. + - Updated the @mui/material package - Removed dependencies on react-hook-form-mui and @playwright/test - Upgraded dependencies including type-fest and graphql-mesh diff --git a/packagesDev/next-config/__tests__/commands/copyFiles.ts b/packagesDev/next-config/__tests__/commands/copyFiles.ts index a86db8376bf..497721f5576 100644 --- a/packagesDev/next-config/__tests__/commands/copyFiles.ts +++ b/packagesDev/next-config/__tests__/commands/copyFiles.ts @@ -16,6 +16,7 @@ vi.mock('fs/promises', () => ({ stat: vi.fn(), unlink: vi.fn(), rmdir: vi.fn(), + rename: vi.fn(), }, readFile: vi.fn(), writeFile: vi.fn(), @@ -24,6 +25,7 @@ vi.mock('fs/promises', () => ({ stat: vi.fn(), unlink: vi.fn(), rmdir: vi.fn(), + rename: vi.fn(), })) // Mock fast-glob @@ -425,11 +427,17 @@ describe('copyFiles', () => { } return Promise.reject(new Error(`ENOENT: no such file or directory, open '${filePath}'`)) }) + mockFs.rename.mockResolvedValue(undefined) await copyFiles() + // Unmanaged files should be renamed to .original and a new managed file created + expect(mockFs.rename).toHaveBeenCalledWith( + path.join(mockCwd, 'file.ts'), + path.join(mockCwd, 'file.original.ts'), + ) expect(consoleInfo).toHaveBeenCalledWith( - expect.stringContaining('Note: File file.ts has been modified'), + expect.stringContaining('Renamed existing file to: file.original.ts'), ) }) diff --git a/packagesDev/next-config/__tests__/config/utils/__snapshots__/mergeEnvIntoConfig.ts.snap b/packagesDev/next-config/__tests__/config/utils/__snapshots__/mergeEnvIntoConfig.ts.snap index b4068473f41..e874d7e6d24 100644 --- a/packagesDev/next-config/__tests__/config/utils/__snapshots__/mergeEnvIntoConfig.ts.snap +++ b/packagesDev/next-config/__tests__/config/utils/__snapshots__/mergeEnvIntoConfig.ts.snap @@ -2,7 +2,6 @@ exports[`parses an env config object 1`] = ` { - "GC_DEMO_MODE": true, "GC_STOREFRONT": [ { "defaultLocale": true, @@ -14,10 +13,8 @@ exports[`parses an env config object 1`] = ` }, ], "GC_STOREFRONT_0_DEFAULT_LOCALE": true, - "GC_STOREFRONT_0_HYGRAPH_LOCALES_0": "en", "GC_STOREFRONT_0_LOCALE": "en", "GC_STOREFRONT_0_MAGENTO_STORE_CODE": "en_us", - "GC_STOREFRONT_1_HYGRAPH_LOCALES_0": "de", "GC_STOREFRONT_1_LOCALE": "de", "GC_STOREFRONT_1_MAGENTO_STORE_CODE": "de_de", } diff --git a/packagesDev/next-config/__tests__/interceptors/findPlugins.ts b/packagesDev/next-config/__tests__/interceptors/findPlugins.ts index 2c0826d0948..21517408ea0 100644 --- a/packagesDev/next-config/__tests__/interceptors/findPlugins.ts +++ b/packagesDev/next-config/__tests__/interceptors/findPlugins.ts @@ -557,6 +557,14 @@ it('finds plugins', () => { "targetModule": "@graphcommerce/magento-product-configurable", "type": "component", }, + { + "enabled": true, + "sourceExport": "GraphQLProvider", + "sourceModule": "@graphcommerce/magento-recently-viewed-products/plugins/AddRecentlyViewedProductsTypePolicies", + "targetExport": "GraphQLProvider", + "targetModule": "@graphcommerce/graphql", + "type": "component", + }, { "enabled": true, "sourceExport": "cartItemToCartItemInput", diff --git a/packagesDev/next-config/__tests__/interceptors/generateInterceptors.ts b/packagesDev/next-config/__tests__/interceptors/generateInterceptors.ts index 9e90f2c920b..9110bd93f9d 100644 --- a/packagesDev/next-config/__tests__/interceptors/generateInterceptors.ts +++ b/packagesDev/next-config/__tests__/interceptors/generateInterceptors.ts @@ -87,7 +87,7 @@ it('it generates an interceptor', async () => { * This file is NOT meant to be modified directly and is auto-generated if the plugins or the * original source changes. * - * @see {@link file://./PaymentMethodContextProvider.tsx} for original source file + * @see {@link file://./PaymentMethodContextProvider.original.tsx} for original source file * @see {PluginAddBraintreeMethods} for source of applied plugin * @see {PluginAddMollieMethods} for source of applied plugin */ @@ -188,7 +188,7 @@ it('it can apply multiple plugins to a single export', async () => { * This file is NOT meant to be modified directly and is auto-generated if the plugins or the * original source changes. * - * @see {@link file://./PaymentMethodContextProvider.tsx} for original source file + * @see {@link file://./PaymentMethodContextProvider.original.tsx} for original source file * @see {PluginAddAdyenMethods} for source of applied plugin * @see {PluginAddMollieMethods} for source of applied plugin */ @@ -257,7 +257,7 @@ it('it handles on duplicates gracefully', async () => { * This file is NOT meant to be modified directly and is auto-generated if the plugins or the * original source changes. * - * @see {@link file://./PaymentMethodContextProvider.tsx} for original source file + * @see {@link file://./PaymentMethodContextProvider.original.tsx} for original source file * @see {PluginAddBraintreeMethods} for source of applied plugin * @see {PluginAddBraintreeMethods} for source of applied plugin */ @@ -434,7 +434,7 @@ it('adds debug logging to interceptors for components', async () => { * This file is NOT meant to be modified directly and is auto-generated if the plugins or the * original source changes. * - * @see {@link file://./graphqlConfig.ts} for original source file + * @see {@link file://./graphqlConfig.original.ts} for original source file * @see {pluginhygraphInitMemoryCache} for source of applied plugin * @see {pluginmagentoInitMemoryCache} for source of applied plugin */ diff --git a/packagesDev/next-config/dist/config/loadConfig.js b/packagesDev/next-config/dist/config/loadConfig.js index 1e0353f2931..94a59b2e617 100644 --- a/packagesDev/next-config/dist/config/loadConfig.js +++ b/packagesDev/next-config/dist/config/loadConfig.js @@ -1,6 +1,6 @@ import 'cosmiconfig'; import '../generated/config.js'; -export { l as loadConfig, r as replaceConfigInString } from '../loadConfig-CZYUe1jE.js'; +export { l as loadConfig, r as replaceConfigInString } from '../loadConfig-DFvwanrZ.js'; import 'zod'; import '@apollo/client/utilities/internal'; import 'chalk'; diff --git a/packagesDev/next-config/dist/index.js b/packagesDev/next-config/dist/index.js index 24fccf403c2..26e93ca5ee4 100644 --- a/packagesDev/next-config/dist/index.js +++ b/packagesDev/next-config/dist/index.js @@ -4,8 +4,8 @@ import path from 'path'; import { glob, sync } from 'glob'; import { findParentPath } from './utils/findParentPath.js'; import { spawn } from 'child_process'; -import { l as loadConfig, t as toEnvStr } from './loadConfig-CZYUe1jE.js'; -export { r as replaceConfigInString } from './loadConfig-CZYUe1jE.js'; +import { l as loadConfig, t as toEnvStr } from './loadConfig-DFvwanrZ.js'; +export { r as replaceConfigInString } from './loadConfig-DFvwanrZ.js'; import { parseFileSync, parseSync as parseSync$1, transformFileSync } from '@swc/core'; import fs$1, { writeFileSync, readFileSync, existsSync, rmSync, mkdirSync } from 'fs'; import { resolve as resolve$2 } from 'import-meta-resolve'; @@ -729,7 +729,9 @@ async function generateInterceptor(interceptor, config, oldInterceptorSource) { `@see {${sourceName(name(replacePlugin))}} for source of replaced component` ); } else { - pluginSee.push(`@see {@link file://./${targetExport}.tsx} for original source file`); + pluginSee.push( + `@see {@link file://./${targetExport}.original.tsx} for original source file` + ); } const pluginInterceptors = componentPlugins.reverse().map((plugin) => { const pluginName = sourceName(name(plugin)); @@ -774,7 +776,9 @@ export const ${targetExport} = ${carry}`; `@see {${sourceName(name(replacePlugin))}} for source of replaced function` ); } else { - pluginSee.push(`@see {@link file://./${targetExport}.ts} for original source file`); + pluginSee.push( + `@see {@link file://./${targetExport}.original.ts} for original source file` + ); } const pluginInterceptors = functionPlugins.reverse().map((plugin) => { const pluginName = sourceName(name(plugin)); @@ -1079,7 +1083,7 @@ async function updateGitignore(managedFiles) { try { content = await fs.readFile(gitignorePath, "utf-8"); debug("Reading existing .gitignore"); - } catch (err) { + } catch { debug(".gitignore not found, creating new file"); content = ""; } @@ -1114,6 +1118,11 @@ function getFileManagement(content) { if (contentStr.startsWith(MANAGED_BY_GC)) return "graphcommerce"; return "unmanaged"; } +function getOriginalFilename(filePath) { + const ext = path.extname(filePath); + const base = filePath.slice(0, -ext.length); + return `${base}.original${ext}`; +} async function copyFiles() { const startTime = performance.now(); debug("Starting copyFiles"); @@ -1220,11 +1229,15 @@ Path: ${copyDir}` return; } if (management === "unmanaged") { + const originalPath = getOriginalFilename(targetPath); + await fs.rename(targetPath, originalPath); + const originalRelative = getOriginalFilename(file); console.info( - `Note: File ${file} has been modified. Add '${MANAGED_LOCALLY.trim()}' at the top to manage it locally.` + `Renamed existing file to: ${originalRelative} +Creating managed file: ${file}` ); - debug(`File ${file} doesn't have management comment, skipping`); - return; + debug(`Renamed ${file} to ${originalRelative}`); + targetContent = void 0; } debug(`File ${file} is managed by graphcommerce, will update if needed`); } catch (err) { diff --git a/packagesDev/next-config/dist/loadConfig-CZYUe1jE.js b/packagesDev/next-config/dist/loadConfig-DFvwanrZ.js similarity index 99% rename from packagesDev/next-config/dist/loadConfig-CZYUe1jE.js rename to packagesDev/next-config/dist/loadConfig-DFvwanrZ.js index 12305703a17..3f2195fed54 100644 --- a/packagesDev/next-config/dist/loadConfig-CZYUe1jE.js +++ b/packagesDev/next-config/dist/loadConfig-DFvwanrZ.js @@ -284,7 +284,7 @@ function loadConfig(cwd) { let confFile = result?.config; if (!confFile) { if (isMainProcess) - console.warn("No graphcommerce.config.js found in the project, using demo config"); + console.warn("No graphcommerce.config.ts found in the project, using demo config"); confFile = demoConfig; } confFile ||= {}; diff --git a/packagesDev/next-config/package.json b/packagesDev/next-config/package.json index d186ecd3ac2..e661ef35bcf 100644 --- a/packagesDev/next-config/package.json +++ b/packagesDev/next-config/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/next-config", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "type": "module", "exports": { ".": { @@ -63,7 +63,7 @@ }, "peerDependencies": { "@apollo/client": "*", - "@graphcommerce/prettier-config-pwa": "^10.0.0", + "@graphcommerce/prettier-config-pwa": "^10.0.1", "@lingui/loader": "*", "@lingui/macro": "*", "@lingui/react": "*", diff --git a/packagesDev/next-config/src/commands/copyFiles.ts b/packagesDev/next-config/src/commands/copyFiles.ts index 68d665811b2..da48e6996e9 100644 --- a/packagesDev/next-config/src/commands/copyFiles.ts +++ b/packagesDev/next-config/src/commands/copyFiles.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-await-in-loop */ import fs from 'fs/promises' import path from 'path' import fg from 'fast-glob' @@ -38,7 +37,7 @@ async function updateGitignore(managedFiles: string[]) { try { content = await fs.readFile(gitignorePath, 'utf-8') debug('Reading existing .gitignore') - } catch (err) { + } catch { debug('.gitignore not found, creating new file') content = '' } @@ -79,6 +78,13 @@ function getFileManagement(content: Buffer | undefined): 'local' | 'graphcommerc return 'unmanaged' } +/** Generates the .original filename for a given file path (e.g., file.tsx -> file.original.tsx) */ +function getOriginalFilename(filePath: string): string { + const ext = path.extname(filePath) + const base = filePath.slice(0, -ext.length) + return `${base}.original${ext}` +} + /** * The packages are @graphcommerce/* packages and have special treatment. * @@ -88,7 +94,8 @@ function getFileManagement(content: Buffer | undefined): 'local' | 'graphcommerc * * 1. If the file doesn't exist: Create directories and the file with "managed by: graphcommerce" * 2. If the file exists and starts with "managed by: local": Skip the file - * 3. If the file exists but doesn't have a management comment: Suggest adding "managed by: local" + * 3. If the file exists but doesn't have a management comment: Rename to filename.original.ext and + * create the new managed file * 4. If the file is managed by graphcommerce: Update if content differs */ export async function copyFiles() { @@ -213,11 +220,15 @@ Found in packages: return } if (management === 'unmanaged') { + // Rename existing file to .original and create new managed file + const originalPath = getOriginalFilename(targetPath) + await fs.rename(targetPath, originalPath) + const originalRelative = getOriginalFilename(file) console.info( - `Note: File ${file} has been modified. Add '${MANAGED_LOCALLY.trim()}' at the top to manage it locally.`, + `Renamed existing file to: ${originalRelative}\nCreating managed file: ${file}`, ) - debug(`File ${file} doesn't have management comment, skipping`) - return + debug(`Renamed ${file} to ${originalRelative}`) + targetContent = undefined // Treat as new file from here } debug(`File ${file} is managed by graphcommerce, will update if needed`) diff --git a/packagesDev/next-config/src/config/loadConfig.ts b/packagesDev/next-config/src/config/loadConfig.ts index 6db529a2cb9..d4afd5a6d47 100644 --- a/packagesDev/next-config/src/config/loadConfig.ts +++ b/packagesDev/next-config/src/config/loadConfig.ts @@ -19,7 +19,7 @@ export function loadConfig(cwd: string): GraphCommerceConfig { let confFile = result?.config if (!confFile) { if (isMainProcess) - console.warn('No graphcommerce.config.js found in the project, using demo config') + console.warn('No graphcommerce.config.ts found in the project, using demo config') confFile = demoConfig } confFile ||= {} diff --git a/packagesDev/next-config/src/interceptors/generateInterceptor.ts b/packagesDev/next-config/src/interceptors/generateInterceptor.ts index 0c724709e4f..3dc6b76432e 100644 --- a/packagesDev/next-config/src/interceptors/generateInterceptor.ts +++ b/packagesDev/next-config/src/interceptors/generateInterceptor.ts @@ -199,7 +199,9 @@ export async function generateInterceptor( `@see {${sourceName(name(replacePlugin))}} for source of replaced component`, ) } else { - pluginSee.push(`@see {@link file://./${targetExport}.tsx} for original source file`) + pluginSee.push( + `@see {@link file://./${targetExport}.original.tsx} for original source file`, + ) } const pluginInterceptors = componentPlugins @@ -259,7 +261,9 @@ export const ${targetExport} = ${carry}` `@see {${sourceName(name(replacePlugin))}} for source of replaced function`, ) } else { - pluginSee.push(`@see {@link file://./${targetExport}.ts} for original source file`) + pluginSee.push( + `@see {@link file://./${targetExport}.original.ts} for original source file`, + ) } const pluginInterceptors = functionPlugins diff --git a/packagesDev/prettier-config/CHANGELOG.md b/packagesDev/prettier-config/CHANGELOG.md index 5b0657543ad..b6c762f6916 100644 --- a/packagesDev/prettier-config/CHANGELOG.md +++ b/packagesDev/prettier-config/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packagesDev/prettier-config/package.json b/packagesDev/prettier-config/package.json index d8581031b51..011f30a63a1 100644 --- a/packagesDev/prettier-config/package.json +++ b/packagesDev/prettier-config/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/prettier-config-pwa", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "dependencies": { "@ianvs/prettier-plugin-sort-imports": "^4.7.0", "prettier": "^3.7.4", diff --git a/packagesDev/typescript-config/CHANGELOG.md b/packagesDev/typescript-config/CHANGELOG.md index c00c4473c93..7e36dbb273c 100644 --- a/packagesDev/typescript-config/CHANGELOG.md +++ b/packagesDev/typescript-config/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 10.0.1 + +## 10.0.1-canary.4 + +## 10.0.1-canary.3 + +## 10.0.1-canary.2 + +## 10.0.1-canary.1 + +## 10.0.1-canary.0 + ## 10.0.0 ### Major Changes @@ -11,6 +23,7 @@ ### πŸš€ Turbopack-Compatible Interceptor System The entire plugin/interceptor system has been rewritten to work with Turbopack: + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content - **Direct imports** - Interceptors import from `.original` files instead of embedding source @@ -22,6 +35,7 @@ ### βš™οΈ Treeshakable Configuration System Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties - **Fully treeshakable** - Unused config values are eliminated from the bundle @@ -29,6 +43,7 @@ - **Separate files for nested objects** - Optimal treeshaking for complex configurations ### πŸ”§ withGraphCommerce Changes + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config - **Removed** `@mui/*` alias rewrites - No longer required @@ -38,26 +53,31 @@ - **Added** `images.qualities: [52, 75]` for Next.js image optimization ### πŸ“¦ Lingui Configuration + - **Renamed** `lingui.config.js` β†’ `lingui.config.ts` with TypeScript support - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports - **Simplified** formatter options ### βš›οΈ React 19 & Next.js 16 Compatibility + - Updated `RefObject` types for React 19 (now includes `null` by default) - Replaced deprecated `React.VFC` with `React.FC` - Fixed `useRef` calls to require explicit initial values - Updated `MutableRefObject` usage in `framer-scroller` ### πŸ“‹ ESLint 9 Flat Config + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) - Updated `@typescript-eslint/*` packages to v8 - Fixed AST selector for `SxProps` rule (`typeParameters` β†’ `typeArguments`) ### πŸ”„ Apollo Client + - Fixed deprecated `name` option β†’ `clientAwareness: { name: 'ssr' }` - Updated error handling types to accept `ApolloError | null | undefined` ### ⚠️ Breaking Changes + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) - **Interceptor files changed** - Original components now at `.original.tsx` - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` @@ -65,6 +85,7 @@ - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` ### πŸ—‘οΈ Removed + - `InterceptorPlugin` webpack plugin - `configToImportMeta` utility - Webpack `DefinePlugin` usage for config diff --git a/packagesDev/typescript-config/package.json b/packagesDev/typescript-config/package.json index e890297b875..50c9517d650 100644 --- a/packagesDev/typescript-config/package.json +++ b/packagesDev/typescript-config/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/typescript-config-pwa", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.0", + "version": "10.0.1", "sideEffects": false, "exports": { ".": "./index.js",