@shopify/cli-hydrogen 11.1.5 → 11.1.7

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.
@@ -6,7 +6,7 @@ import {getSchema} from '@shopify/hydrogen-codegen';
6
6
  * @see https://the-guild.dev/graphql/config/docs/user/usage
7
7
  * @type {IGraphQLConfig}
8
8
  */
9
- export default {
9
+ const graphqlConfig: IGraphQLConfig = {
10
10
  projects: {
11
11
  default: {
12
12
  schema: getSchema('storefront'),
@@ -24,4 +24,6 @@ export default {
24
24
 
25
25
  // Add your own GraphQL projects here for CMS, Shopify Admin API, etc.
26
26
  },
27
- } as IGraphQLConfig;
27
+ };
28
+
29
+ export default graphqlConfig;
@@ -1,5 +1,73 @@
1
1
  # skeleton
2
2
 
3
+ ## 2025.7.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Support OAuth parameters via URL query strings in skeleton login route ([#3391](https://github.com/Shopify/hydrogen/pull/3391)) by [@kdaviduik](https://github.com/kdaviduik)
8
+
9
+ The skeleton template's login route (`account_.login.tsx`) now reads OAuth parameters from the URL and forwards them to `customerAccount.login()`. This enables deep linking to the login page with pre-configured authentication options.
10
+
11
+ ### Supported Query Parameters
12
+
13
+ | Query Parameter | Description |
14
+ | ----------------- | ---------------------------------------------------------------------------------- |
15
+ | `acr_values` | Direct users to a specific login method (e.g., `provider:google` for social login) |
16
+ | `login_hint` | Pre-fill the email address field |
17
+ | `login_hint_mode` | When set to `submit` with `login_hint`, auto-submits the login form |
18
+ | `locale` | Display the login page in a specific language (e.g., `fr`, `zh-CN`) |
19
+
20
+ ### Usage Examples
21
+
22
+ ```
23
+ /account/login?login_hint=user@example.com
24
+ /account/login?login_hint=user@example.com&login_hint_mode=submit
25
+ /account/login?acr_values=provider:google
26
+ /account/login?locale=fr
27
+ ```
28
+
29
+ - Updated dependencies [[`7c077f5f21a595c0355873ac8073b716dfeaf4d0`](https://github.com/Shopify/hydrogen/commit/7c077f5f21a595c0355873ac8073b716dfeaf4d0), [`7c077f5f21a595c0355873ac8073b716dfeaf4d0`](https://github.com/Shopify/hydrogen/commit/7c077f5f21a595c0355873ac8073b716dfeaf4d0), [`7c077f5f21a595c0355873ac8073b716dfeaf4d0`](https://github.com/Shopify/hydrogen/commit/7c077f5f21a595c0355873ac8073b716dfeaf4d0)]:
30
+ - @shopify/hydrogen@2025.8.0
31
+
32
+ ## 2025.7.2
33
+
34
+ ### Patch Changes
35
+
36
+ - Updated dependencies [[`6d22e45d29e89a7a8dddfe3c06459d89e4590483`](https://github.com/Shopify/hydrogen/commit/6d22e45d29e89a7a8dddfe3c06459d89e4590483), [`702f966c8e60eba7434363c9012f12bed92a8e4d`](https://github.com/Shopify/hydrogen/commit/702f966c8e60eba7434363c9012f12bed92a8e4d)]:
37
+ - @shopify/hydrogen@2025.7.2
38
+
39
+ ## 2025.7.1
40
+
41
+ ### Patch Changes
42
+
43
+ - Update React Router to 7.12.0 with stabilized future flags ([#3346](https://github.com/Shopify/hydrogen/pull/3346)) by [@kdaviduik](https://github.com/kdaviduik)
44
+
45
+ This release uses React Router's newly stabilized future flags (`v8_splitRouteModules`, `v8_middleware`) instead of their unstable counterparts
46
+
47
+ - Moved server build in `server.ts` from a dynamic import to a static import to speed up first rendering during local development (2s => 200ms). ([#3331](https://github.com/Shopify/hydrogen/pull/3331)) by [@frandiox](https://github.com/frandiox)
48
+
49
+ ```diff
50
+ // server.ts
51
+
52
+ +import * as serverBuild from 'virtual:react-router/server-build';
53
+
54
+ const handleRequest = createRequestHandler({
55
+ - build: await import('virtual:react-router/server-build'),
56
+ + build: serverBuild,
57
+ ```
58
+
59
+ Updated ESLint config to allow `virtual:` imports:
60
+
61
+ ```diff
62
+ // eslint.config.js
63
+
64
+ rules: {
65
+ + 'import/no-unresolved': ['error', {ignore: ['^virtual:']}],
66
+ ```
67
+
68
+ - Updated dependencies [[`264e13349168f17cc1f096c84135d13d38cfc8df`](https://github.com/Shopify/hydrogen/commit/264e13349168f17cc1f096c84135d13d38cfc8df), [`6d5e3d371e7e02e15be17029a0f34daae53a978e`](https://github.com/Shopify/hydrogen/commit/6d5e3d371e7e02e15be17029a0f34daae53a978e), [`ee00f1025867c40d5f67fa89d4ffb215bf280e8f`](https://github.com/Shopify/hydrogen/commit/ee00f1025867c40d5f67fa89d4ffb215bf280e8f), [`5a38948133766e358c5f357f52562f6fdcfe7969`](https://github.com/Shopify/hydrogen/commit/5a38948133766e358c5f357f52562f6fdcfe7969), [`264e13349168f17cc1f096c84135d13d38cfc8df`](https://github.com/Shopify/hydrogen/commit/264e13349168f17cc1f096c84135d13d38cfc8df)]:
69
+ - @shopify/hydrogen@2025.7.1
70
+
3
71
  ## 2025.7.0
4
72
 
5
73
  ### Major Changes
@@ -1,7 +1,17 @@
1
1
  import type {Route} from './+types/account_.login';
2
2
 
3
3
  export async function loader({request, context}: Route.LoaderArgs) {
4
+ const url = new URL(request.url);
5
+ const acrValues = url.searchParams.get('acr_values') || undefined;
6
+ const loginHint = url.searchParams.get('login_hint') || undefined;
7
+ const loginHintMode = url.searchParams.get('login_hint_mode') || undefined;
8
+ const locale = url.searchParams.get('locale') || undefined;
9
+
4
10
  return context.customerAccount.login({
5
11
  countryCode: context.storefront.i18n.country,
12
+ acrValues,
13
+ loginHint,
14
+ loginHintMode,
15
+ locale,
6
16
  });
7
17
  }
@@ -211,6 +211,7 @@ export default [
211
211
  '@typescript-eslint/no-floating-promises': 'error',
212
212
  '@typescript-eslint/no-misused-promises': 'error',
213
213
  'react/prop-types': 'off',
214
+ 'import/no-unresolved': ['error', {ignore: ['^virtual:']}],
214
215
  },
215
216
  },
216
217
  {
@@ -2,7 +2,7 @@
2
2
  "name": "skeleton",
3
3
  "private": true,
4
4
  "sideEffects": false,
5
- "version": "2025.7.0",
5
+ "version": "2025.7.3",
6
6
  "type": "module",
7
7
  "scripts": {
8
8
  "build": "shopify hydrogen build --codegen",
@@ -14,22 +14,22 @@
14
14
  },
15
15
  "prettier": "@shopify/prettier-config",
16
16
  "dependencies": {
17
- "@shopify/hydrogen": "2025.7.0",
17
+ "@shopify/hydrogen": "2025.7.3",
18
18
  "graphql": "^16.10.0",
19
19
  "graphql-tag": "^2.12.6",
20
20
  "isbot": "^5.1.22",
21
21
  "react": "18.3.1",
22
22
  "react-dom": "18.3.1",
23
- "react-router": "7.9.2",
24
- "react-router-dom": "7.9.2"
23
+ "react-router": "7.12.0",
24
+ "react-router-dom": "7.12.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@eslint/compat": "^1.2.5",
28
28
  "@eslint/eslintrc": "^3.2.0",
29
29
  "@eslint/js": "^9.18.0",
30
30
  "@graphql-codegen/cli": "5.0.2",
31
- "@react-router/dev": "7.9.2",
32
- "@react-router/fs-routes": "7.9.2",
31
+ "@react-router/dev": "7.12.0",
32
+ "@react-router/fs-routes": "7.12.0",
33
33
  "@shopify/cli": "3.85.4",
34
34
  "@shopify/hydrogen-codegen": "^0.3.3",
35
35
  "@shopify/mini-oxygen": "^4.0.0",
@@ -51,6 +51,7 @@
51
51
  "eslint-plugin-react": "^7.37.4",
52
52
  "eslint-plugin-react-hooks": "^5.1.0",
53
53
  "globals": "^15.14.0",
54
+ "graphql-config": "^5.0.3",
54
55
  "prettier": "^3.4.2",
55
56
  "typescript": "^5.9.2",
56
57
  "vite": "^6.2.4",
@@ -1,6 +1,5 @@
1
- // Virtual entry point for the app
2
- import {storefrontRedirect} from '@shopify/hydrogen';
3
- import {createRequestHandler} from '@shopify/hydrogen/oxygen';
1
+ import * as serverBuild from 'virtual:react-router/server-build';
2
+ import {createRequestHandler, storefrontRedirect} from '@shopify/hydrogen';
4
3
  import {createHydrogenRouterContext} from '~/lib/context';
5
4
 
6
5
  /**
@@ -20,12 +19,11 @@ export default {
20
19
  );
21
20
 
22
21
  /**
23
- * Create a Remix request handler and pass
24
- * Hydrogen's Storefront client to the loader context.
22
+ * Create a Hydrogen request handler that internally
23
+ * delegates to React Router for routing and rendering.
25
24
  */
26
25
  const handleRequest = createRequestHandler({
27
- // eslint-disable-next-line import/no-unresolved
28
- build: await import('virtual:react-router/server-build'),
26
+ build: serverBuild,
29
27
  mode: process.env.NODE_ENV,
30
28
  getLoadContext: () => hydrogenContext,
31
29
  });
@@ -134,6 +134,8 @@ async function runDev({
134
134
  const viteServer = await vite.createServer({
135
135
  root,
136
136
  clearScreen: false,
137
+ // In unit tests, node_modules is a symlink. Avoid writing .vite cache inside it.
138
+ cacheDir: process.env.SHOPIFY_UNIT_TEST ? joinPath(root, ".vite") : void 0,
137
139
  customLogger: process.env.SHOPIFY_UNIT_TEST ? Object.assign(vite.createLogger(), {
138
140
  info: (msg) => collectLog("info", msg),
139
141
  warn: (msg) => collectLog("warn", msg),
@@ -882,7 +882,15 @@ async function displayDevUpgradeNotice({
882
882
  ) : changelog.releases.findIndex(
883
883
  (release) => getAbsoluteVersion(release.version) === pinnedCurrentVersion
884
884
  );
885
- const relevantReleases = changelog.releases.slice(0, currentReleaseIndex);
885
+ let relevantReleases;
886
+ if (currentReleaseIndex === -1) {
887
+ const insertionIndex = changelog.releases.findIndex(
888
+ (release) => semver.lte(getAbsoluteVersion(release.version), pinnedCurrentVersion)
889
+ );
890
+ relevantReleases = insertionIndex === -1 ? changelog.releases : changelog.releases.slice(0, insertionIndex);
891
+ } else {
892
+ relevantReleases = changelog.releases.slice(0, currentReleaseIndex);
893
+ }
886
894
  const nextReleases = Object.values(
887
895
  [...relevantReleases].reverse().reduce(
888
896
  (acc, release) => {
@@ -891,7 +899,7 @@ async function displayDevUpgradeNotice({
891
899
  },
892
900
  {}
893
901
  )
894
- ).slice(0, 5);
902
+ ).reverse().slice(0, 5);
895
903
  let headline = Object.keys(uniqueAvailableUpgrades).length > 1 ? `There are ${Object.keys(uniqueAvailableUpgrades).length} new @shopify/hydrogen versions available.` : `There's a new @shopify/hydrogen version available.`;
896
904
  const cliCommand = await getCliCommand();
897
905
  renderInfo({
@@ -10,7 +10,7 @@ const REACT_ROUTER_PACKAGES = [
10
10
  "@react-router/dev",
11
11
  "@react-router/fs-routes"
12
12
  ];
13
- const EXPECTED_VERSION = "7.9.2";
13
+ const EXPECTED_VERSION = "7.12.0";
14
14
  async function checkReactRouterVersions(appPath) {
15
15
  const mismatches = [];
16
16
  const packageJsonPath = joinPath(appPath, "package.json");
@@ -65,7 +65,7 @@ async function checkReactRouterVersions(appPath) {
65
65
  renderWarning({
66
66
  headline: "React Router version mismatch detected",
67
67
  body: [
68
- "Hydrogen requires React Router 7.9.x for proper functionality.",
68
+ "Hydrogen requires React Router 7.12.0 for proper functionality.",
69
69
  "",
70
70
  "Version mismatches found:",
71
71
  mismatchList,
@@ -1683,5 +1683,5 @@
1683
1683
  ]
1684
1684
  }
1685
1685
  },
1686
- "version": "11.1.5"
1686
+ "version": "11.1.7"
1687
1687
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public",
5
5
  "@shopify:registry": "https://registry.npmjs.org"
6
6
  },
7
- "version": "11.1.5",
7
+ "version": "11.1.7",
8
8
  "license": "MIT",
9
9
  "type": "module",
10
10
  "repository": {
@@ -21,7 +21,7 @@
21
21
  "test:watch": "cross-env SHOPIFY_UNIT_TEST=1 LANG=en-US.UTF-8 vitest --test-timeout=60000"
22
22
  },
23
23
  "devDependencies": {
24
- "@react-router/dev": "7.9.2",
24
+ "@react-router/dev": "7.12.0",
25
25
  "@types/diff": "^5.0.2",
26
26
  "@types/gunzip-maybe": "^1.4.0",
27
27
  "@types/prettier": "^2.7.2",
@@ -60,7 +60,7 @@
60
60
  },
61
61
  "peerDependencies": {
62
62
  "@graphql-codegen/cli": "^5.0.2",
63
- "@react-router/dev": "7.9.2",
63
+ "@react-router/dev": "7.12.0",
64
64
  "@shopify/hydrogen-codegen": "^0.3.3",
65
65
  "@shopify/mini-oxygen": "^4.0.0",
66
66
  "graphql-config": "^5.0.3",