@shopify/cli-hydrogen 3.0.25 → 3.1.0

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.
Files changed (68) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +2 -2
  3. package/dist/cli/commands/hydrogen/add/eslint.d.ts +10 -0
  4. package/dist/cli/commands/hydrogen/add/eslint.js +25 -0
  5. package/dist/cli/commands/hydrogen/add/eslint.js.map +1 -0
  6. package/dist/cli/commands/hydrogen/add/tailwind.d.ts +10 -0
  7. package/dist/cli/commands/hydrogen/add/tailwind.js +25 -0
  8. package/dist/cli/commands/hydrogen/add/tailwind.js.map +1 -0
  9. package/dist/cli/commands/hydrogen/build.d.ts +13 -0
  10. package/dist/cli/commands/hydrogen/build.js +48 -0
  11. package/dist/cli/commands/hydrogen/build.js.map +1 -0
  12. package/dist/cli/commands/hydrogen/dev.d.ts +11 -0
  13. package/dist/cli/commands/hydrogen/dev.js +25 -0
  14. package/dist/cli/commands/hydrogen/dev.js.map +1 -0
  15. package/dist/cli/commands/hydrogen/info.d.ts +11 -0
  16. package/dist/cli/commands/hydrogen/info.js +27 -0
  17. package/dist/cli/commands/hydrogen/info.js.map +1 -0
  18. package/dist/cli/commands/hydrogen/preview.d.ts +11 -0
  19. package/dist/cli/commands/hydrogen/preview.js +37 -0
  20. package/dist/cli/commands/hydrogen/preview.js.map +1 -0
  21. package/dist/cli/constants.d.ts +15 -0
  22. package/dist/cli/constants.js +16 -0
  23. package/dist/cli/constants.js.map +1 -0
  24. package/dist/cli/flags.d.ts +4 -0
  25. package/dist/cli/flags.js +16 -0
  26. package/dist/cli/flags.js.map +1 -0
  27. package/dist/cli/models/hydrogen.d.ts +22 -0
  28. package/dist/cli/models/hydrogen.js +82 -0
  29. package/dist/cli/models/hydrogen.js.map +1 -0
  30. package/dist/cli/services/build.d.ts +10 -0
  31. package/dist/cli/services/build.js +38 -0
  32. package/dist/cli/services/build.js.map +1 -0
  33. package/dist/cli/services/dev.d.ts +7 -0
  34. package/dist/cli/services/dev.js +25 -0
  35. package/dist/cli/services/dev.js.map +1 -0
  36. package/dist/cli/services/eslint.d.ts +8 -0
  37. package/dist/cli/services/eslint.js +74 -0
  38. package/dist/cli/services/eslint.js.map +1 -0
  39. package/dist/cli/services/info.d.ts +7 -0
  40. package/dist/cli/services/info.js +131 -0
  41. package/dist/cli/services/info.js.map +1 -0
  42. package/dist/cli/services/preview.d.ts +9 -0
  43. package/dist/cli/services/preview.js +55 -0
  44. package/dist/cli/services/preview.js.map +1 -0
  45. package/dist/cli/services/tailwind.d.ts +9 -0
  46. package/dist/cli/services/tailwind.js +103 -0
  47. package/dist/cli/services/tailwind.js.map +1 -0
  48. package/dist/cli/utilities/load-config.d.ts +5 -0
  49. package/dist/cli/utilities/load-config.js +6 -0
  50. package/dist/cli/utilities/load-config.js.map +1 -0
  51. package/dist/tsconfig.tsbuildinfo +1 -0
  52. package/package.json +11 -13
  53. package/dist/commands/hydrogen/add/eslint.js +0 -103
  54. package/dist/commands/hydrogen/add/eslint.js.map +0 -1
  55. package/dist/commands/hydrogen/add/tailwind.js +0 -131
  56. package/dist/commands/hydrogen/add/tailwind.js.map +0 -1
  57. package/dist/commands/hydrogen/build.js +0 -77
  58. package/dist/commands/hydrogen/build.js.map +0 -1
  59. package/dist/commands/hydrogen/dev.js +0 -49
  60. package/dist/commands/hydrogen/dev.js.map +0 -1
  61. package/dist/commands/hydrogen/info.js +0 -158
  62. package/dist/commands/hydrogen/info.js.map +0 -1
  63. package/dist/commands/hydrogen/preview.js +0 -93
  64. package/dist/commands/hydrogen/preview.js.map +0 -1
  65. package/dist/flags-39d1e3c2.js +0 -19
  66. package/dist/flags-39d1e3c2.js.map +0 -1
  67. package/dist/hydrogen-21276a42.js +0 -124
  68. package/dist/hydrogen-21276a42.js.map +0 -1
@@ -1,131 +0,0 @@
1
- import { h as hydrogenFlags } from '../../../flags-39d1e3c2.js';
2
- import { ui, dependency, path, file, error, system, vscode, cli } from '@shopify/cli-kit';
3
- import stream from 'node:stream';
4
- import { l as load } from '../../../hydrogen-21276a42.js';
5
- import { Flags, Command } from '@oclif/core';
6
- import 'vite';
7
- import 'path';
8
- import 'fs';
9
-
10
- const tailwindImports = [
11
- "@import 'tailwindcss/base';",
12
- "@import 'tailwindcss/components';",
13
- "@import 'tailwindcss/utilities';"
14
- ];
15
- const tailwindImportsExist = (indexCSS) => tailwindImports.map((el) => new RegExp(el)).every((tailwindDirective) => tailwindDirective.test(indexCSS));
16
- async function addTailwind({ app, force, install, directory }) {
17
- const list = new ui.Listr([
18
- {
19
- title: "Installing additional dependencies",
20
- skip: () => !install,
21
- task: async (_, task) => {
22
- const requiredDependencies = ["postcss", "postcss-loader", "tailwindcss", "autoprefixer"];
23
- await dependency.addNPMDependenciesWithoutVersionIfNeeded(requiredDependencies, {
24
- dependencyManager: app.dependencyManager,
25
- type: "prod",
26
- directory: app.directory,
27
- stderr: new stream.Writable({
28
- write(chunk, encoding, next) {
29
- task.output = chunk.toString();
30
- next();
31
- }
32
- }),
33
- stdout: new stream.Writable({
34
- write(chunk, encoding, next) {
35
- task.output = chunk.toString();
36
- next();
37
- }
38
- })
39
- });
40
- task.title = "Dependencies installed";
41
- }
42
- },
43
- {
44
- title: "Adding PostCSS configuration",
45
- task: async (_, task) => {
46
- const postCSSConfiguration = path.join(directory, "postcss.config.js");
47
- if (await file.exists(postCSSConfiguration)) {
48
- if (force) {
49
- await file.remove(postCSSConfiguration);
50
- } else {
51
- throw new error.Abort("PostCSS config already exists.\nUse --force to override existing config.");
52
- }
53
- }
54
- const postCSSConfig = await file.format(["module.exports = {", "plugins: {", "tailwindcss: {},", "autoprefixer: {},", "},", " };"].join("\n"), { path: "postcss.config.js" });
55
- await file.write(postCSSConfiguration, postCSSConfig);
56
- task.title = "PostCSS configuration added";
57
- }
58
- },
59
- {
60
- title: "Initializing Tailwind CSS...",
61
- task: async (_, task) => {
62
- const tailwindConfigurationPath = path.join(directory, "tailwind.config.js");
63
- if (await file.exists(tailwindConfigurationPath)) {
64
- if (force) {
65
- await file.remove(tailwindConfigurationPath);
66
- } else {
67
- throw new error.Abort("Tailwind config already exists.\nUse --force to override existing config.");
68
- }
69
- }
70
- await system.exec(app.dependencyManager, ["tailwindcss", "init", tailwindConfigurationPath], {
71
- cwd: directory
72
- });
73
- await replace("content: []", "content: ['./index.html', './src/**/*.{js,jsx,ts,tsx}']", tailwindConfigurationPath);
74
- task.title = "Tailwind configuration added";
75
- }
76
- },
77
- {
78
- title: "Importing Tailwind CSS in index.css",
79
- task: async (_ctx, task) => {
80
- const indexCSSPath = path.join(directory, "src", "index.css");
81
- const indexCSS = await file.read(indexCSSPath);
82
- if (tailwindImportsExist(indexCSS)) {
83
- task.skip("Imports already exist in index.css");
84
- } else {
85
- const newIndexCSS = tailwindImports.join("\n") + indexCSS;
86
- await file.write(indexCSSPath, newIndexCSS);
87
- }
88
- task.title = "Tailwind imports added";
89
- }
90
- },
91
- {
92
- title: "Adding editor plugin recommendations",
93
- task: async (_, task) => {
94
- await vscode.addRecommendedExtensions(directory, ["csstools.postcss", "bradlc.vscode-tailwindcss"]);
95
- task.title = "Editor plugin recommendations added";
96
- }
97
- }
98
- ]);
99
- await list.run();
100
- }
101
- async function replace(find, replace2, filepath) {
102
- const original = await file.read(filepath);
103
- const modified = original.replace(find, replace2);
104
- await file.write(filepath, modified);
105
- }
106
-
107
- const _AddTailwind = class extends Command {
108
- async run() {
109
- const {
110
- flags: { path: pathFlag, install, force }
111
- } = await this.parse(_AddTailwind);
112
- const directory = pathFlag ? path.resolve(pathFlag) : process.cwd();
113
- const app = await load(directory);
114
- await addTailwind({ app, directory, install, force });
115
- }
116
- };
117
- let AddTailwind = _AddTailwind;
118
- AddTailwind.flags = {
119
- ...cli.globalFlags,
120
- ...hydrogenFlags,
121
- force: Flags.boolean({
122
- hidden: false,
123
- char: "f",
124
- description: "overwrite existing configuration",
125
- default: false,
126
- env: "SHOPIFY_FLAG_FORCE"
127
- })
128
- };
129
-
130
- export { AddTailwind as default };
131
- //# sourceMappingURL=tailwind.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tailwind.js","sources":["../../../../src/cli/services/tailwind.ts","../../../../src/cli/commands/hydrogen/add/tailwind.ts"],"sourcesContent":["import {HydrogenApp} from '../models/hydrogen'\nimport {ui, vscode, system, path, file, error, dependency} from '@shopify/cli-kit'\nimport stream from 'node:stream'\n\ninterface AddTailwindOptions {\n app: HydrogenApp\n force: boolean\n directory: string\n install: boolean\n}\n\nconst tailwindImports = [\n \"@import 'tailwindcss/base';\",\n \"@import 'tailwindcss/components';\",\n \"@import 'tailwindcss/utilities';\",\n]\n\nconst tailwindImportsExist = (indexCSS: string) =>\n tailwindImports.map((el) => new RegExp(el)).every((tailwindDirective) => tailwindDirective.test(indexCSS))\n\nexport async function addTailwind({app, force, install, directory}: AddTailwindOptions) {\n const list = new ui.Listr([\n {\n title: 'Installing additional dependencies',\n skip: () => !install,\n task: async (_, task) => {\n const requiredDependencies = ['postcss', 'postcss-loader', 'tailwindcss', 'autoprefixer']\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 PostCSS configuration',\n task: async (_, task) => {\n const postCSSConfiguration = path.join(directory, 'postcss.config.js')\n\n if (await file.exists(postCSSConfiguration)) {\n if (force) {\n await file.remove(postCSSConfiguration)\n } else {\n throw new error.Abort('PostCSS config already exists.\\nUse --force to override existing config.')\n }\n }\n\n const postCSSConfig = await file.format(\n ['module.exports = {', 'plugins: {', 'tailwindcss: {},', 'autoprefixer: {},', '},', ' };'].join('\\n'),\n {path: 'postcss.config.js'},\n )\n\n await file.write(postCSSConfiguration, postCSSConfig)\n\n task.title = 'PostCSS configuration added'\n },\n },\n\n {\n title: 'Initializing Tailwind CSS...',\n task: async (_, task) => {\n const tailwindConfigurationPath = path.join(directory, 'tailwind.config.js')\n\n if (await file.exists(tailwindConfigurationPath)) {\n if (force) {\n await file.remove(tailwindConfigurationPath)\n } else {\n throw new error.Abort('Tailwind config already exists.\\nUse --force to override existing config.')\n }\n }\n\n await system.exec(app.dependencyManager, ['tailwindcss', 'init', tailwindConfigurationPath], {\n cwd: directory,\n })\n\n await replace(\n 'content: []',\n \"content: ['./index.html', './src/**/*.{js,jsx,ts,tsx}']\",\n tailwindConfigurationPath,\n )\n\n task.title = 'Tailwind configuration added'\n },\n },\n {\n title: 'Importing Tailwind CSS in index.css',\n task: async (_ctx, task) => {\n const indexCSSPath = path.join(directory, 'src', 'index.css')\n const indexCSS = await file.read(indexCSSPath)\n\n if (tailwindImportsExist(indexCSS)) {\n task.skip('Imports already exist in index.css')\n } else {\n const newIndexCSS = tailwindImports.join('\\n') + indexCSS\n\n await file.write(indexCSSPath, newIndexCSS)\n }\n\n task.title = 'Tailwind imports added'\n },\n },\n {\n title: 'Adding editor plugin recommendations',\n task: async (_, task) => {\n await vscode.addRecommendedExtensions(directory, ['csstools.postcss', 'bradlc.vscode-tailwindcss'])\n task.title = 'Editor plugin recommendations added'\n },\n },\n ])\n await list.run()\n}\n\nasync function replace(find: string | RegExp, replace: string, filepath: string) {\n const original = await file.read(filepath)\n const modified = original.replace(find, replace)\n await file.write(filepath, modified)\n}\n","import {hydrogenFlags} from '../../../flags'\nimport {addTailwind} from '../../../services/tailwind'\nimport {load as loadApp, HydrogenApp} from '../../../models/hydrogen'\nimport {Command, Flags} from '@oclif/core'\nimport {path, cli} from '@shopify/cli-kit'\n\nexport default class AddTailwind 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(AddTailwind)\n const directory = pathFlag ? path.resolve(pathFlag) : process.cwd()\n\n const app: HydrogenApp = await loadApp(directory)\n\n await addTailwind({app, directory, install, force})\n }\n}\n"],"names":["loadApp"],"mappings":"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"}
@@ -1,77 +0,0 @@
1
- import { build as build$1 } from 'vite';
2
- import { ui, environment, cli, path } from '@shopify/cli-kit';
3
- import { h as hydrogenFlags } from '../../flags-39d1e3c2.js';
4
- import { Flags, Command } from '@oclif/core';
5
-
6
- async function build({ directory, targets, base }) {
7
- const commonConfig = { base, root: directory };
8
- const tasks = Object.entries(targets).filter(([_, value]) => value).map(([key, value]) => {
9
- return {
10
- title: `Building ${key} code`,
11
- task: async (_, task) => {
12
- if (key === "worker") {
13
- process.env.WORKER = "true";
14
- }
15
- await build$1({
16
- ...commonConfig,
17
- build: {
18
- outDir: `dist/${key}`,
19
- ssr: typeof value === "string" ? value : void 0,
20
- manifest: key === "client"
21
- }
22
- });
23
- task.title = `Built ${key} code`;
24
- }
25
- };
26
- });
27
- const list = new ui.Listr(tasks, { rendererSilent: environment.local.isUnitTest() });
28
- await list.run();
29
- }
30
-
31
- const PLATFORM_ENTRIES = {
32
- node: `@shopify/hydrogen/platforms/node`,
33
- worker: `@shopify/hydrogen/platforms/worker`
34
- };
35
- const _Build = class extends Command {
36
- async run() {
37
- const { flags } = await this.parse(_Build);
38
- const directory = flags.path ? path.resolve(flags.path) : process.cwd();
39
- const entry = flags.entry || PLATFORM_ENTRIES[flags.target];
40
- const targets = {
41
- client: flags.client,
42
- worker: flags.target === "worker" ? entry : false,
43
- node: flags.target === "node" ? entry : false
44
- };
45
- await build({ ...flags, directory, targets });
46
- }
47
- };
48
- let Build = _Build;
49
- Build.description = "Builds a Hydrogen storefront for production";
50
- Build.flags = {
51
- ...cli.globalFlags,
52
- path: hydrogenFlags.path,
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
62
- }),
63
- target: Flags.string({
64
- char: "t",
65
- description: "the target platform to build for (worker or node)",
66
- options: ["node", "worker"],
67
- default: "worker",
68
- env: "SHOPIFY_FLAG_BUILD_TARGET"
69
- }),
70
- entry: Flags.string({
71
- description: "produce Server Side Rendering (SSR) build for node environments",
72
- env: "SHOPIFY_FLAG_BUILD_SSR_ENTRY"
73
- })
74
- };
75
-
76
- export { Build as default };
77
- //# sourceMappingURL=build.js.map
@@ -1 +0,0 @@
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, environment} 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, {rendererSilent: environment.local.isUnitTest()})\n\n await list.run()\n}\n\nexport default build\n","import buildService from '../../services/build'\nimport {hydrogenFlags} from '../../flags'\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: hydrogenFlags.path,\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,49 +0,0 @@
1
- import { createServer } from 'vite';
2
- import { error, cli, path } from '@shopify/cli-kit';
3
- import { h as hydrogenFlags } from '../../flags-39d1e3c2.js';
4
- import { Flags, Command } from '@oclif/core';
5
-
6
- async function dev({ directory, force, host }) {
7
- const server = await createServer({
8
- root: directory,
9
- server: {
10
- open: true,
11
- force,
12
- host
13
- }
14
- });
15
- try {
16
- await server.listen();
17
- server.printUrls();
18
- server.config.logger.info("");
19
- } catch (error$1) {
20
- const abortError = new error.Abort(error$1.message);
21
- abortError.stack = error$1.stack;
22
- throw abortError;
23
- }
24
- }
25
-
26
- const _Dev = class extends Command {
27
- async run() {
28
- const { flags } = await this.parse(_Dev);
29
- const directory = flags.path ? path.resolve(flags.path) : process.cwd();
30
- await dev({ directory, ...flags });
31
- }
32
- };
33
- let Dev = _Dev;
34
- Dev.description = "Run a Hydrogen storefront locally for development";
35
- Dev.flags = {
36
- ...cli.globalFlags,
37
- path: hydrogenFlags.path,
38
- force: Flags.boolean({
39
- description: "force dependency pre-bundling.",
40
- env: "SHOPIFY_FLAG_DEV_FORCE"
41
- }),
42
- host: Flags.boolean({
43
- description: "listen on all addresses, including LAN and public addresses.",
44
- env: "SHOPIFY_FLAG_DEV_HOST"
45
- })
46
- };
47
-
48
- export { Dev as default };
49
- //# sourceMappingURL=dev.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev.js","sources":["../../../src/cli/services/dev.ts","../../../src/cli/commands/hydrogen/dev.ts"],"sourcesContent":["import {createServer} from 'vite'\nimport {error as kitError} from '@shopify/cli-kit'\n\ninterface DevOptions {\n directory: string\n force: boolean\n host: boolean\n}\n\nasync function dev({directory, force, host}: DevOptions) {\n const server = await createServer({\n root: directory,\n server: {\n open: true,\n force,\n host,\n },\n })\n\n try {\n await server.listen()\n server.printUrls()\n server.config.logger.info('')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n const abortError = new kitError.Abort(error.message)\n abortError.stack = error.stack\n throw abortError\n }\n}\n\nexport default dev\n","import devService from '../../services/dev'\nimport {hydrogenFlags} from '../../flags'\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: hydrogenFlags.path,\n force: Flags.boolean({\n description: 'force dependency pre-bundling.',\n env: 'SHOPIFY_FLAG_DEV_FORCE',\n }),\n host: Flags.boolean({\n description: 'listen on all addresses, including LAN and public addresses.',\n env: 'SHOPIFY_FLAG_DEV_HOST',\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":["error","kitError","devService"],"mappings":";;;;;AASA,eAAmB,GAAA,CAAA,EAAC,SAAW,EAAA,KAAA,EAAO,IAAmB,EAAA,EAAA;AACvD,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,MACA,IAAA;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAI,IAAA;AACF,IAAA,MAAM,OAAO,MAAO,EAAA,CAAA;AACpB,IAAA,MAAA,CAAO,SAAU,EAAA,CAAA;AACjB,IAAO,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAAA,WAErBA,OAAP,EAAA;AACA,IAAA,MAAM,UAAa,GAAA,IAAIC,KAAS,CAAA,KAAA,CAAMD,QAAM,OAAO,CAAA,CAAA;AACnD,IAAA,UAAA,CAAW,QAAQA,OAAM,CAAA,KAAA,CAAA;AACzB,IAAM,MAAA,UAAA,CAAA;AAAA,GACR;AACF;;ACxBA,MAAqB,IAAA,GAArB,cAAiC,OAAQ,CAAA;AAAA,EAevC,MAAM,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,MAAME,GAAW,CAAA,EAAC,SAAW,EAAA,GAAG,OAAM,CAAA,CAAA;AAAA,GACxC;AACF,CAAA,CAAA;AArBA,IAAqB,GAArB,GAAA,KAAA;AAAqB,IACZ,WAAc,GAAA,mDAAA,CAAA;AADF,IAEZ,KAAQ,GAAA;AAAA,EACb,GAAG,GAAI,CAAA,WAAA;AAAA,EACP,MAAM,aAAc,CAAA,IAAA;AAAA,EACpB,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA,IACnB,WAAa,EAAA,gCAAA;AAAA,IACb,GAAK,EAAA,wBAAA;AAAA,GACN,CAAA;AAAA,EACD,IAAA,EAAM,MAAM,OAAQ,CAAA;AAAA,IAClB,WAAa,EAAA,8DAAA;AAAA,IACb,GAAK,EAAA,uBAAA;AAAA,GACN,CAAA;AACH,CAAA;;;;"}
@@ -1,158 +0,0 @@
1
- import { output, string, os, cli, path } from '@shopify/cli-kit';
2
- import { l as load } from '../../hydrogen-21276a42.js';
3
- import { h as hydrogenFlags } from '../../flags-39d1e3c2.js';
4
- import { Flags, Command } from '@oclif/core';
5
- import 'vite';
6
- import 'path';
7
- import 'fs';
8
-
9
- function info(app, { showPrivateData }) {
10
- const appInfo = new HydrogenAppInfo(app);
11
- return appInfo.output({ showPrivateData });
12
- }
13
- const NOT_FOUND_TEXT = output.content`${output.token.italic("Not found")}`.value;
14
- const NOT_CONFIGURED_TEXT = output.content`${output.token.italic("Not yet configured")}`.value;
15
- class AppInfo {
16
- constructor(app) {
17
- this.app = app;
18
- }
19
- output({ showPrivateData }) {
20
- const sections = [
21
- this.projectSettingsSection(),
22
- this.storefrontSettingsSection({ showPrivateData }),
23
- this.eslintSection(),
24
- this.systemInfoSection()
25
- ];
26
- return sections.map((sectionContents) => this.section(...sectionContents)).join("\n\n");
27
- }
28
- projectSettingsSection() {
29
- const title = "Your Project";
30
- const lines = [
31
- ["Name", this.app.name],
32
- ["Project location", this.app.directory],
33
- ["Language", this.app.language]
34
- ];
35
- const projectInfo = this.linesToColumns(lines);
36
- return [title, projectInfo];
37
- }
38
- storefrontSettingsSection({ showPrivateData }) {
39
- const errors = [];
40
- const title = "Storefront";
41
- if (this.app.configuration.shopify && typeof this.app.configuration.shopify === "function") {
42
- return [title, "Storefront settings defined as a function are not supported in this command."];
43
- }
44
- const privateFields = showPrivateData ? ["storefrontToken"] : [];
45
- const fields = [
46
- "storeDomain",
47
- "storefrontApiVersion",
48
- ...privateFields
49
- ];
50
- const storefrontInfo = this.configurationCheck(fields, this.app.configuration.shopify);
51
- let errorContent = `
52
- ${errors.map(this.formattedError).join("\n")}`;
53
- if (errorContent.trim() === "")
54
- errorContent = "";
55
- return [title, `${this.linesToColumns(storefrontInfo)}${errorContent}`];
56
- }
57
- eslintSection() {
58
- const errors = [];
59
- const title = "ESLint";
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
- }
64
- let errorContent = `
65
- ${errors.map(this.formattedError).join("\n")}`;
66
- if (errorContent.trim() === "")
67
- errorContent = "";
68
- return [title, `${this.linesToColumns(dependencyResults)}${errorContent}`];
69
- }
70
- configurationCheck(key, configObject = this.app.configuration) {
71
- const keys = Array.isArray(key) ? key : [key];
72
- const result = keys.reduce((acc, key2) => {
73
- const found = configObject[key2];
74
- if (typeof found === "string") {
75
- const result3 = [string.capitalize(key2.toString()), found];
76
- return [...acc, result3];
77
- }
78
- const result2 = [key2, NOT_CONFIGURED_TEXT];
79
- return [...acc, result2];
80
- }, []);
81
- return result;
82
- }
83
- dependencyCheck(dependency) {
84
- const dependencies = Array.isArray(dependency) ? dependency : [dependency];
85
- const result = dependencies.reduce((acc, dependency2) => {
86
- const found = this.app.nodeDependencies[dependency2];
87
- if (found) {
88
- const result3 = [dependency2, found];
89
- return [...acc, result3];
90
- }
91
- const result2 = [dependency2, NOT_FOUND_TEXT];
92
- return [...acc, result2];
93
- }, []);
94
- return result;
95
- }
96
- formattedError(str) {
97
- const [errorFirstLine, ...errorRemainingLines] = str.split("\n");
98
- const errorLines = [`! ${errorFirstLine}`, ...errorRemainingLines.map((line) => ` ${line}`)];
99
- return output.content`${output.token.errorText(errorLines.join("\n"))}`.value;
100
- }
101
- systemInfoSection() {
102
- const title = "Tooling and System";
103
- const { platform, arch } = os.platformAndArch();
104
- const lines = [
105
- ...this.dependencyCheck(["@shopify/hydrogen", "@shopify/cli-hydrogen", "@shopify/cli"]),
106
- ["Package manager", this.app.dependencyManager],
107
- ["OS", `${platform}-${arch}`],
108
- ["Shell", process.env.SHELL || "unknown"],
109
- ["Node.js version", process.version]
110
- ];
111
- return [title, this.linesToColumns(lines)];
112
- }
113
- linesToColumns(lines) {
114
- const widths = [];
115
- for (let i = 0; lines[0] && i < lines[0].length; i++) {
116
- const columnRows = lines.map((line) => line[i]);
117
- widths.push(Math.max(...columnRows.map((row) => output.unstyled(row).length)));
118
- }
119
- const paddedLines = lines.map((line) => {
120
- return line.map((col, index) => {
121
- return `${col}${" ".repeat(widths[index] - output.unstyled(col).length)}`;
122
- }).join(" ").trimEnd();
123
- }).join("\n");
124
- return paddedLines;
125
- }
126
- section(title, body) {
127
- const formattedTitle = `${title.toUpperCase()}${" ".repeat(35 - title.length)}`;
128
- return output.content`${output.token.heading(formattedTitle)}\n${body}`.value;
129
- }
130
- }
131
- class HydrogenAppInfo extends AppInfo {
132
- }
133
-
134
- const _Info = class extends Command {
135
- async run() {
136
- const { flags } = await this.parse(_Info);
137
- const directory = flags.path ? path.resolve(flags.path) : process.cwd();
138
- const app = await load(directory);
139
- output.info(info(app, { showPrivateData: flags.showToken }));
140
- if (app.errors)
141
- process.exit(2);
142
- }
143
- };
144
- let Info = _Info;
145
- Info.description = "Print basic information about your hydrogen app";
146
- Info.flags = {
147
- ...cli.globalFlags,
148
- ...hydrogenFlags,
149
- showToken: Flags.boolean({
150
- hidden: false,
151
- description: "Show storefront API token",
152
- default: false,
153
- env: "SHOPIFY_HYDROGEN_FLAG_SHOW_TOKEN"
154
- })
155
- };
156
-
157
- export { Info as default };
158
- //# sourceMappingURL=info.js.map
@@ -1 +0,0 @@
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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"}
@@ -1,93 +0,0 @@
1
- import { error, path, file, output, system, cli } from '@shopify/cli-kit';
2
- import { fileURLToPath } from 'url';
3
- import { h as hydrogenFlags } from '../../flags-39d1e3c2.js';
4
- import { Flags, Command } from '@oclif/core';
5
-
6
- async function previewInNode({ directory, port }) {
7
- const buildOutputPath = await path.resolve(directory, "dist/node");
8
- if (!await file.exists(buildOutputPath)) {
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
- await system.exec("yarn", ["shopify", "hydrogen", "build", "--target=node"], {
11
- cwd: directory,
12
- stdout: process.stdout,
13
- stderr: process.stderr
14
- });
15
- }
16
- await system.exec("node", ["--enable-source-maps", buildOutputPath], {
17
- env: { PORT: `${port}` },
18
- cwd: directory,
19
- stdout: process.stdout,
20
- stderr: process.stderr
21
- });
22
- }
23
- async function previewInWorker({ directory, port }) {
24
- const config = {
25
- port,
26
- workerFile: "dist/worker/index.js",
27
- assetsDir: "dist/client",
28
- buildCommand: "yarn build",
29
- modules: true,
30
- watch: true,
31
- buildWatchPaths: ["./src"],
32
- autoReload: true
33
- };
34
- await file.write(path.resolve(directory, "mini-oxygen.config.json"), JSON.stringify(config, null, 2));
35
- function cleanUp(options) {
36
- if (options.exit) {
37
- file.remove(path.resolve(directory, "mini-oxygen.config.json"));
38
- }
39
- }
40
- process.on("SIGINT", cleanUp.bind(null, { exit: true }));
41
- const executable = await oxygenPreviewExecutable();
42
- await system.exec(executable, [], {
43
- env: { NODE_OPTIONS: "--experimental-vm-modules" },
44
- cwd: directory,
45
- stdout: process.stdout,
46
- stderr: process.stderr
47
- });
48
- }
49
- const OxygenPreviewExecutableNotFound = new error.Bug("Could not locate the executable file to run Oxygen locally.");
50
- async function oxygenPreviewExecutable() {
51
- const cwd = path.dirname(fileURLToPath(import.meta.url));
52
- const executablePath = await path.findUp("node_modules/.bin/oxygen-preview", { type: "file", cwd });
53
- if (!executablePath) {
54
- throw OxygenPreviewExecutableNotFound;
55
- }
56
- return executablePath;
57
- }
58
-
59
- const _Preview = class extends Command {
60
- async run() {
61
- const { flags } = await this.parse(_Preview);
62
- const directory = flags.path ? path.resolve(flags.path) : process.cwd();
63
- const port = parseInt(flags.port, 10);
64
- if (flags.target === "worker") {
65
- await previewInWorker({ directory, port });
66
- } else if (flags.target === "node") {
67
- await previewInNode({ directory, port });
68
- }
69
- }
70
- };
71
- let Preview = _Preview;
72
- Preview.description = "Run a Hydrogen storefront locally in a worker environment";
73
- Preview.flags = {
74
- ...cli.globalFlags,
75
- path: hydrogenFlags.path,
76
- port: Flags.string({
77
- char: "p",
78
- hidden: true,
79
- description: "the port to run the preview server on",
80
- default: "3000",
81
- env: "SHOPIFY_FLAG_PORT"
82
- }),
83
- target: Flags.string({
84
- char: "t",
85
- description: "the target environment (worker or node)",
86
- options: ["node", "worker"],
87
- default: "worker",
88
- env: "SHOPIFY_FLAG_PREVIEW_TARGET"
89
- })
90
- };
91
-
92
- export { Preview as default };
93
- //# sourceMappingURL=preview.js.map
@@ -1 +0,0 @@
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":"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"}
@@ -1,19 +0,0 @@
1
- import { Flags } from '@oclif/core';
2
-
3
- const hydrogenFlags = {
4
- path: Flags.string({
5
- hidden: true,
6
- description: "the path to your hydrogen storefront",
7
- env: "SHOPIFY_HYDROGEN_FLAG_PATH"
8
- }),
9
- install: Flags.boolean({
10
- hidden: true,
11
- default: true,
12
- description: "should install packages",
13
- env: "SHOPIFY_HYDROGEN_FLAG_INSTALL",
14
- allowNo: true
15
- })
16
- };
17
-
18
- export { hydrogenFlags as h };
19
- //# sourceMappingURL=flags-39d1e3c2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flags-39d1e3c2.js","sources":["../src/cli/flags.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\n\nexport const hydrogenFlags = {\n path: Flags.string({\n hidden: true,\n description: 'the path to your hydrogen storefront',\n env: 'SHOPIFY_HYDROGEN_FLAG_PATH',\n }),\n install: Flags.boolean({\n hidden: true,\n default: true,\n description: 'should install packages',\n env: 'SHOPIFY_HYDROGEN_FLAG_INSTALL',\n allowNo: true,\n }),\n}\n"],"names":[],"mappings":";;AAEO,MAAM,aAAgB,GAAA;AAAA,EAC3B,IAAA,EAAM,MAAM,MAAO,CAAA;AAAA,IACjB,MAAQ,EAAA,IAAA;AAAA,IACR,WAAa,EAAA,sCAAA;AAAA,IACb,GAAK,EAAA,4BAAA;AAAA,GACN,CAAA;AAAA,EACD,OAAA,EAAS,MAAM,OAAQ,CAAA;AAAA,IACrB,MAAQ,EAAA,IAAA;AAAA,IACR,OAAS,EAAA,IAAA;AAAA,IACT,WAAa,EAAA,yBAAA;AAAA,IACb,GAAK,EAAA,+BAAA;AAAA,IACL,OAAS,EAAA,IAAA;AAAA,GACV,CAAA;AACH;;;;"}