@shopify/cli-hydrogen 1.1.0 → 2.0.1

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,63 +1,45 @@
1
- import { build } from 'vite';
2
- import { ui, output, path } from '@shopify/cli-kit';
1
+ import { build as build$1 } from 'vite';
2
+ import { ui, path } from '@shopify/cli-kit';
3
3
  import { Flags, Command } from '@oclif/core';
4
4
 
5
- async function dev({ directory, target, base }) {
6
- const commonConfig = { base };
7
- const serverBuild = {
8
- title: `Building ${target} code`,
9
- task: async () => {
10
- await build({
11
- ...commonConfig,
12
- root: directory,
13
- build: {
14
- outDir: "dist/server",
15
- ssr: `@shopify/hydrogen/platforms/node`
16
- }
17
- });
18
- }
19
- };
20
- const workerBuild = {
21
- title: `Building ${target} code`,
22
- task: async () => {
23
- process.env.WORKER = "true";
24
- await build({
25
- ...commonConfig,
26
- root: directory,
27
- build: {
28
- outDir: "dist/worker",
29
- ssr: `@shopify/hydrogen/platforms/worker-event`
30
- }
31
- });
32
- }
33
- };
34
- const list = new ui.Listr([
35
- {
36
- title: `Building client code`,
37
- task: async () => {
38
- await build({
5
+ async function build({ directory, targets, base }) {
6
+ const commonConfig = { base, root: directory };
7
+ const tasks = Object.entries(targets).filter(([_, value]) => value).map(([key, value]) => {
8
+ return {
9
+ title: `Building ${key} code`,
10
+ task: async (_, task) => {
11
+ process.env.WORKER = key === "worker" ? "true" : void 0;
12
+ await build$1({
39
13
  ...commonConfig,
40
- root: directory,
41
14
  build: {
42
- outDir: "dist/client",
43
- manifest: true
15
+ outDir: `dist/${key}`,
16
+ ssr: typeof value === "string" ? value : void 0,
17
+ manifest: key === "client"
44
18
  }
45
19
  });
20
+ task.title = `Built ${key} code`;
46
21
  }
47
- },
48
- target === "worker" ? workerBuild : serverBuild
49
- ], { concurrent: false });
22
+ };
23
+ });
24
+ const list = new ui.Listr(tasks);
50
25
  await list.run();
51
- output.info(output.content`
52
- ${target} build completed successfully! ✨
53
- `);
54
26
  }
55
27
 
28
+ const PLATFORM_ENTRIES = {
29
+ node: `@shopify/hydrogen/platforms/node`,
30
+ worker: `@shopify/hydrogen/platforms/worker`
31
+ };
56
32
  const _Build = class extends Command {
57
33
  async run() {
58
34
  const { flags } = await this.parse(_Build);
59
35
  const directory = flags.path ? path.resolve(flags.path) : process.cwd();
60
- await dev({ ...flags, directory, target: flags.target });
36
+ const entry = flags.entry || PLATFORM_ENTRIES[flags.target];
37
+ const targets = {
38
+ client: flags.client,
39
+ worker: flags.target === "worker" ? entry : false,
40
+ node: flags.target === "node" ? entry : false
41
+ };
42
+ await build({ ...flags, directory, targets });
61
43
  }
62
44
  };
63
45
  let Build = _Build;
@@ -66,19 +48,28 @@ Build.flags = {
66
48
  path: Flags.string({
67
49
  hidden: true,
68
50
  description: "the path to your hydrogen storefront",
69
- env: "SHOPIFY_HYDROGEN_PATH"
51
+ env: "SHOPIFY_FLAG_PATH"
52
+ }),
53
+ base: Flags.string({
54
+ description: " the public path when served in production",
55
+ env: "SHOPIFY_FLAG_BUILD_BASE"
56
+ }),
57
+ client: Flags.boolean({
58
+ description: "build the client code",
59
+ env: "SHOPIFY_FLAG_BUILD_CLIENT",
60
+ allowNo: true,
61
+ default: true
70
62
  }),
71
63
  target: Flags.string({
72
64
  char: "t",
73
- description: "the target platform to build for",
65
+ description: "the target platform to build for (worker or node)",
74
66
  options: ["node", "worker"],
75
67
  default: "worker",
76
- env: "SHOPIFY_HYDROGEN_BUILD_TARGET"
68
+ env: "SHOPIFY_FLAG_BUILD_TARGET"
77
69
  }),
78
- base: Flags.string({
79
- char: "b",
80
- description: " the public path when served in production",
81
- env: "SHOPIFY_HYDROGEN_BUILD_BASE"
70
+ entry: Flags.string({
71
+ description: "produce Server Side Rendering (SSR) build for node environments",
72
+ env: "SHOPIFY_FLAG_BUILD_SSR_ENTRY"
82
73
  })
83
74
  };
84
75
 
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sources":["../../../src/cli/services/build.ts","../../../src/cli/commands/hydrogen/build.ts"],"sourcesContent":["import {build} from 'vite'\nimport {ui, output} from '@shopify/cli-kit'\n\ninterface DevOptions {\n directory: string\n target: 'worker' | 'node'\n base?: string\n}\n\nasync function dev({directory, target, base}: DevOptions) {\n const commonConfig = {base}\n\n const serverBuild = {\n title: `Building ${target} code`,\n task: async () => {\n await build({\n ...commonConfig,\n root: directory,\n build: {\n outDir: 'dist/server',\n ssr: `@shopify/hydrogen/platforms/node`,\n },\n })\n },\n }\n const workerBuild = {\n title: `Building ${target} code`,\n task: async () => {\n process.env.WORKER = 'true'\n\n await build({\n ...commonConfig,\n root: directory,\n build: {\n outDir: 'dist/worker',\n ssr: `@shopify/hydrogen/platforms/worker-event`,\n },\n })\n },\n }\n\n const list = new ui.Listr(\n [\n {\n title: `Building client code`,\n task: async () => {\n await build({\n ...commonConfig,\n root: directory,\n build: {\n outDir: 'dist/client',\n manifest: true,\n },\n })\n },\n },\n target === 'worker' ? workerBuild : serverBuild,\n ],\n {concurrent: false},\n )\n\n await list.run()\n\n output.info(output.content`\n ${target} build completed successfully! ✨\n `)\n}\n\nexport default dev\n","import buildService from '../../services/build'\nimport {Command, Flags} from '@oclif/core'\nimport {path} from '@shopify/cli-kit'\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_HYDROGEN_PATH',\n }),\n target: Flags.string({\n char: 't',\n description: 'the target platform to build for',\n options: ['node', 'worker'],\n default: 'worker',\n env: 'SHOPIFY_HYDROGEN_BUILD_TARGET',\n }),\n base: Flags.string({\n char: 'b',\n description: ' the public path when served in production',\n env: 'SHOPIFY_HYDROGEN_BUILD_BASE',\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 await buildService({...flags, directory, target: flags.target as 'node' | 'worker'})\n }\n}\n"],"names":["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 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,4 +1,4 @@
1
- import { s as semver, c as cliHydrogenPackageJson, C as Command, H as HelpfulError, a as source } from '../../Command-da8a6365.js';
1
+ import { s as semver, c as cliHydrogenPackageJson, C as Command, H as HelpfulError, a as source } from '../../Command-4e1093c6.js';
2
2
  import 'prettier';
3
3
  import { output } from '@shopify/cli-kit';
4
4
  import 'fs';
@@ -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} 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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"}
@@ -2,14 +2,12 @@ import { createServer } from 'vite';
2
2
  import { path } from '@shopify/cli-kit';
3
3
  import { Flags, Command } from '@oclif/core';
4
4
 
5
- async function dev({ directory }) {
6
- await runHydrogen({ directory });
7
- }
8
- async function runHydrogen({ directory }) {
5
+ async function dev({ directory, force }) {
9
6
  const server = await createServer({
10
7
  root: directory,
11
8
  server: {
12
- open: true
9
+ open: true,
10
+ force
13
11
  }
14
12
  });
15
13
  await server.listen();
@@ -20,7 +18,7 @@ const _Dev = class extends Command {
20
18
  async run() {
21
19
  const { flags } = await this.parse(_Dev);
22
20
  const directory = flags.path ? path.resolve(flags.path) : process.cwd();
23
- await dev({ directory });
21
+ await dev({ directory, ...flags });
24
22
  }
25
23
  };
26
24
  let Dev = _Dev;
@@ -29,7 +27,11 @@ Dev.flags = {
29
27
  path: Flags.string({
30
28
  hidden: true,
31
29
  description: "the path to your hydrogen storefront",
32
- env: "SHOPIFY_HYDROGEN_PATH"
30
+ env: "SHOPIFY_FLAG_PATH"
31
+ }),
32
+ force: Flags.boolean({
33
+ description: "force dependency pre-bundling.",
34
+ env: "SHOPIFY_FLAG_DEV_FORCE"
33
35
  })
34
36
  };
35
37
 
@@ -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}\n\nasync function dev({directory}: DevOptions) {\n await runHydrogen({directory})\n}\n\nasync function runHydrogen({directory}: {directory: string}) {\n const server = await createServer({\n root: directory,\n server: {\n open: true,\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_HYDROGEN_PATH',\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})\n }\n}\n"],"names":["devService"],"mappings":";;;;AACA,eAAe,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE;AAClC,EAAE,MAAM,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AACnC,CAAC;AACD,eAAe,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE;AAC1C,EAAE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;AACpC,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE;AACZ,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;AACxB,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AACrB;;ACVA,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,CAAC,CAAC;AACpC,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,uBAAuB;AAChC,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} 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":";;;;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,MAcjC,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;AApBA,IAAA,GAAA,GAAA,KAAA;AAAA,IACS,WAAc,GAAA,mDAAA,CAAA;AADvB,IAES,KAAQ,GAAA;AAAA,EACb,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-da8a6365.js';
1
+ import { b as commonjsGlobal$1, d as commonjsRequire, C as Command, a as source$1, c as cliHydrogenPackageJson } from '../../Command-4e1093c6.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';
@@ -15,7 +15,7 @@ import require$$0$c from 'constants';
15
15
  import require$$16 from 'https';
16
16
  import require$$1$2 from 'child_process';
17
17
  import require$$7 from 'url';
18
- import require$$4 from 'net';
18
+ import require$$19 from 'net';
19
19
  import require$$20 from 'tls';
20
20
  import { ui, output } from '@shopify/cli-kit';
21
21
  import { Flags } from '@oclif/core';
@@ -26,7 +26,7 @@ import 'v8';
26
26
  import 'prettier';
27
27
 
28
28
  var name = "@shopify/cli";
29
- var version$2 = "1.0.9";
29
+ var version$2 = "2.0.1";
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";
@@ -76,13 +76,13 @@ var dependencies = {
76
76
  "@oclif/core": "1.6.4",
77
77
  "@oclif/plugin-help": "^5.1.12",
78
78
  "@oclif/plugin-plugins": "^2.1.0",
79
- "@shopify/cli-kit": "1.0.9"
79
+ "@shopify/cli-kit": "2.0.1"
80
80
  };
81
81
  var devDependencies = {
82
- vitest: "0.9.2"
82
+ vitest: "0.9.4"
83
83
  };
84
84
  var engines = {
85
- node: "^14.13.1 || ^16.0.0 || ^17.0.0"
85
+ node: "^14.13.1 || ^16.0.0 || ^17.0.0 || ^18.0.0"
86
86
  };
87
87
  var os$1 = [
88
88
  "darwin",
@@ -110,7 +110,10 @@ var oclif = {
110
110
  app: {
111
111
  description: "Build Shopify apps"
112
112
  }
113
- }
113
+ },
114
+ additionalHelpFlags: [
115
+ "-h"
116
+ ]
114
117
  };
115
118
  var cliPackageJson = {
116
119
  name: name,
@@ -154,7 +157,7 @@ var constants$1 = require$$0$c;
154
157
  var https = require$$16;
155
158
  var child_process = require$$1$2;
156
159
  var require$$2 = require$$7;
157
- var require$$0$2 = require$$4;
160
+ var require$$0$2 = require$$19;
158
161
  var require$$1 = require$$20;
159
162
 
160
163
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }