diff --git a/package-lock.json b/package-lock.json index 3cf53dfec9..e1a3cab4b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33314,7 +33314,8 @@ "@shopify/hydrogen-react": "2024.4.0", "content-security-policy-builder": "^2.1.1", "source-map-support": "^0.5.21", - "type-fest": "^4.5.0" + "type-fest": "^4.5.0", + "use-resize-observer": "^9.1.0" }, "devDependencies": { "@remix-run/react": "^2.8.0", @@ -41404,6 +41405,7 @@ "schema-dts": "^1.1.0", "source-map-support": "^0.5.21", "type-fest": "^4.5.0", + "use-resize-observer": "^9.1.0", "vitest": "^1.0.4" }, "dependencies": { diff --git a/packages/cli/src/commands/hydrogen/upgrade.ts b/packages/cli/src/commands/hydrogen/upgrade.ts index d6796ebfa2..d9953fa18c 100644 --- a/packages/cli/src/commands/hydrogen/upgrade.ts +++ b/packages/cli/src/commands/hydrogen/upgrade.ts @@ -999,7 +999,8 @@ export async function displayDevUpgradeNotice({ const isPrerelease = semver.prerelease(currentVersion); - if (isPrerelease) { + if (isPrerelease || /^[a-z]+$/i.test(currentVersion)) { + // Skip prereleases or versions like 'next' or 'latest' return; } diff --git a/packages/cli/src/lib/file.ts b/packages/cli/src/lib/file.ts index ac98eb0c90..1e5445679e 100644 --- a/packages/cli/src/lib/file.ts +++ b/packages/cli/src/lib/file.ts @@ -30,7 +30,14 @@ export async function replaceFileContent( return writeFile(filepath, content); } -const DEFAULT_EXTENSIONS = ['tsx', 'ts', 'jsx', 'js', 'mjs', 'cjs'] as const; +const DEFAULT_EXTENSIONS = [ + 'tsx' as const, + 'ts' as const, + 'jsx' as const, + 'js' as const, + 'mjs' as const, + 'cjs' as const, +]; export async function findFileWithExtension( directory: string, diff --git a/packages/cli/src/lib/transpile/project.ts b/packages/cli/src/lib/transpile/project.ts index 63b16ba764..87b6951638 100644 --- a/packages/cli/src/lib/transpile/project.ts +++ b/packages/cli/src/lib/transpile/project.ts @@ -4,6 +4,7 @@ import {outputDebug} from '@shopify/cli-kit/node/output'; import {joinPath} from '@shopify/cli-kit/node/path'; import {formatCode, getCodeFormatOptions} from '../format-code.js'; import {transpileFile} from './file.js'; +import {findFileWithExtension} from '../file.js'; const DEFAULT_JS_CONFIG: Omit = { checkJs: false, @@ -157,15 +158,20 @@ export async function transpileProject(projectDir: string, keepTypes = true) { // Remove TS from ESLint try { - const eslintrcPath = joinPath(projectDir, '.eslintrc.js'); - let eslintrc = await readFile(eslintrcPath); + const {filepath = joinPath(projectDir, '.eslintrc.cjs')} = + await findFileWithExtension(projectDir, '.eslintrc', ['cjs', 'js']); + + let eslintrc = await readFile(filepath); + + if (!keepTypes) { + eslintrc = eslintrc.replace(/\/\*\*[\s*]+@type.+\s+\*\/\s?/gim, ''); + } eslintrc = eslintrc - .replace(/\/\*\*[\s*]+@type.+\s+\*\/\s?/gim, '') .replace(/\s*,?\s*['"`]plugin:hydrogen\/typescript['"`]/gim, '') .replace(/\s+['"`]@typescript-eslint\/.+,/gim, ''); - await writeFile(eslintrcPath, eslintrc); + await writeFile(filepath, await formatCode(eslintrc, formatConfig)); } catch (error) { outputDebug( 'Could not remove TS rules from .eslintrc:\n' + (error as Error).stack, diff --git a/packages/cli/src/setup-assets/vite/package.json b/packages/cli/src/setup-assets/vite/package.json index a16e5551ff..a560c02c57 100644 --- a/packages/cli/src/setup-assets/vite/package.json +++ b/packages/cli/src/setup-assets/vite/package.json @@ -1,8 +1,8 @@ { "type": "module", "scripts": { - "build": "shopify hydrogen build-vite --codegen", - "dev": "shopify hydrogen dev-vite --codegen" + "build": "shopify hydrogen build --codegen", + "dev": "shopify hydrogen dev --codegen" }, "dependencies": { "isbot": "^3.8.0" diff --git a/packages/hydrogen-react/src/storefront-client.ts b/packages/hydrogen-react/src/storefront-client.ts index 827aec7692..e95991f702 100644 --- a/packages/hydrogen-react/src/storefront-client.ts +++ b/packages/hydrogen-react/src/storefront-client.ts @@ -35,10 +35,7 @@ export function createStorefrontClient({ }: StorefrontClientProps): StorefrontClientReturn { if (!storeDomain) { storeDomain = MOCK_SHOP_DOMAIN; - warnOnce( - `storeDomain missing, defaulting to ${MOCK_SHOP_DOMAIN}`, - 'info', - ); + warnOnce(`storeDomain missing, defaulting to ${MOCK_SHOP_DOMAIN}`, 'info'); } if (storefrontApiVersion !== SFAPI_VERSION) { diff --git a/packages/hydrogen/package.json b/packages/hydrogen/package.json index ba7efb57e3..11e96533d6 100644 --- a/packages/hydrogen/package.json +++ b/packages/hydrogen/package.json @@ -66,7 +66,8 @@ "@shopify/hydrogen-react": "2024.4.0", "content-security-policy-builder": "^2.1.1", "type-fest": "^4.5.0", - "source-map-support": "^0.5.21" + "source-map-support": "^0.5.21", + "use-resize-observer": "^9.1.0" }, "devDependencies": { "@remix-run/react": "^2.8.0", diff --git a/packages/hydrogen/src/vite/plugin.ts b/packages/hydrogen/src/vite/plugin.ts index c4164f4bad..de72dd2db1 100644 --- a/packages/hydrogen/src/vite/plugin.ts +++ b/packages/hydrogen/src/vite/plugin.ts @@ -68,6 +68,11 @@ export function hydrogen(pluginOptions: HydrogenPluginOptions = {}): Plugin[] { ], }, }, + // Vite performs an initial reload after optimizing these dependencies. + // Do it early to avoid the initial reload: + optimizeDeps: { + include: ['@shopify/hydrogen'], + }, }; }, api: { diff --git a/packages/mini-oxygen/package.json b/packages/mini-oxygen/package.json index 4b739f4c50..73b2f19e75 100644 --- a/packages/mini-oxygen/package.json +++ b/packages/mini-oxygen/package.json @@ -18,7 +18,7 @@ "dev": "tsup --watch", "typecheck": "tsc --noEmit", "prepack": "npm run build", - "test": "NODE_OPTIONS=--experimental-vm-modules vitest run" + "test": "NODE_OPTIONS=--experimental-vm-modules vitest run --test-timeout=20000" }, "files": [ "dist" diff --git a/templates/skeleton/.npmrc b/templates/skeleton/.npmrc index 2050a657d9..408e0d2910 100644 --- a/templates/skeleton/.npmrc +++ b/templates/skeleton/.npmrc @@ -1,2 +1,7 @@ @shopify:registry=https://registry.npmjs.com progress=false + +# Ensure Vite can optimize these deps in PNPM +public-hoist-pattern[]=cookie +public-hoist-pattern[]=set-cookie-parser +public-hoist-pattern[]=content-security-policy-builder