@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,124 +0,0 @@
1
- import { dependency, file, error, path } from '@shopify/cli-kit';
2
- import { createServer } from 'vite';
3
- import 'path';
4
- import 'fs';
5
-
6
- const genericConfigurationFileNames = {
7
- tailwind: "tailwind.config",
8
- postCSS: "postcss.config",
9
- eslint: ".eslintrc.js",
10
- typescript: {
11
- config: "tsconfig.json"
12
- },
13
- ...dependency.genericConfigurationFileNames
14
- };
15
-
16
- async function viteception(paths, options) {
17
- const isWorker = process.env.WORKER;
18
- delete process.env.WORKER;
19
- const server = await createServer({
20
- clearScreen: false,
21
- server: { middlewareMode: 'ssr' },
22
- ...options,
23
- });
24
- if (isWorker) {
25
- process.env.WORKER = isWorker;
26
- }
27
- const loaded = await Promise.all(paths.map((path) => server.ssrLoadModule(path)));
28
- await server.close();
29
- return { server, loaded };
30
- }
31
-
32
- process.env.HYDROGEN_SERVER_ENTRY || '/src/App.server';
33
- // The character ":" breaks Vite with Node >= 16.15. Use "_" instead
34
- const VIRTUAL_PREFIX = 'virtual__';
35
- const PROXY_PREFIX = 'proxy__';
36
- const HYDROGEN_CONFIG_ID = 'hydrogen.config.ts';
37
- const VIRTUAL_PROXY_HYDROGEN_CONFIG_ID = VIRTUAL_PREFIX + PROXY_PREFIX + HYDROGEN_CONFIG_ID;
38
-
39
- // Provide Hydrogen config loader to external tools like the CLI
40
- async function loadConfig(options = { root: process.cwd() }) {
41
- const { loaded } = await viteception([VIRTUAL_PROXY_HYDROGEN_CONFIG_ID], options);
42
- return {
43
- configuration: loaded[0].default,
44
- configurationPath: loaded[0].configPath,
45
- };
46
- }
47
-
48
- class AppErrors {
49
- constructor() {
50
- this.errors = {};
51
- }
52
- addError(path2, message) {
53
- this.errors[path2] = message;
54
- }
55
- getError(path2) {
56
- return this.errors[path2];
57
- }
58
- isEmpty() {
59
- return Object.keys(this.errors).length === 0;
60
- }
61
- toJSON() {
62
- return Object.values(this.errors);
63
- }
64
- }
65
- class HydrogenAppLoader {
66
- constructor({ directory }) {
67
- this.errors = new AppErrors();
68
- this.directory = directory;
69
- }
70
- async loaded() {
71
- if (!await file.exists(this.directory)) {
72
- throw new error.Abort(`Couldn't find directory ${this.directory}`);
73
- }
74
- const { configuration } = await this.loadConfig();
75
- const yarnLockPath = path.join(this.directory, genericConfigurationFileNames.yarn.lockfile);
76
- const yarnLockExists = await file.exists(yarnLockPath);
77
- const pnpmLockPath = path.join(this.directory, genericConfigurationFileNames.pnpm.lockfile);
78
- const pnpmLockExists = await file.exists(pnpmLockPath);
79
- const packageJSONPath = path.join(this.directory, "package.json");
80
- const name = await dependency.getPackageName(packageJSONPath);
81
- const nodeDependencies = await dependency.getDependencies(packageJSONPath);
82
- const tsConfigExists = await file.exists(path.join(this.directory, "tsconfig.json"));
83
- const language = tsConfigExists && nodeDependencies.typescript ? "TypeScript" : "JavaScript";
84
- let dependencyManager;
85
- if (yarnLockExists) {
86
- dependencyManager = "yarn";
87
- } else if (pnpmLockExists) {
88
- dependencyManager = "pnpm";
89
- } else {
90
- dependencyManager = "npm";
91
- }
92
- const app = {
93
- name,
94
- directory: this.directory,
95
- configuration,
96
- dependencyManager,
97
- nodeDependencies,
98
- language
99
- };
100
- if (!this.errors.isEmpty())
101
- app.errors = this.errors;
102
- return app;
103
- }
104
- async loadConfig() {
105
- const abortError = new error.Abort(`Couldn't find hydrogen configuration file`);
106
- try {
107
- const config = await loadConfig({ root: this.directory });
108
- if (!config) {
109
- throw abortError;
110
- }
111
- return config;
112
- } catch (error) {
113
- abortError.stack = error.stack;
114
- throw abortError;
115
- }
116
- }
117
- }
118
- async function load(directory) {
119
- const loader = new HydrogenAppLoader({ directory });
120
- return loader.loaded();
121
- }
122
-
123
- export { genericConfigurationFileNames as g, load as l };
124
- //# sourceMappingURL=hydrogen-21276a42.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hydrogen-21276a42.js","sources":["../src/cli/constants.ts","../../../node_modules/@shopify/hydrogen/dist/esnext/framework/viteception.js","../../../node_modules/@shopify/hydrogen/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.js","../../../node_modules/@shopify/hydrogen/dist/esnext/framework/load-config.js","../src/cli/models/hydrogen.ts"],"sourcesContent":["import {dependency} from '@shopify/cli-kit'\n\nexport const configurationFileNames = {\n hydrogen: 'hydrogen.config',\n} as const\n\nexport const supportedConfigExtensions = ['ts', 'js', 'mjs', 'cjs', 'json']\n\nexport const dotEnvFileNames = {\n production: '.env',\n}\n\nexport const genericConfigurationFileNames = {\n tailwind: 'tailwind.config',\n postCSS: 'postcss.config',\n eslint: '.eslintrc.js',\n typescript: {\n config: 'tsconfig.json',\n },\n ...dependency.genericConfigurationFileNames,\n} as const\n","import { createServer } from 'vite';\nexport async function viteception(paths, options) {\n const isWorker = process.env.WORKER;\n delete process.env.WORKER;\n const server = await createServer({\n clearScreen: false,\n server: { middlewareMode: 'ssr' },\n ...options,\n });\n if (isWorker) {\n process.env.WORKER = isWorker;\n }\n const loaded = await Promise.all(paths.map((path) => server.ssrLoadModule(path)));\n await server.close();\n return { server, loaded };\n}\n","import { normalizePath } from 'vite';\nimport path from 'path';\nimport { promises as fs } from 'fs';\nimport { viteception } from '../viteception';\nexport const HYDROGEN_DEFAULT_SERVER_ENTRY = process.env.HYDROGEN_SERVER_ENTRY || '/src/App.server';\n// The character \":\" breaks Vite with Node >= 16.15. Use \"_\" instead\nconst VIRTUAL_PREFIX = 'virtual__';\nconst PROXY_PREFIX = 'proxy__';\nconst HYDROGEN_CONFIG_ID = 'hydrogen.config.ts';\nconst VIRTUAL_HYDROGEN_CONFIG_ID = VIRTUAL_PREFIX + HYDROGEN_CONFIG_ID;\nexport const VIRTUAL_PROXY_HYDROGEN_CONFIG_ID = VIRTUAL_PREFIX + PROXY_PREFIX + HYDROGEN_CONFIG_ID;\nconst HYDROGEN_ROUTES_ID = 'hydrogen-routes.server.jsx';\nconst VIRTUAL_HYDROGEN_ROUTES_ID = VIRTUAL_PREFIX + HYDROGEN_ROUTES_ID;\nexport const VIRTUAL_PROXY_HYDROGEN_ROUTES_ID = VIRTUAL_PREFIX + PROXY_PREFIX + HYDROGEN_ROUTES_ID;\nexport default (pluginOptions) => {\n let config;\n let server;\n let resolvedConfigPath;\n return {\n name: 'hydrogen:virtual-files',\n configResolved(_config) {\n config = _config;\n // @ts-ignore\n config.plugins.push(addPathToConfigProxy());\n },\n configureServer(_server) {\n server = _server;\n },\n resolveId(source, importer) {\n if (source === VIRTUAL_HYDROGEN_CONFIG_ID) {\n return findHydrogenConfigPath(config.root, pluginOptions.configPath).then((hcPath) => {\n resolvedConfigPath = hcPath;\n // This direct dependency on a real file\n // makes HMR work for the virtual module.\n return this.resolve(hcPath, importer, { skipSelf: true });\n });\n }\n if ([\n VIRTUAL_PROXY_HYDROGEN_CONFIG_ID,\n VIRTUAL_PROXY_HYDROGEN_ROUTES_ID,\n VIRTUAL_HYDROGEN_ROUTES_ID,\n ].includes(source)) {\n // Virtual modules convention\n // https://vitejs.dev/guide/api-plugin.html#virtual-modules-convention\n return '\\0' + source;\n }\n },\n load(id) {\n // Likely due to a bug in Vite, but virtual modules cannot be loaded\n // directly using ssrLoadModule from a Vite plugin. It needs to be proxied as follows:\n if (id === '\\0' + VIRTUAL_PROXY_HYDROGEN_CONFIG_ID) {\n return `import hc from '${VIRTUAL_HYDROGEN_CONFIG_ID}'; export default hc;`;\n }\n if (id === '\\0' + VIRTUAL_PROXY_HYDROGEN_ROUTES_ID) {\n return `import hr from '${VIRTUAL_HYDROGEN_ROUTES_ID}'; export default hr;`;\n }\n if (id === '\\0' + VIRTUAL_HYDROGEN_ROUTES_ID) {\n return importHydrogenConfig().then((hc) => {\n let routesPath = (typeof hc.routes === 'string' ? hc.routes : hc.routes?.files) ??\n '/src/routes';\n if (routesPath.startsWith('./')) {\n routesPath = routesPath.slice(1);\n }\n if (!routesPath.includes('*')) {\n if (!routesPath.endsWith('/')) {\n routesPath += '/';\n }\n routesPath += '**/*.server.[jt](s|sx)';\n }\n const [dirPrefix] = routesPath.split('/*');\n let code = `export default {\\n dirPrefix: '${dirPrefix}',\\n basePath: '${hc.routes?.basePath ?? ''}',\\n files: import.meta.globEager('${routesPath}')\\n};`;\n if (config.command === 'serve') {\n // Add dependency on Hydrogen config for HMR\n code += `\\nimport '${VIRTUAL_HYDROGEN_CONFIG_ID}';`;\n }\n return { code };\n });\n }\n },\n };\n async function importHydrogenConfig() {\n if (server) {\n const loaded = await server.ssrLoadModule(VIRTUAL_PROXY_HYDROGEN_CONFIG_ID);\n return loaded.default;\n }\n const { loaded } = await viteception([VIRTUAL_PROXY_HYDROGEN_CONFIG_ID]);\n return loaded[0].default;\n }\n function addPathToConfigProxy() {\n return {\n name: 'hydrogen:virtual-files-post',\n enforce: 'post',\n transform(code, id) {\n if (id === '\\0' + VIRTUAL_PROXY_HYDROGEN_CONFIG_ID) {\n // The CLI needs to import the Hydrogen config path\n return (code + ` export const configPath = '${resolvedConfigPath || ''}';`);\n }\n },\n };\n }\n};\nasync function findHydrogenConfigPath(root, userProvidedPath) {\n let configPath = userProvidedPath;\n if (!configPath) {\n // Find the config file in the project root\n const files = await fs.readdir(root);\n configPath = files.find((file) => /^hydrogen\\.config\\.[jt]s$/.test(file));\n }\n if (configPath) {\n configPath = normalizePath(configPath);\n if (!configPath.startsWith('/'))\n configPath = path.resolve(root, configPath);\n }\n return (configPath ||\n require.resolve(\n // eslint-disable-next-line node/no-missing-require\n '@shopify/hydrogen/utilities/empty-hydrogen-config'));\n}\n","// Provide Hydrogen config loader to external tools like the CLI\nimport { VIRTUAL_PROXY_HYDROGEN_CONFIG_ID } from './plugins/vite-plugin-hydrogen-virtual-files';\nimport { viteception } from './viteception';\nexport async function loadConfig(options = { root: process.cwd() }) {\n const { loaded } = await viteception([VIRTUAL_PROXY_HYDROGEN_CONFIG_ID], options);\n return {\n configuration: loaded[0].default,\n configurationPath: loaded[0].configPath,\n };\n}\n","import {genericConfigurationFileNames} from '../constants'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport {HydrogenConfig} from '@shopify/hydrogen/config'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport {loadConfig} from '@shopify/hydrogen/load-config'\nimport {dependency, path, error as kitError, file} from '@shopify/cli-kit'\n\nexport interface HydrogenApp {\n name: string\n directory: string\n dependencyManager: dependency.DependencyManager\n configuration: HydrogenConfig\n nodeDependencies: {[key: string]: string}\n language: 'JavaScript' | 'TypeScript'\n errors?: AppErrors\n}\n\ninterface AppLoaderConstructorArgs {\n directory: string\n}\n\nclass AppErrors {\n private errors: {\n [key: string]: string\n } = {}\n\n addError(path: string, message: string): void {\n this.errors[path] = message\n }\n\n getError(path: string): string {\n return this.errors[path]\n }\n\n isEmpty() {\n return Object.keys(this.errors).length === 0\n }\n\n toJSON(): string[] {\n return Object.values(this.errors)\n }\n}\n\nclass HydrogenAppLoader {\n private directory: string\n private errors: AppErrors = new AppErrors()\n\n constructor({directory}: AppLoaderConstructorArgs) {\n this.directory = directory\n }\n\n async loaded() {\n if (!(await file.exists(this.directory))) {\n throw new kitError.Abort(`Couldn't find directory ${this.directory}`)\n }\n\n const {configuration} = await this.loadConfig()\n\n const yarnLockPath = path.join(this.directory, genericConfigurationFileNames.yarn.lockfile)\n const yarnLockExists = await file.exists(yarnLockPath)\n const pnpmLockPath = path.join(this.directory, genericConfigurationFileNames.pnpm.lockfile)\n const pnpmLockExists = await file.exists(pnpmLockPath)\n const packageJSONPath = path.join(this.directory, 'package.json')\n const name = await dependency.getPackageName(packageJSONPath)\n const nodeDependencies = await dependency.getDependencies(packageJSONPath)\n const tsConfigExists = await file.exists(path.join(this.directory, 'tsconfig.json'))\n const language = tsConfigExists && nodeDependencies.typescript ? 'TypeScript' : 'JavaScript'\n\n let dependencyManager: dependency.DependencyManager\n if (yarnLockExists) {\n dependencyManager = 'yarn'\n } else if (pnpmLockExists) {\n dependencyManager = 'pnpm'\n } else {\n dependencyManager = 'npm'\n }\n\n const app: HydrogenApp = {\n name,\n directory: this.directory,\n configuration,\n dependencyManager,\n nodeDependencies,\n language,\n }\n\n if (!this.errors.isEmpty()) app.errors = this.errors\n\n return app\n }\n\n async loadConfig() {\n const abortError = new kitError.Abort(`Couldn't find hydrogen configuration file`)\n\n try {\n const config = await loadConfig({root: this.directory})\n\n if (!config) {\n throw abortError\n }\n\n return config\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n abortError.stack = error.stack\n throw abortError\n }\n }\n}\n\nexport async function load(directory: string): Promise<HydrogenApp> {\n const loader = new HydrogenAppLoader({directory})\n\n return loader.loaded()\n}\n"],"names":["kitError"],"mappings":"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"}