@shopify/cli-hydrogen 3.0.22 → 3.0.25
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.
- package/CHANGELOG.md +27 -0
- package/README.md +56 -0
- package/dist/commands/hydrogen/add/eslint.js +5 -1
- package/dist/commands/hydrogen/add/eslint.js.map +1 -1
- package/dist/commands/hydrogen/info.js +3 -1
- package/dist/commands/hydrogen/info.js.map +1 -1
- package/dist/commands/hydrogen/preview.js +6 -3
- package/dist/commands/hydrogen/preview.js.map +1 -1
- package/package.json +9 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @shopify/cli-hydrogen
|
|
2
2
|
|
|
3
|
+
## 3.0.25
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0621bd1d: Add warning for eslint-plugin-hydrogen missing if eslint exists during `hydrogen info` command.
|
|
8
|
+
- ec9e9a47: Fix TypeScript support in `hydrogen add eslint`. This command will now add the TypeScript eslint configuration in addition to the recommended configuration for TypeScript projects.
|
|
9
|
+
- 66cf3dee: Fix error messages to show up when running hydrogen preview
|
|
10
|
+
- Updated dependencies [a6ea9c8d]
|
|
11
|
+
- Updated dependencies [822d0fd3]
|
|
12
|
+
- Updated dependencies [bf8137c2]
|
|
13
|
+
- Updated dependencies [e650b499]
|
|
14
|
+
- Updated dependencies [3360289d]
|
|
15
|
+
- Updated dependencies [2a666db7]
|
|
16
|
+
- @shopify/cli-kit@3.0.25
|
|
17
|
+
|
|
18
|
+
## 3.0.24
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- @shopify/cli-kit@3.0.24
|
|
23
|
+
|
|
24
|
+
## 3.0.23
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- @shopify/cli-kit@3.0.23
|
|
29
|
+
|
|
3
30
|
## 3.0.22
|
|
4
31
|
|
|
5
32
|
### Patch Changes
|
package/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<img src="assets/logo.png" width="150"/>
|
|
2
|
+
|
|
3
|
+
# Shopify CLI
|
|
4
|
+
<a href="http://twitter.com/ShopifyDevs"><img src="https://img.shields.io/twitter/follow/ShopifyDevs?style=flat-square" alt="Twitter Followers"></a>
|
|
5
|
+
<img src="https://img.shields.io/badge/License-MIT-green.svg" alt="License">
|
|
6
|
+
<a href="https://github.com/Shopify/cli/actions/workflows/shopify-cli.yml"></a>
|
|
7
|
+
|
|
8
|
+
With the Shopify command line interface (Shopify CLI 3.0), you can:
|
|
9
|
+
- build custom storefronts and manage their hosting
|
|
10
|
+
- initialize, build, dev, and deploy Shopify apps — and scaffold app extensions
|
|
11
|
+
|
|
12
|
+
<p> </p>
|
|
13
|
+
|
|
14
|
+
### Before you begin ###
|
|
15
|
+
|
|
16
|
+
Install the latest version of [Node.js](https://nodejs.org/en/download/) and [npm](https://docs.npmjs.com/getting-started) (or another package manager of your choice).
|
|
17
|
+
|
|
18
|
+
<p> </p>
|
|
19
|
+
|
|
20
|
+
## Developing apps with Shopify CLI
|
|
21
|
+
|
|
22
|
+
When you’re building a Shopify app, you can initialize your project using your preferred package manager. A single command will install all the dependencies you need — including Shopify CLI itself.
|
|
23
|
+
|
|
24
|
+
Initialize your project using one of the following commands:
|
|
25
|
+
- `npx @shopify/create-app@latest` (installed by default with Node)
|
|
26
|
+
- `pnpm create @shopify/create-app@latest`
|
|
27
|
+
- `yarn create @shopify/app`
|
|
28
|
+
|
|
29
|
+
Learn more in the docs: [Create an app](https://shopify.dev/apps/getting-started/create)
|
|
30
|
+
|
|
31
|
+
<p> </p>
|
|
32
|
+
|
|
33
|
+
## Developing Hydrogen custom storefronts with Shopify CLI ##
|
|
34
|
+
|
|
35
|
+
When you’re building a custom storefront, use Hydrogen, Shopify’s React-based framework optimized for headless commerce. Initialize a new Hydrogen app with a fully-featured Demo Store template, or start from scratch with the minimal Hello World template. Shopify Plus stores can deploy their Hydrogen apps to Oxygen, Shopify’s global hosting solution, at no extra cost.
|
|
36
|
+
|
|
37
|
+
Get started using one of the following commands:
|
|
38
|
+
- `npm init @shopify/hydrogen@latest`
|
|
39
|
+
- `npx @shopify/create-hydrogen@latest`
|
|
40
|
+
- `pnpm create @shopify/create-hydrogen@latest`
|
|
41
|
+
- `yarn create @shopify/hydrogen`
|
|
42
|
+
|
|
43
|
+
<p> </p>
|
|
44
|
+
|
|
45
|
+
## Help 🖐
|
|
46
|
+
|
|
47
|
+
If you encounter issues using the CLI or have feedback you'd like to share with us, below are some options:
|
|
48
|
+
|
|
49
|
+
- [Open a GitHub issue](https://github.com/Shopify/shopify-cli-next/issues) - To report bugs or request new features, open an issue in the Shopify CLI repository.
|
|
50
|
+
- [Shopify Community Forums](https://community.shopify.com/) - Visit our forums to connect with the community and learn more about Shopify CLI development.
|
|
51
|
+
|
|
52
|
+
<p> </p>
|
|
53
|
+
|
|
54
|
+
## References
|
|
55
|
+
|
|
56
|
+
- [oclif](https://oclif.io/)
|
|
@@ -45,7 +45,11 @@ async function addESLint({ app, force, install }) {
|
|
|
45
45
|
throw new error.Abort("ESLint config already exists.", "Use --force to override existing config.");
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
const
|
|
48
|
+
const extended = [`'plugin:hydrogen/recommended'`];
|
|
49
|
+
if (app.language === "TypeScript") {
|
|
50
|
+
extended.push(`'plugin:hydrogen/typescript'`);
|
|
51
|
+
}
|
|
52
|
+
const eslintConfig = await file.format(["module.exports = {", "extends: [", `${extended.join(",")}`, " ],", " };"].join("\n"), { path: genericConfigurationFileNames.eslint });
|
|
49
53
|
await file.write(eslintConfigPath, eslintConfig);
|
|
50
54
|
task.title = "ESLint configuration added";
|
|
51
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslint.js","sources":["../../../../src/cli/services/eslint.ts","../../../../src/cli/commands/hydrogen/add/eslint.ts"],"sourcesContent":["import {HydrogenApp} from '../models/hydrogen'\nimport {genericConfigurationFileNames} from '../constants'\nimport {ui, vscode, npm, file, dependency, path, error} from '@shopify/cli-kit'\nimport stream from 'node:stream'\n\ninterface AddESlintOptions {\n app: HydrogenApp\n force: boolean\n install: boolean\n}\n\nexport async function addESLint({app, force, install}: AddESlintOptions) {\n const list = new ui.Listr([\n {\n title: 'Installing additional dependencies',\n skip: () => !install,\n task: async (_, task) => {\n const requiredDependencies = ['eslint', 'eslint-plugin-hydrogen', 'prettier', '@shopify/prettier-config']\n await dependency.addNPMDependenciesWithoutVersionIfNeeded(requiredDependencies, {\n dependencyManager: app.dependencyManager,\n type: 'prod',\n directory: app.directory,\n stderr: new stream.Writable({\n write(chunk, encoding, next) {\n task.output = chunk.toString()\n next()\n },\n }),\n stdout: new stream.Writable({\n write(chunk, encoding, next) {\n task.output = chunk.toString()\n next()\n },\n }),\n })\n task.title = 'Dependencies installed'\n },\n },\n\n {\n title: 'Adding ESLint configuration',\n task: async (_, task) => {\n const eslintConfigPath = path.join(app.directory, genericConfigurationFileNames.eslint)\n\n if (await file.exists(eslintConfigPath)) {\n if (force) {\n await file.remove(eslintConfigPath)\n } else {\n throw new error.Abort('ESLint config already exists.', 'Use --force to override existing config.')\n }\n }\n\n const eslintConfig = await file.format(\n ['module.exports = {', 'extends: [',
|
|
1
|
+
{"version":3,"file":"eslint.js","sources":["../../../../src/cli/services/eslint.ts","../../../../src/cli/commands/hydrogen/add/eslint.ts"],"sourcesContent":["import {HydrogenApp} from '../models/hydrogen'\nimport {genericConfigurationFileNames} from '../constants'\nimport {ui, vscode, npm, file, dependency, path, error} from '@shopify/cli-kit'\nimport stream from 'node:stream'\n\ninterface AddESlintOptions {\n app: HydrogenApp\n force: boolean\n install: boolean\n}\n\nexport async function addESLint({app, force, install}: AddESlintOptions) {\n const list = new ui.Listr([\n {\n title: 'Installing additional dependencies',\n skip: () => !install,\n task: async (_, task) => {\n const requiredDependencies = ['eslint', 'eslint-plugin-hydrogen', 'prettier', '@shopify/prettier-config']\n await dependency.addNPMDependenciesWithoutVersionIfNeeded(requiredDependencies, {\n dependencyManager: app.dependencyManager,\n type: 'prod',\n directory: app.directory,\n stderr: new stream.Writable({\n write(chunk, encoding, next) {\n task.output = chunk.toString()\n next()\n },\n }),\n stdout: new stream.Writable({\n write(chunk, encoding, next) {\n task.output = chunk.toString()\n next()\n },\n }),\n })\n task.title = 'Dependencies installed'\n },\n },\n\n {\n title: 'Adding ESLint configuration',\n task: async (_, task) => {\n const eslintConfigPath = path.join(app.directory, genericConfigurationFileNames.eslint)\n\n if (await file.exists(eslintConfigPath)) {\n if (force) {\n await file.remove(eslintConfigPath)\n } else {\n throw new error.Abort('ESLint config already exists.', 'Use --force to override existing config.')\n }\n }\n\n const extended = [`'plugin:hydrogen/recommended'`]\n\n if (app.language === 'TypeScript') {\n extended.push(`'plugin:hydrogen/typescript'`)\n }\n\n const eslintConfig = await file.format(\n ['module.exports = {', 'extends: [', `${extended.join(',')}`, ' ],', ' };'].join('\\n'),\n {path: genericConfigurationFileNames.eslint},\n )\n\n await file.write(eslintConfigPath, eslintConfig)\n\n task.title = 'ESLint configuration added'\n },\n },\n {\n title: 'Updating package.json',\n task: async (_, task) => {\n const packageJSON = await npm.readPackageJSON(app.directory)\n\n packageJSON.scripts.lint = `eslint --ext .js,.ts,.jsx,.tsx src/`\n\n packageJSON.prettier = '@shopify/prettier-config'\n\n await npm.writePackageJSON(app.directory, packageJSON)\n\n task.title = 'Package.json updated'\n },\n },\n {\n title: 'Adding editor plugin recommendations',\n skip: async () => !(await vscode.isVSCode(app.directory)),\n task: async (_, task) => {\n await vscode.addRecommendedExtensions(app.directory, ['dbaeumer.vscode-eslint'])\n task.title = 'Editor plugin recommendations added'\n },\n },\n ])\n await list.run()\n}\n","import {hydrogenFlags} from '../../../flags'\nimport {addESLint} from '../../../services/eslint'\nimport {load as loadApp, HydrogenApp} from '../../../models/hydrogen'\nimport {Command, Flags} from '@oclif/core'\nimport {cli, path} from '@shopify/cli-kit'\n\nexport default class AddESLint extends Command {\n static flags = {\n ...cli.globalFlags,\n ...hydrogenFlags,\n force: Flags.boolean({\n hidden: false,\n char: 'f',\n description: 'Overwrite existing configuration',\n default: false,\n env: 'SHOPIFY_FLAG_FORCE',\n }),\n }\n\n public async run(): Promise<void> {\n const {\n flags: {path: pathFlag, install, force},\n } = await this.parse(AddESLint)\n const directory = pathFlag ? path.resolve(pathFlag) : process.cwd()\n\n const app: HydrogenApp = await loadApp(directory)\n\n await addESLint({app, install, force})\n }\n}\n"],"names":["loadApp"],"mappings":"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"}
|
|
@@ -58,6 +58,9 @@ ${errors.map(this.formattedError).join("\n")}`;
|
|
|
58
58
|
const errors = [];
|
|
59
59
|
const title = "ESLint";
|
|
60
60
|
const dependencyResults = this.dependencyCheck(["eslint", "eslint-plugin-hydrogen"]);
|
|
61
|
+
if (this.app.nodeDependencies.eslint && !this.app.nodeDependencies["eslint-plugin-hydrogen"]) {
|
|
62
|
+
errors.push("Run `yarn shopify add eslint` to install and configure eslint for hydrogen");
|
|
63
|
+
}
|
|
61
64
|
let errorContent = `
|
|
62
65
|
${errors.map(this.formattedError).join("\n")}`;
|
|
63
66
|
if (errorContent.trim() === "")
|
|
@@ -98,7 +101,6 @@ ${errors.map(this.formattedError).join("\n")}`;
|
|
|
98
101
|
systemInfoSection() {
|
|
99
102
|
const title = "Tooling and System";
|
|
100
103
|
const { platform, arch } = os.platformAndArch();
|
|
101
|
-
this.dependencyCheck(["eslint", "eslint-plugin-hydrogen"]);
|
|
102
104
|
const lines = [
|
|
103
105
|
...this.dependencyCheck(["@shopify/hydrogen", "@shopify/cli-hydrogen", "@shopify/cli"]),
|
|
104
106
|
["Package manager", this.app.dependencyManager],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sources":["../../../src/cli/services/info.ts","../../../src/cli/commands/hydrogen/info.ts"],"sourcesContent":["import {HydrogenApp} from '../models/hydrogen'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport {HydrogenConfig} from '@shopify/hydrogen/config'\nimport {output, string, os} from '@shopify/cli-kit'\n\ninterface InfoOptions {\n showPrivateData: boolean\n}\n\nexport function info(app: HydrogenApp, {showPrivateData}: InfoOptions): output.Message {\n const appInfo = new HydrogenAppInfo(app)\n\n return appInfo.output({showPrivateData})\n}\n\nconst NOT_FOUND_TEXT = output.content`${output.token.italic('Not found')}`.value\nconst NOT_CONFIGURED_TEXT = output.content`${output.token.italic('Not yet configured')}`.value\n\nclass AppInfo {\n private app: HydrogenApp\n constructor(app: HydrogenApp) {\n this.app = app\n }\n\n output({showPrivateData}: InfoOptions): string {\n const sections: [string, string][] = [\n this.projectSettingsSection(),\n this.storefrontSettingsSection({showPrivateData}),\n this.eslintSection(),\n this.systemInfoSection(),\n ]\n return sections.map((sectionContents: [string, string]) => this.section(...sectionContents)).join('\\n\\n')\n }\n\n projectSettingsSection(): [string, string] {\n const title = 'Your Project'\n\n const lines = [\n ['Name', this.app.name],\n ['Project location', this.app.directory],\n ['Language', this.app.language],\n ]\n\n const projectInfo = this.linesToColumns(lines)\n return [title, projectInfo]\n }\n\n storefrontSettingsSection({showPrivateData}: InfoOptions): [string, string] {\n const errors: string[] = []\n const title = 'Storefront'\n\n if (this.app.configuration.shopify && typeof this.app.configuration.shopify === 'function') {\n return [title, 'Storefront settings defined as a function are not supported in this command.']\n }\n\n const privateFields = showPrivateData ? ['storefrontToken'] : []\n\n const fields = [\n 'storeDomain',\n 'storefrontApiVersion',\n ...privateFields,\n ] as unknown as keyof HydrogenConfig['shopify'][]\n\n const storefrontInfo = this.configurationCheck(fields, this.app.configuration.shopify)\n\n let errorContent = `\\n${errors.map(this.formattedError).join('\\n')}`\n\n if (errorContent.trim() === '') errorContent = ''\n\n return [title, `${this.linesToColumns(storefrontInfo)}${errorContent}`]\n }\n\n eslintSection(): [string, string] {\n const errors: string[] = []\n const title = 'ESLint'\n const dependencyResults = this.dependencyCheck(['eslint', 'eslint-plugin-hydrogen'])\n\n let errorContent = `\\n${errors.map(this.formattedError).join('\\n')}`\n\n if (errorContent.trim() === '') errorContent = ''\n\n return [title, `${this.linesToColumns(dependencyResults)}${errorContent}`]\n }\n\n configurationCheck(\n key: keyof HydrogenConfig | keyof HydrogenConfig[],\n configObject: HydrogenConfig | HydrogenConfig['shopify'] = this.app.configuration,\n ): string[][] {\n const keys = Array.isArray(key) ? key : [key]\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const result = keys.reduce((acc, key) => {\n const found = configObject[key as keyof HydrogenConfig & keyof HydrogenConfig['shopify']]\n\n if (typeof found === 'string') {\n const result = [string.capitalize(key.toString()), found]\n return [...acc, result]\n }\n\n const result = [key, NOT_CONFIGURED_TEXT]\n return [...acc, result]\n }, [])\n\n return result\n }\n\n dependencyCheck(dependency: string | string[]): string[][] {\n const dependencies = Array.isArray(dependency) ? dependency : [dependency]\n\n const result = dependencies.reduce<string[][]>((acc, dependency) => {\n const found = this.app.nodeDependencies[dependency]\n if (found) {\n const result = [dependency, found]\n return [...acc, result]\n }\n\n const result = [dependency, NOT_FOUND_TEXT]\n return [...acc, result]\n }, [])\n\n return result\n }\n\n formattedError(str: string): string {\n const [errorFirstLine, ...errorRemainingLines] = str.split('\\n')\n const errorLines = [`! ${errorFirstLine}`, ...errorRemainingLines.map((line) => ` ${line}`)]\n return output.content`${output.token.errorText(errorLines.join('\\n'))}`.value\n }\n\n systemInfoSection(): [string, string] {\n const title = 'Tooling and System'\n const {platform, arch} = os.platformAndArch()\n const dependencyResults = this.dependencyCheck(['eslint', 'eslint-plugin-hydrogen'])\n\n const lines: string[][] = [\n ...this.dependencyCheck(['@shopify/hydrogen', '@shopify/cli-hydrogen', '@shopify/cli']),\n ['Package manager', this.app.dependencyManager],\n ['OS', `${platform}-${arch}`],\n ['Shell', process.env.SHELL || 'unknown'],\n ['Node.js version', process.version],\n ]\n\n return [title, this.linesToColumns(lines)]\n }\n\n linesToColumns(lines: string[][]): string {\n const widths: number[] = []\n for (let i = 0; lines[0] && i < lines[0].length; i++) {\n const columnRows = lines.map((line) => line[i])\n widths.push(Math.max(...columnRows.map((row) => output.unstyled(row).length)))\n }\n const paddedLines = lines\n .map((line) => {\n return line\n .map((col, index) => {\n return `${col}${' '.repeat(widths[index] - output.unstyled(col).length)}`\n })\n .join(' ')\n .trimEnd()\n })\n .join('\\n')\n return paddedLines\n }\n\n section(title: string, body: string): string {\n const formattedTitle = `${title.toUpperCase()}${' '.repeat(35 - title.length)}`\n return output.content`${output.token.heading(formattedTitle)}\\n${body}`.value\n }\n}\n\nclass HydrogenAppInfo extends AppInfo {}\n","import {info} from '../../services/info'\nimport {load as loadApp, HydrogenApp} from '../../models/hydrogen'\nimport {hydrogenFlags} from '../../flags'\nimport {Command, Flags} from '@oclif/core'\nimport {output, path, cli} from '@shopify/cli-kit'\n\nexport default class Info extends Command {\n static description = 'Print basic information about your hydrogen app'\n\n static flags = {\n ...cli.globalFlags,\n ...hydrogenFlags,\n showToken: Flags.boolean({\n hidden: false,\n description: 'Show storefront API token',\n default: false,\n env: 'SHOPIFY_HYDROGEN_FLAG_SHOW_TOKEN',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(Info)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n const app: HydrogenApp = await loadApp(directory)\n\n output.info(info(app, {showPrivateData: flags.showToken}))\n if (app.errors) process.exit(2)\n }\n}\n"],"names":["loadApp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"info.js","sources":["../../../src/cli/services/info.ts","../../../src/cli/commands/hydrogen/info.ts"],"sourcesContent":["import {HydrogenApp} from '../models/hydrogen'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport {HydrogenConfig} from '@shopify/hydrogen/config'\nimport {output, string, os} from '@shopify/cli-kit'\n\ninterface InfoOptions {\n showPrivateData: boolean\n}\n\nexport function info(app: HydrogenApp, {showPrivateData}: InfoOptions): output.Message {\n const appInfo = new HydrogenAppInfo(app)\n\n return appInfo.output({showPrivateData})\n}\n\nconst NOT_FOUND_TEXT = output.content`${output.token.italic('Not found')}`.value\nconst NOT_CONFIGURED_TEXT = output.content`${output.token.italic('Not yet configured')}`.value\n\nclass AppInfo {\n private app: HydrogenApp\n constructor(app: HydrogenApp) {\n this.app = app\n }\n\n output({showPrivateData}: InfoOptions): string {\n const sections: [string, string][] = [\n this.projectSettingsSection(),\n this.storefrontSettingsSection({showPrivateData}),\n this.eslintSection(),\n this.systemInfoSection(),\n ]\n return sections.map((sectionContents: [string, string]) => this.section(...sectionContents)).join('\\n\\n')\n }\n\n projectSettingsSection(): [string, string] {\n const title = 'Your Project'\n\n const lines = [\n ['Name', this.app.name],\n ['Project location', this.app.directory],\n ['Language', this.app.language],\n ]\n\n const projectInfo = this.linesToColumns(lines)\n return [title, projectInfo]\n }\n\n storefrontSettingsSection({showPrivateData}: InfoOptions): [string, string] {\n const errors: string[] = []\n const title = 'Storefront'\n\n if (this.app.configuration.shopify && typeof this.app.configuration.shopify === 'function') {\n return [title, 'Storefront settings defined as a function are not supported in this command.']\n }\n\n const privateFields = showPrivateData ? ['storefrontToken'] : []\n\n const fields = [\n 'storeDomain',\n 'storefrontApiVersion',\n ...privateFields,\n ] as unknown as keyof HydrogenConfig['shopify'][]\n\n const storefrontInfo = this.configurationCheck(fields, this.app.configuration.shopify)\n\n let errorContent = `\\n${errors.map(this.formattedError).join('\\n')}`\n\n if (errorContent.trim() === '') errorContent = ''\n\n return [title, `${this.linesToColumns(storefrontInfo)}${errorContent}`]\n }\n\n eslintSection(): [string, string] {\n const errors: string[] = []\n const title = 'ESLint'\n const dependencyResults = this.dependencyCheck(['eslint', 'eslint-plugin-hydrogen'])\n\n if (this.app.nodeDependencies.eslint && !this.app.nodeDependencies['eslint-plugin-hydrogen']) {\n errors.push('Run `yarn shopify add eslint` to install and configure eslint for hydrogen')\n }\n\n let errorContent = `\\n${errors.map(this.formattedError).join('\\n')}`\n\n if (errorContent.trim() === '') errorContent = ''\n\n return [title, `${this.linesToColumns(dependencyResults)}${errorContent}`]\n }\n\n configurationCheck(\n key: keyof HydrogenConfig | keyof HydrogenConfig[],\n configObject: HydrogenConfig | HydrogenConfig['shopify'] = this.app.configuration,\n ): string[][] {\n const keys = Array.isArray(key) ? key : [key]\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const result = keys.reduce((acc, key) => {\n const found = configObject[key as keyof HydrogenConfig & keyof HydrogenConfig['shopify']]\n\n if (typeof found === 'string') {\n const result = [string.capitalize(key.toString()), found]\n return [...acc, result]\n }\n\n const result = [key, NOT_CONFIGURED_TEXT]\n return [...acc, result]\n }, [])\n\n return result\n }\n\n dependencyCheck(dependency: string | string[]): string[][] {\n const dependencies = Array.isArray(dependency) ? dependency : [dependency]\n\n const result = dependencies.reduce<string[][]>((acc, dependency) => {\n const found = this.app.nodeDependencies[dependency]\n if (found) {\n const result = [dependency, found]\n return [...acc, result]\n }\n\n const result = [dependency, NOT_FOUND_TEXT]\n return [...acc, result]\n }, [])\n\n return result\n }\n\n formattedError(str: string): string {\n const [errorFirstLine, ...errorRemainingLines] = str.split('\\n')\n const errorLines = [`! ${errorFirstLine}`, ...errorRemainingLines.map((line) => ` ${line}`)]\n return output.content`${output.token.errorText(errorLines.join('\\n'))}`.value\n }\n\n systemInfoSection(): [string, string] {\n const title = 'Tooling and System'\n const {platform, arch} = os.platformAndArch()\n const lines: string[][] = [\n ...this.dependencyCheck(['@shopify/hydrogen', '@shopify/cli-hydrogen', '@shopify/cli']),\n ['Package manager', this.app.dependencyManager],\n ['OS', `${platform}-${arch}`],\n ['Shell', process.env.SHELL || 'unknown'],\n ['Node.js version', process.version],\n ]\n\n return [title, this.linesToColumns(lines)]\n }\n\n linesToColumns(lines: string[][]): string {\n const widths: number[] = []\n for (let i = 0; lines[0] && i < lines[0].length; i++) {\n const columnRows = lines.map((line) => line[i])\n widths.push(Math.max(...columnRows.map((row) => output.unstyled(row).length)))\n }\n const paddedLines = lines\n .map((line) => {\n return line\n .map((col, index) => {\n return `${col}${' '.repeat(widths[index] - output.unstyled(col).length)}`\n })\n .join(' ')\n .trimEnd()\n })\n .join('\\n')\n return paddedLines\n }\n\n section(title: string, body: string): string {\n const formattedTitle = `${title.toUpperCase()}${' '.repeat(35 - title.length)}`\n return output.content`${output.token.heading(formattedTitle)}\\n${body}`.value\n }\n}\n\nclass HydrogenAppInfo extends AppInfo {}\n","import {info} from '../../services/info'\nimport {load as loadApp, HydrogenApp} from '../../models/hydrogen'\nimport {hydrogenFlags} from '../../flags'\nimport {Command, Flags} from '@oclif/core'\nimport {output, path, cli} from '@shopify/cli-kit'\n\nexport default class Info extends Command {\n static description = 'Print basic information about your hydrogen app'\n\n static flags = {\n ...cli.globalFlags,\n ...hydrogenFlags,\n showToken: Flags.boolean({\n hidden: false,\n description: 'Show storefront API token',\n default: false,\n env: 'SHOPIFY_HYDROGEN_FLAG_SHOW_TOKEN',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(Info)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n const app: HydrogenApp = await loadApp(directory)\n\n output.info(info(app, {showPrivateData: flags.showToken}))\n if (app.errors) process.exit(2)\n }\n}\n"],"names":["loadApp"],"mappings":"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"}
|
|
@@ -9,13 +9,15 @@ async function previewInNode({ directory, port }) {
|
|
|
9
9
|
output.info(output.content`Couldn’t find a Node.js server build for this project. Running ${output.token.packagejsonScript("yarn", "shopify hydrogen build", "--target=node")} to create one.`);
|
|
10
10
|
await system.exec("yarn", ["shopify", "hydrogen", "build", "--target=node"], {
|
|
11
11
|
cwd: directory,
|
|
12
|
-
stdout: process.stdout
|
|
12
|
+
stdout: process.stdout,
|
|
13
|
+
stderr: process.stderr
|
|
13
14
|
});
|
|
14
15
|
}
|
|
15
16
|
await system.exec("node", ["--enable-source-maps", buildOutputPath], {
|
|
16
17
|
env: { PORT: `${port}` },
|
|
17
18
|
cwd: directory,
|
|
18
|
-
stdout: process.stdout
|
|
19
|
+
stdout: process.stdout,
|
|
20
|
+
stderr: process.stderr
|
|
19
21
|
});
|
|
20
22
|
}
|
|
21
23
|
async function previewInWorker({ directory, port }) {
|
|
@@ -40,7 +42,8 @@ async function previewInWorker({ directory, port }) {
|
|
|
40
42
|
await system.exec(executable, [], {
|
|
41
43
|
env: { NODE_OPTIONS: "--experimental-vm-modules" },
|
|
42
44
|
cwd: directory,
|
|
43
|
-
stdout: process.stdout
|
|
45
|
+
stdout: process.stdout,
|
|
46
|
+
stderr: process.stderr
|
|
44
47
|
});
|
|
45
48
|
}
|
|
46
49
|
const OxygenPreviewExecutableNotFound = new error.Bug("Could not locate the executable file to run Oxygen locally.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.js","sources":["../../../src/cli/services/preview.ts","../../../src/cli/commands/hydrogen/preview.ts"],"sourcesContent":["import {path, error, system, file, output} from '@shopify/cli-kit'\nimport {fileURLToPath} from 'url'\n\ninterface PreviewOptions {\n directory: string\n port: number\n}\n\nexport async function previewInNode({directory, port}: PreviewOptions) {\n const buildOutputPath = await path.resolve(directory, 'dist/node')\n\n if (!(await file.exists(buildOutputPath))) {\n output.info(\n output.content`Couldn’t find a Node.js server build for this project. Running ${output.token.packagejsonScript(\n 'yarn',\n 'shopify hydrogen build',\n '--target=node',\n )} to create one.`,\n )\n\n await system.exec('yarn', ['shopify', 'hydrogen', 'build', '--target=node'], {\n cwd: directory,\n stdout: process.stdout,\n })\n }\n\n await system.exec('node', ['--enable-source-maps', buildOutputPath], {\n env: {PORT: `${port}`},\n cwd: directory,\n stdout: process.stdout,\n })\n}\n\nexport async function previewInWorker({directory, port}: PreviewOptions) {\n const config = {\n port,\n workerFile: 'dist/worker/index.js',\n assetsDir: 'dist/client',\n buildCommand: 'yarn build',\n modules: true,\n watch: true,\n buildWatchPaths: ['./src'],\n autoReload: true,\n }\n\n await file.write(path.resolve(directory, 'mini-oxygen.config.json'), JSON.stringify(config, null, 2))\n\n function cleanUp(options: {exit: boolean}) {\n if (options.exit) {\n file.remove(path.resolve(directory, 'mini-oxygen.config.json'))\n }\n }\n\n process.on('SIGINT', cleanUp.bind(null, {exit: true}))\n\n const executable = await oxygenPreviewExecutable()\n\n await system.exec(executable, [], {\n env: {NODE_OPTIONS: '--experimental-vm-modules'},\n cwd: directory,\n stdout: process.stdout,\n })\n}\n\nexport const OxygenPreviewExecutableNotFound = new error.Bug(\n 'Could not locate the executable file to run Oxygen locally.',\n)\n\nasync function oxygenPreviewExecutable(): Promise<string> {\n const cwd = path.dirname(fileURLToPath(import.meta.url))\n const executablePath = await path.findUp('node_modules/.bin/oxygen-preview', {type: 'file', cwd})\n if (!executablePath) {\n throw OxygenPreviewExecutableNotFound\n }\n return executablePath\n}\n","import {previewInWorker, previewInNode} from '../../services/preview'\nimport {hydrogenFlags} from '../../flags'\nimport {path, cli} from '@shopify/cli-kit'\nimport {Command, Flags} from '@oclif/core'\n\nexport default class Preview extends Command {\n static description = 'Run a Hydrogen storefront locally in a worker environment'\n static flags = {\n ...cli.globalFlags,\n path: hydrogenFlags.path,\n port: Flags.string({\n char: 'p',\n hidden: true,\n description: 'the port to run the preview server on',\n default: '3000',\n env: 'SHOPIFY_FLAG_PORT',\n }),\n target: Flags.string({\n char: 't',\n description: 'the target environment (worker or node)',\n options: ['node', 'worker'],\n default: 'worker',\n env: 'SHOPIFY_FLAG_PREVIEW_TARGET',\n }),\n }\n\n async run(): Promise<void> {\n const {flags} = await this.parse(Preview)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n const port = parseInt(flags.port, 10)\n\n if (flags.target === 'worker') {\n await previewInWorker({directory, port})\n } else if (flags.target === 'node') {\n await previewInNode({directory, port})\n }\n }\n}\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"preview.js","sources":["../../../src/cli/services/preview.ts","../../../src/cli/commands/hydrogen/preview.ts"],"sourcesContent":["import {path, error, system, file, output} from '@shopify/cli-kit'\nimport {fileURLToPath} from 'url'\n\ninterface PreviewOptions {\n directory: string\n port: number\n}\n\nexport async function previewInNode({directory, port}: PreviewOptions) {\n const buildOutputPath = await path.resolve(directory, 'dist/node')\n\n if (!(await file.exists(buildOutputPath))) {\n output.info(\n output.content`Couldn’t find a Node.js server build for this project. Running ${output.token.packagejsonScript(\n 'yarn',\n 'shopify hydrogen build',\n '--target=node',\n )} to create one.`,\n )\n\n await system.exec('yarn', ['shopify', 'hydrogen', 'build', '--target=node'], {\n cwd: directory,\n stdout: process.stdout,\n stderr: process.stderr,\n })\n }\n\n await system.exec('node', ['--enable-source-maps', buildOutputPath], {\n env: {PORT: `${port}`},\n cwd: directory,\n stdout: process.stdout,\n stderr: process.stderr,\n })\n}\n\nexport async function previewInWorker({directory, port}: PreviewOptions) {\n const config = {\n port,\n workerFile: 'dist/worker/index.js',\n assetsDir: 'dist/client',\n buildCommand: 'yarn build',\n modules: true,\n watch: true,\n buildWatchPaths: ['./src'],\n autoReload: true,\n }\n\n await file.write(path.resolve(directory, 'mini-oxygen.config.json'), JSON.stringify(config, null, 2))\n\n function cleanUp(options: {exit: boolean}) {\n if (options.exit) {\n file.remove(path.resolve(directory, 'mini-oxygen.config.json'))\n }\n }\n\n process.on('SIGINT', cleanUp.bind(null, {exit: true}))\n\n const executable = await oxygenPreviewExecutable()\n\n await system.exec(executable, [], {\n env: {NODE_OPTIONS: '--experimental-vm-modules'},\n cwd: directory,\n stdout: process.stdout,\n stderr: process.stderr,\n })\n}\n\nexport const OxygenPreviewExecutableNotFound = new error.Bug(\n 'Could not locate the executable file to run Oxygen locally.',\n)\n\nasync function oxygenPreviewExecutable(): Promise<string> {\n const cwd = path.dirname(fileURLToPath(import.meta.url))\n const executablePath = await path.findUp('node_modules/.bin/oxygen-preview', {type: 'file', cwd})\n if (!executablePath) {\n throw OxygenPreviewExecutableNotFound\n }\n return executablePath\n}\n","import {previewInWorker, previewInNode} from '../../services/preview'\nimport {hydrogenFlags} from '../../flags'\nimport {path, cli} from '@shopify/cli-kit'\nimport {Command, Flags} from '@oclif/core'\n\nexport default class Preview extends Command {\n static description = 'Run a Hydrogen storefront locally in a worker environment'\n static flags = {\n ...cli.globalFlags,\n path: hydrogenFlags.path,\n port: Flags.string({\n char: 'p',\n hidden: true,\n description: 'the port to run the preview server on',\n default: '3000',\n env: 'SHOPIFY_FLAG_PORT',\n }),\n target: Flags.string({\n char: 't',\n description: 'the target environment (worker or node)',\n options: ['node', 'worker'],\n default: 'worker',\n env: 'SHOPIFY_FLAG_PREVIEW_TARGET',\n }),\n }\n\n async run(): Promise<void> {\n const {flags} = await this.parse(Preview)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n const port = parseInt(flags.port, 10)\n\n if (flags.target === 'worker') {\n await previewInWorker({directory, port})\n } else if (flags.target === 'node') {\n await previewInNode({directory, port})\n }\n }\n}\n"],"names":[],"mappings":";;;;;AAQoC,eAAA,aAAA,CAAA,EAAC,WAAW,IAAuB,EAAA,EAAA;AACrE,EAAA,MAAM,eAAkB,GAAA,MAAM,IAAK,CAAA,OAAA,CAAQ,WAAW,WAAW,CAAA,CAAA;AAEjE,EAAA,IAAI,CAAE,MAAM,IAAK,CAAA,MAAA,CAAO,eAAe,CAAI,EAAA;AACzC,IAAO,MAAA,CAAA,IAAA,CACL,OAAO,OAAyE,CAAA,+DAAA,EAAA,MAAA,CAAO,MAAM,iBAC3F,CAAA,MAAA,EACA,wBACA,EAAA,eACF,CACF,CAAA,eAAA,CAAA,CAAA,CAAA;AAEA,IAAM,MAAA,MAAA,CAAO,KAAK,MAAQ,EAAA,CAAC,WAAW,UAAY,EAAA,OAAA,EAAS,eAAe,CAAG,EAAA;AAAA,MAC3E,GAAK,EAAA,SAAA;AAAA,MACL,QAAQ,OAAQ,CAAA,MAAA;AAAA,MAChB,QAAQ,OAAQ,CAAA,MAAA;AAAA,KACjB,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,OAAO,IAAK,CAAA,MAAA,EAAQ,CAAC,sBAAA,EAAwB,eAAe,CAAG,EAAA;AAAA,IACnE,GAAK,EAAA,EAAC,IAAM,EAAA,CAAA,EAAG,IAAM,CAAA,CAAA,EAAA;AAAA,IACrB,GAAK,EAAA,SAAA;AAAA,IACL,QAAQ,OAAQ,CAAA,MAAA;AAAA,IAChB,QAAQ,OAAQ,CAAA,MAAA;AAAA,GACjB,CAAA,CAAA;AACH,CAAA;AAEsC,eAAA,eAAA,CAAA,EAAC,WAAW,IAAuB,EAAA,EAAA;AACvE,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,IAAA;AAAA,IACA,UAAY,EAAA,sBAAA;AAAA,IACZ,SAAW,EAAA,aAAA;AAAA,IACX,YAAc,EAAA,YAAA;AAAA,IACd,OAAS,EAAA,IAAA;AAAA,IACT,KAAO,EAAA,IAAA;AAAA,IACP,eAAA,EAAiB,CAAC,OAAO,CAAA;AAAA,IACzB,UAAY,EAAA,IAAA;AAAA,GACd,CAAA;AAEA,EAAA,MAAM,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,OAAA,CAAQ,SAAW,EAAA,yBAAyB,CAAG,EAAA,IAAA,CAAK,SAAU,CAAA,MAAA,EAAQ,IAAM,EAAA,CAAC,CAAC,CAAA,CAAA;AAEpG,EAAA,SAAA,OAAA,CAAiB,OAA0B,EAAA;AACzC,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,SAAA,EAAW,yBAAyB,CAAC,CAAA,CAAA;AAAA,KAChE;AAAA,GACF;AAEA,EAAQ,OAAA,CAAA,EAAA,CAAG,UAAU,OAAQ,CAAA,IAAA,CAAK,MAAM,EAAC,IAAA,EAAM,IAAI,EAAC,CAAC,CAAA,CAAA;AAErD,EAAM,MAAA,UAAA,GAAa,MAAM,uBAAwB,EAAA,CAAA;AAEjD,EAAA,MAAM,MAAO,CAAA,IAAA,CAAK,UAAY,EAAA,EAAI,EAAA;AAAA,IAChC,GAAA,EAAK,EAAC,YAAA,EAAc,2BAA2B,EAAA;AAAA,IAC/C,GAAK,EAAA,SAAA;AAAA,IACL,QAAQ,OAAQ,CAAA,MAAA;AAAA,IAChB,QAAQ,OAAQ,CAAA,MAAA;AAAA,GACjB,CAAA,CAAA;AACH,CAAA;AAEO,MAAM,+BAAkC,GAAA,IAAI,KAAM,CAAA,GAAA,CACvD,6DACF,CAAA,CAAA;AAEA,eAA0D,uBAAA,GAAA;AACxD,EAAA,MAAM,MAAM,IAAK,CAAA,OAAA,CAAQ,aAAc,CAAA,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA,CAAA;AACvD,EAAM,MAAA,cAAA,GAAiB,MAAM,IAAK,CAAA,MAAA,CAAO,oCAAoC,EAAC,IAAA,EAAM,MAAQ,EAAA,GAAA,EAAI,CAAA,CAAA;AAChG,EAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,IAAM,MAAA,+BAAA,CAAA;AAAA,GACR;AACA,EAAO,OAAA,cAAA,CAAA;AACT;;ACzEA,MAAqB,QAAA,GAArB,cAAqC,OAAQ,CAAA;AAAA,EAqB3C,MAAM,GAAqB,GAAA;AACzB,IAAA,MAAM,EAAC,KAAA,EAAA,GAAS,MAAM,IAAA,CAAK,MAAM,QAAO,CAAA,CAAA;AACxC,IAAM,MAAA,SAAA,GAAY,MAAM,IAAO,GAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,IAAI,CAAI,GAAA,OAAA,CAAQ,GAAI,EAAA,CAAA;AACtE,IAAA,MAAM,IAAO,GAAA,QAAA,CAAS,KAAM,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAEpC,IAAI,IAAA,KAAA,CAAM,WAAW,QAAU,EAAA;AAC7B,MAAA,MAAM,eAAgB,CAAA,EAAC,SAAW,EAAA,IAAA,EAAK,CAAA,CAAA;AAAA,KACzC,MAAA,IAAW,KAAM,CAAA,MAAA,KAAW,MAAQ,EAAA;AAClC,MAAA,MAAM,aAAc,CAAA,EAAC,SAAW,EAAA,IAAA,EAAK,CAAA,CAAA;AAAA,KACvC;AAAA,GACF;AACF,CAAA,CAAA;AAhCA,IAAqB,OAArB,GAAA,SAAA;AAAqB,QACZ,WAAc,GAAA,2DAAA,CAAA;AADF,QAEZ,KAAQ,GAAA;AAAA,EACb,GAAG,GAAI,CAAA,WAAA;AAAA,EACP,MAAM,aAAc,CAAA,IAAA;AAAA,EACpB,IAAA,EAAM,MAAM,MAAO,CAAA;AAAA,IACjB,IAAM,EAAA,GAAA;AAAA,IACN,MAAQ,EAAA,IAAA;AAAA,IACR,WAAa,EAAA,uCAAA;AAAA,IACb,OAAS,EAAA,MAAA;AAAA,IACT,GAAK,EAAA,mBAAA;AAAA,GACN,CAAA;AAAA,EACD,MAAA,EAAQ,MAAM,MAAO,CAAA;AAAA,IACnB,IAAM,EAAA,GAAA;AAAA,IACN,WAAa,EAAA,yCAAA;AAAA,IACb,OAAA,EAAS,CAAC,MAAA,EAAQ,QAAQ,CAAA;AAAA,IAC1B,OAAS,EAAA,QAAA;AAAA,IACT,GAAK,EAAA,6BAAA;AAAA,GACN,CAAA;AACH,CAAA;;;;"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shopify/cli-hydrogen",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.25",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Commands for building Hydrogen storefronts",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/Shopify/cli/issues"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/shopify/cli#readme",
|
|
6
10
|
"type": "module",
|
|
7
11
|
"files": [
|
|
8
12
|
"/dist"
|
|
@@ -20,8 +24,8 @@
|
|
|
20
24
|
"scripts": {
|
|
21
25
|
"clean": "shx rm -rf dist",
|
|
22
26
|
"build": "rimraf dist/ && rollup -c",
|
|
23
|
-
"prepack": "cross-env NODE_ENV=production yarn run build",
|
|
24
|
-
"lint": "prettier -c src/** && eslint
|
|
27
|
+
"prepack": "cross-env NODE_ENV=production yarn run build && cp ../../README.md README.md",
|
|
28
|
+
"lint": "prettier -c src/** && eslint \"src/**/*.ts\"",
|
|
25
29
|
"lint:fix": "prettier src/** -w && eslint 'src/**/*.ts' --fix",
|
|
26
30
|
"test": "vitest run",
|
|
27
31
|
"test:watch": "vitest watch",
|
|
@@ -39,10 +43,10 @@
|
|
|
39
43
|
"@types/prettier": "^2.6.3",
|
|
40
44
|
"prettier": "^2.6.1",
|
|
41
45
|
"vite": "^2.9.9",
|
|
42
|
-
"@shopify/cli-kit": "^3.0.
|
|
46
|
+
"@shopify/cli-kit": "^3.0.25"
|
|
43
47
|
},
|
|
44
48
|
"devDependencies": {
|
|
45
|
-
"@shopify/cli-testing": "3.0.
|
|
49
|
+
"@shopify/cli-testing": "3.0.25",
|
|
46
50
|
"@shopify/prettier-config": "^1.1.2",
|
|
47
51
|
"@types/fs-extra": "^9.0.12",
|
|
48
52
|
"fast-glob": "^3.2.11",
|