@shopify/cli-hydrogen 2.0.0 → 2.0.3

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.
@@ -1,5 +1,5 @@
1
1
  import { build as build$1 } from 'vite';
2
- import { ui, path } from '@shopify/cli-kit';
2
+ import { ui, cli, path } from '@shopify/cli-kit';
3
3
  import { Flags, Command } from '@oclif/core';
4
4
 
5
5
  async function build({ directory, targets, base }) {
@@ -8,7 +8,9 @@ async function build({ directory, targets, base }) {
8
8
  return {
9
9
  title: `Building ${key} code`,
10
10
  task: async (_, task) => {
11
- process.env.WORKER = key === "worker" ? "true" : void 0;
11
+ if (key === "worker") {
12
+ process.env.WORKER = "true";
13
+ }
12
14
  await build$1({
13
15
  ...commonConfig,
14
16
  build: {
@@ -45,6 +47,7 @@ const _Build = class extends Command {
45
47
  let Build = _Build;
46
48
  Build.description = "Builds a Hydrogen storefront for production";
47
49
  Build.flags = {
50
+ ...cli.globalFlags,
48
51
  path: Flags.string({
49
52
  hidden: true,
50
53
  description: "the path to your hydrogen storefront",
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sources":["../../../src/cli/services/build.ts","../../../src/cli/commands/hydrogen/build.ts"],"sourcesContent":["import {build as viteBuild} from 'vite'\nimport {ui} from '@shopify/cli-kit'\n\ntype Target = 'node' | 'client' | 'worker'\n\ninterface DevOptions {\n directory: string\n targets: {[key in Target]: boolean | string}\n base?: string\n}\n\nasync function build({directory, targets, base}: DevOptions) {\n const commonConfig = {base, root: directory}\n\n const tasks: ui.ListrTask[] = Object.entries(targets)\n .filter(([_, value]) => value)\n .map(([key, value]) => {\n return {\n title: `Building ${key} code`,\n task: async (_, task) => {\n process.env.WORKER = key === 'worker' ? 'true' : undefined\n await viteBuild({\n ...commonConfig,\n build: {\n outDir: `dist/${key}`,\n ssr: typeof value === 'string' ? value : undefined,\n manifest: key === 'client',\n },\n })\n\n task.title = `Built ${key} code`\n },\n }\n })\n\n const list = new ui.Listr(tasks)\n\n await list.run()\n}\n\nexport default build\n","import buildService from '../../services/build'\nimport {Command, Flags} from '@oclif/core'\nimport {path} from '@shopify/cli-kit'\n\nconst PLATFORM_ENTRIES = {\n node: `@shopify/hydrogen/platforms/node`,\n worker: `@shopify/hydrogen/platforms/worker`,\n}\n\nexport default class Build extends Command {\n static description = 'Builds a Hydrogen storefront for production'\n static flags = {\n path: Flags.string({\n hidden: true,\n description: 'the path to your hydrogen storefront',\n env: 'SHOPIFY_FLAG_PATH',\n }),\n base: Flags.string({\n description: ' the public path when served in production',\n env: 'SHOPIFY_FLAG_BUILD_BASE',\n }),\n client: Flags.boolean({\n description: 'build the client code',\n env: 'SHOPIFY_FLAG_BUILD_CLIENT',\n allowNo: true,\n default: true,\n }),\n target: Flags.string({\n char: 't',\n description: 'the target platform to build for (worker or node)',\n options: ['node', 'worker'],\n default: 'worker',\n env: 'SHOPIFY_FLAG_BUILD_TARGET',\n }),\n entry: Flags.string({\n description: 'produce Server Side Rendering (SSR) build for node environments',\n env: 'SHOPIFY_FLAG_BUILD_SSR_ENTRY',\n }),\n }\n\n async run(): Promise<void> {\n const {flags} = await this.parse(Build)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n\n const entry = flags.entry || PLATFORM_ENTRIES[flags.target as 'node' | 'worker']\n\n const targets = {\n client: flags.client,\n worker: flags.target === 'worker' ? entry : false,\n node: flags.target === 'node' ? entry : false,\n }\n\n await buildService({...flags, directory, targets})\n }\n}\n"],"names":["viteBuild","buildService"],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sources":["../../../src/cli/services/build.ts","../../../src/cli/commands/hydrogen/build.ts"],"sourcesContent":["import {build as viteBuild} from 'vite'\nimport {ui} from '@shopify/cli-kit'\n\ntype Target = 'node' | 'client' | 'worker'\n\ninterface DevOptions {\n directory: string\n targets: {[key in Target]: boolean | string}\n base?: string\n}\n\nasync function build({directory, targets, base}: DevOptions) {\n const commonConfig = {base, root: directory}\n\n const tasks: ui.ListrTask[] = Object.entries(targets)\n .filter(([_, value]) => value)\n .map(([key, value]) => {\n return {\n title: `Building ${key} code`,\n task: async (_, task) => {\n if (key === 'worker') {\n process.env.WORKER = 'true'\n }\n await viteBuild({\n ...commonConfig,\n build: {\n outDir: `dist/${key}`,\n ssr: typeof value === 'string' ? value : undefined,\n manifest: key === 'client',\n },\n })\n\n task.title = `Built ${key} code`\n },\n }\n })\n\n const list = new ui.Listr(tasks)\n\n await list.run()\n}\n\nexport default build\n","import buildService from '../../services/build'\nimport {Command, Flags} from '@oclif/core'\nimport {path, cli} from '@shopify/cli-kit'\n\nconst PLATFORM_ENTRIES = {\n node: `@shopify/hydrogen/platforms/node`,\n worker: `@shopify/hydrogen/platforms/worker`,\n}\n\nexport default class Build extends Command {\n static description = 'Builds a Hydrogen storefront for production'\n static flags = {\n ...cli.globalFlags,\n path: Flags.string({\n hidden: true,\n description: 'the path to your hydrogen storefront',\n env: 'SHOPIFY_FLAG_PATH',\n }),\n base: Flags.string({\n description: ' the public path when served in production',\n env: 'SHOPIFY_FLAG_BUILD_BASE',\n }),\n client: Flags.boolean({\n description: 'build the client code',\n env: 'SHOPIFY_FLAG_BUILD_CLIENT',\n allowNo: true,\n default: true,\n }),\n target: Flags.string({\n char: 't',\n description: 'the target platform to build for (worker or node)',\n options: ['node', 'worker'],\n default: 'worker',\n env: 'SHOPIFY_FLAG_BUILD_TARGET',\n }),\n entry: Flags.string({\n description: 'produce Server Side Rendering (SSR) build for node environments',\n env: 'SHOPIFY_FLAG_BUILD_SSR_ENTRY',\n }),\n }\n\n async run(): Promise<void> {\n const {flags} = await this.parse(Build)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n\n const entry = flags.entry || PLATFORM_ENTRIES[flags.target as 'node' | 'worker']\n\n const targets = {\n client: flags.client,\n worker: flags.target === 'worker' ? entry : false,\n node: flags.target === 'node' ? entry : false,\n }\n\n await buildService({...flags, directory, targets})\n }\n}\n"],"names":["viteBuild","buildService"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { s as semver, c as cliHydrogenPackageJson, C as Command, H as HelpfulError, a as source } from '../../Command-a8d57e22.js';
1
+ import { s as semver, c as cliHydrogenPackageJson, C as Command, H as HelpfulError, a as source } from '../../Command-aec65865.js';
2
2
  import 'prettier';
3
- import { output } from '@shopify/cli-kit';
3
+ import { cli, output } from '@shopify/cli-kit';
4
4
  import 'fs';
5
5
  import 'constants';
6
6
  import 'stream';
@@ -120,6 +120,7 @@ class Check extends Command {
120
120
  Check.description = "Check a hydrogen app for common problems.";
121
121
  Check.examples = [`$ shopify hydrogen check`];
122
122
  Check.flags = {
123
+ ...cli.globalFlags,
123
124
  ...Command.flags
124
125
  };
125
126
  Check.args = [];
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sources":["../../../src/cli/commands/hydrogen/add/hydrogen/hydrogen.ts","../../../src/cli/commands/hydrogen/check/rules/hydrogen/checkHydrogenVersion.ts","../../../src/cli/commands/hydrogen/check/rules/node/checkNodeVersion.ts","../../../src/cli/commands/hydrogen/add/eslint/eslint.ts","../../../src/cli/commands/hydrogen/check/rules/eslint/checkEslintConfig.ts","../../../src/cli/commands/hydrogen/check.ts"],"sourcesContent":["import Command from '../../../../core/Command'\n\nexport async function addHydrogen(this: Command) {\n this.package.install('@shopify/hydrogen')\n}\n","import {CheckResult} from '../../../../../types'\nimport addHydrogen from '../../../add/hydrogen'\nimport Command from '../../../../../core/Command'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport hydrogenPkg from '../../../../../../../package.json'\nimport semver from 'semver'\n\nexport const HYDROGEN_MIN_VERSION = hydrogenPkg.version\n\nexport async function checkHydrogenVersion(this: Command): Promise<CheckResult[]> {\n const h2Version = await this.package.hasDependency('@shopify/hydrogen')\n const normalizedVersion = h2Version ? semver.coerce(h2Version)?.version : `@shopify/hydrogen not installed`\n const latestHydrogen =\n typeof h2Version === 'string' &&\n typeof normalizedVersion === 'string' &&\n semver.gte(normalizedVersion, HYDROGEN_MIN_VERSION)\n\n const success = h2Version === 'latest' || latestHydrogen\n\n const description = `Has latest hydrogen version (latest: ${HYDROGEN_MIN_VERSION} / found ${normalizedVersion})`\n\n return [\n {\n id: 'hydrogen-latest',\n type: 'Dependencies',\n description,\n success,\n fix: addHydrogen,\n },\n ]\n}\n","import {CheckResult} from '../../../../../types'\nimport Command from '../../../../../core/Command'\nimport semver from 'semver'\n\nconst NODE_MIN_VERSION = '>=12.0.0'\n\nexport async function checkNodeVersion(this: Command): Promise<CheckResult[]> {\n const nodeVersion = await this.package.nodeVersion()\n const normalizedVersion = semver.coerce(nodeVersion)?.version\n\n return [\n {\n id: 'node-version',\n type: 'Dependencies',\n description: 'Has min node version',\n success:\n !nodeVersion || (normalizedVersion !== undefined && semver.satisfies(normalizedVersion, NODE_MIN_VERSION)),\n link: 'https://shopify.dev/custom-storefronts/hydrogen/support',\n },\n ]\n}\n","import Command from '../../../../core/Command'\n\nexport async function addEslint(this: Command) {\n const {fs} = this\n\n await fs.write('.eslintrc.js', (await import('./templates/eslintrc-js')).default())\n this.package.install('eslint', {dev: true, version: '^7.31.0'})\n this.package.install('eslint-plugin-hydrogen', {\n dev: true,\n version: '^0.6.2',\n })\n}\n","import {CheckResult} from '../../../../../types'\nimport addEslint from '../../../add/eslint'\nimport Command from '../../../../../core/Command'\n\nexport async function checkEslintConfig(this: Command): Promise<CheckResult[]> {\n const eslintConfig = await this.workspace.loadConfig<{extends: string[]}>('eslint')\n\n const hasEslintConfig = Boolean(eslintConfig)\n\n const hasHydrogenConfig =\n hasEslintConfig &&\n Boolean(eslintConfig.config.extends?.filter((extended: string) => extended.includes('plugin:hydrogen')).length)\n\n const hasHydrogenEslintPackage = Boolean(await this.package.hasDependency('eslint-plugin-hydrogen'))\n\n return [\n {\n id: 'eslint-config',\n type: 'Setup',\n description: 'Has eslint config',\n success: hasEslintConfig,\n link: 'https://shopify.dev/custom-storefronts/hydrogen/lint',\n fix: addEslint,\n },\n {\n id: 'eslint-config-hydrogen',\n type: 'Setup',\n description: 'Has hydrogen eslint config',\n success: hasHydrogenConfig && hasHydrogenEslintPackage,\n link: 'https://shopify.dev/custom-storefronts/hydrogen/lint',\n fix: addEslint,\n },\n ]\n}\n","// import type {Env} from 'types';\nimport {checkHydrogenVersion, checkEslintConfig, checkNodeVersion} from './check/rules'\nimport {HelpfulError} from '../../utilities'\n\nimport {CheckResult} from '../../types'\nimport Command from '../../core/Command'\nimport chalk from 'chalk'\nimport {output} from '@shopify/cli-kit'\n\nexport default class Check extends Command {\n static description = 'Check a hydrogen app for common problems.'\n\n static examples = [`$ shopify hydrogen check`]\n\n static flags = {\n ...Command.flags,\n }\n\n static args = []\n\n async run(): Promise<void> {\n this.interface.say('Running checks...')\n\n let results\n\n try {\n results = [\n ...(await checkNodeVersion.call(this)),\n ...(await checkHydrogenVersion.call(this)),\n ...(await checkEslintConfig.call(this)),\n ]\n } catch (error) {\n throw new HelpfulError({title: 'Error running checks'})\n }\n\n displayCheckResults.call(this, results)\n\n const failedChecks = results.filter(({success}) => !success)\n\n if (failedChecks.length) {\n this.interface.say(\n `${chalk.red.bold(`• ${failedChecks.length} errors `)}${chalk.dim(`found in ${results.length} checks`)}`,\n )\n } else {\n this.interface.say(`${chalk.green.bold(`• No errors `)}${chalk.dim(`found in ${results.length} checks`)}`)\n }\n\n await fixChecks.call(this, results)\n output.newline()\n }\n}\n\nfunction displayCheckResults(this: Command, allCheckResults: CheckResult[]) {\n const indent = ' '\n const checksBySection = allCheckResults.reduce((acc, {type, ...rest}) => {\n if (!acc[type]) {\n acc[type] = []\n }\n acc[type].push({type, ...rest})\n return acc\n }, {} as {[key: string]: CheckResult[]})\n\n ;[...Object.entries(checksBySection)].forEach(([section, sectionResults]) => {\n const allChecksStatusEmoji = statusEmoji(sectionResults.every(({success}) => success))\n\n output.newline()\n this.interface.say(`${allChecksStatusEmoji} ${chalk.cyan.bold.underline(section)}`)\n output.newline()\n\n sectionResults.forEach(({description, link, success, fix, id}) => {\n const docsLink = link ? chalk.dim(`${indent}${link}\\n`) : ''\n const idText = id ? chalk.dim(id) : ''\n const fixedText = success ? '' : statusFixable(fix)\n const lines = [[statusEmoji(success), description, idText, fixedText].join(' '), docsLink]\n\n this.interface.say(lines.join('\\n'))\n })\n })\n output.newline()\n}\n\nasync function fixChecks(this: Command, results: CheckResult[]) {\n let changedFiles = new Map()\n\n const allFixableResults: CheckResult[] = results.filter(\n ({fix, success}) => !success && fix !== undefined && typeof fix === 'function',\n )\n\n if (allFixableResults.length === 0) {\n this.interface.say(`No fixable checks`)\n\n return\n }\n\n output.newline()\n output.newline()\n await this.interface.say(`${allFixableResults.length} failed checks might be automatically fixable.`)\n output.newline()\n const wantsFix = await this.interface.ask(\n `Do you want to apply automatic fixes to ${allFixableResults.length} failed checks?`,\n {boolean: true, name: 'fix', default: false},\n )\n\n if (!wantsFix) {\n return\n }\n\n for await (const {description, files} of runFixers(allFixableResults as Required<CheckResult>[], {\n fs: this.fs,\n package: this.package,\n interface: this.interface,\n })) {\n this.interface.say([statusEmoji(true), description, chalk.green('fixed')].join(' '))\n\n changedFiles = new Map([...changedFiles, ...files])\n }\n\n const cleanUpPromises = Array.from(changedFiles).map(async ([path, content]) => {\n const action = (await this.fs.hasFile(path)) ? chalk.red(`{red overwrote`) : chalk.green(`{green wrote}`)\n\n await this.fs.write(path, content)\n\n this.interface.say(`${action}${stripPath(path)}`)\n })\n\n await Promise.all(cleanUpPromises)\n}\n\nasync function* runFixers(allFixableResults: Required<CheckResult>[], context: any) {\n for (const {fix, description} of allFixableResults) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await fix(context)\n } finally {\n yield {description, files: []}\n }\n }\n}\n\nfunction statusEmoji(success: boolean) {\n return success ? '✓' : `✕`\n}\n\nfunction statusFixable(fix: CheckResult['fix']) {\n return typeof fix === 'function' ? chalk.cyan(` (fixable) `) : ' '\n}\n\nfunction stripPath(path: string) {\n return path.replace(`${process.cwd()}`, '')\n}\n"],"names":["hydrogenPkg","chalk"],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sources":["../../../src/cli/commands/hydrogen/add/hydrogen/hydrogen.ts","../../../src/cli/commands/hydrogen/check/rules/hydrogen/checkHydrogenVersion.ts","../../../src/cli/commands/hydrogen/check/rules/node/checkNodeVersion.ts","../../../src/cli/commands/hydrogen/add/eslint/eslint.ts","../../../src/cli/commands/hydrogen/check/rules/eslint/checkEslintConfig.ts","../../../src/cli/commands/hydrogen/check.ts"],"sourcesContent":["import Command from '../../../../core/Command'\n\nexport async function addHydrogen(this: Command) {\n this.package.install('@shopify/hydrogen')\n}\n","import {CheckResult} from '../../../../../types'\nimport addHydrogen from '../../../add/hydrogen'\nimport Command from '../../../../../core/Command'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport hydrogenPkg from '../../../../../../../package.json'\nimport semver from 'semver'\n\nexport const HYDROGEN_MIN_VERSION = hydrogenPkg.version\n\nexport async function checkHydrogenVersion(this: Command): Promise<CheckResult[]> {\n const h2Version = await this.package.hasDependency('@shopify/hydrogen')\n const normalizedVersion = h2Version ? semver.coerce(h2Version)?.version : `@shopify/hydrogen not installed`\n const latestHydrogen =\n typeof h2Version === 'string' &&\n typeof normalizedVersion === 'string' &&\n semver.gte(normalizedVersion, HYDROGEN_MIN_VERSION)\n\n const success = h2Version === 'latest' || latestHydrogen\n\n const description = `Has latest hydrogen version (latest: ${HYDROGEN_MIN_VERSION} / found ${normalizedVersion})`\n\n return [\n {\n id: 'hydrogen-latest',\n type: 'Dependencies',\n description,\n success,\n fix: addHydrogen,\n },\n ]\n}\n","import {CheckResult} from '../../../../../types'\nimport Command from '../../../../../core/Command'\nimport semver from 'semver'\n\nconst NODE_MIN_VERSION = '>=12.0.0'\n\nexport async function checkNodeVersion(this: Command): Promise<CheckResult[]> {\n const nodeVersion = await this.package.nodeVersion()\n const normalizedVersion = semver.coerce(nodeVersion)?.version\n\n return [\n {\n id: 'node-version',\n type: 'Dependencies',\n description: 'Has min node version',\n success:\n !nodeVersion || (normalizedVersion !== undefined && semver.satisfies(normalizedVersion, NODE_MIN_VERSION)),\n link: 'https://shopify.dev/custom-storefronts/hydrogen/support',\n },\n ]\n}\n","import Command from '../../../../core/Command'\n\nexport async function addEslint(this: Command) {\n const {fs} = this\n\n await fs.write('.eslintrc.js', (await import('./templates/eslintrc-js')).default())\n this.package.install('eslint', {dev: true, version: '^7.31.0'})\n this.package.install('eslint-plugin-hydrogen', {\n dev: true,\n version: '^0.6.2',\n })\n}\n","import {CheckResult} from '../../../../../types'\nimport addEslint from '../../../add/eslint'\nimport Command from '../../../../../core/Command'\n\nexport async function checkEslintConfig(this: Command): Promise<CheckResult[]> {\n const eslintConfig = await this.workspace.loadConfig<{extends: string[]}>('eslint')\n\n const hasEslintConfig = Boolean(eslintConfig)\n\n const hasHydrogenConfig =\n hasEslintConfig &&\n Boolean(eslintConfig.config.extends?.filter((extended: string) => extended.includes('plugin:hydrogen')).length)\n\n const hasHydrogenEslintPackage = Boolean(await this.package.hasDependency('eslint-plugin-hydrogen'))\n\n return [\n {\n id: 'eslint-config',\n type: 'Setup',\n description: 'Has eslint config',\n success: hasEslintConfig,\n link: 'https://shopify.dev/custom-storefronts/hydrogen/lint',\n fix: addEslint,\n },\n {\n id: 'eslint-config-hydrogen',\n type: 'Setup',\n description: 'Has hydrogen eslint config',\n success: hasHydrogenConfig && hasHydrogenEslintPackage,\n link: 'https://shopify.dev/custom-storefronts/hydrogen/lint',\n fix: addEslint,\n },\n ]\n}\n","// import type {Env} from 'types';\nimport {checkHydrogenVersion, checkEslintConfig, checkNodeVersion} from './check/rules'\nimport {HelpfulError} from '../../utilities'\n\nimport {CheckResult} from '../../types'\nimport Command from '../../core/Command'\nimport chalk from 'chalk'\nimport {output, cli} from '@shopify/cli-kit'\n\nexport default class Check extends Command {\n static description = 'Check a hydrogen app for common problems.'\n\n static examples = [`$ shopify hydrogen check`]\n\n static flags = {\n ...cli.globalFlags,\n ...Command.flags,\n }\n\n static args = []\n\n async run(): Promise<void> {\n this.interface.say('Running checks...')\n\n let results\n\n try {\n results = [\n ...(await checkNodeVersion.call(this)),\n ...(await checkHydrogenVersion.call(this)),\n ...(await checkEslintConfig.call(this)),\n ]\n } catch (error) {\n throw new HelpfulError({title: 'Error running checks'})\n }\n\n displayCheckResults.call(this, results)\n\n const failedChecks = results.filter(({success}) => !success)\n\n if (failedChecks.length) {\n this.interface.say(\n `${chalk.red.bold(`• ${failedChecks.length} errors `)}${chalk.dim(`found in ${results.length} checks`)}`,\n )\n } else {\n this.interface.say(`${chalk.green.bold(`• No errors `)}${chalk.dim(`found in ${results.length} checks`)}`)\n }\n\n await fixChecks.call(this, results)\n output.newline()\n }\n}\n\nfunction displayCheckResults(this: Command, allCheckResults: CheckResult[]) {\n const indent = ' '\n const checksBySection = allCheckResults.reduce((acc, {type, ...rest}) => {\n if (!acc[type]) {\n acc[type] = []\n }\n acc[type].push({type, ...rest})\n return acc\n }, {} as {[key: string]: CheckResult[]})\n\n ;[...Object.entries(checksBySection)].forEach(([section, sectionResults]) => {\n const allChecksStatusEmoji = statusEmoji(sectionResults.every(({success}) => success))\n\n output.newline()\n this.interface.say(`${allChecksStatusEmoji} ${chalk.cyan.bold.underline(section)}`)\n output.newline()\n\n sectionResults.forEach(({description, link, success, fix, id}) => {\n const docsLink = link ? chalk.dim(`${indent}${link}\\n`) : ''\n const idText = id ? chalk.dim(id) : ''\n const fixedText = success ? '' : statusFixable(fix)\n const lines = [[statusEmoji(success), description, idText, fixedText].join(' '), docsLink]\n\n this.interface.say(lines.join('\\n'))\n })\n })\n output.newline()\n}\n\nasync function fixChecks(this: Command, results: CheckResult[]) {\n let changedFiles = new Map()\n\n const allFixableResults: CheckResult[] = results.filter(\n ({fix, success}) => !success && fix !== undefined && typeof fix === 'function',\n )\n\n if (allFixableResults.length === 0) {\n this.interface.say(`No fixable checks`)\n\n return\n }\n\n output.newline()\n output.newline()\n await this.interface.say(`${allFixableResults.length} failed checks might be automatically fixable.`)\n output.newline()\n const wantsFix = await this.interface.ask(\n `Do you want to apply automatic fixes to ${allFixableResults.length} failed checks?`,\n {boolean: true, name: 'fix', default: false},\n )\n\n if (!wantsFix) {\n return\n }\n\n for await (const {description, files} of runFixers(allFixableResults as Required<CheckResult>[], {\n fs: this.fs,\n package: this.package,\n interface: this.interface,\n })) {\n this.interface.say([statusEmoji(true), description, chalk.green('fixed')].join(' '))\n\n changedFiles = new Map([...changedFiles, ...files])\n }\n\n const cleanUpPromises = Array.from(changedFiles).map(async ([path, content]) => {\n const action = (await this.fs.hasFile(path)) ? chalk.red(`{red overwrote`) : chalk.green(`{green wrote}`)\n\n await this.fs.write(path, content)\n\n this.interface.say(`${action}${stripPath(path)}`)\n })\n\n await Promise.all(cleanUpPromises)\n}\n\nasync function* runFixers(allFixableResults: Required<CheckResult>[], context: any) {\n for (const {fix, description} of allFixableResults) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await fix(context)\n } finally {\n yield {description, files: []}\n }\n }\n}\n\nfunction statusEmoji(success: boolean) {\n return success ? '✓' : `✕`\n}\n\nfunction statusFixable(fix: CheckResult['fix']) {\n return typeof fix === 'function' ? chalk.cyan(` (fixable) `) : ' '\n}\n\nfunction stripPath(path: string) {\n return path.replace(`${process.cwd()}`, '')\n}\n"],"names":["hydrogenPkg","chalk"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { createServer } from 'vite';
2
- import { path } from '@shopify/cli-kit';
2
+ import { cli, path } from '@shopify/cli-kit';
3
3
  import { Flags, Command } from '@oclif/core';
4
4
 
5
5
  async function dev({ directory, force }) {
@@ -24,6 +24,7 @@ const _Dev = class extends Command {
24
24
  let Dev = _Dev;
25
25
  Dev.description = "Run a Hydrogen storefront locally for development";
26
26
  Dev.flags = {
27
+ ...cli.globalFlags,
27
28
  path: Flags.string({
28
29
  hidden: true,
29
30
  description: "the path to your hydrogen storefront",
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sources":["../../../src/cli/services/dev.ts","../../../src/cli/commands/hydrogen/dev.ts"],"sourcesContent":["import {createServer} from 'vite'\n\ninterface DevOptions {\n directory: string\n force: boolean\n}\n\nasync function dev({directory, force}: DevOptions) {\n const server = await createServer({\n root: directory,\n server: {\n open: true,\n force,\n },\n })\n\n await server.listen()\n server.printUrls()\n}\n\nexport default dev\n","import devService from '../../services/dev'\nimport {path} from '@shopify/cli-kit'\nimport {Command, Flags} from '@oclif/core'\n\nexport default class Dev extends Command {\n static description = 'Run a Hydrogen storefront locally for development'\n static flags = {\n path: Flags.string({\n hidden: true,\n description: 'the path to your hydrogen storefront',\n env: 'SHOPIFY_FLAG_PATH',\n }),\n force: Flags.boolean({\n description: 'force dependency pre-bundling.',\n env: 'SHOPIFY_FLAG_DEV_FORCE',\n }),\n }\n\n async run(): Promise<void> {\n const {flags} = await this.parse(Dev)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n\n await devService({directory, ...flags})\n }\n}\n"],"names":["devService"],"mappings":";;;;AACA,eAAe,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;AACzC,EAAE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;AACpC,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE;AACZ,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,KAAK;AACX,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;AACxB,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AACrB;;ACRA,MAAM,IAAI,GAAG,cAAc,OAAO,CAAC;AACnC,EAAE,MAAM,GAAG,GAAG;AACd,IAAI,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC5E,IAAI,MAAMA,GAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AAC9C,GAAG;AACH,CAAC,CAAC;AACC,IAAC,GAAG,GAAG,KAAK;AACf,GAAG,CAAC,WAAW,GAAG,mDAAmD,CAAC;AACtE,GAAG,CAAC,KAAK,GAAG;AACZ,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;AACrB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,WAAW,EAAE,sCAAsC;AACvD,IAAI,GAAG,EAAE,mBAAmB;AAC5B,GAAG,CAAC;AACJ,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;AACvB,IAAI,WAAW,EAAE,gCAAgC;AACjD,IAAI,GAAG,EAAE,wBAAwB;AACjC,GAAG,CAAC;AACJ,CAAC;;;;"}
1
+ {"version":3,"file":"dev.js","sources":["../../../src/cli/services/dev.ts","../../../src/cli/commands/hydrogen/dev.ts"],"sourcesContent":["import {createServer} from 'vite'\n\ninterface DevOptions {\n directory: string\n force: boolean\n}\n\nasync function dev({directory, force}: DevOptions) {\n const server = await createServer({\n root: directory,\n server: {\n open: true,\n force,\n },\n })\n\n await server.listen()\n server.printUrls()\n}\n\nexport default dev\n","import devService from '../../services/dev'\nimport {path, cli} from '@shopify/cli-kit'\nimport {Command, Flags} from '@oclif/core'\n\nexport default class Dev extends Command {\n static description = 'Run a Hydrogen storefront locally for development'\n static flags = {\n ...cli.globalFlags,\n path: Flags.string({\n hidden: true,\n description: 'the path to your hydrogen storefront',\n env: 'SHOPIFY_FLAG_PATH',\n }),\n force: Flags.boolean({\n description: 'force dependency pre-bundling.',\n env: 'SHOPIFY_FLAG_DEV_FORCE',\n }),\n }\n\n async run(): Promise<void> {\n const {flags} = await this.parse(Dev)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n\n await devService({directory, ...flags})\n }\n}\n"],"names":["devService"],"mappings":";;;;AAOA,eAAmB,GAAA,CAAA,EAAC,WAAW,KAAoB,EAAA,EAAA;AACjD,EAAM,MAAA,MAAA,GAAS,MAAM,YAAa,CAAA;AAAA,IAChC,IAAM,EAAA,SAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,IAAA;AAAA,MACN,KAAA;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,OAAO,MAAO,EAAA,CAAA;AACpB,EAAA,MAAA,CAAO,SAAU,EAAA,CAAA;AACnB;;ACdA,MAAA,IAAA,GAAA,cAAiC,OAAQ,CAAA;AAAA,EAAA,MAejC,GAAqB,GAAA;AACzB,IAAA,MAAM,EAAC,KAAA,EAAA,GAAS,MAAM,IAAA,CAAK,MAAM,IAAG,CAAA,CAAA;AACpC,IAAM,MAAA,SAAA,GAAY,MAAM,IAAO,GAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,IAAI,CAAI,GAAA,OAAA,CAAQ,GAAI,EAAA,CAAA;AAEtE,IAAA,MAAMA,GAAW,CAAA,EAAC,SAAc,EAAA,GAAA,KAAA,EAAM,CAAA,CAAA;AAAA,GACxC;AACF,CAAA,CAAA;AArBA,IAAA,GAAA,GAAA,KAAA;AAAA,IACS,WAAc,GAAA,mDAAA,CAAA;AADvB,IAES,KAAQ,GAAA;AAAA,EAAA,GACV,GAAI,CAAA,WAAA;AAAA,EACP,IAAA,EAAM,MAAM,MAAO,CAAA;AAAA,IACjB,MAAQ,EAAA,IAAA;AAAA,IACR,WAAa,EAAA,sCAAA;AAAA,IACb,GAAK,EAAA,mBAAA;AAAA,GACN,CAAA;AAAA,EACD,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA,IACnB,WAAa,EAAA,gCAAA;AAAA,IACb,GAAK,EAAA,wBAAA;AAAA,GACN,CAAA;AACH,CAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { b as commonjsGlobal$1, d as commonjsRequire, C as Command, a as source$1, c as cliHydrogenPackageJson } from '../../Command-a8d57e22.js';
1
+ import { b as commonjsGlobal$1, d as commonjsRequire, C as Command, a as source$1, c as cliHydrogenPackageJson } from '../../Command-aec65865.js';
2
2
  import require$$0$a from 'fs';
3
3
  import require$$0$3 from 'path';
4
4
  import require$$0$4 from 'events';
@@ -17,7 +17,7 @@ import require$$1$2 from 'child_process';
17
17
  import require$$7 from 'url';
18
18
  import require$$19 from 'net';
19
19
  import require$$20 from 'tls';
20
- import { ui, output } from '@shopify/cli-kit';
20
+ import { cli, ui, output } from '@shopify/cli-kit';
21
21
  import { Flags } from '@oclif/core';
22
22
  import 'readline';
23
23
  import 'module';
@@ -26,7 +26,7 @@ import 'v8';
26
26
  import 'prettier';
27
27
 
28
28
  var name = "@shopify/cli";
29
- var version$2 = "1.1.1";
29
+ var version$2 = "2.0.3";
30
30
  var description = "A CLI tool to build for the Shopify platform";
31
31
  var type = "module";
32
32
  var main = "src/index.js";
@@ -73,16 +73,17 @@ var eslintConfig = {
73
73
  };
74
74
  var dependencies = {
75
75
  "@bugsnag/js": "^7.16.2",
76
- "@oclif/core": "1.6.4",
76
+ "@oclif/core": "1.7.0",
77
77
  "@oclif/plugin-help": "^5.1.12",
78
78
  "@oclif/plugin-plugins": "^2.1.0",
79
- "@shopify/cli-kit": "1.1.1"
79
+ "@shopify/cli-kit": "2.0.3",
80
+ "@shopify/plugin-ngrok": "^0.2.4"
80
81
  };
81
82
  var devDependencies = {
82
- vitest: "0.9.4"
83
+ vitest: "0.10.0"
83
84
  };
84
85
  var engines = {
85
- node: "^14.13.1 || ^16.0.0 || ^17.0.0"
86
+ node: "^14.13.1 || ^16.0.0 || ^17.0.0 || ^18.0.0"
86
87
  };
87
88
  var os$1 = [
88
89
  "darwin",
@@ -97,8 +98,10 @@ var oclif = {
97
98
  "@shopify/theme",
98
99
  "@shopify/cli-hydrogen",
99
100
  "@oclif/plugin-help",
100
- "@oclif/plugin-plugins"
101
+ "@oclif/plugin-plugins",
102
+ "@shopify/plugin-ngrok"
101
103
  ],
104
+ scope: "shopify",
102
105
  topicSeparator: " ",
103
106
  topics: {
104
107
  hydrogen: {
@@ -109,8 +112,14 @@ var oclif = {
109
112
  },
110
113
  app: {
111
114
  description: "Build Shopify apps"
115
+ },
116
+ auth: {
117
+ description: "Auth operations"
112
118
  }
113
- }
119
+ },
120
+ additionalHelpFlags: [
121
+ "-h"
122
+ ]
114
123
  };
115
124
  var cliPackageJson = {
116
125
  name: name,
@@ -14715,7 +14724,7 @@ const _Init = class extends Command {
14715
14724
  [` \u2022 cd ${this.fs.relativePath(this.root, process.cwd())}`, "change into the project directory"]
14716
14725
  ]);
14717
14726
  }
14718
- const usesYarn = this.package.packageManager === "npm";
14727
+ const usesYarn = this.package.dependencyManager === "npm";
14719
14728
  this.interface.say([
14720
14729
  [` \u2022 ${usesYarn ? `yarn` : `npm install --legacy-peer-deps`}`, " install the dependencies"],
14721
14730
  [` \u2022 ${usesYarn ? `yarn` : `npm run`} dev`, " start the dev server"]
@@ -14728,6 +14737,7 @@ const _Init = class extends Command {
14728
14737
  let Init = _Init;
14729
14738
  Init.args = [{ name: "name", description: "Root of the project" }];
14730
14739
  Init.flags = {
14740
+ ...cli.globalFlags,
14731
14741
  root: Flags.string({
14732
14742
  char: "r",
14733
14743
  description: "Root directory of the project.",