@shopify/cli-kit 3.92.0 → 3.93.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.
- package/README.md +1 -1
- package/dist/cli/api/graphql/admin/generated/find_development_theme_by_name.d.ts +16 -0
- package/dist/cli/api/graphql/admin/generated/find_development_theme_by_name.js +60 -0
- package/dist/cli/api/graphql/admin/generated/find_development_theme_by_name.js.map +1 -0
- package/dist/private/node/api/graphql.d.ts +10 -0
- package/dist/private/node/api/graphql.js +67 -5
- package/dist/private/node/api/graphql.js.map +1 -1
- package/dist/private/node/conf-store.d.ts +13 -0
- package/dist/private/node/conf-store.js +17 -3
- package/dist/private/node/conf-store.js.map +1 -1
- package/dist/private/node/constants.d.ts +3 -0
- package/dist/private/node/constants.js +3 -0
- package/dist/private/node/constants.js.map +1 -1
- package/dist/private/node/session/exchange.d.ts +22 -8
- package/dist/private/node/session/exchange.js +37 -14
- package/dist/private/node/session/exchange.js.map +1 -1
- package/dist/private/node/session/schema.d.ts +62 -62
- package/dist/private/node/session/scopes.js +3 -2
- package/dist/private/node/session/scopes.js.map +1 -1
- package/dist/private/node/session/store.d.ts +7 -0
- package/dist/private/node/session/store.js +17 -0
- package/dist/private/node/session/store.js.map +1 -1
- package/dist/private/node/session/validate.d.ts +5 -4
- package/dist/private/node/session/validate.js +34 -7
- package/dist/private/node/session/validate.js.map +1 -1
- package/dist/private/node/session.d.ts +1 -1
- package/dist/private/node/session.js +77 -32
- package/dist/private/node/session.js.map +1 -1
- package/dist/private/node/testing/ui.js +6 -4
- package/dist/private/node/testing/ui.js.map +1 -1
- package/dist/private/node/ui/components/AutocompletePrompt.test.js +5 -5
- package/dist/private/node/ui/components/AutocompletePrompt.test.js.map +1 -1
- package/dist/private/node/ui/components/ConcurrentOutput.js +5 -2
- package/dist/private/node/ui/components/ConcurrentOutput.js.map +1 -1
- package/dist/private/node/ui/components/ConcurrentOutput.test.js +2 -2
- package/dist/private/node/ui/components/ConcurrentOutput.test.js.map +1 -1
- package/dist/private/node/ui/components/SelectInput.test.js +10 -10
- package/dist/private/node/ui/components/SelectInput.test.js.map +1 -1
- package/dist/private/node/ui/components/Table/Table.js +2 -2
- package/dist/private/node/ui/components/Table/Table.js.map +1 -1
- package/dist/private/node/ui/components/Tasks.test.js +6 -6
- package/dist/private/node/ui/components/Tasks.test.js.map +1 -1
- package/dist/private/node/ui/components/TextAnimation.test.js +1 -1
- package/dist/private/node/ui/components/TextAnimation.test.js.map +1 -1
- package/dist/private/node/ui/components/TextInput.test.js +4 -4
- package/dist/private/node/ui/components/TextInput.test.js.map +1 -1
- package/dist/private/node/ui/components/TokenizedText.js +1 -0
- package/dist/private/node/ui/components/TokenizedText.js.map +1 -1
- package/dist/private/node/ui/hooks/use-select-state.js +1 -3
- package/dist/private/node/ui/hooks/use-select-state.js.map +1 -1
- package/dist/public/common/version.d.ts +1 -1
- package/dist/public/common/version.js +1 -1
- package/dist/public/common/version.js.map +1 -1
- package/dist/public/node/analytics.js +4 -4
- package/dist/public/node/analytics.js.map +1 -1
- package/dist/public/node/api/admin.js +1 -3
- package/dist/public/node/api/admin.js.map +1 -1
- package/dist/public/node/api/rest-api-throttler.d.ts +14 -0
- package/dist/public/node/api/rest-api-throttler.js +14 -87
- package/dist/public/node/api/rest-api-throttler.js.map +1 -1
- package/dist/public/node/archiver.js +6 -7
- package/dist/public/node/archiver.js.map +1 -1
- package/dist/public/node/cli-launcher.d.ts +1 -1
- package/dist/public/node/cli-launcher.js +9 -9
- package/dist/public/node/cli-launcher.js.map +1 -1
- package/dist/public/node/cli.js +4 -1
- package/dist/public/node/cli.js.map +1 -1
- package/dist/public/node/context/fqdn.js +1 -0
- package/dist/public/node/context/fqdn.js.map +1 -1
- package/dist/public/node/context/local.d.ts +7 -0
- package/dist/public/node/context/local.js +9 -0
- package/dist/public/node/context/local.js.map +1 -1
- package/dist/public/node/dot-env.js +1 -1
- package/dist/public/node/dot-env.js.map +1 -1
- package/dist/public/node/environment.d.ts +4 -9
- package/dist/public/node/environment.js +6 -12
- package/dist/public/node/environment.js.map +1 -1
- package/dist/public/node/environments.js +4 -3
- package/dist/public/node/environments.js.map +1 -1
- package/dist/public/node/error-handler.js +1 -1
- package/dist/public/node/error-handler.js.map +1 -1
- package/dist/public/node/error.js +1 -0
- package/dist/public/node/error.js.map +1 -1
- package/dist/public/node/fs.d.ts +9 -1
- package/dist/public/node/fs.js +16 -4
- package/dist/public/node/fs.js.map +1 -1
- package/dist/public/node/git.d.ts +10 -4
- package/dist/public/node/git.js +101 -80
- package/dist/public/node/git.js.map +1 -1
- package/dist/public/node/global-context.js +1 -3
- package/dist/public/node/global-context.js.map +1 -1
- package/dist/public/node/hooks/postrun.d.ts +7 -0
- package/dist/public/node/hooks/postrun.js +61 -1
- package/dist/public/node/hooks/postrun.js.map +1 -1
- package/dist/public/node/hooks/prerun.d.ts +3 -2
- package/dist/public/node/hooks/prerun.js +9 -22
- package/dist/public/node/hooks/prerun.js.map +1 -1
- package/dist/public/node/http.js +1 -1
- package/dist/public/node/http.js.map +1 -1
- package/dist/public/node/import-extractor.d.ts +17 -0
- package/dist/public/node/import-extractor.js +84 -23
- package/dist/public/node/import-extractor.js.map +1 -1
- package/dist/public/node/is-global.d.ts +9 -1
- package/dist/public/node/is-global.js +55 -12
- package/dist/public/node/is-global.js.map +1 -1
- package/dist/public/node/mimes.js +1 -1
- package/dist/public/node/mimes.js.map +1 -1
- package/dist/public/node/node-package-manager.d.ts +1 -1
- package/dist/public/node/node-package-manager.js +4 -1
- package/dist/public/node/node-package-manager.js.map +1 -1
- package/dist/public/node/os.js +1 -0
- package/dist/public/node/os.js.map +1 -1
- package/dist/public/node/output.js +3 -2
- package/dist/public/node/output.js.map +1 -1
- package/dist/public/node/path.d.ts +11 -0
- package/dist/public/node/path.js +30 -1
- package/dist/public/node/path.js.map +1 -1
- package/dist/public/node/result.js +1 -0
- package/dist/public/node/result.js.map +1 -1
- package/dist/public/node/serial-batch-processor.js +1 -3
- package/dist/public/node/serial-batch-processor.js.map +1 -1
- package/dist/public/node/session-prompt.js +10 -2
- package/dist/public/node/session-prompt.js.map +1 -1
- package/dist/public/node/session.js +6 -6
- package/dist/public/node/session.js.map +1 -1
- package/dist/public/node/themes/api.d.ts +1 -0
- package/dist/public/node/themes/api.js +26 -0
- package/dist/public/node/themes/api.js.map +1 -1
- package/dist/public/node/themes/conf.js +3 -5
- package/dist/public/node/themes/conf.js.map +1 -1
- package/dist/public/node/themes/factories.js +1 -0
- package/dist/public/node/themes/factories.js.map +1 -1
- package/dist/public/node/themes/theme-manager.d.ts +2 -2
- package/dist/public/node/themes/theme-manager.js +13 -8
- package/dist/public/node/themes/theme-manager.js.map +1 -1
- package/dist/public/node/{toml.d.ts → toml/codec.d.ts} +1 -1
- package/dist/public/node/{toml.js → toml/codec.js} +1 -1
- package/dist/public/node/toml/codec.js.map +1 -0
- package/dist/public/node/toml/index.d.ts +1 -0
- package/dist/public/node/toml/index.js +2 -0
- package/dist/public/node/toml/index.js.map +1 -0
- package/dist/public/node/toml/toml-file.d.ts +88 -0
- package/dist/public/node/toml/toml-file.js +159 -0
- package/dist/public/node/toml/toml-file.js.map +1 -0
- package/dist/public/node/tree-kill.js +1 -1
- package/dist/public/node/tree-kill.js.map +1 -1
- package/dist/public/node/ui.js +1 -0
- package/dist/public/node/ui.js.map +1 -1
- package/dist/public/node/upgrade.d.ts +28 -1
- package/dist/public/node/upgrade.js +184 -16
- package/dist/public/node/upgrade.js.map +1 -1
- package/dist/public/node/version.d.ts +9 -0
- package/dist/public/node/version.js +16 -1
- package/dist/public/node/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -12
- package/dist/public/node/custom-oclif-loader.d.ts +0 -6
- package/dist/public/node/custom-oclif-loader.js +0 -79
- package/dist/public/node/custom-oclif-loader.js.map +0 -1
- package/dist/public/node/toml.js.map +0 -1
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { isDevelopment } from './context/local.js';
|
|
2
|
+
import { currentProcessIsGlobal, inferPackageManagerForGlobalCLI, getProjectDir } from './is-global.js';
|
|
3
|
+
import { checkForCachedNewVersion, findUpAndReadPackageJson, checkForNewVersion, usesWorkspaces, addNPMDependencies, getPackageManager, } from './node-package-manager.js';
|
|
4
|
+
import { outputContent, outputDebug, outputInfo, outputToken, outputWarn } from './output.js';
|
|
5
|
+
import { cwd, moduleDirectory, sniffForPath } from './path.js';
|
|
6
|
+
import { exec, isCI } from './system.js';
|
|
7
|
+
import { renderConfirmationPrompt } from './ui.js';
|
|
8
|
+
import { isPreReleaseVersion } from './version.js';
|
|
9
|
+
import { getAutoUpgradeEnabled, setAutoUpgradeEnabled, runAtMinimumInterval } from '../../private/node/conf-store.js';
|
|
10
|
+
import { CLI_KIT_VERSION } from '../common/version.js';
|
|
4
11
|
/**
|
|
5
12
|
* Utility function for generating an install command for the user to run
|
|
6
13
|
* to install an updated version of Shopify CLI.
|
|
@@ -8,23 +15,104 @@ import { outputContent, outputToken } from './output.js';
|
|
|
8
15
|
* @returns A string with the command to run.
|
|
9
16
|
*/
|
|
10
17
|
export function cliInstallCommand() {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (packageManager === '
|
|
15
|
-
|
|
18
|
+
const packageManager = inferPackageManagerForGlobalCLI();
|
|
19
|
+
if (!packageManager || packageManager === 'unknown')
|
|
20
|
+
return undefined;
|
|
21
|
+
if (packageManager === 'homebrew') {
|
|
22
|
+
return 'brew upgrade shopify-cli';
|
|
16
23
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
packageManager = 'npm';
|
|
20
|
-
if (packageManager === 'yarn') {
|
|
21
|
-
return `${packageManager} ${isGlobal ? 'global ' : ''}add @shopify/cli@latest`;
|
|
24
|
+
else if (packageManager === 'yarn') {
|
|
25
|
+
return `${packageManager} global add @shopify/cli@latest`;
|
|
22
26
|
}
|
|
23
27
|
else {
|
|
24
28
|
const verb = packageManager === 'pnpm' ? 'add' : 'install';
|
|
25
|
-
return `${packageManager} ${verb}
|
|
29
|
+
return `${packageManager} ${verb} -g @shopify/cli@latest`;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Runs the CLI upgrade using the appropriate package manager.
|
|
34
|
+
* Determines the install command and executes it.
|
|
35
|
+
*
|
|
36
|
+
* @throws AbortError if the package manager or command cannot be determined.
|
|
37
|
+
*/
|
|
38
|
+
export async function runCLIUpgrade() {
|
|
39
|
+
// Path where the current project is (app/hydrogen)
|
|
40
|
+
const path = sniffForPath() ?? cwd();
|
|
41
|
+
const projectDir = getProjectDir(path);
|
|
42
|
+
// Check if we are running in a global context if not, return
|
|
43
|
+
const isGlobal = currentProcessIsGlobal();
|
|
44
|
+
// Don't auto-upgrade for development mode
|
|
45
|
+
if (!isGlobal && isDevelopment()) {
|
|
46
|
+
outputInfo('Skipping upgrade in development mode.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Generate the install command for the global CLI and execute it
|
|
50
|
+
if (isGlobal) {
|
|
51
|
+
const installCommand = cliInstallCommand();
|
|
52
|
+
if (!installCommand) {
|
|
53
|
+
throw new Error('Could not determine the package manager');
|
|
54
|
+
}
|
|
55
|
+
const [command, ...args] = installCommand.split(' ');
|
|
56
|
+
if (!command) {
|
|
57
|
+
throw new Error('Could not determine the command to run');
|
|
58
|
+
}
|
|
59
|
+
outputInfo(outputContent `Upgrading Shopify CLI by running: ${outputToken.genericShellCommand(installCommand)}...`);
|
|
60
|
+
await exec(command, args, { stdio: 'inherit' });
|
|
61
|
+
}
|
|
62
|
+
else if (projectDir) {
|
|
63
|
+
await upgradeLocalShopify(projectDir, CLI_KIT_VERSION);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
throw new Error('Could not determine the local project directory');
|
|
26
67
|
}
|
|
27
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Returns the version to auto-upgrade to, or undefined if auto-upgrade should be skipped.
|
|
71
|
+
* Auto-upgrade is disabled by default and must be enabled via `shopify upgrade`.
|
|
72
|
+
* Also skips for CI, pre-release versions, or when no newer version is available.
|
|
73
|
+
*
|
|
74
|
+
* @returns The version string to upgrade to, or undefined if no upgrade should happen.
|
|
75
|
+
*/
|
|
76
|
+
export function versionToAutoUpgrade() {
|
|
77
|
+
const currentVersion = CLI_KIT_VERSION;
|
|
78
|
+
const newerVersion = checkForCachedNewVersion('@shopify/cli', currentVersion);
|
|
79
|
+
if (!newerVersion) {
|
|
80
|
+
outputDebug('Auto-upgrade: No newer version available.');
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
if (process.env.SHOPIFY_CLI_FORCE_AUTO_UPGRADE === '1') {
|
|
84
|
+
outputDebug('Auto-upgrade: Forcing auto-upgrade because of SHOPIFY_CLI_FORCE_AUTO_UPGRADE.');
|
|
85
|
+
return newerVersion;
|
|
86
|
+
}
|
|
87
|
+
if (!getAutoUpgradeEnabled()) {
|
|
88
|
+
outputDebug('Auto-upgrade: Skipping because auto-upgrade is not enabled.');
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
if (isCI()) {
|
|
92
|
+
outputDebug('Auto-upgrade: Skipping auto-upgrade in CI.');
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
if (isPreReleaseVersion(currentVersion)) {
|
|
96
|
+
outputDebug('Auto-upgrade: Skipping auto-upgrade for pre-release version.');
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
return newerVersion;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Shows a daily upgrade-available warning for users who have not enabled auto-upgrade.
|
|
103
|
+
* Skipped in CI and for pre-release versions. When auto-upgrade is enabled this is a no-op
|
|
104
|
+
* because the postrun hook will handle the upgrade directly.
|
|
105
|
+
*/
|
|
106
|
+
export async function warnIfUpgradeAvailable() {
|
|
107
|
+
if (isCI() || isPreReleaseVersion(CLI_KIT_VERSION) || getAutoUpgradeEnabled())
|
|
108
|
+
return;
|
|
109
|
+
const newerVersion = checkForCachedNewVersion('@shopify/cli', CLI_KIT_VERSION);
|
|
110
|
+
if (!newerVersion)
|
|
111
|
+
return;
|
|
112
|
+
await runAtMinimumInterval('warn-on-available-upgrade', { days: 1 }, async () => {
|
|
113
|
+
outputWarn(getOutputUpdateCLIReminder(newerVersion));
|
|
114
|
+
});
|
|
115
|
+
}
|
|
28
116
|
/**
|
|
29
117
|
* Generates a message to remind the user to update the CLI.
|
|
30
118
|
*
|
|
@@ -32,7 +120,87 @@ export function cliInstallCommand() {
|
|
|
32
120
|
* @returns The message to remind the user to update the CLI.
|
|
33
121
|
*/
|
|
34
122
|
export function getOutputUpdateCLIReminder(version) {
|
|
35
|
-
|
|
36
|
-
|
|
123
|
+
const installCommand = cliInstallCommand();
|
|
124
|
+
if (installCommand) {
|
|
125
|
+
return outputContent `💡 Version ${version} available! Run ${outputToken.genericShellCommand(installCommand)}`.value;
|
|
126
|
+
}
|
|
127
|
+
return outputContent `💡 Version ${version} available!`.value;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Prompts the user to enable or disable automatic upgrades, then persists their choice.
|
|
131
|
+
*
|
|
132
|
+
* @returns Whether the user chose to enable auto-upgrade.
|
|
133
|
+
*/
|
|
134
|
+
export async function promptAutoUpgrade() {
|
|
135
|
+
const enabled = await renderConfirmationPrompt({
|
|
136
|
+
message: 'Enable automatic updates for Shopify CLI?',
|
|
137
|
+
confirmationMessage: 'Yes, automatically update',
|
|
138
|
+
cancellationMessage: "No, I'll update manually",
|
|
139
|
+
});
|
|
140
|
+
setAutoUpgradeEnabled(enabled);
|
|
141
|
+
return enabled;
|
|
142
|
+
}
|
|
143
|
+
async function upgradeLocalShopify(projectDir, currentVersion) {
|
|
144
|
+
const packageJson = (await findUpAndReadPackageJson(projectDir)).content;
|
|
145
|
+
const packageJsonDependencies = packageJson.dependencies ?? {};
|
|
146
|
+
const packageJsonDevDependencies = packageJson.devDependencies ?? {};
|
|
147
|
+
const allDependencies = { ...packageJsonDependencies, ...packageJsonDevDependencies };
|
|
148
|
+
let resolvedCLIVersion = allDependencies[await cliDependency()];
|
|
149
|
+
if (!resolvedCLIVersion) {
|
|
150
|
+
outputDebug('Auto-upgrade: CLI dependency not found in project dependencies, skipping local upgrade.');
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (resolvedCLIVersion.slice(0, 1).match(/[\^~]/))
|
|
154
|
+
resolvedCLIVersion = currentVersion;
|
|
155
|
+
const newestCLIVersion = await checkForNewVersion(await cliDependency(), resolvedCLIVersion);
|
|
156
|
+
if (newestCLIVersion) {
|
|
157
|
+
outputUpgradeMessage(resolvedCLIVersion, newestCLIVersion);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
outputWontInstallMessage(resolvedCLIVersion);
|
|
161
|
+
}
|
|
162
|
+
await installJsonDependencies('prod', packageJsonDependencies, projectDir);
|
|
163
|
+
await installJsonDependencies('dev', packageJsonDevDependencies, projectDir);
|
|
164
|
+
}
|
|
165
|
+
async function installJsonDependencies(depsEnv, deps, directory) {
|
|
166
|
+
const packagesToUpdate = [await cliDependency(), ...(await oclifPlugins())]
|
|
167
|
+
.filter((pkg) => {
|
|
168
|
+
const pkgRequirement = deps[pkg];
|
|
169
|
+
return Boolean(pkgRequirement);
|
|
170
|
+
})
|
|
171
|
+
.map((pkg) => {
|
|
172
|
+
return { name: pkg, version: 'latest' };
|
|
173
|
+
});
|
|
174
|
+
const appUsesWorkspaces = await usesWorkspaces(directory);
|
|
175
|
+
if (packagesToUpdate.length > 0) {
|
|
176
|
+
await addNPMDependencies(packagesToUpdate, {
|
|
177
|
+
packageManager: await getPackageManager(directory),
|
|
178
|
+
type: depsEnv,
|
|
179
|
+
directory,
|
|
180
|
+
stdout: process.stdout,
|
|
181
|
+
stderr: process.stderr,
|
|
182
|
+
addToRootDirectory: appUsesWorkspaces,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async function cliDependency() {
|
|
187
|
+
return (await packageJsonContents()).name;
|
|
188
|
+
}
|
|
189
|
+
async function oclifPlugins() {
|
|
190
|
+
return (await packageJsonContents())?.oclif?.plugins ?? [];
|
|
191
|
+
}
|
|
192
|
+
let _packageJsonContents;
|
|
193
|
+
async function packageJsonContents() {
|
|
194
|
+
if (!_packageJsonContents) {
|
|
195
|
+
const packageJson = await findUpAndReadPackageJson(moduleDirectory(import.meta.url));
|
|
196
|
+
_packageJsonContents = _packageJsonContents ?? packageJson.content;
|
|
197
|
+
}
|
|
198
|
+
return _packageJsonContents;
|
|
199
|
+
}
|
|
200
|
+
function outputWontInstallMessage(currentVersion) {
|
|
201
|
+
outputInfo(outputContent `You're on the latest version, ${outputToken.yellow(currentVersion)}, no need to upgrade!`);
|
|
202
|
+
}
|
|
203
|
+
function outputUpgradeMessage(currentVersion, newestVersion) {
|
|
204
|
+
outputInfo(outputContent `Upgrading CLI from ${outputToken.yellow(currentVersion)} to ${outputToken.yellow(newestVersion)}...`);
|
|
37
205
|
}
|
|
38
206
|
//# sourceMappingURL=upgrade.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/public/node/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAE,+BAA+B,EAAC,MAAM,gBAAgB,CAAA;AACtF,OAAO,EAAC,2BAA2B,EAAC,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAA;IACzC,IAAI,cAAc,GAAG,2BAA2B,EAAE,CAAA;IAClD,gGAAgG;IAChG,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,cAAc,GAAG,+BAA+B,EAAE,CAAA;IACpD,CAAC;IACD,yGAAyG;IACzG,IAAI,cAAc,KAAK,SAAS;QAAE,cAAc,GAAG,KAAK,CAAA;IAExD,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,GAAG,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAA;IAChF,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAC1D,OAAO,GAAG,cAAc,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAA;IAChF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,OAAO,aAAa,CAAA,cAAc,OAAO,mBAAmB,WAAW,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,EAAE;SAC/G,KAAK,CAAA;AACV,CAAC","sourcesContent":["import {currentProcessIsGlobal, inferPackageManagerForGlobalCLI} from './is-global.js'\nimport {packageManagerFromUserAgent} from './node-package-manager.js'\nimport {outputContent, outputToken} from './output.js'\n\n/**\n * Utility function for generating an install command for the user to run\n * to install an updated version of Shopify CLI.\n *\n * @returns A string with the command to run.\n */\nexport function cliInstallCommand(): string {\n const isGlobal = currentProcessIsGlobal()\n let packageManager = packageManagerFromUserAgent()\n // packageManagerFromUserAgent() will return 'unknown' if it can't determine the package manager\n if (packageManager === 'unknown') {\n packageManager = inferPackageManagerForGlobalCLI()\n }\n // inferPackageManagerForGlobalCLI() will also return 'unknown' if it can't determine the package manager\n if (packageManager === 'unknown') packageManager = 'npm'\n\n if (packageManager === 'yarn') {\n return `${packageManager} ${isGlobal ? 'global ' : ''}add @shopify/cli@latest`\n } else {\n const verb = packageManager === 'pnpm' ? 'add' : 'install'\n return `${packageManager} ${verb} ${isGlobal ? '-g ' : ''}@shopify/cli@latest`\n }\n}\n\n/**\n * Generates a message to remind the user to update the CLI.\n *\n * @param version - The version to update to.\n * @returns The message to remind the user to update the CLI.\n */\nexport function getOutputUpdateCLIReminder(version: string): string {\n return outputContent`💡 Version ${version} available! Run ${outputToken.genericShellCommand(cliInstallCommand())}`\n .value\n}\n"]}
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/public/node/upgrade.ts"],"names":[],"mappings":"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","sourcesContent":["import {isDevelopment} from './context/local.js'\nimport {currentProcessIsGlobal, inferPackageManagerForGlobalCLI, getProjectDir} from './is-global.js'\nimport {\n checkForCachedNewVersion,\n findUpAndReadPackageJson,\n PackageJson,\n checkForNewVersion,\n DependencyType,\n usesWorkspaces,\n addNPMDependencies,\n getPackageManager,\n} from './node-package-manager.js'\nimport {outputContent, outputDebug, outputInfo, outputToken, outputWarn} from './output.js'\nimport {cwd, moduleDirectory, sniffForPath} from './path.js'\nimport {exec, isCI} from './system.js'\nimport {renderConfirmationPrompt} from './ui.js'\nimport {isPreReleaseVersion} from './version.js'\nimport {getAutoUpgradeEnabled, setAutoUpgradeEnabled, runAtMinimumInterval} from '../../private/node/conf-store.js'\nimport {CLI_KIT_VERSION} from '../common/version.js'\n\n/**\n * Utility function for generating an install command for the user to run\n * to install an updated version of Shopify CLI.\n *\n * @returns A string with the command to run.\n */\nexport function cliInstallCommand(): string | undefined {\n const packageManager = inferPackageManagerForGlobalCLI()\n if (!packageManager || packageManager === 'unknown') return undefined\n\n if (packageManager === 'homebrew') {\n return 'brew upgrade shopify-cli'\n } else if (packageManager === 'yarn') {\n return `${packageManager} global add @shopify/cli@latest`\n } else {\n const verb = packageManager === 'pnpm' ? 'add' : 'install'\n return `${packageManager} ${verb} -g @shopify/cli@latest`\n }\n}\n\n/**\n * Runs the CLI upgrade using the appropriate package manager.\n * Determines the install command and executes it.\n *\n * @throws AbortError if the package manager or command cannot be determined.\n */\nexport async function runCLIUpgrade(): Promise<void> {\n // Path where the current project is (app/hydrogen)\n const path = sniffForPath() ?? cwd()\n const projectDir = getProjectDir(path)\n\n // Check if we are running in a global context if not, return\n const isGlobal = currentProcessIsGlobal()\n\n // Don't auto-upgrade for development mode\n if (!isGlobal && isDevelopment()) {\n outputInfo('Skipping upgrade in development mode.')\n return\n }\n\n // Generate the install command for the global CLI and execute it\n if (isGlobal) {\n const installCommand = cliInstallCommand()\n if (!installCommand) {\n throw new Error('Could not determine the package manager')\n }\n const [command, ...args] = installCommand.split(' ')\n if (!command) {\n throw new Error('Could not determine the command to run')\n }\n outputInfo(outputContent`Upgrading Shopify CLI by running: ${outputToken.genericShellCommand(installCommand)}...`)\n await exec(command, args, {stdio: 'inherit'})\n } else if (projectDir) {\n await upgradeLocalShopify(projectDir, CLI_KIT_VERSION)\n } else {\n throw new Error('Could not determine the local project directory')\n }\n}\n\n/**\n * Returns the version to auto-upgrade to, or undefined if auto-upgrade should be skipped.\n * Auto-upgrade is disabled by default and must be enabled via `shopify upgrade`.\n * Also skips for CI, pre-release versions, or when no newer version is available.\n *\n * @returns The version string to upgrade to, or undefined if no upgrade should happen.\n */\nexport function versionToAutoUpgrade(): string | undefined {\n const currentVersion = CLI_KIT_VERSION\n const newerVersion = checkForCachedNewVersion('@shopify/cli', currentVersion)\n if (!newerVersion) {\n outputDebug('Auto-upgrade: No newer version available.')\n return undefined\n }\n if (process.env.SHOPIFY_CLI_FORCE_AUTO_UPGRADE === '1') {\n outputDebug('Auto-upgrade: Forcing auto-upgrade because of SHOPIFY_CLI_FORCE_AUTO_UPGRADE.')\n return newerVersion\n }\n if (!getAutoUpgradeEnabled()) {\n outputDebug('Auto-upgrade: Skipping because auto-upgrade is not enabled.')\n return undefined\n }\n if (isCI()) {\n outputDebug('Auto-upgrade: Skipping auto-upgrade in CI.')\n return undefined\n }\n if (isPreReleaseVersion(currentVersion)) {\n outputDebug('Auto-upgrade: Skipping auto-upgrade for pre-release version.')\n return undefined\n }\n return newerVersion\n}\n\n/**\n * Shows a daily upgrade-available warning for users who have not enabled auto-upgrade.\n * Skipped in CI and for pre-release versions. When auto-upgrade is enabled this is a no-op\n * because the postrun hook will handle the upgrade directly.\n */\nexport async function warnIfUpgradeAvailable(): Promise<void> {\n if (isCI() || isPreReleaseVersion(CLI_KIT_VERSION) || getAutoUpgradeEnabled()) return\n\n const newerVersion = checkForCachedNewVersion('@shopify/cli', CLI_KIT_VERSION)\n if (!newerVersion) return\n\n await runAtMinimumInterval('warn-on-available-upgrade', {days: 1}, async () => {\n outputWarn(getOutputUpdateCLIReminder(newerVersion))\n })\n}\n\n/**\n * Generates a message to remind the user to update the CLI.\n *\n * @param version - The version to update to.\n * @returns The message to remind the user to update the CLI.\n */\nexport function getOutputUpdateCLIReminder(version: string): string {\n const installCommand = cliInstallCommand()\n if (installCommand) {\n return outputContent`💡 Version ${version} available! Run ${outputToken.genericShellCommand(installCommand)}`.value\n }\n return outputContent`💡 Version ${version} available!`.value\n}\n\n/**\n * Prompts the user to enable or disable automatic upgrades, then persists their choice.\n *\n * @returns Whether the user chose to enable auto-upgrade.\n */\nexport async function promptAutoUpgrade(): Promise<boolean> {\n const enabled = await renderConfirmationPrompt({\n message: 'Enable automatic updates for Shopify CLI?',\n confirmationMessage: 'Yes, automatically update',\n cancellationMessage: \"No, I'll update manually\",\n })\n setAutoUpgradeEnabled(enabled)\n return enabled\n}\n\nasync function upgradeLocalShopify(projectDir: string, currentVersion: string) {\n const packageJson = (await findUpAndReadPackageJson(projectDir)).content\n const packageJsonDependencies = packageJson.dependencies ?? {}\n const packageJsonDevDependencies = packageJson.devDependencies ?? {}\n const allDependencies = {...packageJsonDependencies, ...packageJsonDevDependencies}\n\n let resolvedCLIVersion = allDependencies[await cliDependency()]\n if (!resolvedCLIVersion) {\n outputDebug('Auto-upgrade: CLI dependency not found in project dependencies, skipping local upgrade.')\n return\n }\n\n if (resolvedCLIVersion.slice(0, 1).match(/[\\^~]/)) resolvedCLIVersion = currentVersion\n const newestCLIVersion = await checkForNewVersion(await cliDependency(), resolvedCLIVersion)\n\n if (newestCLIVersion) {\n outputUpgradeMessage(resolvedCLIVersion, newestCLIVersion)\n } else {\n outputWontInstallMessage(resolvedCLIVersion)\n }\n\n await installJsonDependencies('prod', packageJsonDependencies, projectDir)\n await installJsonDependencies('dev', packageJsonDevDependencies, projectDir)\n}\n\nasync function installJsonDependencies(\n depsEnv: DependencyType,\n deps: {[key: string]: string},\n directory: string,\n): Promise<void> {\n const packagesToUpdate = [await cliDependency(), ...(await oclifPlugins())]\n .filter((pkg: string): boolean => {\n const pkgRequirement: string | undefined = deps[pkg]\n return Boolean(pkgRequirement)\n })\n .map((pkg) => {\n return {name: pkg, version: 'latest'}\n })\n\n const appUsesWorkspaces = await usesWorkspaces(directory)\n\n if (packagesToUpdate.length > 0) {\n await addNPMDependencies(packagesToUpdate, {\n packageManager: await getPackageManager(directory),\n type: depsEnv,\n directory,\n stdout: process.stdout,\n stderr: process.stderr,\n addToRootDirectory: appUsesWorkspaces,\n })\n }\n}\n\nasync function cliDependency(): Promise<string> {\n return (await packageJsonContents()).name\n}\n\nasync function oclifPlugins(): Promise<string[]> {\n return (await packageJsonContents())?.oclif?.plugins ?? []\n}\n\ntype PackageJsonWithName = Omit<PackageJson, 'name'> & {name: string}\nlet _packageJsonContents: PackageJsonWithName | undefined\n\nasync function packageJsonContents(): Promise<PackageJsonWithName> {\n if (!_packageJsonContents) {\n const packageJson = await findUpAndReadPackageJson(moduleDirectory(import.meta.url))\n _packageJsonContents = _packageJsonContents ?? (packageJson.content as PackageJsonWithName)\n }\n return _packageJsonContents\n}\n\nfunction outputWontInstallMessage(currentVersion: string): void {\n outputInfo(outputContent`You're on the latest version, ${outputToken.yellow(currentVersion)}, no need to upgrade!`)\n}\n\nfunction outputUpgradeMessage(currentVersion: string, newestVersion: string): void {\n outputInfo(\n outputContent`Upgrading CLI from ${outputToken.yellow(currentVersion)} to ${outputToken.yellow(newestVersion)}...`,\n )\n}\n"]}
|
|
@@ -19,3 +19,12 @@ export declare function globalCLIVersion(): Promise<string | undefined>;
|
|
|
19
19
|
* @returns True if the version is a pre-release version.
|
|
20
20
|
*/
|
|
21
21
|
export declare function isPreReleaseVersion(version: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Checks if there is a major version change between two versions.
|
|
24
|
+
* Pre-release versions (0.0.0-*) are treated as not having a major version change.
|
|
25
|
+
*
|
|
26
|
+
* @param currentVersion - The current version.
|
|
27
|
+
* @param newerVersion - The newer version to compare against.
|
|
28
|
+
* @returns True if there is a major version change.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isMajorVersionChange(currentVersion: string, newerVersion: string): boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { captureOutput } from './system.js';
|
|
2
2
|
import which from 'which';
|
|
3
|
-
import { satisfies } from 'semver';
|
|
3
|
+
import { satisfies, SemVer } from 'semver';
|
|
4
4
|
/**
|
|
5
5
|
* Returns the version of the local dependency of the CLI if it's installed in the provided directory.
|
|
6
6
|
*
|
|
@@ -54,4 +54,19 @@ export async function globalCLIVersion() {
|
|
|
54
54
|
export function isPreReleaseVersion(version) {
|
|
55
55
|
return version.startsWith('0.0.0');
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Checks if there is a major version change between two versions.
|
|
59
|
+
* Pre-release versions (0.0.0-*) are treated as not having a major version change.
|
|
60
|
+
*
|
|
61
|
+
* @param currentVersion - The current version.
|
|
62
|
+
* @param newerVersion - The newer version to compare against.
|
|
63
|
+
* @returns True if there is a major version change.
|
|
64
|
+
*/
|
|
65
|
+
export function isMajorVersionChange(currentVersion, newerVersion) {
|
|
66
|
+
if (isPreReleaseVersion(currentVersion) || isPreReleaseVersion(newerVersion))
|
|
67
|
+
return false;
|
|
68
|
+
const currentSemVer = new SemVer(currentVersion);
|
|
69
|
+
const newerSemVer = new SemVer(newerVersion);
|
|
70
|
+
return currentSemVer.major !== newerSemVer.major;
|
|
71
|
+
}
|
|
57
72
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/public/node/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,SAAS,EAAC,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/public/node/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,MAAM,QAAQ,CAAA;AACxC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,EAAC,GAAG,EAAE,SAAS,EAAC,CAAC,CAAA;QACrF,OAAO,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnD,qDAAqD;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAC,GAAG,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAC,CAAA;QAC3D,2EAA2E;QAC3E,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAA;QAC3G,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAA;QACzC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAC,GAAG,EAAC,CAAC,CAAA;QACjE,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5D,IAAI,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;YAC/B,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnE,OAAO,OAAO,CAAA;YAChB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAA;QAChB,qDAAqD;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,cAAsB,EAAE,YAAoB;IAC/E,IAAI,mBAAmB,CAAC,cAAc,CAAC,IAAI,mBAAmB,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAA;IAC1F,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,CAAA;IAChD,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAA;IAC5C,OAAO,aAAa,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAA;AAClD,CAAC","sourcesContent":["import {captureOutput} from './system.js'\nimport which from 'which'\nimport {satisfies, SemVer} from 'semver'\n/**\n * Returns the version of the local dependency of the CLI if it's installed in the provided directory.\n *\n * @param directory - Path of the project to look for the dependency.\n * @returns The CLI version or undefined if the dependency is not installed.\n */\nexport async function localCLIVersion(directory: string): Promise<string | undefined> {\n try {\n const output = await captureOutput('npm', ['list', '@shopify/cli'], {cwd: directory})\n return output.match(/@shopify\\/cli@([\\w.-]*)/)?.[1]\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch {\n return undefined\n }\n}\n\n/**\n * Returns the version of the globally installed CLI, only if it's greater than 3.59.0 (when the global CLI was introduced).\n *\n * @returns The version of the CLI if it is globally installed or undefined.\n */\nexport async function globalCLIVersion(): Promise<string | undefined> {\n try {\n const env = {...process.env, SHOPIFY_CLI_NO_ANALYTICS: '1'}\n // Both execa and which find the project dependency. We need to exclude it.\n const shopifyBinaries = which.sync('shopify', {all: true}).filter((path) => !path.includes('node_modules'))\n if (!shopifyBinaries[0]) return undefined\n const output = await captureOutput(shopifyBinaries[0], [], {env})\n const versionMatch = output.match(/@shopify\\/cli\\/([^\\s]+)/)\n if (versionMatch && versionMatch[1]) {\n const version = versionMatch[1]\n if (satisfies(version, `>=3.59.0`) || isPreReleaseVersion(version)) {\n return version\n }\n }\n return undefined\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch {\n return undefined\n }\n}\n\n/**\n * Returns true if the given version is a pre-release version.\n * Meaning is a `nightly`, `snapshot`, or `experimental` version.\n *\n * @param version - The version to check.\n * @returns True if the version is a pre-release version.\n */\nexport function isPreReleaseVersion(version: string): boolean {\n return version.startsWith('0.0.0')\n}\n\n/**\n * Checks if there is a major version change between two versions.\n * Pre-release versions (0.0.0-*) are treated as not having a major version change.\n *\n * @param currentVersion - The current version.\n * @param newerVersion - The newer version to compare against.\n * @returns True if there is a major version change.\n */\nexport function isMajorVersionChange(currentVersion: string, newerVersion: string): boolean {\n if (isPreReleaseVersion(currentVersion) || isPreReleaseVersion(newerVersion)) return false\n const currentSemVer = new SemVer(currentVersion)\n const newerSemVer = new SemVer(newerVersion)\n return currentSemVer.major !== newerSemVer.major\n}\n"]}
|