@shopify/cli-hydrogen 2.0.4 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/commands/hydrogen/build.js +2 -2
- package/dist/commands/hydrogen/build.js.map +1 -1
- package/package.json +2 -2
- package/dist/Command-2ce326bb.js +0 -63676
- package/dist/Command-2ce326bb.js.map +0 -1
- package/dist/commands/hydrogen/check.js +0 -202
- package/dist/commands/hydrogen/check.js.map +0 -1
- package/dist/commands/hydrogen/init.js +0 -14754
- package/dist/commands/hydrogen/init.js.map +0 -1
- package/dist/eslintrc-js-6f6a13b8.js +0 -12
- package/dist/eslintrc-js-6f6a13b8.js.map +0 -1
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
import { s as semver, c as cliHydrogenPackageJson, C as Command, H as HelpfulError, a as source } from '../../Command-2ce326bb.js';
|
|
2
|
-
import 'prettier';
|
|
3
|
-
import { cli, output } from '@shopify/cli-kit';
|
|
4
|
-
import 'fs';
|
|
5
|
-
import 'constants';
|
|
6
|
-
import 'stream';
|
|
7
|
-
import 'util';
|
|
8
|
-
import 'assert';
|
|
9
|
-
import 'path';
|
|
10
|
-
import 'os';
|
|
11
|
-
import 'events';
|
|
12
|
-
import 'tty';
|
|
13
|
-
import 'readline';
|
|
14
|
-
import 'buffer';
|
|
15
|
-
import 'child_process';
|
|
16
|
-
import 'string_decoder';
|
|
17
|
-
import 'crypto';
|
|
18
|
-
import 'module';
|
|
19
|
-
import 'vm';
|
|
20
|
-
import 'url';
|
|
21
|
-
import 'v8';
|
|
22
|
-
import '@oclif/core';
|
|
23
|
-
|
|
24
|
-
async function addHydrogen() {
|
|
25
|
-
this.package.install("@shopify/hydrogen");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const HYDROGEN_MIN_VERSION = cliHydrogenPackageJson.version;
|
|
29
|
-
async function checkHydrogenVersion() {
|
|
30
|
-
const h2Version = await this.package.hasDependency("@shopify/hydrogen");
|
|
31
|
-
const normalizedVersion = h2Version ? semver.coerce(h2Version)?.version : `@shopify/hydrogen not installed`;
|
|
32
|
-
const latestHydrogen = typeof h2Version === "string" && typeof normalizedVersion === "string" && semver.gte(normalizedVersion, HYDROGEN_MIN_VERSION);
|
|
33
|
-
const success = h2Version === "latest" || latestHydrogen;
|
|
34
|
-
const description = `Has latest hydrogen version (latest: ${HYDROGEN_MIN_VERSION} / found ${normalizedVersion})`;
|
|
35
|
-
return [
|
|
36
|
-
{
|
|
37
|
-
id: "hydrogen-latest",
|
|
38
|
-
type: "Dependencies",
|
|
39
|
-
description,
|
|
40
|
-
success,
|
|
41
|
-
fix: addHydrogen
|
|
42
|
-
}
|
|
43
|
-
];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const NODE_MIN_VERSION = ">=12.0.0";
|
|
47
|
-
async function checkNodeVersion() {
|
|
48
|
-
const nodeVersion = await this.package.nodeVersion();
|
|
49
|
-
const normalizedVersion = semver.coerce(nodeVersion)?.version;
|
|
50
|
-
return [
|
|
51
|
-
{
|
|
52
|
-
id: "node-version",
|
|
53
|
-
type: "Dependencies",
|
|
54
|
-
description: "Has min node version",
|
|
55
|
-
success: !nodeVersion || normalizedVersion !== void 0 && semver.satisfies(normalizedVersion, NODE_MIN_VERSION),
|
|
56
|
-
link: "https://shopify.dev/custom-storefronts/hydrogen/support"
|
|
57
|
-
}
|
|
58
|
-
];
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async function addEslint() {
|
|
62
|
-
const { fs } = this;
|
|
63
|
-
await fs.write(".eslintrc.js", (await import('../../eslintrc-js-6f6a13b8.js')).default());
|
|
64
|
-
this.package.install("eslint", { dev: true, version: "^7.31.0" });
|
|
65
|
-
this.package.install("eslint-plugin-hydrogen", {
|
|
66
|
-
dev: true,
|
|
67
|
-
version: "^0.6.2"
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async function checkEslintConfig() {
|
|
72
|
-
const eslintConfig = await this.workspace.loadConfig("eslint");
|
|
73
|
-
const hasEslintConfig = Boolean(eslintConfig);
|
|
74
|
-
const hasHydrogenConfig = hasEslintConfig && Boolean(eslintConfig.config.extends?.filter((extended) => extended.includes("plugin:hydrogen")).length);
|
|
75
|
-
const hasHydrogenEslintPackage = Boolean(await this.package.hasDependency("eslint-plugin-hydrogen"));
|
|
76
|
-
return [
|
|
77
|
-
{
|
|
78
|
-
id: "eslint-config",
|
|
79
|
-
type: "Setup",
|
|
80
|
-
description: "Has eslint config",
|
|
81
|
-
success: hasEslintConfig,
|
|
82
|
-
link: "https://shopify.dev/custom-storefronts/hydrogen/lint",
|
|
83
|
-
fix: addEslint
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
id: "eslint-config-hydrogen",
|
|
87
|
-
type: "Setup",
|
|
88
|
-
description: "Has hydrogen eslint config",
|
|
89
|
-
success: hasHydrogenConfig && hasHydrogenEslintPackage,
|
|
90
|
-
link: "https://shopify.dev/custom-storefronts/hydrogen/lint",
|
|
91
|
-
fix: addEslint
|
|
92
|
-
}
|
|
93
|
-
];
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
class Check extends Command {
|
|
97
|
-
async run() {
|
|
98
|
-
this.interface.say("Running checks...");
|
|
99
|
-
let results;
|
|
100
|
-
try {
|
|
101
|
-
results = [
|
|
102
|
-
...await checkNodeVersion.call(this),
|
|
103
|
-
...await checkHydrogenVersion.call(this),
|
|
104
|
-
...await checkEslintConfig.call(this)
|
|
105
|
-
];
|
|
106
|
-
} catch (error) {
|
|
107
|
-
throw new HelpfulError({ title: "Error running checks" });
|
|
108
|
-
}
|
|
109
|
-
displayCheckResults.call(this, results);
|
|
110
|
-
const failedChecks = results.filter(({ success }) => !success);
|
|
111
|
-
if (failedChecks.length) {
|
|
112
|
-
this.interface.say(`${source.red.bold(`\u2022 ${failedChecks.length} errors `)}${source.dim(`found in ${results.length} checks`)}`);
|
|
113
|
-
} else {
|
|
114
|
-
this.interface.say(`${source.green.bold(`\u2022 No errors `)}${source.dim(`found in ${results.length} checks`)}`);
|
|
115
|
-
}
|
|
116
|
-
await fixChecks.call(this, results);
|
|
117
|
-
output.newline();
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
Check.description = "Check a hydrogen app for common problems.";
|
|
121
|
-
Check.examples = [`$ shopify hydrogen check`];
|
|
122
|
-
Check.flags = {
|
|
123
|
-
...cli.globalFlags,
|
|
124
|
-
...Command.flags
|
|
125
|
-
};
|
|
126
|
-
Check.args = [];
|
|
127
|
-
function displayCheckResults(allCheckResults) {
|
|
128
|
-
const indent = " ";
|
|
129
|
-
const checksBySection = allCheckResults.reduce((acc, { type, ...rest }) => {
|
|
130
|
-
if (!acc[type]) {
|
|
131
|
-
acc[type] = [];
|
|
132
|
-
}
|
|
133
|
-
acc[type].push({ type, ...rest });
|
|
134
|
-
return acc;
|
|
135
|
-
}, {});
|
|
136
|
-
[...Object.entries(checksBySection)].forEach(([section, sectionResults]) => {
|
|
137
|
-
const allChecksStatusEmoji = statusEmoji(sectionResults.every(({ success }) => success));
|
|
138
|
-
output.newline();
|
|
139
|
-
this.interface.say(`${allChecksStatusEmoji} ${source.cyan.bold.underline(section)}`);
|
|
140
|
-
output.newline();
|
|
141
|
-
sectionResults.forEach(({ description, link, success, fix, id }) => {
|
|
142
|
-
const docsLink = link ? source.dim(`${indent}${link}
|
|
143
|
-
`) : "";
|
|
144
|
-
const idText = id ? source.dim(id) : "";
|
|
145
|
-
const fixedText = success ? "" : statusFixable(fix);
|
|
146
|
-
const lines = [[statusEmoji(success), description, idText, fixedText].join(" "), docsLink];
|
|
147
|
-
this.interface.say(lines.join("\n"));
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
output.newline();
|
|
151
|
-
}
|
|
152
|
-
async function fixChecks(results) {
|
|
153
|
-
let changedFiles = /* @__PURE__ */ new Map();
|
|
154
|
-
const allFixableResults = results.filter(({ fix, success }) => !success && fix !== void 0 && typeof fix === "function");
|
|
155
|
-
if (allFixableResults.length === 0) {
|
|
156
|
-
this.interface.say(`No fixable checks`);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
output.newline();
|
|
160
|
-
output.newline();
|
|
161
|
-
await this.interface.say(`${allFixableResults.length} failed checks might be automatically fixable.`);
|
|
162
|
-
output.newline();
|
|
163
|
-
const wantsFix = await this.interface.ask(`Do you want to apply automatic fixes to ${allFixableResults.length} failed checks?`, { boolean: true, name: "fix", default: false });
|
|
164
|
-
if (!wantsFix) {
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
for await (const { description, files } of runFixers(allFixableResults, {
|
|
168
|
-
fs: this.fs,
|
|
169
|
-
package: this.package,
|
|
170
|
-
interface: this.interface
|
|
171
|
-
})) {
|
|
172
|
-
this.interface.say([statusEmoji(true), description, source.green("fixed")].join(" "));
|
|
173
|
-
changedFiles = new Map([...changedFiles, ...files]);
|
|
174
|
-
}
|
|
175
|
-
const cleanUpPromises = Array.from(changedFiles).map(async ([path, content]) => {
|
|
176
|
-
const action = await this.fs.hasFile(path) ? source.red(`{red overwrote`) : source.green(`{green wrote}`);
|
|
177
|
-
await this.fs.write(path, content);
|
|
178
|
-
this.interface.say(`${action}${stripPath(path)}`);
|
|
179
|
-
});
|
|
180
|
-
await Promise.all(cleanUpPromises);
|
|
181
|
-
}
|
|
182
|
-
async function* runFixers(allFixableResults, context) {
|
|
183
|
-
for (const { fix, description } of allFixableResults) {
|
|
184
|
-
try {
|
|
185
|
-
await fix(context);
|
|
186
|
-
} finally {
|
|
187
|
-
yield { description, files: [] };
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
function statusEmoji(success) {
|
|
192
|
-
return success ? "\u2713" : `\u2715`;
|
|
193
|
-
}
|
|
194
|
-
function statusFixable(fix) {
|
|
195
|
-
return typeof fix === "function" ? source.cyan(` (fixable) `) : " ";
|
|
196
|
-
}
|
|
197
|
-
function stripPath(path) {
|
|
198
|
-
return path.replace(`${process.cwd()}`, "");
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
export { Check as default };
|
|
202
|
-
//# sourceMappingURL=check.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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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"}
|