@shopify/cli 3.47.5 → 3.48.1

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.
@@ -1,4 +1,4 @@
1
- import { addNPMDependencies, findUpAndReadPackageJson, checkForNewVersion, getPackageManager, } from '@shopify/cli-kit/node/node-package-manager';
1
+ import { addNPMDependencies, findUpAndReadPackageJson, checkForNewVersion, getPackageManager, usesWorkspaces, } from '@shopify/cli-kit/node/node-package-manager';
2
2
  import { exec } from '@shopify/cli-kit/node/system';
3
3
  import { dirname, moduleDirectory } from '@shopify/cli-kit/node/path';
4
4
  import { findPathUp } from '@shopify/cli-kit/node/fs';
@@ -34,18 +34,26 @@ async function upgradeLocalShopify(projectDir, currentVersion) {
34
34
  const packageJson = (await findUpAndReadPackageJson(projectDir)).content;
35
35
  const packageJsonDependencies = packageJson.dependencies || {};
36
36
  const packageJsonDevDependencies = packageJson.devDependencies || {};
37
- let resolvedVersion = { ...packageJsonDependencies, ...packageJsonDevDependencies }[await cliDependency()];
38
- if (resolvedVersion.slice(0, 1).match(/[\^~]/))
39
- resolvedVersion = currentVersion;
40
- const newestVersion = await checkForNewVersion(await cliDependency(), resolvedVersion);
41
- if (!newestVersion) {
42
- outputWontInstallMessage(resolvedVersion);
37
+ const allDependencies = { ...packageJsonDependencies, ...packageJsonDevDependencies };
38
+ let resolvedCLIVersion = allDependencies[await cliDependency()];
39
+ const resolvedAppVersion = allDependencies['@shopify/app']?.replace(/[\^~]/, '');
40
+ if (resolvedCLIVersion.slice(0, 1).match(/[\^~]/))
41
+ resolvedCLIVersion = currentVersion;
42
+ const newestCLIVersion = await checkForNewVersion(await cliDependency(), resolvedCLIVersion);
43
+ const newestAppVersion = resolvedAppVersion ? await checkForNewVersion('@shopify/app', resolvedAppVersion) : undefined;
44
+ if (newestCLIVersion) {
45
+ outputUpgradeMessage(resolvedCLIVersion, newestCLIVersion);
46
+ }
47
+ else if (resolvedAppVersion && newestAppVersion) {
48
+ outputUpgradeMessage(resolvedAppVersion, newestAppVersion);
49
+ }
50
+ else {
51
+ outputWontInstallMessage(resolvedCLIVersion);
43
52
  return;
44
53
  }
45
- outputUpgradeMessage(resolvedVersion, newestVersion);
46
54
  await installJsonDependencies('prod', packageJsonDependencies, projectDir);
47
55
  await installJsonDependencies('dev', packageJsonDevDependencies, projectDir);
48
- return newestVersion;
56
+ return newestCLIVersion ?? newestAppVersion;
49
57
  }
50
58
  async function upgradeGlobalShopify(currentVersion, { env } = { env: process.env }) {
51
59
  const newestVersion = await checkForNewVersion(await cliDependency(), currentVersion);
@@ -95,6 +103,7 @@ async function installJsonDependencies(depsEnv, deps, directory) {
95
103
  .map((pkg) => {
96
104
  return { name: pkg, version: 'latest' };
97
105
  });
106
+ const appUsesWorkspaces = await usesWorkspaces(directory);
98
107
  if (packagesToUpdate.length > 0) {
99
108
  await addNPMDependencies(packagesToUpdate, {
100
109
  packageManager: await getPackageManager(directory),
@@ -102,6 +111,7 @@ async function installJsonDependencies(depsEnv, deps, directory) {
102
111
  directory,
103
112
  stdout: process.stdout,
104
113
  stderr: process.stderr,
114
+ addToRootDirectory: appUsesWorkspaces,
105
115
  });
106
116
  }
107
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/services/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAElB,iBAAiB,GAElB,MAAM,4CAA4C,CAAA;AACnD,OAAO,EAAC,IAAI,EAAC,MAAM,8BAA8B,CAAA;AACjD,OAAO,EAAC,OAAO,EAAE,eAAe,EAAC,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAC,UAAU,EAAC,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAC,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,8BAA8B,CAAA;AAI9G,oEAAoE;AACpE,MAAM,aAAa,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAMxC,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAAiB,EACjB,cAAsB,EACtB,EAAC,GAAG,KAAoB,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAC;IAE1C,IAAI,aAA4B,CAAA;IAEhC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;IACjD,IAAI,UAAU,EAAE;QACd,aAAa,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;KACtE;SAAM,IAAI,mBAAmB,CAAC,EAAC,GAAG,EAAC,CAAC,EAAE;QACrC,MAAM,IAAI,UAAU,CAClB,aAAa,CAAA,4CAA4C,WAAW,CAAC,IAAI,CACvE,SAAS,CACV,2CAA2C,CAC7C,CAAA;KACF;SAAM;QACL,aAAa,GAAG,MAAM,oBAAoB,CAAC,cAAc,EAAE,EAAC,GAAG,EAAC,CAAC,CAAA;KAClE;IAED,IAAI,aAAa,EAAE;QACjB,aAAa,CAAC,mCAAmC,aAAa,EAAE,CAAC,CAAA;KAClE;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,SAAiB;IAC5C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,EAAE;QACpG,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,MAAM;KACb,CAAC,CAAA;IACF,IAAI,UAAU;QAAE,OAAO,OAAO,CAAC,UAAU,CAAC,CAAA;AAC5C,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,UAAkB,EAAE,cAAsB;IAC3E,MAAM,WAAW,GAAG,CAAC,MAAM,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAA;IACxE,MAAM,uBAAuB,GAAG,WAAW,CAAC,YAAY,IAAI,EAAE,CAAA;IAC9D,MAAM,0BAA0B,GAAG,WAAW,CAAC,eAAe,IAAI,EAAE,CAAA;IAEpE,IAAI,eAAe,GAAW,EAAC,GAAG,uBAAuB,EAAE,GAAG,0BAA0B,EAAC,CAAC,MAAM,aAAa,EAAE,CAAE,CAAA;IACjH,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,eAAe,GAAG,cAAc,CAAA;IAChF,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,MAAM,aAAa,EAAE,EAAE,eAAe,CAAC,CAAA;IAEtF,IAAI,CAAC,aAAa,EAAE;QAClB,wBAAwB,CAAC,eAAe,CAAC,CAAA;QACzC,OAAM;KACP;IAED,oBAAoB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;IAEpD,MAAM,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,EAAE,UAAU,CAAC,CAAA;IAC1E,MAAM,uBAAuB,CAAC,KAAK,EAAE,0BAA0B,EAAE,UAAU,CAAC,CAAA;IAC5E,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,cAAsB,EACtB,EAAC,GAAG,KAAoB,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAC;IAE1C,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,MAAM,aAAa,EAAE,EAAE,cAAc,CAAC,CAAA;IAErF,IAAI,CAAC,aAAa,EAAE;QAClB,wBAAwB,CAAC,cAAc,CAAC,CAAA;QACxC,OAAM;KACP;IAED,oBAAoB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAEnD,MAAM,eAAe,GAAG,GAAG,CAAC,wBAA2D,CAAA;IACvF,IAAI;QACF,IAAI,eAAe,EAAE;YACnB,MAAM,IAAI,UAAU,CAClB,aAAa,CAAA,qFAAqF,WAAW,CAAC,mBAAmB,CAC/H,6BAA6B,CAC9B,UAAU,CACZ,CAAA;SACF;aAAM;YACL,MAAM,mBAAmB,EAAE,CAAA;SAC5B;KACF;IAAC,OAAO,GAAG,EAAE;QACZ,UAAU,CAAC,iBAAiB,CAAC,CAAA;QAC7B,MAAM,GAAG,CAAA;KACV;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,OAAO,GAAG,KAAK,CAAA;IACrB,MAAM,IAAI,GAAG;QACX,SAAS;QACT,IAAI;QACJ,GAAG,MAAM,aAAa,EAAE,SAAS;QACjC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,SAAS,CAAC;KACrD,CAAA;IACD,UAAU,CACR,aAAa,CAAA,6BAA6B,WAAW,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAC7G,CAAA;IACD,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,wBAAwB,CAAC,cAAsB;IACtD,UAAU,CAAC,aAAa,CAAA,iCAAiC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;AACrH,CAAC;AAED,SAAS,oBAAoB,CAAC,cAAsB,EAAE,aAAqB;IACzE,UAAU,CACR,aAAa,CAAA,sBAAsB,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CACnH,CAAA;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,OAAuB,EACvB,IAA6B,EAC7B,SAAiB;IAEjB,MAAM,gBAAgB,GAAG,CAAC,MAAM,aAAa,EAAE,EAAE,GAAG,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;SACxE,MAAM,CAAC,CAAC,GAAW,EAAW,EAAE;QAC/B,MAAM,cAAc,GAAuB,IAAI,CAAC,GAAG,CAAC,CAAA;QACpD,OAAO,OAAO,CAAC,cAAc,CAAC,CAAA;IAChC,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,OAAO,EAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEJ,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/B,MAAM,kBAAkB,CAAC,gBAAgB,EAAE;YACzC,cAAc,EAAE,MAAM,iBAAiB,CAAC,SAAS,CAAC;YAClD,IAAI,EAAE,OAAO;YACb,SAAS;YACT,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAA;KACH;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,OAAO,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAA;AAC3C,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,OAAO,CAAC,MAAM,mBAAmB,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAA;AAC5D,CAAC;AAGD,IAAI,oBAAqD,CAAA;AAEzD,KAAK,UAAU,mBAAmB;IAChC,IAAI,CAAC,oBAAoB,EAAE;QACzB,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACpF,oBAAoB,GAAG,oBAAoB,IAAK,WAAW,CAAC,OAA+B,CAAA;KAC5F;IACD,OAAO,oBAAoB,CAAA;AAC7B,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAC,GAAG,KAAoB,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAC;IACrE,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;AAC3C,CAAC","sourcesContent":["import {\n addNPMDependencies,\n findUpAndReadPackageJson,\n checkForNewVersion,\n DependencyType,\n getPackageManager,\n PackageJson,\n} from '@shopify/cli-kit/node/node-package-manager'\nimport {exec} from '@shopify/cli-kit/node/system'\nimport {dirname, moduleDirectory} from '@shopify/cli-kit/node/path'\nimport {findPathUp} from '@shopify/cli-kit/node/fs'\nimport {AbortError} from '@shopify/cli-kit/node/error'\nimport {outputContent, outputInfo, outputSuccess, outputToken, outputWarn} from '@shopify/cli-kit/node/output'\n\ntype HomebrewPackageName = 'shopify-cli' | 'shopify-cli@3'\n\n// Canonical list of oclif plugins that should be installed globally\nconst globalPlugins = ['@shopify/theme']\n\ninterface UpgradeOptions {\n env: NodeJS.ProcessEnv\n}\n\nexport async function upgrade(\n directory: string,\n currentVersion: string,\n {env}: UpgradeOptions = {env: process.env},\n): Promise<void> {\n let newestVersion: string | void\n\n const projectDir = await getProjectDir(directory)\n if (projectDir) {\n newestVersion = await upgradeLocalShopify(projectDir, currentVersion)\n } else if (usingPackageManager({env})) {\n throw new AbortError(\n outputContent`Couldn't find the configuration file for ${outputToken.path(\n directory,\n )}, are you in a Shopify project directory?`,\n )\n } else {\n newestVersion = await upgradeGlobalShopify(currentVersion, {env})\n }\n\n if (newestVersion) {\n outputSuccess(`Upgraded Shopify CLI to version ${newestVersion}`)\n }\n}\n\nasync function getProjectDir(directory: string): Promise<string | undefined> {\n const configFile = await findPathUp(['shopify.app.toml', 'hydrogen.config.js', 'hydrogen.config.ts'], {\n cwd: directory,\n type: 'file',\n })\n if (configFile) return dirname(configFile)\n}\n\nasync function upgradeLocalShopify(projectDir: string, currentVersion: string): Promise<string | void> {\n const packageJson = (await findUpAndReadPackageJson(projectDir)).content\n const packageJsonDependencies = packageJson.dependencies || {}\n const packageJsonDevDependencies = packageJson.devDependencies || {}\n\n let resolvedVersion: string = {...packageJsonDependencies, ...packageJsonDevDependencies}[await cliDependency()]!\n if (resolvedVersion.slice(0, 1).match(/[\\^~]/)) resolvedVersion = currentVersion\n const newestVersion = await checkForNewVersion(await cliDependency(), resolvedVersion)\n\n if (!newestVersion) {\n outputWontInstallMessage(resolvedVersion)\n return\n }\n\n outputUpgradeMessage(resolvedVersion, newestVersion)\n\n await installJsonDependencies('prod', packageJsonDependencies, projectDir)\n await installJsonDependencies('dev', packageJsonDevDependencies, projectDir)\n return newestVersion\n}\n\nasync function upgradeGlobalShopify(\n currentVersion: string,\n {env}: UpgradeOptions = {env: process.env},\n): Promise<string | void> {\n const newestVersion = await checkForNewVersion(await cliDependency(), currentVersion)\n\n if (!newestVersion) {\n outputWontInstallMessage(currentVersion)\n return\n }\n\n outputUpgradeMessage(currentVersion, newestVersion)\n\n const homebrewPackage = env.SHOPIFY_HOMEBREW_FORMULA as HomebrewPackageName | undefined\n try {\n if (homebrewPackage) {\n throw new AbortError(\n outputContent`Upgrade only works for packages managed by a Node package manager (e.g. npm). Run ${outputToken.genericShellCommand(\n 'brew upgrade && brew update',\n )} instead`,\n )\n } else {\n await upgradeGlobalViaNpm()\n }\n } catch (err) {\n outputWarn('Upgrade failed!')\n throw err\n }\n return newestVersion\n}\n\nasync function upgradeGlobalViaNpm(): Promise<void> {\n const command = 'npm'\n const args = [\n 'install',\n '-g',\n `${await cliDependency()}@latest`,\n ...globalPlugins.map((plugin) => `${plugin}@latest`),\n ]\n outputInfo(\n outputContent`Attempting to upgrade via ${outputToken.genericShellCommand([command, ...args].join(' '))}...`,\n )\n await exec(command, args, {stdio: 'inherit'})\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\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 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 })\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 usingPackageManager({env}: UpgradeOptions = {env: process.env}): boolean {\n return Boolean(env.npm_config_user_agent)\n}\n"]}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/services/upgrade.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addNPMDependencies,\n findUpAndReadPackageJson,\n checkForNewVersion,\n DependencyType,\n getPackageManager,\n PackageJson,\n usesWorkspaces,\n} from '@shopify/cli-kit/node/node-package-manager'\nimport {exec} from '@shopify/cli-kit/node/system'\nimport {dirname, moduleDirectory} from '@shopify/cli-kit/node/path'\nimport {findPathUp} from '@shopify/cli-kit/node/fs'\nimport {AbortError} from '@shopify/cli-kit/node/error'\nimport {outputContent, outputInfo, outputSuccess, outputToken, outputWarn} from '@shopify/cli-kit/node/output'\n\ntype HomebrewPackageName = 'shopify-cli' | 'shopify-cli@3'\n\n// Canonical list of oclif plugins that should be installed globally\nconst globalPlugins = ['@shopify/theme']\n\ninterface UpgradeOptions {\n env: NodeJS.ProcessEnv\n}\n\nexport async function upgrade(\n directory: string,\n currentVersion: string,\n {env}: UpgradeOptions = {env: process.env},\n): Promise<void> {\n let newestVersion: string | void\n\n const projectDir = await getProjectDir(directory)\n if (projectDir) {\n newestVersion = await upgradeLocalShopify(projectDir, currentVersion)\n } else if (usingPackageManager({env})) {\n throw new AbortError(\n outputContent`Couldn't find the configuration file for ${outputToken.path(\n directory,\n )}, are you in a Shopify project directory?`,\n )\n } else {\n newestVersion = await upgradeGlobalShopify(currentVersion, {env})\n }\n\n if (newestVersion) {\n outputSuccess(`Upgraded Shopify CLI to version ${newestVersion}`)\n }\n}\n\nasync function getProjectDir(directory: string): Promise<string | undefined> {\n const configFile = await findPathUp(['shopify.app.toml', 'hydrogen.config.js', 'hydrogen.config.ts'], {\n cwd: directory,\n type: 'file',\n })\n if (configFile) return dirname(configFile)\n}\n\nasync function upgradeLocalShopify(projectDir: string, currentVersion: string): Promise<string | void> {\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 const resolvedAppVersion = allDependencies['@shopify/app']?.replace(/[\\^~]/, '')\n\n if (resolvedCLIVersion.slice(0, 1).match(/[\\^~]/)) resolvedCLIVersion = currentVersion\n const newestCLIVersion = await checkForNewVersion(await cliDependency(), resolvedCLIVersion)\n const newestAppVersion = resolvedAppVersion ? await checkForNewVersion('@shopify/app', resolvedAppVersion) : undefined\n\n if (newestCLIVersion) {\n outputUpgradeMessage(resolvedCLIVersion, newestCLIVersion)\n } else if (resolvedAppVersion && newestAppVersion) {\n outputUpgradeMessage(resolvedAppVersion, newestAppVersion)\n } else {\n outputWontInstallMessage(resolvedCLIVersion)\n return\n }\n\n await installJsonDependencies('prod', packageJsonDependencies, projectDir)\n await installJsonDependencies('dev', packageJsonDevDependencies, projectDir)\n return newestCLIVersion ?? newestAppVersion\n}\n\nasync function upgradeGlobalShopify(\n currentVersion: string,\n {env}: UpgradeOptions = {env: process.env},\n): Promise<string | void> {\n const newestVersion = await checkForNewVersion(await cliDependency(), currentVersion)\n\n if (!newestVersion) {\n outputWontInstallMessage(currentVersion)\n return\n }\n\n outputUpgradeMessage(currentVersion, newestVersion)\n\n const homebrewPackage = env.SHOPIFY_HOMEBREW_FORMULA as HomebrewPackageName | undefined\n try {\n if (homebrewPackage) {\n throw new AbortError(\n outputContent`Upgrade only works for packages managed by a Node package manager (e.g. npm). Run ${outputToken.genericShellCommand(\n 'brew upgrade && brew update',\n )} instead`,\n )\n } else {\n await upgradeGlobalViaNpm()\n }\n } catch (err) {\n outputWarn('Upgrade failed!')\n throw err\n }\n return newestVersion\n}\n\nasync function upgradeGlobalViaNpm(): Promise<void> {\n const command = 'npm'\n const args = [\n 'install',\n '-g',\n `${await cliDependency()}@latest`,\n ...globalPlugins.map((plugin) => `${plugin}@latest`),\n ]\n outputInfo(\n outputContent`Attempting to upgrade via ${outputToken.genericShellCommand([command, ...args].join(' '))}...`,\n )\n await exec(command, args, {stdio: 'inherit'})\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\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 usingPackageManager({env}: UpgradeOptions = {env: process.env}): boolean {\n return Boolean(env.npm_config_user_agent)\n}\n"]}
package/dist/index.js CHANGED
@@ -4,9 +4,9 @@ import fs from 'fs';
4
4
  // In some cases (for example when we boot the proxy server), when an exception is
5
5
  // thrown, no 'exit' signal is sent to the process. We don't understand this fully.
6
6
  // This means that any cleanup code that depends on "process.on('exit', ...)" will
7
- // not be called. The ngrok plugin is an example of that. Here we make sure to print
7
+ // not be called. The tunnel plugin is an example of that. Here we make sure to print
8
8
  // the error stack and manually call exit so that the cleanup code is called. This
9
- // makes sure that there are no lingering ngrok processes.
9
+ // makes sure that there are no lingering tunnel processes.
10
10
  process.on('uncaughtException', (err) => {
11
11
  fs.writeSync(process.stderr.fd, `${err.stack}\n`);
12
12
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,qBAAqB,EAAC,MAAM,2BAA2B,CAAA;AACvE,2EAA2E;AAC3E,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,kFAAkF;AAClF,mFAAmF;AACnF,kFAAkF;AAClF,oFAAoF;AACpF,kFAAkF;AAClF,0DAA0D;AAC1D,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA;AACF,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IACzB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,kFAAkF;AAClF,gCAAgC;AAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;CACjC;AAMD,KAAK,UAAU,aAAa,CAAC,EAAC,WAAW,EAAuB;IAC9D,IAAI,CAAC,WAAW,EAAE;QAChB,uEAAuE;QACvE,MAAM,eAAe,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACpE,IAAI,eAAe,EAAE;YACnB,OAAM;SACP;KACF;IAED,MAAM,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;QAC1B,WAAW;KACZ,CAAC,CAAA;AACJ,CAAC;AAED,eAAe,aAAa,CAAA","sourcesContent":["import {runCLI, useLocalCLIIfDetected} from '@shopify/cli-kit/node/cli'\n// eslint-disable-next-line @shopify/cli/specific-imports-in-bootstrap-code\nimport fs from 'fs'\n\n// In some cases (for example when we boot the proxy server), when an exception is\n// thrown, no 'exit' signal is sent to the process. We don't understand this fully.\n// This means that any cleanup code that depends on \"process.on('exit', ...)\" will\n// not be called. The ngrok plugin is an example of that. Here we make sure to print\n// the error stack and manually call exit so that the cleanup code is called. This\n// makes sure that there are no lingering ngrok processes.\nprocess.on('uncaughtException', (err) => {\n fs.writeSync(process.stderr.fd, `${err.stack}\\n`)\n process.exit(1)\n})\nconst signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\nsignals.forEach((signal) => {\n process.on(signal, () => {\n process.exit(1)\n })\n})\n\n// Sometimes we want to specify a precise amount of stdout columns, for example in\n// CI or on a cloud environment.\nconst columns = Number(process.env.SHOPIFY_CLI_COLUMNS)\nif (!isNaN(columns)) {\n process.stdout.columns = columns\n}\n\ninterface RunShopifyCLIOptions {\n development: boolean\n}\n\nasync function runShopifyCLI({development}: RunShopifyCLIOptions) {\n if (!development) {\n // If we run a local CLI instead, don't run the global one again after!\n const ranLocalInstead = await useLocalCLIIfDetected(import.meta.url)\n if (ranLocalInstead) {\n return\n }\n }\n\n await runCLI({\n moduleURL: import.meta.url,\n development,\n })\n}\n\nexport default runShopifyCLI\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,qBAAqB,EAAC,MAAM,2BAA2B,CAAA;AACvE,2EAA2E;AAC3E,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,kFAAkF;AAClF,mFAAmF;AACnF,kFAAkF;AAClF,qFAAqF;AACrF,kFAAkF;AAClF,2DAA2D;AAC3D,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA;AACF,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IACzB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,kFAAkF;AAClF,gCAAgC;AAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;CACjC;AAMD,KAAK,UAAU,aAAa,CAAC,EAAC,WAAW,EAAuB;IAC9D,IAAI,CAAC,WAAW,EAAE;QAChB,uEAAuE;QACvE,MAAM,eAAe,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACpE,IAAI,eAAe,EAAE;YACnB,OAAM;SACP;KACF;IAED,MAAM,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;QAC1B,WAAW;KACZ,CAAC,CAAA;AACJ,CAAC;AAED,eAAe,aAAa,CAAA","sourcesContent":["import {runCLI, useLocalCLIIfDetected} from '@shopify/cli-kit/node/cli'\n// eslint-disable-next-line @shopify/cli/specific-imports-in-bootstrap-code\nimport fs from 'fs'\n\n// In some cases (for example when we boot the proxy server), when an exception is\n// thrown, no 'exit' signal is sent to the process. We don't understand this fully.\n// This means that any cleanup code that depends on \"process.on('exit', ...)\" will\n// not be called. The tunnel plugin is an example of that. Here we make sure to print\n// the error stack and manually call exit so that the cleanup code is called. This\n// makes sure that there are no lingering tunnel processes.\nprocess.on('uncaughtException', (err) => {\n fs.writeSync(process.stderr.fd, `${err.stack}\\n`)\n process.exit(1)\n})\nconst signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\nsignals.forEach((signal) => {\n process.on(signal, () => {\n process.exit(1)\n })\n})\n\n// Sometimes we want to specify a precise amount of stdout columns, for example in\n// CI or on a cloud environment.\nconst columns = Number(process.env.SHOPIFY_CLI_COLUMNS)\nif (!isNaN(columns)) {\n process.stdout.columns = columns\n}\n\ninterface RunShopifyCLIOptions {\n development: boolean\n}\n\nasync function runShopifyCLI({development}: RunShopifyCLIOptions) {\n if (!development) {\n // If we run a local CLI instead, don't run the global one again after!\n const ranLocalInstead = await useLocalCLIIfDetected(import.meta.url)\n if (ranLocalInstead) {\n return\n }\n }\n\n await runCLI({\n moduleURL: import.meta.url,\n development,\n })\n}\n\nexport default runShopifyCLI\n"]}