@shopify/cli-hydrogen 7.1.2 → 8.0.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 (136) hide show
  1. package/dist/commands/hydrogen/build-vite.js +19 -10
  2. package/dist/commands/hydrogen/build.js +10 -2
  3. package/dist/commands/hydrogen/check.js +1 -0
  4. package/dist/commands/hydrogen/codegen.js +1 -0
  5. package/dist/commands/hydrogen/customer-account/push.js +170 -0
  6. package/dist/commands/hydrogen/debug/cpu.js +3 -0
  7. package/dist/commands/hydrogen/deploy.js +121 -36
  8. package/dist/commands/hydrogen/dev-vite.js +128 -59
  9. package/dist/commands/hydrogen/dev.js +108 -51
  10. package/dist/commands/hydrogen/env/list.js +7 -8
  11. package/dist/commands/hydrogen/env/pull.js +17 -1
  12. package/dist/commands/hydrogen/env/{push__unstable.js → push.js} +23 -50
  13. package/dist/commands/hydrogen/generate/route.js +1 -0
  14. package/dist/commands/hydrogen/init.js +45 -17
  15. package/dist/commands/hydrogen/link.js +20 -4
  16. package/dist/commands/hydrogen/list.js +1 -0
  17. package/dist/commands/hydrogen/login.js +1 -0
  18. package/dist/commands/hydrogen/logout.js +1 -0
  19. package/dist/commands/hydrogen/preview.js +31 -16
  20. package/dist/commands/hydrogen/setup/css.js +8 -1
  21. package/dist/commands/hydrogen/setup/markets.js +1 -0
  22. package/dist/commands/hydrogen/setup/vite.js +244 -138
  23. package/dist/commands/hydrogen/setup.js +21 -22
  24. package/dist/commands/hydrogen/shortcut.js +10 -0
  25. package/dist/commands/hydrogen/unlink.js +1 -0
  26. package/dist/commands/hydrogen/upgrade.js +2 -1
  27. package/dist/generator-templates/assets/vite/package.json +3 -4
  28. package/dist/generator-templates/assets/vite/vite.config.js +10 -2
  29. package/dist/generator-templates/starter/CHANGELOG.md +89 -0
  30. package/dist/generator-templates/starter/README.md +3 -44
  31. package/dist/generator-templates/starter/app/graphql/customer-account/CustomerDetailsQuery.ts +1 -0
  32. package/dist/generator-templates/starter/app/lib/fragments.ts +2 -0
  33. package/dist/generator-templates/starter/app/root.tsx +2 -5
  34. package/dist/generator-templates/starter/app/routes/account.orders._index.tsx +1 -1
  35. package/dist/generator-templates/starter/app/routes/account.tsx +1 -1
  36. package/dist/generator-templates/starter/app/routes/collections.all.tsx +160 -0
  37. package/dist/generator-templates/starter/app/routes/products.$handle.tsx +1 -2
  38. package/dist/generator-templates/starter/customer-accountapi.generated.d.ts +6 -3
  39. package/dist/generator-templates/starter/{remix.env.d.ts → env.d.ts} +8 -2
  40. package/dist/generator-templates/starter/package.json +14 -9
  41. package/dist/generator-templates/starter/server.ts +2 -1
  42. package/dist/generator-templates/starter/storefrontapi.generated.d.ts +59 -3
  43. package/dist/generator-templates/starter/vite.config.ts +21 -0
  44. package/dist/{commands/hydrogen/init.d.ts → init.d.ts} +11 -3
  45. package/dist/lib/check-lockfile.js +12 -18
  46. package/dist/lib/codegen.js +37 -13
  47. package/dist/lib/common.js +50 -0
  48. package/dist/lib/cpu-profiler.js +4 -1
  49. package/dist/lib/dev-shared.js +97 -0
  50. package/dist/lib/environment-variables.js +51 -30
  51. package/dist/lib/file.js +8 -1
  52. package/dist/lib/flags.js +37 -16
  53. package/dist/lib/graphql/admin/customer-application-update.js +29 -0
  54. package/dist/lib/graphql/admin/get-oxygen-data.js +1 -0
  55. package/dist/lib/graphql/admin/list-environments.js +1 -0
  56. package/dist/lib/graphql/admin/pull-variables.js +4 -4
  57. package/dist/lib/graphql/admin/test-helper.js +37 -0
  58. package/dist/lib/log.js +86 -13
  59. package/dist/lib/mini-oxygen/common.js +19 -33
  60. package/dist/lib/mini-oxygen/index.js +6 -2
  61. package/dist/lib/mini-oxygen/node.js +43 -31
  62. package/dist/lib/mini-oxygen/workerd.js +72 -165
  63. package/dist/lib/missing-routes.js +1 -1
  64. package/dist/lib/onboarding/common.js +82 -70
  65. package/dist/lib/onboarding/local.js +19 -9
  66. package/dist/lib/onboarding/remote.js +35 -30
  67. package/dist/lib/package-managers.js +24 -0
  68. package/dist/lib/remix-config.js +17 -1
  69. package/dist/lib/request-events.js +6 -1
  70. package/dist/lib/setups/i18n/replacers.js +9 -6
  71. package/dist/lib/setups/routes/generate.js +1 -0
  72. package/dist/lib/shell.js +2 -1
  73. package/dist/lib/shopify-config.js +19 -1
  74. package/dist/lib/template-diff.js +36 -15
  75. package/dist/lib/template-downloader.js +35 -5
  76. package/dist/lib/transpile/morph/typedefs.js +5 -2
  77. package/dist/lib/transpile/project.js +8 -4
  78. package/dist/lib/tunneling.js +44 -0
  79. package/dist/lib/virtual-routes.js +1 -1
  80. package/dist/lib/vite-config.js +39 -9
  81. package/oclif.manifest.json +711 -498
  82. package/package.json +32 -24
  83. package/dist/commands/hydrogen/deploy.test.js +0 -553
  84. package/dist/commands/hydrogen/env/list.test.js +0 -148
  85. package/dist/commands/hydrogen/env/pull.test.js +0 -207
  86. package/dist/commands/hydrogen/env/push__unstable.test.js +0 -383
  87. package/dist/commands/hydrogen/generate/route.test.js +0 -43
  88. package/dist/commands/hydrogen/init.test.js +0 -641
  89. package/dist/commands/hydrogen/link.test.js +0 -187
  90. package/dist/commands/hydrogen/list.test.js +0 -111
  91. package/dist/commands/hydrogen/setup.test.js +0 -61
  92. package/dist/commands/hydrogen/shortcut.test.js +0 -30
  93. package/dist/commands/hydrogen/unlink.test.js +0 -36
  94. package/dist/commands/hydrogen/upgrade.test.js +0 -786
  95. package/dist/generator-templates/starter/remix.config.js +0 -24
  96. package/dist/lib/auth.test.js +0 -157
  97. package/dist/lib/check-lockfile.test.js +0 -81
  98. package/dist/lib/check-version.test.js +0 -86
  99. package/dist/lib/environment-variables.test.js +0 -149
  100. package/dist/lib/file.test.js +0 -68
  101. package/dist/lib/flags.test.js +0 -43
  102. package/dist/lib/get-oxygen-deployment-data.test.js +0 -120
  103. package/dist/lib/gid.test.js +0 -15
  104. package/dist/lib/graphql/admin/client.test.js +0 -76
  105. package/dist/lib/graphql/admin/create-storefront.test.js +0 -64
  106. package/dist/lib/graphql/admin/link-storefront.test.js +0 -38
  107. package/dist/lib/graphql/admin/list-environments.test.js +0 -44
  108. package/dist/lib/graphql/admin/list-storefronts.test.js +0 -44
  109. package/dist/lib/graphql/admin/pull-variables.test.js +0 -43
  110. package/dist/lib/graphql/business-platform/user-account.test.js +0 -80
  111. package/dist/lib/log.test.js +0 -92
  112. package/dist/lib/mini-oxygen/assets.js +0 -134
  113. package/dist/lib/mini-oxygen/mini-oxygen.test.js +0 -214
  114. package/dist/lib/mini-oxygen/workerd-inspector-logs.js +0 -227
  115. package/dist/lib/mini-oxygen/workerd-inspector-proxy.js +0 -200
  116. package/dist/lib/mini-oxygen/workerd-inspector.js +0 -219
  117. package/dist/lib/missing-routes.test.js +0 -45
  118. package/dist/lib/remix-version-check.test.js +0 -39
  119. package/dist/lib/remix-version-interop.test.js +0 -13
  120. package/dist/lib/setups/i18n/domains.test.js +0 -39
  121. package/dist/lib/setups/i18n/replacers.test.js +0 -261
  122. package/dist/lib/setups/i18n/subdomains.test.js +0 -39
  123. package/dist/lib/setups/i18n/subfolders.test.js +0 -39
  124. package/dist/lib/setups/routes/generate.test.js +0 -296
  125. package/dist/lib/shell.test.js +0 -111
  126. package/dist/lib/shopify-config.test.js +0 -199
  127. package/dist/lib/string.test.js +0 -16
  128. package/dist/lib/virtual-routes.test.js +0 -49
  129. package/dist/lib/vite/hydrogen-middleware.js +0 -82
  130. package/dist/lib/vite/mini-oxygen.js +0 -152
  131. package/dist/lib/vite/plugins.d.ts +0 -27
  132. package/dist/lib/vite/plugins.js +0 -139
  133. package/dist/lib/vite/shared.js +0 -10
  134. package/dist/lib/vite/utils.js +0 -55
  135. package/dist/lib/vite/worker-entry.js +0 -1518
  136. /package/dist/generator-templates/starter/{.eslintrc.js → .eslintrc.cjs} +0 -0
@@ -1,139 +0,0 @@
1
- import path from 'node:path';
2
- import { setupRemixDevServerHooks, setupHydrogenMiddleware } from './hydrogen-middleware.js';
3
- import { startMiniOxygenRuntime, setupOxygenMiddleware } from './mini-oxygen.js';
4
- import { setH2OPluginContext, getH2OPluginContext, DEFAULT_SSR_ENTRY } from './shared.js';
5
- import { H2O_BINDING_NAME, createLogRequestEvent } from '../request-events.js';
6
-
7
- function hydrogen(pluginOptions = {}) {
8
- const isRemixChildCompiler = (config) => !config.plugins?.some((plugin) => plugin.name === "remix");
9
- return [
10
- {
11
- name: "hydrogen:main",
12
- config(config) {
13
- return {
14
- ssr: {
15
- optimizeDeps: {
16
- // Add CJS dependencies that break code in workerd
17
- // with errors like "require/module/exports is not defined":
18
- include: [
19
- // React deps:
20
- "react",
21
- "react/jsx-runtime",
22
- "react/jsx-dev-runtime",
23
- "react-dom",
24
- "react-dom/server",
25
- // Remix deps:
26
- "set-cookie-parser",
27
- "cookie",
28
- // Hydrogen deps:
29
- "content-security-policy-builder"
30
- ]
31
- }
32
- },
33
- // Pass the setup functions to the Oxygen runtime.
34
- ...setH2OPluginContext({
35
- setupScripts: [setupRemixDevServerHooks],
36
- shouldStartRuntime: (config2) => !isRemixChildCompiler(config2),
37
- services: {
38
- [H2O_BINDING_NAME]: createLogRequestEvent({
39
- transformLocation: (partialLocation) => path.join(config.root ?? process.cwd(), partialLocation)
40
- })
41
- }
42
- })
43
- };
44
- },
45
- configureServer(viteDevServer) {
46
- if (isRemixChildCompiler(viteDevServer.config))
47
- return;
48
- const { cliOptions } = getH2OPluginContext(viteDevServer.config) || {};
49
- return () => {
50
- setupHydrogenMiddleware(viteDevServer, {
51
- ...pluginOptions,
52
- ...cliOptions
53
- });
54
- };
55
- }
56
- }
57
- ];
58
- }
59
- function oxygen(pluginOptions = {}) {
60
- let resolvedConfig;
61
- let absoluteWorkerEntryFile;
62
- return [
63
- {
64
- name: "oxygen:runtime",
65
- config(config, env) {
66
- return {
67
- appType: "custom",
68
- resolve: {
69
- conditions: ["worker", "workerd"]
70
- },
71
- ssr: {
72
- noExternal: true,
73
- target: "webworker"
74
- },
75
- // When building, the CLI will set the `ssr` option to `true`
76
- // if no --entry flag is passed for the default SSR entry file.
77
- // Replace it here with a default value.
78
- ...env.isSsrBuild && config.build?.ssr && {
79
- build: {
80
- ssr: config.build?.ssr === true ? (
81
- // No --entry flag passed by the user, use the
82
- // option passed to the plugin or the default value
83
- pluginOptions.ssrEntry ?? DEFAULT_SSR_ENTRY
84
- ) : (
85
- // --entry flag passed by the user, keep it
86
- config.build?.ssr
87
- )
88
- }
89
- }
90
- };
91
- },
92
- configureServer(viteDevServer) {
93
- resolvedConfig = viteDevServer.config;
94
- const { shouldStartRuntime, cliOptions, setupScripts, services } = getH2OPluginContext(resolvedConfig) || {};
95
- if (shouldStartRuntime && !shouldStartRuntime(resolvedConfig))
96
- return;
97
- const workerEntryFile = cliOptions?.ssrEntry ?? pluginOptions.ssrEntry ?? DEFAULT_SSR_ENTRY;
98
- absoluteWorkerEntryFile = path.isAbsolute(workerEntryFile) ? workerEntryFile : path.resolve(viteDevServer.config.root, workerEntryFile);
99
- const envPromise = cliOptions?.envPromise ?? Promise.resolve();
100
- let miniOxygen;
101
- const miniOxygenPromise = envPromise.then((remoteEnv) => {
102
- return startMiniOxygenRuntime({
103
- viteDevServer,
104
- workerEntryFile,
105
- setupScripts,
106
- services,
107
- env: { ...remoteEnv, ...pluginOptions.env },
108
- debug: cliOptions?.debug ?? pluginOptions.debug ?? false,
109
- inspectorPort: cliOptions?.inspectorPort ?? pluginOptions.inspectorPort ?? 9229
110
- });
111
- });
112
- process.once("SIGTERM", async () => {
113
- try {
114
- await miniOxygen?.dispose();
115
- } finally {
116
- process.exit();
117
- }
118
- });
119
- return () => {
120
- setupOxygenMiddleware(viteDevServer, async (request) => {
121
- miniOxygen ??= await miniOxygenPromise;
122
- return miniOxygen.dispatch(request);
123
- });
124
- };
125
- },
126
- transform(code, id, options) {
127
- if (resolvedConfig?.command === "serve" && resolvedConfig?.server?.hmr !== false && options?.ssr && (id === absoluteWorkerEntryFile || id === absoluteWorkerEntryFile + path.extname(id))) {
128
- return {
129
- // Accept HMR in server entry module to avoid full-page refresh in the browser.
130
- // Note: appending code at the end should not break the source map.
131
- code: code + "\nif (import.meta.hot) import.meta.hot.accept();"
132
- };
133
- }
134
- }
135
- }
136
- ];
137
- }
138
-
139
- export { hydrogen, oxygen };
@@ -1,10 +0,0 @@
1
- const DEFAULT_SSR_ENTRY = "./server";
2
- const H2O_CONTEXT_KEY = "__h2oPluginContext";
3
- function getH2OPluginContext(config) {
4
- return config?.[H2O_CONTEXT_KEY];
5
- }
6
- function setH2OPluginContext(options) {
7
- return { [H2O_CONTEXT_KEY]: options };
8
- }
9
-
10
- export { DEFAULT_SSR_ENTRY, getH2OPluginContext, setH2OPluginContext };
@@ -1,55 +0,0 @@
1
- import path from 'node:path';
2
- import { Readable } from 'node:stream';
3
- import { Request } from 'miniflare';
4
-
5
- function toURL(req = "/", origin) {
6
- const isRequest = typeof req !== "string";
7
- const pathname = (isRequest ? req.url : req) || "/";
8
- return new URL(
9
- pathname,
10
- origin || isRequest && req.headers.host && `http://${req.headers.host}` || "http://example.com"
11
- );
12
- }
13
- function toWeb(req, headers) {
14
- return new Request(toURL(req), {
15
- method: req.method,
16
- headers: { ...headers, ...req.headers },
17
- body: req.headers["content-length"] ? Readable.toWeb(req) : void 0,
18
- duplex: "half",
19
- // This is required when sending a ReadableStream as body
20
- redirect: "manual"
21
- // Avoid consuming 300 responses here, return to browser
22
- });
23
- }
24
- function pipeFromWeb(webResponse, res) {
25
- const headers = Object.fromEntries(webResponse.headers.entries());
26
- const setCookieHeader = "set-cookie";
27
- if (headers[setCookieHeader]) {
28
- delete headers[setCookieHeader];
29
- res.setHeader(setCookieHeader, webResponse.headers.getSetCookie());
30
- }
31
- res.writeHead(webResponse.status, webResponse.statusText, headers);
32
- if (webResponse.body) {
33
- Readable.fromWeb(webResponse.body).pipe(res);
34
- } else {
35
- res.end();
36
- }
37
- }
38
- function getHmrUrl(viteDevServer) {
39
- const userHmrValue = viteDevServer.config.server?.hmr;
40
- if (userHmrValue === false) {
41
- console.warn(
42
- "HMR is disabled. Code changes will not be reflected in neither browser or server."
43
- );
44
- return "";
45
- }
46
- const configHmr = typeof userHmrValue === "object" ? userHmrValue : {};
47
- const hmrPort = configHmr.port;
48
- const hmrPath = configHmr.path;
49
- let hmrBase = viteDevServer.config.base;
50
- if (hmrPath)
51
- hmrBase = path.posix.join(hmrBase, hmrPath);
52
- return (hmrPort ? `http://localhost:${hmrPort}` : "") + hmrBase;
53
- }
54
-
55
- export { getHmrUrl, pipeFromWeb, toURL, toWeb };