@shopify/cli-kit 3.0.26 → 3.2.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/CHANGELOG.md +25 -0
- package/dist/analytics.d.ts +3 -1
- package/dist/analytics.js +20 -5
- package/dist/analytics.js.map +1 -1
- package/dist/api/graphql/find_store_by_domain.d.ts +21 -0
- package/dist/api/graphql/find_store_by_domain.js +24 -0
- package/dist/api/graphql/find_store_by_domain.js.map +1 -0
- package/dist/api/graphql/index.d.ts +1 -0
- package/dist/api/graphql/index.js +1 -0
- package/dist/api/graphql/index.js.map +1 -1
- package/dist/api/identity.js +3 -0
- package/dist/api/identity.js.map +1 -1
- package/dist/error.js +4 -0
- package/dist/error.js.map +1 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/node/base-command.d.ts +6 -0
- package/dist/node/base-command.js +9 -0
- package/dist/node/base-command.js.map +1 -0
- package/dist/{checksum.d.ts → node/checksum.d.ts} +6 -1
- package/dist/{checksum.js → node/checksum.js} +8 -3
- package/dist/node/checksum.js.map +1 -0
- package/dist/node/cli.js +5 -45
- package/dist/node/cli.js.map +1 -1
- package/dist/{colors.d.ts → node/colors.d.ts} +0 -0
- package/dist/{colors.js → node/colors.js} +0 -0
- package/dist/node/colors.js.map +1 -0
- package/dist/{dot-env.d.ts → node/dot-env.d.ts} +8 -3
- package/dist/{dot-env.js → node/dot-env.js} +10 -5
- package/dist/node/dot-env.js.map +1 -0
- package/dist/node/error-handler.d.ts +3 -0
- package/dist/node/error-handler.js +79 -0
- package/dist/node/error-handler.js.map +1 -0
- package/dist/node/hooks/postrun.d.ts +2 -0
- package/dist/node/hooks/postrun.js +6 -0
- package/dist/node/hooks/postrun.js.map +1 -0
- package/dist/node/hooks/prerun.d.ts +2 -0
- package/dist/node/hooks/prerun.js +9 -0
- package/dist/node/hooks/prerun.js.map +1 -0
- package/dist/{dependency.d.ts → node/node-package-manager.d.ts} +92 -23
- package/dist/{dependency.js → node/node-package-manager.js} +56 -49
- package/dist/node/node-package-manager.js.map +1 -0
- package/dist/{ruby.d.ts → node/ruby.d.ts} +11 -2
- package/dist/{ruby.js → node/ruby.js} +15 -10
- package/dist/node/ruby.js.map +1 -0
- package/dist/output.d.ts +9 -2
- package/dist/output.js +17 -7
- package/dist/output.js.map +1 -1
- package/dist/port.js +23 -1
- package/dist/port.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/autocomplete.js +1 -1
- package/dist/ui/autocomplete.js.map +1 -1
- package/dist/ui/input.js +1 -1
- package/dist/ui/input.js.map +1 -1
- package/dist/ui/select.js +1 -1
- package/dist/ui/select.js.map +1 -1
- package/dist/ui.js +3 -3
- package/dist/ui.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +7 -3
- package/dist/checksum.js.map +0 -1
- package/dist/colors.js.map +0 -1
- package/dist/dependency.js.map +0 -1
- package/dist/dot-env.js.map +0 -1
- package/dist/ruby.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../src/node/ruby.ts"],"names":[],"mappings":"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","sourcesContent":["import * as file from '../file.js'\nimport * as ui from '../ui.js'\nimport * as system from '../system.js'\nimport {Abort} from '../error.js'\nimport {glob, join} from '../path.js'\nimport constants from '../constants.js'\nimport {coerce} from '../semver.js'\nimport {AdminSession} from '../session.js'\nimport {content, token} from '../output.js'\n// eslint-disable-next-line no-restricted-imports\nimport {spawn} from 'child_process'\nimport {Writable} from 'node:stream'\n\nconst RubyCLIVersion = '2.16.0'\nconst ThemeCheckVersion = '1.10.3'\nconst MinBundlerVersion = '2.3.8'\nconst MinRubyVersion = '2.3.0'\nconst MinRubyGemVersion = '2.5.0'\n\n/**\n * Execute CLI 2.0 commands.\n * Installs a version of RubyCLI as a vendor dependency in a hidden folder in the system.\n * User must have a valid ruby+bundler environment to run any command.\n *\n * @param args {string[]} List of argumets to execute. (ex: ['theme', 'pull'])\n * @param adminSession {AdminSession} Contains token and store to pass to CLI 2.0, which will be set as environment variables\n */\nexport async function execCLI2(args: string[], adminSession?: AdminSession) {\n await installCLIDependencies()\n const env = {\n ...process.env,\n SHOPIFY_CLI_ADMIN_AUTH_TOKEN: adminSession?.token,\n SHOPIFY_CLI_STORE: adminSession?.storeFqdn,\n }\n\n spawn('bundle', ['exec', 'shopify'].concat(args), {\n stdio: 'inherit',\n cwd: shopifyCLIDirectory(),\n shell: true,\n env,\n })\n}\n\ninterface ExecThemeCheckCLIOptions {\n /** A list of directories in which theme-check should run */\n directories: string[]\n /** Arguments to pass to the theme-check CLI */\n args?: string[]\n /** Writable to send standard output content through */\n stdout: Writable\n /** Writable to send standard error content through */\n stderr: Writable\n}\n\n/**\n * A function that installs (if needed) and runs the theme-check CLI.\n * @param options {ExecThemeCheckCLIOptions} Options to customize the execution of theme-check.\n * @returns {Promise<void>} A promise that resolves or rejects depending on the result of the underlying theme-check process.\n */\nexport async function execThemeCheckCLI({\n directories,\n args,\n stdout,\n stderr,\n}: ExecThemeCheckCLIOptions): Promise<void[]> {\n await installThemeCheckCLIDependencies(stdout)\n\n const processes = directories.map(async (directory): Promise<void> => {\n // Check that there are files aside from the extension TOML config file,\n // otherwise theme-check will return a false failure.\n const files = await glob(join(directory, '/**/*'))\n const fileCount = files.filter((file) => !file.match(/\\.toml$/)).length\n if (fileCount === 0) return\n\n const customStderr = new Writable({\n write(chunk, ...args) {\n // For some reason, theme-check reports this initial status line to stderr\n // See https://github.com/Shopify/theme-check/blob/1092737cfb58a73ca397ffb1371665dc55df2976/lib/theme_check/language_server/diagnostics_engine.rb#L31\n // which leads to https://github.com/Shopify/theme-check/blob/1092737cfb58a73ca397ffb1371665dc55df2976/lib/theme_check/language_server/io_messenger.rb#L65\n if (chunk.toString('ascii').match(/^Checking/)) {\n stdout.write(chunk, ...args)\n } else {\n stderr.write(chunk, ...args)\n }\n },\n })\n await system.exec('bundle', ['exec', 'theme-check'].concat([directory, ...(args || [])]), {\n stdout,\n stderr: customStderr,\n cwd: themeCheckDirectory(),\n })\n })\n return Promise.all(processes)\n}\n\n/**\n * Validate Ruby Enviroment\n * Install Theme Check CLI and its dependencies\n * Shows a loading message if it's the first time installing dependencies\n * or if we are installing a new version of Theme Check CLI\n */\nasync function installThemeCheckCLIDependencies(stdout: Writable) {\n const exists = await file.exists(themeCheckDirectory())\n\n if (!exists) stdout.write('Installing theme dependencies...')\n const list = ui.newListr(\n [\n {\n title: 'Installing theme dependencies',\n task: async () => {\n await validateRubyEnv()\n await createThemeCheckCLIWorkingDirectory()\n await createThemeCheckGemfile()\n await bundleInstallThemeCheck()\n },\n },\n ],\n {renderer: 'silent'},\n )\n await list.run()\n if (!exists) stdout.write('Installed theme dependencies!')\n}\n\n/**\n * Validate Ruby Enviroment\n * Install RubyCLI and its dependencies\n * Shows a loading spinner if it's the first time installing dependencies\n * or if we are installing a new version of RubyCLI\n */\nasync function installCLIDependencies() {\n const exists = await file.exists(shopifyCLIDirectory())\n const renderer = exists ? 'silent' : 'default'\n\n const list = ui.newListr(\n [\n {\n title: 'Installing theme dependencies',\n task: async () => {\n await validateRubyEnv()\n await createShopifyCLIWorkingDirectory()\n await createShopifyCLIGemfile()\n await bundleInstallShopifyCLI()\n },\n },\n ],\n {renderer},\n )\n await list.run()\n}\n\nasync function validateRubyEnv() {\n await validateRuby()\n await validateRubyGems()\n await validateBundler()\n}\n\nasync function validateRuby() {\n let version\n try {\n const stdout = await system.captureOutput('ruby', ['-v'])\n version = coerce(stdout)\n } catch {\n throw new Abort(\n 'Ruby environment not found',\n `Make sure you have Ruby installed on your system: ${\n content`${token.link('', 'https://www.ruby-lang.org/en/documentation/installation/')}`.value\n }`,\n )\n }\n\n const isValid = version?.compare(MinRubyVersion)\n if (isValid === -1 || isValid === undefined) {\n throw new Abort(\n `Ruby version ${content`${token.yellow(version!.raw)}`.value} is not supported`,\n `Make sure you have at least Ruby ${content`${token.yellow(MinRubyVersion)}`.value} installed on your system: ${\n content`${token.link('', 'https://www.ruby-lang.org/en/documentation/installation/')}`.value\n }`,\n )\n }\n}\n\nasync function validateRubyGems() {\n const stdout = await system.captureOutput('gem', ['-v'])\n const version = coerce(stdout)\n\n const isValid = version?.compare(MinRubyGemVersion)\n if (isValid === -1 || isValid === undefined) {\n throw new Abort(\n `RubyGems version ${content`${token.yellow(version!.raw)}`.value} is not supported`,\n `To update to the latest version of RubyGems, run ${\n content`${token.genericShellCommand('gem update --system')}`.value\n }`,\n )\n }\n}\n\nasync function validateBundler() {\n let version\n try {\n const stdout = await system.captureOutput('bundler', ['-v'])\n version = coerce(stdout)\n } catch {\n throw new Abort(\n 'Bundler not found',\n `To install the latest version of Bundler, run ${\n content`${token.genericShellCommand('gem install bundler')}`.value\n }`,\n )\n }\n\n const isValid = version?.compare(MinBundlerVersion)\n if (isValid === -1 || isValid === undefined) {\n throw new Abort(\n `Bundler version ${content`${token.yellow(version!.raw)}`.value} is not supported`,\n `To update to the latest version of Bundler, run ${\n content`${token.genericShellCommand('gem install bundler')}`.value\n }`,\n )\n }\n}\n\nfunction createShopifyCLIWorkingDirectory() {\n return file.mkdir(shopifyCLIDirectory())\n}\n\nfunction createThemeCheckCLIWorkingDirectory() {\n return file.mkdir(themeCheckDirectory())\n}\n\nasync function createShopifyCLIGemfile() {\n const gemPath = join(shopifyCLIDirectory(), 'Gemfile')\n await file.write(gemPath, `source 'https://rubygems.org'\\ngem 'shopify-cli', '${RubyCLIVersion}'`)\n}\n\nasync function createThemeCheckGemfile() {\n const gemPath = join(themeCheckDirectory(), 'Gemfile')\n await file.write(gemPath, `source 'https://rubygems.org'\\ngem 'theme-check', '${ThemeCheckVersion}'`)\n}\n\nasync function bundleInstallShopifyCLI() {\n await system.exec('bundle', ['config', 'set', '--local', 'path', shopifyCLIDirectory()], {cwd: shopifyCLIDirectory()})\n await system.exec('bundle', ['install'], {cwd: shopifyCLIDirectory()})\n}\n\nasync function bundleInstallThemeCheck() {\n await system.exec('bundle', ['config', 'set', '--local', 'path', themeCheckDirectory()], {cwd: themeCheckDirectory()})\n await system.exec('bundle', ['install'], {cwd: themeCheckDirectory()})\n}\n\nfunction shopifyCLIDirectory() {\n return join(constants.paths.directories.cache.vendor.path(), 'ruby-cli', RubyCLIVersion)\n}\n\nfunction themeCheckDirectory() {\n return join(constants.paths.directories.cache.vendor.path(), 'theme-check', ThemeCheckVersion)\n}\n\nexport async function version(): Promise<string | undefined> {\n const parseOutput = (version: string) => version.match(/ruby (\\d+\\.\\d+\\.\\d+)/)?.[1]\n return system\n .captureOutput('ruby', ['-v'])\n .then(parseOutput)\n .catch(() => undefined)\n}\n"]}
|
package/dist/output.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Fatal } from './error.js';
|
|
3
|
-
import {
|
|
3
|
+
import { PackageManager } from './node/node-package-manager.js';
|
|
4
4
|
import { AbortSignal } from 'abort-controller';
|
|
5
5
|
import { Writable } from 'node:stream';
|
|
6
6
|
export declare function initiateLogging({ logDir, filename, }: {
|
|
@@ -45,7 +45,7 @@ export declare const token: {
|
|
|
45
45
|
yellow: (value: Message) => ContentToken;
|
|
46
46
|
magenta: (value: Message) => ContentToken;
|
|
47
47
|
green: (value: Message) => ContentToken;
|
|
48
|
-
packagejsonScript: (
|
|
48
|
+
packagejsonScript: (packageManager: PackageManager, scriptName: string, ...scriptArgs: string[]) => ContentToken;
|
|
49
49
|
successIcon: () => ContentToken;
|
|
50
50
|
failIcon: () => ContentToken;
|
|
51
51
|
};
|
|
@@ -139,4 +139,11 @@ export declare function logToFile(message: string, logLevel: string): void;
|
|
|
139
139
|
export declare function unstyled(message: string): string;
|
|
140
140
|
export declare function shouldDisplayColors(): boolean;
|
|
141
141
|
export declare function pageLogs(): Promise<void>;
|
|
142
|
+
/**
|
|
143
|
+
*
|
|
144
|
+
* @param packageManager {PackageManager} The package manager that is being used.
|
|
145
|
+
* @param version {string} The version to update to
|
|
146
|
+
* @returns {te}
|
|
147
|
+
*/
|
|
148
|
+
export declare function getOutputUpdateCLIReminder(packageManager: PackageManager, version: string): string;
|
|
142
149
|
export {};
|
package/dist/output.js
CHANGED
|
@@ -5,7 +5,7 @@ import constants from './constants.js';
|
|
|
5
5
|
import { append as fileAppend, mkdirSync as fileMkdirSync, readSync as fileReadSync, sizeSync as fileSizeSync, writeSync as fileWriteSync, touchSync as fileTouchSync, } from './file.js';
|
|
6
6
|
import { join as pathJoin, relativize as relativizePath } from './path.js';
|
|
7
7
|
import { page } from './system.js';
|
|
8
|
-
import { colors } from './colors.js';
|
|
8
|
+
import { colors } from './node/colors.js';
|
|
9
9
|
import terminalLink from 'terminal-link';
|
|
10
10
|
import StackTracey from 'stacktracey';
|
|
11
11
|
import { AbortController } from 'abort-controller';
|
|
@@ -99,8 +99,8 @@ export const token = {
|
|
|
99
99
|
green: (value) => {
|
|
100
100
|
return new ContentToken(value, {}, ContentTokenType.Green);
|
|
101
101
|
},
|
|
102
|
-
packagejsonScript: (
|
|
103
|
-
return new ContentToken(formatPackageManagerCommand(
|
|
102
|
+
packagejsonScript: (packageManager, scriptName, ...scriptArgs) => {
|
|
103
|
+
return new ContentToken(formatPackageManagerCommand(packageManager, scriptName, scriptArgs), {}, ContentTokenType.Command);
|
|
104
104
|
},
|
|
105
105
|
successIcon: () => {
|
|
106
106
|
return new ContentToken('✔', {}, ContentTokenType.Green);
|
|
@@ -109,15 +109,15 @@ export const token = {
|
|
|
109
109
|
return new ContentToken('✖', {}, ContentTokenType.ErrorText);
|
|
110
110
|
},
|
|
111
111
|
};
|
|
112
|
-
function formatPackageManagerCommand(
|
|
113
|
-
switch (
|
|
112
|
+
function formatPackageManagerCommand(packageManager, scriptName, scriptArgs) {
|
|
113
|
+
switch (packageManager) {
|
|
114
114
|
case 'yarn': {
|
|
115
115
|
const pieces = ['yarn', scriptName, ...scriptArgs];
|
|
116
116
|
return pieces.join(' ');
|
|
117
117
|
}
|
|
118
118
|
case 'pnpm':
|
|
119
119
|
case 'npm': {
|
|
120
|
-
const pieces = [
|
|
120
|
+
const pieces = [packageManager, 'run', scriptName];
|
|
121
121
|
if (scriptArgs.length > 0) {
|
|
122
122
|
pieces.push('--');
|
|
123
123
|
pieces.push(...scriptArgs);
|
|
@@ -363,7 +363,7 @@ export const error = async (content) => {
|
|
|
363
363
|
});
|
|
364
364
|
if (content instanceof Bug) {
|
|
365
365
|
if (stack.items.length !== 0) {
|
|
366
|
-
outputString += `\n${padding}${colors.bold('Stack trace:')}`;
|
|
366
|
+
outputString += `\n${padding}${colors.bold('Stack trace:')}\n`;
|
|
367
367
|
const stackLines = stack.asTable({}).split('\n');
|
|
368
368
|
for (const stackLine of stackLines) {
|
|
369
369
|
outputString += `${padding}${stackLine}\n`;
|
|
@@ -501,5 +501,15 @@ export function shouldDisplayColors() {
|
|
|
501
501
|
export async function pageLogs() {
|
|
502
502
|
await page(logFile);
|
|
503
503
|
}
|
|
504
|
+
/**
|
|
505
|
+
*
|
|
506
|
+
* @param packageManager {PackageManager} The package manager that is being used.
|
|
507
|
+
* @param version {string} The version to update to
|
|
508
|
+
* @returns {te}
|
|
509
|
+
*/
|
|
510
|
+
export function getOutputUpdateCLIReminder(packageManager, version) {
|
|
511
|
+
const updateCommand = token.packagejsonScript(packageManager, 'shopify', 'upgrade');
|
|
512
|
+
return content `💡 Version ${version} available! Run ${updateCommand}`.value;
|
|
513
|
+
}
|
|
504
514
|
/* eslint-enable no-console */
|
|
505
515
|
//# sourceMappingURL=output.js.map
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport {Fatal, Bug} from './error.js'\nimport {isUnitTest, isVerbose} from './environment/local.js'\nimport constants from './constants.js'\nimport {DependencyManager} from './dependency.js'\nimport {\n append as fileAppend,\n mkdirSync as fileMkdirSync,\n readSync as fileReadSync,\n sizeSync as fileSizeSync,\n writeSync as fileWriteSync,\n touchSync as fileTouchSync,\n} from './file.js'\nimport {join as pathJoin, relativize as relativizePath} from './path.js'\nimport {page} from './system.js'\nimport {colors} from './colors.js'\nimport terminalLink from 'terminal-link'\nimport StackTracey from 'stacktracey'\nimport {AbortController, AbortSignal} from 'abort-controller'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport cjs from 'color-json'\nimport stripAnsi from 'strip-ansi'\nimport {Writable} from 'node:stream'\n\nlet logFile: string\n\nexport function initiateLogging({\n logDir = constants.paths.directories.cache.path(),\n filename = 'shopify.log',\n}: {\n logDir?: string\n filename?: string\n}) {\n fileMkdirSync(logDir)\n logFile = pathJoin(logDir, filename)\n fileTouchSync(logFile)\n truncateLogs()\n}\n\n// Shaves off the first 10,000 log lines (circa 1MB) if logs are over 5MB long.\n// Rescues in case the file hasn't been created yet.\nfunction truncateLogs() {\n try {\n if (fileSizeSync(logFile) > 5 * 1024 * 1024) {\n const contents = fileReadSync(logFile)\n const splitContents = contents.split('\\n')\n const newContents = splitContents.slice(10000, splitContents.length).join('\\n')\n fileWriteSync(logFile, newContents)\n }\n // eslint-disable-next-line no-empty, no-catch-all/no-catch-all\n } catch {}\n}\n\nenum ContentTokenType {\n Raw,\n Command,\n Json,\n Path,\n Link,\n Heading,\n SubHeading,\n Italic,\n ErrorText,\n Yellow,\n Cyan,\n Magenta,\n Green,\n}\n\ninterface ContentMetadata {\n link?: string\n}\n\nclass ContentToken {\n type: ContentTokenType\n value: Message\n metadata: ContentMetadata\n\n constructor(value: Message, metadata: ContentMetadata = {}, type: ContentTokenType) {\n this.type = type\n this.value = value\n this.metadata = metadata\n }\n}\n\nexport const token = {\n raw: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Raw)\n },\n genericShellCommand: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Command)\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n json: (value: any) => {\n return new ContentToken(value, {}, ContentTokenType.Json)\n },\n path: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Path)\n },\n link: (value: Message, link: string) => {\n return new ContentToken(value, {link}, ContentTokenType.Link)\n },\n heading: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Heading)\n },\n subheading: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.SubHeading)\n },\n italic: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Italic)\n },\n errorText: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.ErrorText)\n },\n cyan: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Cyan)\n },\n yellow: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Yellow)\n },\n magenta: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Magenta)\n },\n green: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Green)\n },\n packagejsonScript: (dependencyManager: DependencyManager, scriptName: string, ...scriptArgs: string[]) => {\n return new ContentToken(\n formatPackageManagerCommand(dependencyManager, scriptName, scriptArgs),\n {},\n ContentTokenType.Command,\n )\n },\n successIcon: () => {\n return new ContentToken('✔', {}, ContentTokenType.Green)\n },\n failIcon: () => {\n return new ContentToken('✖', {}, ContentTokenType.ErrorText)\n },\n}\n\nfunction formatPackageManagerCommand(\n dependencyManager: DependencyManager,\n scriptName: string,\n scriptArgs: string[],\n): string {\n switch (dependencyManager) {\n case 'yarn': {\n const pieces = ['yarn', scriptName, ...scriptArgs]\n return pieces.join(' ')\n }\n case 'pnpm':\n case 'npm': {\n const pieces = [dependencyManager, 'run', scriptName]\n if (scriptArgs.length > 0) {\n pieces.push('--')\n pieces.push(...scriptArgs)\n }\n return pieces.join(' ')\n }\n }\n}\n\nexport class TokenizedString {\n value: string\n constructor(value: string) {\n this.value = value\n }\n}\n\nexport type Message = string | TokenizedString\n\nexport function content(strings: TemplateStringsArray, ...keys: (ContentToken | string)[]): TokenizedString {\n let output = ``\n strings.forEach((string, i) => {\n output += string\n if (i >= keys.length) {\n return\n }\n const token = keys[i]\n\n if (typeof token === 'string') {\n output += token\n } else {\n const enumToken = token as ContentToken\n switch (enumToken.type) {\n case ContentTokenType.Raw:\n output += enumToken.value\n break\n case ContentTokenType.Command:\n output += colors.bold(colors.yellow(stringifyMessage(enumToken.value)))\n break\n case ContentTokenType.Path:\n output += relativizePath(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Json:\n try {\n output += cjs(stringifyMessage(enumToken.value) ?? {})\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (_) {\n output += JSON.stringify(stringifyMessage(enumToken.value) ?? {}, null, 2)\n }\n break\n case ContentTokenType.Link:\n output += terminalLink(colors.green(stringifyMessage(enumToken.value)), enumToken.metadata.link ?? '')\n break\n case ContentTokenType.Heading:\n output += colors.bold.underline(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.SubHeading:\n output += colors.underline(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Italic:\n output += colors.italic(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.ErrorText:\n output += colors.bold.redBright(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Yellow:\n output += colors.yellow(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Cyan:\n output += colors.cyan(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Magenta:\n output += colors.magenta(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Green:\n output += colors.green(stringifyMessage(enumToken.value))\n break\n }\n }\n })\n return new TokenizedString(output)\n}\n\n/** Log levels */\nexport type LogLevel = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace' | 'silent'\n\n/**\n * It maps a level to a numeric value.\n * @param level {LogLevel} The level for which we'll return its numeric value.\n * @returns The numeric value of the level.\n */\nconst logLevelValue = (level: LogLevel): number => {\n switch (level) {\n case 'trace':\n return 10\n case 'debug':\n return 20\n case 'info':\n return 30\n case 'warn':\n return 40\n case 'error':\n return 50\n case 'fatal':\n return 60\n default:\n return 30\n }\n}\n\n/**\n *\n * @returns {LogLevel} It returns the log level set by the user.\n */\nexport const currentLogLevel = (): LogLevel => {\n if (isVerbose()) {\n return 'debug'\n } else {\n return 'info'\n }\n}\n\nexport const shouldOutput = (logLevel: LogLevel): boolean => {\n if (isUnitTest()) {\n return false\n }\n const currentLogLevelValue = logLevelValue(currentLogLevel())\n const messageLogLevelValue = logLevelValue(logLevel)\n return messageLogLevelValue >= currentLogLevelValue\n}\n\n// eslint-disable-next-line import/no-mutable-exports\nexport let collectedLogs: {[key: string]: string[]} = {}\n\n/**\n * This is only used during UnitTesting.\n * If we are in a testing context, instead of printing the logs to the console,\n * we will store them in a variable that can be accessed from the tests.\n * @param key {string} The key of the log.\n * @param content {string} The content of the log.\n */\nconst collectLog = (key: string, content: Message) => {\n const output = collectedLogs.output ?? []\n const data = collectedLogs[key] ?? []\n data.push(stripAnsi(stringifyMessage(content) ?? ''))\n output.push(stripAnsi(stringifyMessage(content) ?? ''))\n collectedLogs[key] = data\n collectedLogs.output = output\n}\n\nexport const clearCollectedLogs = () => {\n collectedLogs = {}\n}\n\n/**\n * Ouputs information to the user. This is akin to \"console.log\"\n * Info messages don't get additional formatting.\n * Note: Info messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const info = (content: Message) => {\n if (isUnitTest()) collectLog('info', content)\n message(content, 'info')\n}\n\n/**\n * Outputs a success message to the user.\n * Success message receive a special formatting to make them stand out in the console.\n * Note: Success messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const success = (content: Message) => {\n const message = colors.bold(`✅ Success! ${stringifyMessage(content)}.`)\n if (isUnitTest()) collectLog('success', content)\n outputWhereAppropriate('info', consoleLog, message)\n}\n\n/**\n * Outputs a completed message to the user.\n * Completed message receive a special formatting to make them stand out in the console.\n * Note: Completed messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const completed = (content: Message) => {\n const message = `${colors.green('✔')} ${stringifyMessage(content)}`\n if (isUnitTest()) collectLog('completed', content)\n outputWhereAppropriate('info', consoleLog, message)\n}\n\n/**\n * Ouputs debug information to the user. By default these output is hidden unless the user calls the CLI with --verbose.\n * Debug messages don't get additional formatting.\n * Note: Debug messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const debug = (content: Message) => {\n if (isUnitTest()) collectLog('debug', content)\n message(colors.gray(stringifyMessage(content)), 'debug')\n}\n\n/**\n * Outputs a warning message to the user.\n * Warning messages receive a special formatting to make them stand out in the console.\n * Note: Warning messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const warn = (content: Message) => {\n if (isUnitTest()) collectLog('warn', content)\n consoleWarn(colors.yellow(stringifyMessage(content)))\n}\n\n/**\n * Prints a new line in the terminal.\n */\nexport const newline = () => {\n console.log()\n}\n\n/**\n * Formats and outputs a fatal error.\n * Note: This API is not intended to be used internally. If you want to\n * abort the execution due to an error, raise a fatal error and let the\n * error handler handle and format it.\n * @param content {Fatal} The fatal error to be output.\n */\nexport const error = async (content: Fatal) => {\n if (!content.message) {\n return\n }\n let outputString = ''\n const message = content.message\n const padding = ' '\n const header = colors.redBright(`\\n━━━━━━ Error ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n`)\n const footer = colors.redBright('\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n')\n outputString += header\n const lines = message.split('\\n')\n for (const line of lines) {\n outputString += `${padding}${line}\\n`\n }\n if (content.tryMessage) {\n outputString += `\\n${padding}${colors.bold('What to try:')}\\n`\n const lines = content.tryMessage.split('\\n')\n for (const line of lines) {\n outputString += `${padding}${line}\\n`\n }\n }\n\n let stack = await new StackTracey(content).withSourcesAsync()\n stack = stack\n .filter((entry) => {\n return !entry.file.includes('@oclif/core')\n })\n .map((item) => {\n item.calleeShort = colors.yellow(item.calleeShort)\n /** We make the paths relative to the packages/ directory */\n const fileShortComponents = item.fileShort.split('packages/')\n item.fileShort = fileShortComponents.length === 2 ? fileShortComponents[1] : fileShortComponents[0]\n return item\n })\n if (content instanceof Bug) {\n if (stack.items.length !== 0) {\n outputString += `\\n${padding}${colors.bold('Stack trace:')}`\n const stackLines = stack.asTable({}).split('\\n')\n for (const stackLine of stackLines) {\n outputString += `${padding}${stackLine}\\n`\n }\n }\n }\n outputString += footer\n outputWhereAppropriate('error', consoleError, outputString)\n}\n\nexport function stringifyMessage(message: Message): string {\n if (message instanceof TokenizedString) {\n return message.value\n } else {\n return message\n }\n}\n\nconst message = (content: Message, level: LogLevel = 'info') => {\n const stringifiedMessage = stringifyMessage(content)\n outputWhereAppropriate(level, consoleLog, stringifiedMessage)\n}\n\nexport interface OutputProcess {\n /** The prefix to include in the logs\n * [vite] Output coming from Vite\n */\n prefix: string\n /**\n * A callback to invoke the process. stdout and stderr should be used\n * to send standard output and error data that gets formatted with the\n * right prefix.\n */\n action: (stdout: Writable, stderr: Writable, signal: AbortSignal) => Promise<void>\n}\n\n/**\n * Use this function when you have multiple concurrent processes that send data events\n * and we need to output them ensuring that they can visually differenciated by the user.\n *\n * @param processes {OutputProcess[]} A list of processes to run concurrently.\n */\nexport async function concurrent(\n processes: OutputProcess[],\n callback: ((signal: AbortSignal) => void) | undefined = undefined,\n) {\n const abortController = new AbortController()\n\n // eslint-disable-next-line node/callback-return\n if (callback) callback(abortController.signal)\n\n const concurrentColors = [token.yellow, token.cyan, token.magenta, token.green]\n const prefixColumnSize = Math.max(...processes.map((process) => process.prefix.length))\n\n function linePrefix(prefix: string, index: number) {\n const colorIndex = index < concurrentColors.length ? index : index % concurrentColors.length\n const color = concurrentColors[colorIndex]\n return color(`${prefix}${' '.repeat(prefixColumnSize - prefix.length)} ${colors.bold('|')} `)\n }\n\n try {\n await Promise.all(\n processes.map(async (process, index) => {\n const stdout = new Writable({\n write(chunk, _encoding, next) {\n const lines = stripAnsiEraseCursorEscapeCharacters(chunk.toString('ascii')).split(/\\n/)\n for (const line of lines) {\n info(content`${linePrefix(process.prefix, index)}${line}`)\n }\n next()\n },\n })\n const stderr = new Writable({\n write(chunk, _encoding, next) {\n const lines = stripAnsiEraseCursorEscapeCharacters(chunk.toString('ascii')).split(/\\n/)\n for (const line of lines) {\n message(content`${linePrefix(process.prefix, index)}${colors.bold(line)}`, 'error')\n }\n next()\n },\n })\n await process.action(stdout, stderr, abortController.signal)\n }),\n )\n } catch (_error) {\n // We abort any running process\n abortController.abort()\n throw _error\n }\n}\n\n/**\n * This regex can be used to find the erase cursor Ansii characters\n * to strip them from the string.\n * https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797#erase-functions\n */\nconst eraseCursorAnsiRegex = [\n // Erase the entire line\n '2K',\n // Clear vertical tab stop at current line\n '1G',\n]\n .map((element) => `[\\\\u001B\\\\u009B][[\\\\]()#;?]*${element}`)\n .join('|')\n\n/**\n * The data sent through the standard pipelines of the sub-processes that we execute\n * might contain ansii escape characters to move the cursor. That causes any additional\n * formatting to break. This function takes a string and strips escape characters that\n * manage the cursor in the terminal.\n * @param value {string} String whose erase cursor escape characters will be stripped.\n * @returns {string} Stripped string.\n */\nfunction stripAnsiEraseCursorEscapeCharacters(value: string): string {\n return value.replace(/(\\n)$/, '').replace(new RegExp(eraseCursorAnsiRegex, 'g'), '')\n}\n\nfunction consoleLog(message: string): void {\n console.log(withOrWithoutStyle(message))\n}\n\nfunction consoleError(message: string): void {\n console.error(withOrWithoutStyle(message))\n}\n\nfunction consoleWarn(message: string): void {\n console.warn(withOrWithoutStyle(message))\n}\n\nfunction outputWhereAppropriate(logLevel: LogLevel, logFunc: (message: string) => void, message: string): void {\n if (shouldOutput(logLevel)) {\n logFunc(message)\n }\n logToFile(message, logLevel.toUpperCase())\n}\n\nexport function logFileExists(): boolean {\n return Boolean(logFile)\n}\n\n// DO NOT USE THIS FUNCTION DIRECTLY under normal circumstances.\n// It is exported purely for use in cases where output is already being logged\n// to the terminal but is not reflected in the logfile, e.g. Listr output.\nexport function logToFile(message: string, logLevel: string): void {\n // If file logging hasn't been initiated, skip it\n if (!logFileExists()) return\n const timestamp = new Date().toISOString()\n fileAppend(logFile, `[${timestamp} ${logLevel}]: ${message}\\n`)\n}\n\nfunction withOrWithoutStyle(message: string): string {\n if (shouldDisplayColors()) {\n return message\n } else {\n return unstyled(message)\n }\n}\n\nexport function unstyled(message: string): string {\n return colors.unstyle(message)\n}\n\nexport function shouldDisplayColors(): boolean {\n return Boolean(process.stdout.isTTY || process.env.FORCE_COLOR)\n}\n\nexport async function pageLogs() {\n await page(logFile)\n}\n\n/* eslint-enable no-console */\n"]}
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport {Fatal, Bug} from './error.js'\nimport {isUnitTest, isVerbose} from './environment/local.js'\nimport constants from './constants.js'\nimport {PackageManager} from './node/node-package-manager.js'\nimport {\n append as fileAppend,\n mkdirSync as fileMkdirSync,\n readSync as fileReadSync,\n sizeSync as fileSizeSync,\n writeSync as fileWriteSync,\n touchSync as fileTouchSync,\n} from './file.js'\nimport {join as pathJoin, relativize as relativizePath} from './path.js'\nimport {page} from './system.js'\nimport {colors} from './node/colors.js'\nimport terminalLink from 'terminal-link'\nimport StackTracey from 'stacktracey'\nimport {AbortController, AbortSignal} from 'abort-controller'\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport cjs from 'color-json'\nimport stripAnsi from 'strip-ansi'\nimport {Writable} from 'node:stream'\n\nlet logFile: string\n\nexport function initiateLogging({\n logDir = constants.paths.directories.cache.path(),\n filename = 'shopify.log',\n}: {\n logDir?: string\n filename?: string\n}) {\n fileMkdirSync(logDir)\n logFile = pathJoin(logDir, filename)\n fileTouchSync(logFile)\n truncateLogs()\n}\n\n// Shaves off the first 10,000 log lines (circa 1MB) if logs are over 5MB long.\n// Rescues in case the file hasn't been created yet.\nfunction truncateLogs() {\n try {\n if (fileSizeSync(logFile) > 5 * 1024 * 1024) {\n const contents = fileReadSync(logFile)\n const splitContents = contents.split('\\n')\n const newContents = splitContents.slice(10000, splitContents.length).join('\\n')\n fileWriteSync(logFile, newContents)\n }\n // eslint-disable-next-line no-empty, no-catch-all/no-catch-all\n } catch {}\n}\n\nenum ContentTokenType {\n Raw,\n Command,\n Json,\n Path,\n Link,\n Heading,\n SubHeading,\n Italic,\n ErrorText,\n Yellow,\n Cyan,\n Magenta,\n Green,\n}\n\ninterface ContentMetadata {\n link?: string\n}\n\nclass ContentToken {\n type: ContentTokenType\n value: Message\n metadata: ContentMetadata\n\n constructor(value: Message, metadata: ContentMetadata = {}, type: ContentTokenType) {\n this.type = type\n this.value = value\n this.metadata = metadata\n }\n}\n\nexport const token = {\n raw: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Raw)\n },\n genericShellCommand: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Command)\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n json: (value: any) => {\n return new ContentToken(value, {}, ContentTokenType.Json)\n },\n path: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Path)\n },\n link: (value: Message, link: string) => {\n return new ContentToken(value, {link}, ContentTokenType.Link)\n },\n heading: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Heading)\n },\n subheading: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.SubHeading)\n },\n italic: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Italic)\n },\n errorText: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.ErrorText)\n },\n cyan: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Cyan)\n },\n yellow: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Yellow)\n },\n magenta: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Magenta)\n },\n green: (value: Message) => {\n return new ContentToken(value, {}, ContentTokenType.Green)\n },\n packagejsonScript: (packageManager: PackageManager, scriptName: string, ...scriptArgs: string[]) => {\n return new ContentToken(\n formatPackageManagerCommand(packageManager, scriptName, scriptArgs),\n {},\n ContentTokenType.Command,\n )\n },\n successIcon: () => {\n return new ContentToken('✔', {}, ContentTokenType.Green)\n },\n failIcon: () => {\n return new ContentToken('✖', {}, ContentTokenType.ErrorText)\n },\n}\n\nfunction formatPackageManagerCommand(packageManager: PackageManager, scriptName: string, scriptArgs: string[]): string {\n switch (packageManager) {\n case 'yarn': {\n const pieces = ['yarn', scriptName, ...scriptArgs]\n return pieces.join(' ')\n }\n case 'pnpm':\n case 'npm': {\n const pieces = [packageManager, 'run', scriptName]\n if (scriptArgs.length > 0) {\n pieces.push('--')\n pieces.push(...scriptArgs)\n }\n return pieces.join(' ')\n }\n }\n}\n\nexport class TokenizedString {\n value: string\n constructor(value: string) {\n this.value = value\n }\n}\n\nexport type Message = string | TokenizedString\n\nexport function content(strings: TemplateStringsArray, ...keys: (ContentToken | string)[]): TokenizedString {\n let output = ``\n strings.forEach((string, i) => {\n output += string\n if (i >= keys.length) {\n return\n }\n const token = keys[i]\n\n if (typeof token === 'string') {\n output += token\n } else {\n const enumToken = token as ContentToken\n switch (enumToken.type) {\n case ContentTokenType.Raw:\n output += enumToken.value\n break\n case ContentTokenType.Command:\n output += colors.bold(colors.yellow(stringifyMessage(enumToken.value)))\n break\n case ContentTokenType.Path:\n output += relativizePath(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Json:\n try {\n output += cjs(stringifyMessage(enumToken.value) ?? {})\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (_) {\n output += JSON.stringify(stringifyMessage(enumToken.value) ?? {}, null, 2)\n }\n break\n case ContentTokenType.Link:\n output += terminalLink(colors.green(stringifyMessage(enumToken.value)), enumToken.metadata.link ?? '')\n break\n case ContentTokenType.Heading:\n output += colors.bold.underline(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.SubHeading:\n output += colors.underline(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Italic:\n output += colors.italic(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.ErrorText:\n output += colors.bold.redBright(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Yellow:\n output += colors.yellow(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Cyan:\n output += colors.cyan(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Magenta:\n output += colors.magenta(stringifyMessage(enumToken.value))\n break\n case ContentTokenType.Green:\n output += colors.green(stringifyMessage(enumToken.value))\n break\n }\n }\n })\n return new TokenizedString(output)\n}\n\n/** Log levels */\nexport type LogLevel = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace' | 'silent'\n\n/**\n * It maps a level to a numeric value.\n * @param level {LogLevel} The level for which we'll return its numeric value.\n * @returns The numeric value of the level.\n */\nconst logLevelValue = (level: LogLevel): number => {\n switch (level) {\n case 'trace':\n return 10\n case 'debug':\n return 20\n case 'info':\n return 30\n case 'warn':\n return 40\n case 'error':\n return 50\n case 'fatal':\n return 60\n default:\n return 30\n }\n}\n\n/**\n *\n * @returns {LogLevel} It returns the log level set by the user.\n */\nexport const currentLogLevel = (): LogLevel => {\n if (isVerbose()) {\n return 'debug'\n } else {\n return 'info'\n }\n}\n\nexport const shouldOutput = (logLevel: LogLevel): boolean => {\n if (isUnitTest()) {\n return false\n }\n const currentLogLevelValue = logLevelValue(currentLogLevel())\n const messageLogLevelValue = logLevelValue(logLevel)\n return messageLogLevelValue >= currentLogLevelValue\n}\n\n// eslint-disable-next-line import/no-mutable-exports\nexport let collectedLogs: {[key: string]: string[]} = {}\n\n/**\n * This is only used during UnitTesting.\n * If we are in a testing context, instead of printing the logs to the console,\n * we will store them in a variable that can be accessed from the tests.\n * @param key {string} The key of the log.\n * @param content {string} The content of the log.\n */\nconst collectLog = (key: string, content: Message) => {\n const output = collectedLogs.output ?? []\n const data = collectedLogs[key] ?? []\n data.push(stripAnsi(stringifyMessage(content) ?? ''))\n output.push(stripAnsi(stringifyMessage(content) ?? ''))\n collectedLogs[key] = data\n collectedLogs.output = output\n}\n\nexport const clearCollectedLogs = () => {\n collectedLogs = {}\n}\n\n/**\n * Ouputs information to the user. This is akin to \"console.log\"\n * Info messages don't get additional formatting.\n * Note: Info messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const info = (content: Message) => {\n if (isUnitTest()) collectLog('info', content)\n message(content, 'info')\n}\n\n/**\n * Outputs a success message to the user.\n * Success message receive a special formatting to make them stand out in the console.\n * Note: Success messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const success = (content: Message) => {\n const message = colors.bold(`✅ Success! ${stringifyMessage(content)}.`)\n if (isUnitTest()) collectLog('success', content)\n outputWhereAppropriate('info', consoleLog, message)\n}\n\n/**\n * Outputs a completed message to the user.\n * Completed message receive a special formatting to make them stand out in the console.\n * Note: Completed messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const completed = (content: Message) => {\n const message = `${colors.green('✔')} ${stringifyMessage(content)}`\n if (isUnitTest()) collectLog('completed', content)\n outputWhereAppropriate('info', consoleLog, message)\n}\n\n/**\n * Ouputs debug information to the user. By default these output is hidden unless the user calls the CLI with --verbose.\n * Debug messages don't get additional formatting.\n * Note: Debug messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const debug = (content: Message) => {\n if (isUnitTest()) collectLog('debug', content)\n message(colors.gray(stringifyMessage(content)), 'debug')\n}\n\n/**\n * Outputs a warning message to the user.\n * Warning messages receive a special formatting to make them stand out in the console.\n * Note: Warning messages are sent through the standard output.\n * @param content {string} The content to be output to the user.\n */\nexport const warn = (content: Message) => {\n if (isUnitTest()) collectLog('warn', content)\n consoleWarn(colors.yellow(stringifyMessage(content)))\n}\n\n/**\n * Prints a new line in the terminal.\n */\nexport const newline = () => {\n console.log()\n}\n\n/**\n * Formats and outputs a fatal error.\n * Note: This API is not intended to be used internally. If you want to\n * abort the execution due to an error, raise a fatal error and let the\n * error handler handle and format it.\n * @param content {Fatal} The fatal error to be output.\n */\nexport const error = async (content: Fatal) => {\n if (!content.message) {\n return\n }\n let outputString = ''\n const message = content.message\n const padding = ' '\n const header = colors.redBright(`\\n━━━━━━ Error ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n`)\n const footer = colors.redBright('\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n')\n outputString += header\n const lines = message.split('\\n')\n for (const line of lines) {\n outputString += `${padding}${line}\\n`\n }\n if (content.tryMessage) {\n outputString += `\\n${padding}${colors.bold('What to try:')}\\n`\n const lines = content.tryMessage.split('\\n')\n for (const line of lines) {\n outputString += `${padding}${line}\\n`\n }\n }\n\n let stack = await new StackTracey(content).withSourcesAsync()\n stack = stack\n .filter((entry) => {\n return !entry.file.includes('@oclif/core')\n })\n .map((item) => {\n item.calleeShort = colors.yellow(item.calleeShort)\n /** We make the paths relative to the packages/ directory */\n const fileShortComponents = item.fileShort.split('packages/')\n item.fileShort = fileShortComponents.length === 2 ? fileShortComponents[1] : fileShortComponents[0]\n return item\n })\n if (content instanceof Bug) {\n if (stack.items.length !== 0) {\n outputString += `\\n${padding}${colors.bold('Stack trace:')}\\n`\n const stackLines = stack.asTable({}).split('\\n')\n for (const stackLine of stackLines) {\n outputString += `${padding}${stackLine}\\n`\n }\n }\n }\n outputString += footer\n outputWhereAppropriate('error', consoleError, outputString)\n}\n\nexport function stringifyMessage(message: Message): string {\n if (message instanceof TokenizedString) {\n return message.value\n } else {\n return message\n }\n}\n\nconst message = (content: Message, level: LogLevel = 'info') => {\n const stringifiedMessage = stringifyMessage(content)\n outputWhereAppropriate(level, consoleLog, stringifiedMessage)\n}\n\nexport interface OutputProcess {\n /** The prefix to include in the logs\n * [vite] Output coming from Vite\n */\n prefix: string\n /**\n * A callback to invoke the process. stdout and stderr should be used\n * to send standard output and error data that gets formatted with the\n * right prefix.\n */\n action: (stdout: Writable, stderr: Writable, signal: AbortSignal) => Promise<void>\n}\n\n/**\n * Use this function when you have multiple concurrent processes that send data events\n * and we need to output them ensuring that they can visually differenciated by the user.\n *\n * @param processes {OutputProcess[]} A list of processes to run concurrently.\n */\nexport async function concurrent(\n processes: OutputProcess[],\n callback: ((signal: AbortSignal) => void) | undefined = undefined,\n) {\n const abortController = new AbortController()\n\n // eslint-disable-next-line node/callback-return\n if (callback) callback(abortController.signal)\n\n const concurrentColors = [token.yellow, token.cyan, token.magenta, token.green]\n const prefixColumnSize = Math.max(...processes.map((process) => process.prefix.length))\n\n function linePrefix(prefix: string, index: number) {\n const colorIndex = index < concurrentColors.length ? index : index % concurrentColors.length\n const color = concurrentColors[colorIndex]\n return color(`${prefix}${' '.repeat(prefixColumnSize - prefix.length)} ${colors.bold('|')} `)\n }\n\n try {\n await Promise.all(\n processes.map(async (process, index) => {\n const stdout = new Writable({\n write(chunk, _encoding, next) {\n const lines = stripAnsiEraseCursorEscapeCharacters(chunk.toString('ascii')).split(/\\n/)\n for (const line of lines) {\n info(content`${linePrefix(process.prefix, index)}${line}`)\n }\n next()\n },\n })\n const stderr = new Writable({\n write(chunk, _encoding, next) {\n const lines = stripAnsiEraseCursorEscapeCharacters(chunk.toString('ascii')).split(/\\n/)\n for (const line of lines) {\n message(content`${linePrefix(process.prefix, index)}${colors.bold(line)}`, 'error')\n }\n next()\n },\n })\n await process.action(stdout, stderr, abortController.signal)\n }),\n )\n } catch (_error) {\n // We abort any running process\n abortController.abort()\n throw _error\n }\n}\n\n/**\n * This regex can be used to find the erase cursor Ansii characters\n * to strip them from the string.\n * https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797#erase-functions\n */\nconst eraseCursorAnsiRegex = [\n // Erase the entire line\n '2K',\n // Clear vertical tab stop at current line\n '1G',\n]\n .map((element) => `[\\\\u001B\\\\u009B][[\\\\]()#;?]*${element}`)\n .join('|')\n\n/**\n * The data sent through the standard pipelines of the sub-processes that we execute\n * might contain ansii escape characters to move the cursor. That causes any additional\n * formatting to break. This function takes a string and strips escape characters that\n * manage the cursor in the terminal.\n * @param value {string} String whose erase cursor escape characters will be stripped.\n * @returns {string} Stripped string.\n */\nfunction stripAnsiEraseCursorEscapeCharacters(value: string): string {\n return value.replace(/(\\n)$/, '').replace(new RegExp(eraseCursorAnsiRegex, 'g'), '')\n}\n\nfunction consoleLog(message: string): void {\n console.log(withOrWithoutStyle(message))\n}\n\nfunction consoleError(message: string): void {\n console.error(withOrWithoutStyle(message))\n}\n\nfunction consoleWarn(message: string): void {\n console.warn(withOrWithoutStyle(message))\n}\n\nfunction outputWhereAppropriate(logLevel: LogLevel, logFunc: (message: string) => void, message: string): void {\n if (shouldOutput(logLevel)) {\n logFunc(message)\n }\n logToFile(message, logLevel.toUpperCase())\n}\n\nexport function logFileExists(): boolean {\n return Boolean(logFile)\n}\n\n// DO NOT USE THIS FUNCTION DIRECTLY under normal circumstances.\n// It is exported purely for use in cases where output is already being logged\n// to the terminal but is not reflected in the logfile, e.g. Listr output.\nexport function logToFile(message: string, logLevel: string): void {\n // If file logging hasn't been initiated, skip it\n if (!logFileExists()) return\n const timestamp = new Date().toISOString()\n fileAppend(logFile, `[${timestamp} ${logLevel}]: ${message}\\n`)\n}\n\nfunction withOrWithoutStyle(message: string): string {\n if (shouldDisplayColors()) {\n return message\n } else {\n return unstyled(message)\n }\n}\n\nexport function unstyled(message: string): string {\n return colors.unstyle(message)\n}\n\nexport function shouldDisplayColors(): boolean {\n return Boolean(process.stdout.isTTY || process.env.FORCE_COLOR)\n}\n\nexport async function pageLogs() {\n await page(logFile)\n}\n\n/**\n *\n * @param packageManager {PackageManager} The package manager that is being used.\n * @param version {string} The version to update to\n * @returns {te}\n */\nexport function getOutputUpdateCLIReminder(packageManager: PackageManager, version: string): string {\n const updateCommand = token.packagejsonScript(packageManager, 'shopify', 'upgrade')\n return content`💡 Version ${version} available! Run ${updateCommand}`.value\n}\n\n/* eslint-enable no-console */\n"]}
|
package/dist/port.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { debug, content, token } from './output.js';
|
|
2
|
+
import { Abort } from './error.js';
|
|
3
|
+
import { sleep } from './system.js';
|
|
2
4
|
import * as port from 'get-port-please';
|
|
3
5
|
/**
|
|
4
6
|
* Returns an available port in the current environment.
|
|
@@ -6,8 +8,28 @@ import * as port from 'get-port-please';
|
|
|
6
8
|
*/
|
|
7
9
|
export async function getRandomPort() {
|
|
8
10
|
debug(content `Getting a random port...`);
|
|
9
|
-
const randomPort =
|
|
11
|
+
const randomPort = retryOnError(() => port.getRandomPort());
|
|
10
12
|
debug(content `Random port obtained: ${token.raw(`${randomPort}`)}`);
|
|
11
13
|
return randomPort;
|
|
12
14
|
}
|
|
15
|
+
async function retryOnError(execute, maxTries = 5, waitTimeInSeconds = 1) {
|
|
16
|
+
let retryCount = 1;
|
|
17
|
+
while (true) {
|
|
18
|
+
try {
|
|
19
|
+
// eslint-disable-next-line no-await-in-loop
|
|
20
|
+
return await execute();
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (retryCount++ < maxTries) {
|
|
25
|
+
debug(content `Unknown problem getting a random port: ${error.message}`);
|
|
26
|
+
// eslint-disable-next-line no-await-in-loop
|
|
27
|
+
await sleep(waitTimeInSeconds);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw new Abort(error.message);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
13
35
|
//# sourceMappingURL=port.js.map
|
package/dist/port.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.js","sourceRoot":"","sources":["../src/port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AAEvC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,KAAK,CAAC,OAAO,CAAA,0BAA0B,CAAC,CAAA;IACxC,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../src/port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAChC,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AAEvC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,KAAK,CAAC,OAAO,CAAA,0BAA0B,CAAC,CAAA;IACxC,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;IAC3D,KAAK,CAAC,OAAO,CAAA,yBAAyB,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;IACnE,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,KAAK,UAAU,YAAY,CAAI,OAAgB,EAAE,QAAQ,GAAG,CAAC,EAAE,iBAAiB,GAAG,CAAC;IAClF,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,OAAO,IAAI,EAAE;QACX,IAAI;YACF,4CAA4C;YAC5C,OAAO,MAAM,OAAO,EAAE,CAAA;YACtB,8DAA8D;SAC/D;QAAC,OAAO,KAAU,EAAE;YACnB,IAAI,UAAU,EAAE,GAAG,QAAQ,EAAE;gBAC3B,KAAK,CAAC,OAAO,CAAA,0CAA0C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBACvE,4CAA4C;gBAC5C,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;aAC/B;iBAAM;gBACL,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;aAC/B;SACF;KACF;AACH,CAAC","sourcesContent":["import {debug, content, token} from './output.js'\nimport {Abort} from './error.js'\nimport {sleep} from './system.js'\nimport * as port from 'get-port-please'\n\n/**\n * Returns an available port in the current environment.\n * @returns {Promise<number>} A promise that resolves with an availabe port.\n */\nexport async function getRandomPort(): Promise<number> {\n debug(content`Getting a random port...`)\n const randomPort = retryOnError(() => port.getRandomPort())\n debug(content`Random port obtained: ${token.raw(`${randomPort}`)}`)\n return randomPort\n}\n\nasync function retryOnError<T>(execute: () => T, maxTries = 5, waitTimeInSeconds = 1) {\n let retryCount = 1\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n return await execute()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (retryCount++ < maxTries) {\n debug(content`Unknown problem getting a random port: ${error.message}`)\n // eslint-disable-next-line no-await-in-loop\n await sleep(waitTimeInSeconds)\n } else {\n throw new Abort(error.message)\n }\n }\n }\n}\n"]}
|