@shopify/cli 3.80.6 → 3.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/assets/dev-console/extensions/dev-console/assets/index-ohOjvIJh.js +64 -0
  2. package/dist/assets/dev-console/index.html +1 -1
  3. package/dist/assets/hydrogen/starter/.cursor/rules/cookbook-recipe-subscriptions.mdc +921 -0
  4. package/dist/assets/hydrogen/starter/CHANGELOG.md +0 -35
  5. package/dist/assets/hydrogen/starter/app/components/AddToCartButton.tsx +1 -1
  6. package/dist/assets/hydrogen/starter/app/components/CartLineItem.tsx +1 -1
  7. package/dist/assets/hydrogen/starter/app/components/CartMain.tsx +1 -1
  8. package/dist/assets/hydrogen/starter/app/components/CartSummary.tsx +1 -1
  9. package/dist/assets/hydrogen/starter/app/components/Footer.tsx +1 -1
  10. package/dist/assets/hydrogen/starter/app/components/Header.tsx +1 -1
  11. package/dist/assets/hydrogen/starter/app/components/PageLayout.tsx +1 -1
  12. package/dist/assets/hydrogen/starter/app/components/ProductForm.tsx +1 -1
  13. package/dist/assets/hydrogen/starter/app/components/ProductItem.tsx +1 -1
  14. package/dist/assets/hydrogen/starter/app/components/SearchForm.tsx +1 -1
  15. package/dist/assets/hydrogen/starter/app/components/SearchFormPredictive.tsx +6 -1
  16. package/dist/assets/hydrogen/starter/app/components/SearchResults.tsx +1 -1
  17. package/dist/assets/hydrogen/starter/app/components/SearchResultsPredictive.tsx +1 -1
  18. package/dist/assets/hydrogen/starter/app/entry.client.tsx +2 -2
  19. package/dist/assets/hydrogen/starter/app/entry.server.tsx +4 -9
  20. package/dist/assets/hydrogen/starter/app/lib/variants.ts +1 -1
  21. package/dist/assets/hydrogen/starter/app/root.tsx +1 -1
  22. package/dist/assets/hydrogen/starter/app/routes/_index.tsx +1 -1
  23. package/dist/assets/hydrogen/starter/app/routes/account.addresses.tsx +1 -1
  24. package/dist/assets/hydrogen/starter/app/routes/account.orders.$id.tsx +4 -4
  25. package/dist/assets/hydrogen/starter/app/routes/account.orders._index.tsx +1 -1
  26. package/dist/assets/hydrogen/starter/app/routes/account.profile.tsx +7 -1
  27. package/dist/assets/hydrogen/starter/app/routes/account.tsx +1 -1
  28. package/dist/assets/hydrogen/starter/app/routes/blogs.$blogHandle.$articleHandle.tsx +1 -1
  29. package/dist/assets/hydrogen/starter/app/routes/blogs.$blogHandle._index.tsx +1 -1
  30. package/dist/assets/hydrogen/starter/app/routes/blogs._index.tsx +1 -1
  31. package/dist/assets/hydrogen/starter/app/routes/cart.tsx +2 -7
  32. package/dist/assets/hydrogen/starter/app/routes/collections.$handle.tsx +1 -1
  33. package/dist/assets/hydrogen/starter/app/routes/collections._index.tsx +1 -1
  34. package/dist/assets/hydrogen/starter/app/routes/collections.all.tsx +2 -2
  35. package/dist/assets/hydrogen/starter/app/routes/pages.$handle.tsx +1 -1
  36. package/dist/assets/hydrogen/starter/app/routes/policies.$handle.tsx +1 -1
  37. package/dist/assets/hydrogen/starter/app/routes/policies._index.tsx +1 -1
  38. package/dist/assets/hydrogen/starter/app/routes/products.$handle.tsx +1 -1
  39. package/dist/assets/hydrogen/starter/app/routes/search.tsx +1 -1
  40. package/dist/assets/hydrogen/starter/app/routes.ts +2 -2
  41. package/dist/assets/hydrogen/starter/env.d.ts +2 -12
  42. package/dist/assets/hydrogen/starter/eslint.config.js +0 -2
  43. package/dist/assets/hydrogen/starter/package.json +12 -11
  44. package/dist/assets/hydrogen/starter/server.ts +5 -2
  45. package/dist/assets/hydrogen/starter/tsconfig.json +6 -18
  46. package/dist/assets/hydrogen/starter/vite.config.ts +24 -3
  47. package/dist/assets/hydrogen/tailwind/package.json +1 -4
  48. package/dist/assets/hydrogen/virtual-routes/components/RequestDetails.jsx +1 -1
  49. package/dist/assets/hydrogen/virtual-routes/layout.jsx +7 -1
  50. package/dist/assets/hydrogen/virtual-routes/routes/index.jsx +1 -1
  51. package/dist/assets/hydrogen/virtual-routes/routes/subrequest-profiler.jsx +1 -1
  52. package/dist/assets/hydrogen/virtual-routes/virtual-root-with-layout.jsx +1 -1
  53. package/dist/assets/hydrogen/virtual-routes/virtual-root.jsx +1 -1
  54. package/dist/assets/hydrogen/vite/vite.config.js +1 -1
  55. package/dist/{chunk-4VUXI7H6.js → chunk-2RTQR5PF.js} +4 -4
  56. package/dist/{chunk-65ZFQZTE.js → chunk-3TCAFLMI.js} +3 -3
  57. package/dist/{chunk-NL3YMB4U.js → chunk-4UU24IRW.js} +5 -5
  58. package/dist/{chunk-BSF6VAN5.js → chunk-66LU5RHQ.js} +3 -3
  59. package/dist/{chunk-AFDDJCYX.js → chunk-7KHSYC7Q.js} +4 -4
  60. package/dist/{chunk-3CBDZFEX.js → chunk-AFKRMMUK.js} +2 -2
  61. package/dist/{chunk-7WRUWTUK.js → chunk-BU5YHTR3.js} +242 -216
  62. package/dist/{chunk-ACIWWUHC.js → chunk-BWXOMTF4.js} +2 -2
  63. package/dist/{chunk-TJM3YBLQ.js → chunk-CTFDRWUN.js} +15 -12
  64. package/dist/{chunk-ACFJ6IFW.js → chunk-EVLVUZ4W.js} +17 -12
  65. package/dist/{chunk-HJNOSZIV.js → chunk-F65YW645.js} +2 -2
  66. package/dist/{chunk-OWRPRJTD.js → chunk-FAITFLRX.js} +2 -2
  67. package/dist/{chunk-EZ6BZ5PD.js → chunk-FBJAZPR7.js} +3 -3
  68. package/dist/{chunk-D6ZGKY37.js → chunk-FD2PC23V.js} +6 -6
  69. package/dist/{chunk-FDW7NWC7.js → chunk-GESAFNQ7.js} +276 -77
  70. package/dist/{chunk-UBFTFKE4.js → chunk-H4NXKYFX.js} +28 -28
  71. package/dist/{chunk-Z2BLJB2N.js → chunk-H7RFBD5F.js} +4 -4
  72. package/dist/{chunk-O6RFRW32.js → chunk-HL635BW4.js} +9 -8
  73. package/dist/{chunk-5RIR73IP.js → chunk-HVXOXFW7.js} +8 -6
  74. package/dist/{chunk-ICOMCQIW.js → chunk-I3MFQXUO.js} +5 -5
  75. package/dist/{chunk-23F56LJQ.js → chunk-I55SUBMN.js} +45 -23
  76. package/dist/{chunk-ZH34MCD3.js → chunk-J22RRMUV.js} +3 -3
  77. package/dist/{chunk-6OYFGNE2.js → chunk-JMLKYNLE.js} +3 -3
  78. package/dist/{chunk-2PS2UQAA.js → chunk-LJSDT5VD.js} +3 -3
  79. package/dist/{chunk-VUR3GWEO.js → chunk-LKFFDKQK.js} +3 -3
  80. package/dist/{chunk-5AFYDRV4.js → chunk-LPU2VGJR.js} +42 -507
  81. package/dist/{chunk-DBRMHJ74.js → chunk-NVXZREWB.js} +27 -30
  82. package/dist/{chunk-72FER6OH.js → chunk-OCEG2LVS.js} +2 -2
  83. package/dist/{chunk-RMON7GVP.js → chunk-PL4FBKID.js} +5 -5
  84. package/dist/{chunk-JCVVFO7I.js → chunk-PO4WPF5B.js} +2 -2
  85. package/dist/{chunk-MRTKI7HQ.js → chunk-PZ532W3Q.js} +8 -8
  86. package/dist/{chunk-ALOIYWSW.js → chunk-Q5VEQZWD.js} +5 -5
  87. package/dist/{chunk-AMSWTXT7.js → chunk-R3OIVMMP.js} +4 -4
  88. package/dist/{chunk-IN3MU7YC.js → chunk-RN6ES42P.js} +4 -4
  89. package/dist/{chunk-LQ2ZKVR6.js → chunk-UMUTXITN.js} +87 -4
  90. package/dist/chunk-V67D4V7T.js +107 -0
  91. package/dist/{chunk-DN2ZP5X3.js → chunk-VKZ4FDXJ.js} +2 -2
  92. package/dist/chunk-W5G2YPO2.js +11805 -0
  93. package/dist/{chunk-GQTBVMLV.js → chunk-XSJQXZOL.js} +4 -4
  94. package/dist/{chunk-CDBXAE2F.js → chunk-Y2JP6WFP.js} +99 -11
  95. package/dist/{chunk-QOJ7MYZZ.js → chunk-YQAKBVIP.js} +534 -336
  96. package/dist/cli/commands/auth/logout.js +16 -17
  97. package/dist/cli/commands/auth/logout.test.js +18 -19
  98. package/dist/cli/commands/cache/clear.js +15 -16
  99. package/dist/cli/commands/debug/command-flags.js +15 -16
  100. package/dist/cli/commands/docs/generate.js +15 -16
  101. package/dist/cli/commands/docs/generate.test.js +16 -17
  102. package/dist/cli/commands/help.js +15 -16
  103. package/dist/cli/commands/kitchen-sink/async.js +16 -17
  104. package/dist/cli/commands/kitchen-sink/async.test.js +17 -18
  105. package/dist/cli/commands/kitchen-sink/index.js +18 -19
  106. package/dist/cli/commands/kitchen-sink/index.test.js +19 -20
  107. package/dist/cli/commands/kitchen-sink/prompts.js +16 -17
  108. package/dist/cli/commands/kitchen-sink/prompts.test.js +17 -18
  109. package/dist/cli/commands/kitchen-sink/static.js +16 -17
  110. package/dist/cli/commands/kitchen-sink/static.test.js +17 -18
  111. package/dist/cli/commands/notifications/generate.js +16 -17
  112. package/dist/cli/commands/notifications/list.js +16 -17
  113. package/dist/cli/commands/search.js +16 -17
  114. package/dist/cli/commands/upgrade.js +16 -17
  115. package/dist/cli/commands/upgrade.test.js +1 -2
  116. package/dist/cli/commands/version.js +16 -17
  117. package/dist/cli/commands/version.test.js +17 -18
  118. package/dist/cli/services/commands/notifications.js +11 -12
  119. package/dist/cli/services/commands/search.js +7 -8
  120. package/dist/cli/services/commands/search.test.js +8 -9
  121. package/dist/cli/services/commands/version.js +8 -9
  122. package/dist/cli/services/commands/version.test.js +10 -11
  123. package/dist/cli/services/kitchen-sink/async.js +7 -8
  124. package/dist/cli/services/kitchen-sink/prompts.js +7 -8
  125. package/dist/cli/services/kitchen-sink/static.js +7 -8
  126. package/dist/cli/services/upgrade.js +8 -9
  127. package/dist/cli/services/upgrade.test.js +10 -11
  128. package/dist/{custom-oclif-loader-FBD5HO3U.js → custom-oclif-loader-OGNQPWLM.js} +7 -8
  129. package/dist/{del-YIU34DZ5.js → del-4JSTEFDW.js} +3 -3
  130. package/dist/{devtools-J4QAI6HR.js → devtools-LDCSRUXB.js} +4 -4
  131. package/dist/{error-handler-Y4QDEH3I.js → error-handler-7HDPJKMS.js} +13 -14
  132. package/dist/hooks/postrun.js +11 -12
  133. package/dist/hooks/prerun.js +12 -13
  134. package/dist/{http-proxy-KGLXPNEY.js → http-proxy-LHSVRGJ5.js} +14 -10
  135. package/dist/index.js +153248 -162660
  136. package/dist/{lib-MIBR2T7P.js → lib-2ZBT3UR2.js} +5 -5
  137. package/dist/{local-US2LLU7Y.js → local-5DGEQTKE.js} +9 -14
  138. package/dist/{magic-string.es-BSVDQOZI.js → magic-string.es-UZAAPNRE.js} +42 -36
  139. package/dist/{morph-3VOLMA55.js → morph-DFRO3NRL.js} +10 -10
  140. package/dist/node-OJGXX6YN.js +164 -0
  141. package/dist/{node-package-manager-ZUD6DL6H.js → node-package-manager-QX5ULXMO.js} +8 -9
  142. package/dist/{out-5KP5WGIK.js → out-NKJPLKLB.js} +2 -2
  143. package/dist/{path-GWAZZN2N.js → path-COZT77T2.js} +2 -3
  144. package/dist/tsconfig.tsbuildinfo +1 -1
  145. package/dist/{ui-LKBRSHMZ.js → ui-ZOXO5UFK.js} +7 -10
  146. package/dist/{workerd-LF2ZHPL2.js → workerd-BW3TVO32.js} +18 -20
  147. package/oclif.manifest.json +29 -9
  148. package/package.json +10 -11
  149. package/dist/assets/dev-console/extensions/dev-console/assets/index-CqNhY1h-.js +0 -64
  150. package/dist/assets/hydrogen/starter/.cursor/rules/hydrogen-react-router.mdc +0 -52
  151. package/dist/assets/hydrogen/starter/app/routes/api.$version.[graphql.json].tsx +0 -14
  152. package/dist/assets/hydrogen/starter/react-router.config.ts +0 -7
  153. package/dist/chunk-3I3GQNEW.js +0 -95
  154. package/dist/chunk-ZEM3T4UY.js +0 -10590
  155. package/dist/chunk-ZUCWDIGE.js +0 -111
  156. package/dist/toml-patch-wasm-J5VGG6WG.js +0 -140
@@ -1,40 +1,5 @@
1
1
  # skeleton
2
2
 
3
- ## 2025.5.2
4
-
5
- ### Patch Changes
6
-
7
- - Fixing the skeleton's Vite Config ([#2958](https://github.com/Shopify/hydrogen/pull/2958)) by [@balazsbajorics](https://github.com/balazsbajorics)
8
-
9
- ## 2025.5.1
10
-
11
- ### Patch Changes
12
-
13
- - Bumping the cli to 3.80.4 ([#2956](https://github.com/Shopify/hydrogen/pull/2956)) by [@balazsbajorics](https://github.com/balazsbajorics)
14
-
15
- ## 2025.5.0
16
-
17
- ### Patch Changes
18
-
19
- - Migrating to React Router 7 ([#2866](https://github.com/Shopify/hydrogen/pull/2866)) by [@balazsbajorics](https://github.com/balazsbajorics)
20
-
21
- - Updated dependencies [[`e9132d88`](https://github.com/Shopify/hydrogen/commit/e9132d8888ad090d3db41fe4d5d63569a30e9d8e), [`e9132d88`](https://github.com/Shopify/hydrogen/commit/e9132d8888ad090d3db41fe4d5d63569a30e9d8e)]:
22
- - @shopify/remix-oxygen@3.0.0
23
- - @shopify/hydrogen@2025.5.0
24
-
25
- ## 2025.4.0
26
-
27
- ### Patch Changes
28
-
29
- - Moved the Cursor rules into more generic LLM prompt files. If you were using the Cursor rules, you will find the prompts in the `cookbook/llms` folder and they can be put into your `.cursor/rules` folder manually. LLM prompt files will be maintained moving forward, while previous Cursor rules will not be updated anymore. ([#2936](https://github.com/Shopify/hydrogen/pull/2936)) by [@ruggishop](https://github.com/ruggishop)
30
-
31
- - Bump skeleton @shopify/cli and @shopify/mini-oxygen ([#2883](https://github.com/Shopify/hydrogen/pull/2883)) by [@juanpprieto](https://github.com/juanpprieto)
32
-
33
- - Update SFAPI and CAAPI versions to 2025.04 ([#2886](https://github.com/Shopify/hydrogen/pull/2886)) by [@juanpprieto](https://github.com/juanpprieto)
34
-
35
- - Updated dependencies [[`af23e710`](https://github.com/Shopify/hydrogen/commit/af23e710dac83bb57498d9c2ef1d8bcf9df55d34), [`9d8a6644`](https://github.com/Shopify/hydrogen/commit/9d8a6644a5b67dca890c6687df390aee78fc85c3)]:
36
- - @shopify/hydrogen@2025.4.0
37
-
38
3
  ## 2025.1.7
39
4
 
40
5
  ### Patch Changes
@@ -1,4 +1,4 @@
1
- import { type FetcherWithComponents } from 'react-router';
1
+ import {type FetcherWithComponents} from '@remix-run/react';
2
2
  import {CartForm, type OptimisticCartLineInput} from '@shopify/hydrogen';
3
3
 
4
4
  export function AddToCartButton({
@@ -2,7 +2,7 @@ import type {CartLineUpdateInput} from '@shopify/hydrogen/storefront-api-types';
2
2
  import type {CartLayout} from '~/components/CartMain';
3
3
  import {CartForm, Image, type OptimisticCartLine} from '@shopify/hydrogen';
4
4
  import {useVariantUrl} from '~/lib/variants';
5
- import { Link } from 'react-router';
5
+ import {Link} from '@remix-run/react';
6
6
  import {ProductPrice} from './ProductPrice';
7
7
  import {useAside} from './Aside';
8
8
  import type {CartApiQueryFragment} from 'storefrontapi.generated';
@@ -1,5 +1,5 @@
1
1
  import {useOptimisticCart} from '@shopify/hydrogen';
2
- import { Link } from 'react-router';
2
+ import {Link} from '@remix-run/react';
3
3
  import type {CartApiQueryFragment} from 'storefrontapi.generated';
4
4
  import {useAside} from '~/components/Aside';
5
5
  import {CartLineItem} from '~/components/CartLineItem';
@@ -2,7 +2,7 @@ import type {CartApiQueryFragment} from 'storefrontapi.generated';
2
2
  import type {CartLayout} from '~/components/CartMain';
3
3
  import {CartForm, Money, type OptimisticCart} from '@shopify/hydrogen';
4
4
  import {useRef} from 'react';
5
- import { FetcherWithComponents } from 'react-router';
5
+ import {FetcherWithComponents} from '@remix-run/react';
6
6
 
7
7
  type CartSummaryProps = {
8
8
  cart: OptimisticCart<CartApiQueryFragment | null>;
@@ -1,5 +1,5 @@
1
1
  import {Suspense} from 'react';
2
- import {Await, NavLink} from 'react-router';
2
+ import {Await, NavLink} from '@remix-run/react';
3
3
  import type {FooterQuery, HeaderQuery} from 'storefrontapi.generated';
4
4
 
5
5
  interface FooterProps {
@@ -1,5 +1,5 @@
1
1
  import {Suspense} from 'react';
2
- import { Await, NavLink, useAsyncValue } from 'react-router';
2
+ import {Await, NavLink, useAsyncValue} from '@remix-run/react';
3
3
  import {
4
4
  type CartViewPayload,
5
5
  useAnalytics,
@@ -1,4 +1,4 @@
1
- import { Await, Link } from 'react-router';
1
+ import {Await, Link} from '@remix-run/react';
2
2
  import {Suspense, useId} from 'react';
3
3
  import type {
4
4
  CartApiQueryFragment,
@@ -1,4 +1,4 @@
1
- import { Link, useNavigate } from 'react-router';
1
+ import {Link, useNavigate} from '@remix-run/react';
2
2
  import {type MappedProductOptions} from '@shopify/hydrogen';
3
3
  import type {
4
4
  Maybe,
@@ -1,4 +1,4 @@
1
- import {Link} from 'react-router';
1
+ import {Link} from '@remix-run/react';
2
2
  import {Image, Money} from '@shopify/hydrogen';
3
3
  import type {
4
4
  ProductItemFragment,
@@ -1,5 +1,5 @@
1
1
  import {useRef, useEffect} from 'react';
2
- import { Form, type FormProps } from 'react-router';
2
+ import {Form, type FormProps} from '@remix-run/react';
3
3
 
4
4
  type SearchFormProps = Omit<FormProps, 'children'> & {
5
5
  children: (args: {
@@ -1,4 +1,9 @@
1
- import { useFetcher, useNavigate, type FormProps, type Fetcher } from 'react-router';
1
+ import {
2
+ useFetcher,
3
+ useNavigate,
4
+ type FormProps,
5
+ type Fetcher,
6
+ } from '@remix-run/react';
2
7
  import React, {useRef, useEffect} from 'react';
3
8
  import type {PredictiveSearchReturn} from '~/lib/search';
4
9
  import {useAside} from './Aside';
@@ -1,4 +1,4 @@
1
- import { Link } from 'react-router';
1
+ import {Link} from '@remix-run/react';
2
2
  import {Image, Money, Pagination} from '@shopify/hydrogen';
3
3
  import {urlWithTrackingParams, type RegularSearchReturn} from '~/lib/search';
4
4
 
@@ -1,4 +1,4 @@
1
- import { Link, useFetcher, type Fetcher } from 'react-router';
1
+ import {Link, useFetcher, type Fetcher} from '@remix-run/react';
2
2
  import {Image, Money} from '@shopify/hydrogen';
3
3
  import React, {useRef, useEffect} from 'react';
4
4
  import {
@@ -1,4 +1,4 @@
1
- import { HydratedRouter } from 'react-router/dom';
1
+ import {RemixBrowser} from '@remix-run/react';
2
2
  import {startTransition, StrictMode} from 'react';
3
3
  import {hydrateRoot} from 'react-dom/client';
4
4
 
@@ -7,7 +7,7 @@ if (!window.location.origin.includes('webcache.googleusercontent.com')) {
7
7
  hydrateRoot(
8
8
  document,
9
9
  <StrictMode>
10
- <HydratedRouter />
10
+ <RemixBrowser />
11
11
  </StrictMode>,
12
12
  );
13
13
  });
@@ -1,15 +1,14 @@
1
- import type {AppLoadContext} from '@shopify/remix-oxygen';
2
- import {ServerRouter} from 'react-router';
1
+ import type {EntryContext, AppLoadContext} from '@shopify/remix-oxygen';
2
+ import {RemixServer} from '@remix-run/react';
3
3
  import {isbot} from 'isbot';
4
4
  import {renderToReadableStream} from 'react-dom/server';
5
5
  import {createContentSecurityPolicy} from '@shopify/hydrogen';
6
- import type {EntryContext} from 'react-router';
7
6
 
8
7
  export default async function handleRequest(
9
8
  request: Request,
10
9
  responseStatusCode: number,
11
10
  responseHeaders: Headers,
12
- reactRouterContext: EntryContext,
11
+ remixContext: EntryContext,
13
12
  context: AppLoadContext,
14
13
  ) {
15
14
  const {nonce, header, NonceProvider} = createContentSecurityPolicy({
@@ -21,11 +20,7 @@ export default async function handleRequest(
21
20
 
22
21
  const body = await renderToReadableStream(
23
22
  <NonceProvider>
24
- <ServerRouter
25
- context={reactRouterContext}
26
- url={request.url}
27
- nonce={nonce}
28
- />
23
+ <RemixServer context={remixContext} url={request.url} nonce={nonce}/>
29
24
  </NonceProvider>,
30
25
  {
31
26
  nonce,
@@ -1,4 +1,4 @@
1
- import { useLocation } from 'react-router';
1
+ import {useLocation} from '@remix-run/react';
2
2
  import type {SelectedOption} from '@shopify/hydrogen/storefront-api-types';
3
3
  import {useMemo} from 'react';
4
4
 
@@ -10,7 +10,7 @@ import {
10
10
  Scripts,
11
11
  ScrollRestoration,
12
12
  useRouteLoaderData,
13
- } from 'react-router';
13
+ } from '@remix-run/react';
14
14
  import favicon from '~/assets/favicon.svg';
15
15
  import {FOOTER_QUERY, HEADER_QUERY} from '~/lib/fragments';
16
16
  import resetStyles from '~/styles/reset.css?url';
@@ -1,5 +1,5 @@
1
1
  import {type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { Await, useLoaderData, Link, type MetaFunction } from 'react-router';
2
+ import {Await, useLoaderData, Link, type MetaFunction} from '@remix-run/react';
3
3
  import {Suspense} from 'react';
4
4
  import {Image, Money} from '@shopify/hydrogen';
5
5
  import type {
@@ -15,7 +15,7 @@ import {
15
15
  useOutletContext,
16
16
  type MetaFunction,
17
17
  type Fetcher,
18
- } from 'react-router';
18
+ } from '@remix-run/react';
19
19
  import {
20
20
  UPDATE_ADDRESS_MUTATION,
21
21
  DELETE_ADDRESS_MUTATION,
@@ -1,5 +1,5 @@
1
1
  import {redirect, type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { useLoaderData, type MetaFunction } from 'react-router';
2
+ import {useLoaderData, type MetaFunction} from '@remix-run/react';
3
3
  import {Money, Image, flattenConnection} from '@shopify/hydrogen';
4
4
  import type {OrderLineItemFullFragment} from 'customer-accountapi.generated';
5
5
  import {CUSTOMER_ORDER_QUERY} from '~/graphql/customer-account/CustomerOrderQuery';
@@ -60,7 +60,7 @@ export default function OrderRoute() {
60
60
  fulfillmentStatus,
61
61
  } = useLoaderData<typeof loader>();
62
62
  return (
63
- (<div className="account-order">
63
+ <div className="account-order">
64
64
  <h2>Order {order.name}</h2>
65
65
  <p>Placed on {new Date(order.processedAt!).toDateString()}</p>
66
66
  <br />
@@ -77,7 +77,7 @@ export default function OrderRoute() {
77
77
  <tbody>
78
78
  {lineItems.map((lineItem, lineItemIndex) => (
79
79
  // eslint-disable-next-line react/no-array-index-key
80
- (<OrderLineRow key={lineItemIndex} lineItem={lineItem} />)
80
+ <OrderLineRow key={lineItemIndex} lineItem={lineItem} />
81
81
  ))}
82
82
  </tbody>
83
83
  <tfoot>
@@ -165,7 +165,7 @@ export default function OrderRoute() {
165
165
  View Order Status →
166
166
  </a>
167
167
  </p>
168
- </div>)
168
+ </div>
169
169
  );
170
170
  }
171
171
 
@@ -1,4 +1,4 @@
1
- import { Link, useLoaderData, type MetaFunction } from 'react-router';
1
+ import {Link, useLoaderData, type MetaFunction} from '@remix-run/react';
2
2
  import {
3
3
  Money,
4
4
  getPaginationVariables,
@@ -6,7 +6,13 @@ import {
6
6
  type ActionFunctionArgs,
7
7
  type LoaderFunctionArgs,
8
8
  } from '@shopify/remix-oxygen';
9
- import { Form, useActionData, useNavigation, useOutletContext, type MetaFunction } from 'react-router';
9
+ import {
10
+ Form,
11
+ useActionData,
12
+ useNavigation,
13
+ useOutletContext,
14
+ type MetaFunction,
15
+ } from '@remix-run/react';
10
16
 
11
17
  export type ActionResponse = {
12
18
  error: string | null;
@@ -1,5 +1,5 @@
1
1
  import {data as remixData, type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { Form, NavLink, Outlet, useLoaderData } from 'react-router';
2
+ import {Form, NavLink, Outlet, useLoaderData} from '@remix-run/react';
3
3
  import {CUSTOMER_DETAILS_QUERY} from '~/graphql/customer-account/CustomerDetailsQuery';
4
4
 
5
5
  export function shouldRevalidate() {
@@ -1,5 +1,5 @@
1
1
  import {type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { useLoaderData, type MetaFunction } from 'react-router';
2
+ import {useLoaderData, type MetaFunction} from '@remix-run/react';
3
3
  import {Image} from '@shopify/hydrogen';
4
4
  import {redirectIfHandleIsLocalized} from '~/lib/redirect';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import {type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { Link, useLoaderData, type MetaFunction } from 'react-router';
2
+ import {Link, useLoaderData, type MetaFunction} from '@remix-run/react';
3
3
  import {Image, getPaginationVariables} from '@shopify/hydrogen';
4
4
  import type {ArticleItemFragment} from 'storefrontapi.generated';
5
5
  import {PaginatedResourceSection} from '~/components/PaginatedResourceSection';
@@ -1,5 +1,5 @@
1
1
  import {type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { Link, useLoaderData, type MetaFunction } from 'react-router';
2
+ import {Link, useLoaderData, type MetaFunction} from '@remix-run/react';
3
3
  import {getPaginationVariables} from '@shopify/hydrogen';
4
4
  import {PaginatedResourceSection} from '~/components/PaginatedResourceSection';
5
5
 
@@ -1,12 +1,7 @@
1
- import { type MetaFunction, useLoaderData } from 'react-router';
1
+ import {type MetaFunction, useLoaderData} from '@remix-run/react';
2
2
  import type {CartQueryDataReturn} from '@shopify/hydrogen';
3
3
  import {CartForm} from '@shopify/hydrogen';
4
- import {
5
- data,
6
- type LoaderFunctionArgs,
7
- type ActionFunctionArgs,
8
- type HeadersFunction,
9
- } from '@shopify/remix-oxygen';
4
+ import {data, type LoaderFunctionArgs, type ActionFunctionArgs, type HeadersFunction} from '@shopify/remix-oxygen';
10
5
  import {CartMain} from '~/components/CartMain';
11
6
 
12
7
  export const meta: MetaFunction = () => {
@@ -1,5 +1,5 @@
1
1
  import {redirect, type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import {useLoaderData, type MetaFunction} from 'react-router';
2
+ import {useLoaderData, type MetaFunction} from '@remix-run/react';
3
3
  import {getPaginationVariables, Analytics} from '@shopify/hydrogen';
4
4
  import {PaginatedResourceSection} from '~/components/PaginatedResourceSection';
5
5
  import {redirectIfHandleIsLocalized} from '~/lib/redirect';
@@ -1,4 +1,4 @@
1
- import { useLoaderData, Link } from 'react-router';
1
+ import {useLoaderData, Link} from '@remix-run/react';
2
2
  import {type LoaderFunctionArgs} from '@shopify/remix-oxygen';
3
3
  import {getPaginationVariables, Image} from '@shopify/hydrogen';
4
4
  import type {CollectionFragment} from 'storefrontapi.generated';
@@ -1,6 +1,6 @@
1
1
  import {type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import {useLoaderData, type MetaFunction} from 'react-router';
3
- import {getPaginationVariables, Image, Money} from '@shopify/hydrogen';
2
+ import {useLoaderData, type MetaFunction} from '@remix-run/react';
3
+ import {getPaginationVariables} from '@shopify/hydrogen';
4
4
  import {PaginatedResourceSection} from '~/components/PaginatedResourceSection';
5
5
  import {ProductItem} from '~/components/ProductItem';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import {type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { useLoaderData, type MetaFunction } from 'react-router';
2
+ import {useLoaderData, type MetaFunction} from '@remix-run/react';
3
3
  import {redirectIfHandleIsLocalized} from '~/lib/redirect';
4
4
 
5
5
  export const meta: MetaFunction<typeof loader> = ({data}) => {
@@ -1,5 +1,5 @@
1
1
  import {type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { Link, useLoaderData, type MetaFunction } from 'react-router';
2
+ import {Link, useLoaderData, type MetaFunction} from '@remix-run/react';
3
3
  import {type Shop} from '@shopify/hydrogen/storefront-api-types';
4
4
 
5
5
  type SelectedPolicies = keyof Pick<
@@ -1,5 +1,5 @@
1
1
  import {type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { useLoaderData, Link } from 'react-router';
2
+ import {useLoaderData, Link} from '@remix-run/react';
3
3
 
4
4
  export async function loader({context}: LoaderFunctionArgs) {
5
5
  const data = await context.storefront.query(POLICIES_QUERY);
@@ -1,5 +1,5 @@
1
1
  import {redirect, type LoaderFunctionArgs} from '@shopify/remix-oxygen';
2
- import { useLoaderData, type MetaFunction } from 'react-router';
2
+ import {useLoaderData, type MetaFunction} from '@remix-run/react';
3
3
  import {
4
4
  getSelectedProductOptions,
5
5
  Analytics,
@@ -2,7 +2,7 @@ import {
2
2
  type LoaderFunctionArgs,
3
3
  type ActionFunctionArgs,
4
4
  } from '@shopify/remix-oxygen';
5
- import { useLoaderData, type MetaFunction } from 'react-router';
5
+ import {useLoaderData, type MetaFunction} from '@remix-run/react';
6
6
  import {getPaginationVariables, Analytics} from '@shopify/hydrogen';
7
7
  import {SearchForm} from '~/components/SearchForm';
8
8
  import {SearchResults} from '~/components/SearchResults';
@@ -1,5 +1,5 @@
1
- import {flatRoutes} from '@react-router/fs-routes';
2
- import {type RouteConfig} from '@react-router/dev/routes';
1
+ import {flatRoutes} from '@remix-run/fs-routes';
2
+ import {type RouteConfig} from '@remix-run/route-config';
3
3
  import {hydrogenRoutes} from '@shopify/hydrogen';
4
4
 
5
5
  export default hydrogenRoutes([
@@ -1,5 +1,5 @@
1
1
  /// <reference types="vite/client" />
2
- /// <reference types="react-router" />
2
+ /// <reference types="@shopify/remix-oxygen" />
3
3
  /// <reference types="@shopify/oxygen-workers-types" />
4
4
 
5
5
  // Enhance TypeScript's built-in typings.
@@ -23,22 +23,12 @@ declare global {
23
23
  }
24
24
  }
25
25
 
26
- declare module 'react-router' {
26
+ declare module '@shopify/remix-oxygen' {
27
27
  interface AppLoadContext
28
28
  extends Awaited<ReturnType<typeof createAppLoadContext>> {
29
29
  // to change context type, change the return of createAppLoadContext() instead
30
30
  }
31
31
 
32
- // TODO: remove this once we've migrated our loaders to `Route.LoaderArgs`
33
- interface LoaderFunctionArgs {
34
- context: AppLoadContext;
35
- }
36
-
37
- // TODO: remove this once we've migrated our loaders to `Route.ActionArgs`
38
- interface ActionFunctionArgs {
39
- context: AppLoadContext;
40
- }
41
-
42
32
  interface SessionData extends HydrogenSessionData {
43
33
  // declare local additions to the Remix session data here
44
34
  }
@@ -29,8 +29,6 @@ export default [
29
29
  '**/*.graphql.d.ts',
30
30
  '**/*.graphql.ts',
31
31
  '**/*.generated.d.ts',
32
- '**/.react-router/',
33
- '**/packages/hydrogen/dist/',
34
32
  ],
35
33
  },
36
34
  ...fixupConfigRules(
@@ -2,7 +2,7 @@
2
2
  "name": "skeleton",
3
3
  "private": true,
4
4
  "sideEffects": false,
5
- "version": "2025.5.2",
5
+ "version": "2025.1.7",
6
6
  "type": "module",
7
7
  "scripts": {
8
8
  "build": "shopify hydrogen build --codegen",
@@ -14,29 +14,31 @@
14
14
  },
15
15
  "prettier": "@shopify/prettier-config",
16
16
  "dependencies": {
17
- "@shopify/hydrogen": "2025.5.0",
18
- "@shopify/remix-oxygen": "^3.0.0",
17
+ "@remix-run/react": "^2.16.1",
18
+ "@remix-run/server-runtime": "^2.16.1",
19
19
  "graphql": "^16.10.0",
20
+ "@shopify/hydrogen": "2025.1.4",
21
+ "@shopify/remix-oxygen": "^2.0.12",
20
22
  "graphql-tag": "^2.12.6",
21
23
  "isbot": "^5.1.22",
22
24
  "react": "^18.2.0",
23
- "react-dom": "^18.2.0",
24
- "react-router": "7.6.0",
25
- "react-router-dom": "7.6.0"
25
+ "react-dom": "^18.2.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@eslint/compat": "^1.2.5",
29
29
  "@eslint/eslintrc": "^3.2.0",
30
30
  "@eslint/js": "^9.18.0",
31
31
  "@graphql-codegen/cli": "5.0.2",
32
- "@react-router/dev": "7.6.0",
33
- "@react-router/fs-routes": "7.6.0",
34
- "@shopify/cli": "~3.80.4",
32
+ "@remix-run/dev": "^2.16.1",
33
+ "@remix-run/fs-routes": "^2.16.1",
34
+ "@remix-run/route-config": "^2.16.1",
35
+ "@shopify/cli": "~3.78.1",
35
36
  "@shopify/hydrogen-codegen": "^0.3.3",
36
37
  "@shopify/mini-oxygen": "^3.2.1",
37
38
  "@shopify/oxygen-workers-types": "^4.1.6",
38
39
  "@shopify/prettier-config": "^1.1.2",
39
40
  "@total-typescript/ts-reset": "^0.6.1",
41
+ "prettier": "^3.4.2",
40
42
  "@types/eslint": "^9.6.1",
41
43
  "@types/react": "^18.2.22",
42
44
  "@types/react-dom": "^18.2.7",
@@ -52,7 +54,6 @@
52
54
  "eslint-plugin-react": "^7.37.4",
53
55
  "eslint-plugin-react-hooks": "^5.1.0",
54
56
  "globals": "^15.14.0",
55
- "prettier": "^3.4.2",
56
57
  "typescript": "^5.2.2",
57
58
  "vite": "^6.2.4",
58
59
  "vite-tsconfig-paths": "^4.3.1"
@@ -60,4 +61,4 @@
60
61
  "engines": {
61
62
  "node": ">=18.0.0"
62
63
  }
63
- }
64
+ }
@@ -1,4 +1,8 @@
1
1
  // Virtual entry point for the app
2
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
+ // @ts-ignore
4
+ // eslint-disable-next-line import/no-unresolved
5
+ import * as remixBuild from 'virtual:remix/server-build';
2
6
  import {storefrontRedirect} from '@shopify/hydrogen';
3
7
  import {createRequestHandler} from '@shopify/remix-oxygen';
4
8
  import {createAppLoadContext} from '~/lib/context';
@@ -24,8 +28,7 @@ export default {
24
28
  * Hydrogen's Storefront client to the loader context.
25
29
  */
26
30
  const handleRequest = createRequestHandler({
27
- // eslint-disable-next-line import/no-unresolved
28
- build: await import('virtual:react-router/server-build'),
31
+ build: remixBuild,
29
32
  mode: process.env.NODE_ENV,
30
33
  getLoadContext: () => appLoadContext,
31
34
  });
@@ -1,16 +1,7 @@
1
1
  {
2
- "include": [
3
- "./**/*.d.ts",
4
- "./**/*.ts",
5
- "./**/*.tsx",
6
- ".react-router/types/**/*"
7
- ],
2
+ "include": ["./**/*.d.ts", "./**/*.ts", "./**/*.tsx"],
8
3
  "compilerOptions": {
9
- "lib": [
10
- "DOM",
11
- "DOM.Iterable",
12
- "ES2022"
13
- ],
4
+ "lib": ["DOM", "DOM.Iterable", "ES2022"],
14
5
  "isolatedModules": true,
15
6
  "esModuleInterop": true,
16
7
  "jsx": "react-jsx",
@@ -25,15 +16,12 @@
25
16
  "baseUrl": ".",
26
17
  "types": [
27
18
  "@shopify/oxygen-workers-types",
28
- "react-router",
19
+ "@remix-run/server-runtime",
29
20
  "vite/client"
30
21
  ],
31
22
  "paths": {
32
- "~/*": [
33
- "app/*"
34
- ]
23
+ "~/*": ["app/*"]
35
24
  },
36
- "noEmit": true,
37
- "rootDirs": [".", "./.react-router/types"]
25
+ "noEmit": true
38
26
  }
39
- }
27
+ }
@@ -1,11 +1,32 @@
1
1
  import {defineConfig} from 'vite';
2
2
  import {hydrogen} from '@shopify/hydrogen/vite';
3
3
  import {oxygen} from '@shopify/mini-oxygen/vite';
4
- import {reactRouter} from '@react-router/dev/vite';
4
+ import {vitePlugin as remix} from '@remix-run/dev';
5
5
  import tsconfigPaths from 'vite-tsconfig-paths';
6
6
 
7
+ declare module "@remix-run/server-runtime" {
8
+ interface Future {
9
+ v3_singleFetch: true;
10
+ }
11
+ }
12
+
7
13
  export default defineConfig({
8
- plugins: [hydrogen(), oxygen(), reactRouter(), tsconfigPaths()],
14
+ plugins: [
15
+ hydrogen(),
16
+ oxygen(),
17
+ remix({
18
+ presets: [hydrogen.v3preset()],
19
+ future: {
20
+ v3_fetcherPersist: true,
21
+ v3_relativeSplatPath: true,
22
+ v3_throwAbortReason: true,
23
+ v3_lazyRouteDiscovery: true,
24
+ v3_routeConfig: true,
25
+ v3_singleFetch: true,
26
+ },
27
+ }),
28
+ tsconfigPaths(),
29
+ ],
9
30
  build: {
10
31
  // Allow a strict Content-Security-Policy
11
32
  // withtout inlining assets as base64:
@@ -23,7 +44,7 @@ export default defineConfig({
23
44
  * Include 'example-dep' in the array below.
24
45
  * @see https://vitejs.dev/config/dep-optimization-options
25
46
  */
26
- include: ['set-cookie-parser', 'cookie', 'react-router'],
47
+ include: [],
27
48
  },
28
49
  },
29
50
  });