From 8c2e24f2d6c3b7d5c5ea8d49aba660332642ec08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaac=20Rold=C3=A1n?= Date: Mon, 3 Aug 2026 17:57:42 +0200 Subject: [PATCH 01/53] Keep the terminal UI runtime out of the CLI startup path `output.ts` and `error.ts` imported `tokenItemToString` from `private/node/ui/components/TokenizedText.tsx`, and `error.ts` imported `ClientError` from graphql-request for a single `instanceof` check. TokenizedText is a React component module, so those two imports pulled react-reconciler (341 KB), yoga-layout and its WebAssembly (125 KB), ink and react into the module graph of every command, plus graphql (254 KB), tr46 (231 KB) and whatwg-url. Practically everything imports output.ts, so `shopify --version` was loading a terminal UI renderer and a GraphQL client to print a version string. Moves the token types, tokenItemToString and appendToTokenItem into token-item.ts, which imports nothing, and repoints every import site. TokenizedText.tsx keeps the component and imports the types. Replaces the `instanceof ClientError` check with a structural match on the same shape; ClientError is the only error reaching that path carrying both `response` and `request`, and the cli-kit wrapper carries `statusCode` instead. No behaviour change. Measured on the bundled CLI, clean rebuilds on both sides, cachegrind instruction counts under `node --predictable`: before after delta shopify --version 1,543,699,375 737,632,410 -52.2% shopify --help 1,606,749,593 809,187,564 -49.6% --version wall 174 ms 99 ms -43% JS loaded at boot 5.31 MB 4.16 MB -22% Output is byte-identical for --version, --help, app --help and commands. Co-authored-by: Isaac Roldan --- .../src/private/node/ui/components/Alert.tsx | 3 +- .../DangerousConfirmationPrompt.tsx | 3 +- .../src/private/node/ui/components/List.tsx | 3 +- .../ui/components/Prompts/InfoMessage.tsx | 3 +- .../node/ui/components/Prompts/InfoTable.tsx | 3 +- .../ui/components/Prompts/PromptLayout.tsx | 3 +- .../node/ui/components/TabularData.tsx | 3 +- .../private/node/ui/components/TextPrompt.tsx | 3 +- .../node/ui/components/TokenizedText.test.tsx | 3 +- .../node/ui/components/TokenizedText.tsx | 97 +--------------- .../private/node/ui/components/token-item.ts | 105 ++++++++++++++++++ .../src/private/node/ui/utilities.test.ts | 2 +- .../cli-kit/src/private/node/ui/utilities.ts | 2 +- packages/cli-kit/src/public/common/string.ts | 3 +- packages/cli-kit/src/public/node/error.ts | 21 +++- packages/cli-kit/src/public/node/output.ts | 2 +- packages/cli-kit/src/public/node/ui.tsx | 12 +- 17 files changed, 149 insertions(+), 122 deletions(-) create mode 100644 packages/cli-kit/src/private/node/ui/components/token-item.ts diff --git a/packages/cli-kit/src/private/node/ui/components/Alert.tsx b/packages/cli-kit/src/private/node/ui/components/Alert.tsx index fc573cd55dc..449fb0ce7cc 100644 --- a/packages/cli-kit/src/private/node/ui/components/Alert.tsx +++ b/packages/cli-kit/src/private/node/ui/components/Alert.tsx @@ -1,10 +1,11 @@ import {Banner, BannerType} from './Banner.js' import {Link} from './Link.js' import {List} from './List.js' -import {BoldToken, InlineToken, LinkToken, TokenItem, TokenizedText} from './TokenizedText.js' +import {TokenizedText} from './TokenizedText.js' import {TabularData, TabularDataProps} from './TabularData.js' import {Box, Text} from 'ink' import React, {FunctionComponent} from 'react' +import type {BoldToken, InlineToken, LinkToken, TokenItem} from './token-item.js' export interface CustomSection { title?: string diff --git a/packages/cli-kit/src/private/node/ui/components/DangerousConfirmationPrompt.tsx b/packages/cli-kit/src/private/node/ui/components/DangerousConfirmationPrompt.tsx index 2a31e5756ad..dfeda4abbe5 100644 --- a/packages/cli-kit/src/private/node/ui/components/DangerousConfirmationPrompt.tsx +++ b/packages/cli-kit/src/private/node/ui/components/DangerousConfirmationPrompt.tsx @@ -1,5 +1,5 @@ import {TextInput} from './TextInput.js' -import {InlineToken, TokenItem, TokenizedText} from './TokenizedText.js' +import {TokenizedText} from './TokenizedText.js' import {InfoTable, InfoTableProps} from './Prompts/InfoTable.js' import {handleCtrlC, useComplete} from '../../ui.js' import useLayout from '../hooks/use-layout.js' @@ -11,6 +11,7 @@ import usePrompt, {PromptState} from '../hooks/use-prompt.js' import React, {FunctionComponent, useCallback, useEffect, useState} from 'react' import {Box, useInput, Text} from 'ink' import figures from 'figures' +import type {InlineToken, TokenItem} from './token-item.js' export interface DangerousConfirmationPromptProps { message: string diff --git a/packages/cli-kit/src/private/node/ui/components/List.tsx b/packages/cli-kit/src/private/node/ui/components/List.tsx index 2fa9931e105..904715ca1c5 100644 --- a/packages/cli-kit/src/private/node/ui/components/List.tsx +++ b/packages/cli-kit/src/private/node/ui/components/List.tsx @@ -1,6 +1,7 @@ -import {InlineToken, TokenItem, TokenizedText} from './TokenizedText.js' +import {TokenizedText} from './TokenizedText.js' import {Box, Text, TextProps} from 'ink' import React, {FunctionComponent} from 'react' +import type {InlineToken, TokenItem} from './token-item.js' export interface CustomListItem { type?: string diff --git a/packages/cli-kit/src/private/node/ui/components/Prompts/InfoMessage.tsx b/packages/cli-kit/src/private/node/ui/components/Prompts/InfoMessage.tsx index ba1cf4226d2..e91519818c8 100644 --- a/packages/cli-kit/src/private/node/ui/components/Prompts/InfoMessage.tsx +++ b/packages/cli-kit/src/private/node/ui/components/Prompts/InfoMessage.tsx @@ -1,6 +1,7 @@ -import {InlineToken, LinkToken, TokenItem, TokenizedText, UserInputToken} from '../TokenizedText.js' +import {TokenizedText} from '../TokenizedText.js' import {Box, Text, TextProps} from 'ink' import React, {FunctionComponent} from 'react' +import type {InlineToken, LinkToken, TokenItem, UserInputToken} from '../token-item.js' export interface InfoMessageProps { message: { diff --git a/packages/cli-kit/src/private/node/ui/components/Prompts/InfoTable.tsx b/packages/cli-kit/src/private/node/ui/components/Prompts/InfoTable.tsx index 57d79396625..125c9b46d58 100644 --- a/packages/cli-kit/src/private/node/ui/components/Prompts/InfoTable.tsx +++ b/packages/cli-kit/src/private/node/ui/components/Prompts/InfoTable.tsx @@ -1,8 +1,9 @@ import {CustomListItem, List} from '../List.js' import {capitalize} from '../../../../../public/common/string.js' -import {InlineToken, TokenItem, TokenizedText} from '../TokenizedText.js' +import {TokenizedText} from '../TokenizedText.js' import {Box, Text, TextProps} from 'ink' import React, {FunctionComponent} from 'react' +import type {InlineToken, TokenItem} from '../token-item.js' type Items = (TokenItem | CustomListItem)[] diff --git a/packages/cli-kit/src/private/node/ui/components/Prompts/PromptLayout.tsx b/packages/cli-kit/src/private/node/ui/components/Prompts/PromptLayout.tsx index c7a461681ff..fe035922d80 100644 --- a/packages/cli-kit/src/private/node/ui/components/Prompts/PromptLayout.tsx +++ b/packages/cli-kit/src/private/node/ui/components/Prompts/PromptLayout.tsx @@ -1,6 +1,6 @@ import {InfoTable, InfoTableProps} from './InfoTable.js' import {InfoMessage, InfoMessageProps} from './InfoMessage.js' -import {InlineToken, LinkToken, TokenItem, TokenizedText} from '../TokenizedText.js' +import {TokenizedText} from '../TokenizedText.js' import {messageWithPunctuation} from '../../utilities.js' import {AbortSignal} from '../../../../../public/node/abort.js' import useAbortSignal from '../../hooks/use-abort-signal.js' @@ -9,6 +9,7 @@ import React, {ReactElement, cloneElement, useCallback, useLayoutEffect, useStat import {Box, measureElement, Text, useStdout, DOMElement} from 'ink' import figures from 'figures' +import type {InlineToken, LinkToken, TokenItem} from '../token-item.js' export type Message = TokenItem> diff --git a/packages/cli-kit/src/private/node/ui/components/TabularData.tsx b/packages/cli-kit/src/private/node/ui/components/TabularData.tsx index a228308af54..ecad232db79 100644 --- a/packages/cli-kit/src/private/node/ui/components/TabularData.tsx +++ b/packages/cli-kit/src/private/node/ui/components/TabularData.tsx @@ -1,4 +1,5 @@ -import {InlineToken, TokenizedText, tokenItemToString} from './TokenizedText.js' +import {TokenizedText} from './TokenizedText.js' +import {tokenItemToString, type InlineToken} from './token-item.js' import {unstyled} from '../../../../public/node/output.js' import {Box} from 'ink' import React, {FunctionComponent} from 'react' diff --git a/packages/cli-kit/src/private/node/ui/components/TextPrompt.tsx b/packages/cli-kit/src/private/node/ui/components/TextPrompt.tsx index 6e398a324a9..37e24221c94 100644 --- a/packages/cli-kit/src/private/node/ui/components/TextPrompt.tsx +++ b/packages/cli-kit/src/private/node/ui/components/TextPrompt.tsx @@ -1,4 +1,4 @@ -import {InlineToken, TokenItem, TokenizedText} from './TokenizedText.js' +import {TokenizedText} from './TokenizedText.js' import {TextInput} from './TextInput.js' import {handleCtrlC, useComplete} from '../../ui.js' import useLayout from '../hooks/use-layout.js' @@ -10,6 +10,7 @@ import React, {FunctionComponent, useCallback, useEffect, useState} from 'react' import {Box, useInput, Text} from 'ink' import figures from 'figures' +import type {InlineToken, TokenItem} from './token-item.js' export interface TextPromptProps { message: TokenItem diff --git a/packages/cli-kit/src/private/node/ui/components/TokenizedText.test.tsx b/packages/cli-kit/src/private/node/ui/components/TokenizedText.test.tsx index f81b38161da..562c50fef26 100644 --- a/packages/cli-kit/src/private/node/ui/components/TokenizedText.test.tsx +++ b/packages/cli-kit/src/private/node/ui/components/TokenizedText.test.tsx @@ -1,4 +1,5 @@ -import {tokenItemToString, TokenizedText} from './TokenizedText.js' +import {TokenizedText} from './TokenizedText.js' +import {tokenItemToString} from './token-item.js' import {LinksContext, Link} from '../contexts/LinksContext.js' import {unstyled} from '../../../../public/node/output.js' import {render} from '../../testing/ui.js' diff --git a/packages/cli-kit/src/private/node/ui/components/TokenizedText.tsx b/packages/cli-kit/src/private/node/ui/components/TokenizedText.tsx index 6b3a05562a0..f9bfbaa1a3f 100644 --- a/packages/cli-kit/src/private/node/ui/components/TokenizedText.tsx +++ b/packages/cli-kit/src/private/node/ui/components/TokenizedText.tsx @@ -8,59 +8,7 @@ import {LinksContext} from '../contexts/LinksContext.js' import React, {FunctionComponent, useContext} from 'react' import {Box, Text} from 'ink' -export interface LinkToken { - link: { - label?: string - url: string - } -} - -export interface UserInputToken { - userInput: string -} - -export interface ListToken { - list: { - title?: TokenItem - items: TokenItem[] - ordered?: boolean - } -} - -export interface BoldToken { - bold: string -} - -export type Token = - | string - | { - command: string - } - | LinkToken - | { - char: string - } - | UserInputToken - | { - subdued: string - } - | { - filePath: string - } - | ListToken - | BoldToken - | { - info: string - } - | { - warn: string - } - | { - error: string - } - -export type InlineToken = Exclude -export type TokenItem = T | T[] +import type {ListToken, Token, TokenItem} from './token-item.js' type DisplayType = 'block' | 'inline' interface Block { @@ -75,49 +23,6 @@ function tokenToBlock(token: Token): Block { } } -export function tokenItemToString(token: TokenItem): string { - if (typeof token === 'string') { - return token - } else if ('command' in token) { - return token.command - } else if ('link' in token) { - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- empty label should fall through to url - return token.link.label || token.link.url - } else if ('char' in token) { - return token.char - } else if ('userInput' in token) { - return token.userInput - } else if ('subdued' in token) { - return token.subdued - } else if ('filePath' in token) { - return token.filePath - } else if ('list' in token) { - return token.list.items.map(tokenItemToString).join(' ') - } else if ('bold' in token) { - return token.bold - } else if ('info' in token) { - return token.info - } else if ('warn' in token) { - return token.warn - } else if ('error' in token) { - return token.error - } else { - return token - .map((item, index) => { - if (index !== 0 && !(typeof item !== 'string' && 'char' in item)) { - return ` ${tokenItemToString(item)}` - } else { - return tokenItemToString(item) - } - }) - .join('') - } -} - -export function appendToTokenItem(token: TokenItem, suffix: string): TokenItem { - return Array.isArray(token) ? [...token, {char: suffix}] : [token, {char: suffix}] -} - function splitByDisplayType(acc: Block[][], item: Block) { if (item.display === 'block') { acc.push([item]) diff --git a/packages/cli-kit/src/private/node/ui/components/token-item.ts b/packages/cli-kit/src/private/node/ui/components/token-item.ts new file mode 100644 index 00000000000..2186e160e01 --- /dev/null +++ b/packages/cli-kit/src/private/node/ui/components/token-item.ts @@ -0,0 +1,105 @@ +// Token shapes and the pure helpers that operate on them. +// +// These live apart from `TokenizedText.tsx` on purpose. That file is a React +// component module: importing it pulls in `react` and `ink`, and through Ink, +// `react-reconciler`, `yoga-layout` and its WebAssembly. Non-rendering modules +// such as `output.ts`, `error.ts` and `common/string.ts` need only the types +// and `tokenItemToString`, and importing them from here keeps the terminal UI +// runtime out of the startup path of every command. + +export interface LinkToken { + link: { + label?: string + url: string + } +} + +export interface UserInputToken { + userInput: string +} + +export interface ListToken { + list: { + title?: TokenItem + items: TokenItem[] + ordered?: boolean + } +} + +export interface BoldToken { + bold: string +} + +export type Token = + | string + | { + command: string + } + | LinkToken + | { + char: string + } + | UserInputToken + | { + subdued: string + } + | { + filePath: string + } + | ListToken + | BoldToken + | { + info: string + } + | { + warn: string + } + | { + error: string + } + +export type InlineToken = Exclude +export type TokenItem = T | T[] + +export function tokenItemToString(token: TokenItem): string { + if (typeof token === 'string') { + return token + } else if ('command' in token) { + return token.command + } else if ('link' in token) { + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- empty label should fall through to url + return token.link.label || token.link.url + } else if ('char' in token) { + return token.char + } else if ('userInput' in token) { + return token.userInput + } else if ('subdued' in token) { + return token.subdued + } else if ('filePath' in token) { + return token.filePath + } else if ('list' in token) { + return token.list.items.map(tokenItemToString).join(' ') + } else if ('bold' in token) { + return token.bold + } else if ('info' in token) { + return token.info + } else if ('warn' in token) { + return token.warn + } else if ('error' in token) { + return token.error + } else { + return token + .map((item, index) => { + if (index !== 0 && !(typeof item !== 'string' && 'char' in item)) { + return ` ${tokenItemToString(item)}` + } else { + return tokenItemToString(item) + } + }) + .join('') + } +} + +export function appendToTokenItem(token: TokenItem, suffix: string): TokenItem { + return Array.isArray(token) ? [...token, {char: suffix}] : [token, {char: suffix}] +} diff --git a/packages/cli-kit/src/private/node/ui/utilities.test.ts b/packages/cli-kit/src/private/node/ui/utilities.test.ts index f0ca748548a..369c73d0229 100644 --- a/packages/cli-kit/src/private/node/ui/utilities.test.ts +++ b/packages/cli-kit/src/private/node/ui/utilities.test.ts @@ -1,5 +1,5 @@ import {messageWithPunctuation} from './utilities.js' -import {tokenItemToString} from './components/TokenizedText.js' +import {tokenItemToString} from './components/token-item.js' import {describe, expect, test} from 'vitest' describe('messageWithPunctuation', async () => { diff --git a/packages/cli-kit/src/private/node/ui/utilities.ts b/packages/cli-kit/src/private/node/ui/utilities.ts index a12c1aca290..bd32808e6b8 100644 --- a/packages/cli-kit/src/private/node/ui/utilities.ts +++ b/packages/cli-kit/src/private/node/ui/utilities.ts @@ -1,4 +1,4 @@ -import {appendToTokenItem, TokenItem, tokenItemToString} from './components/TokenizedText.js' +import {appendToTokenItem, tokenItemToString, type TokenItem} from './components/token-item.js' export function messageWithPunctuation(message: TokenItem) { const messageToString = tokenItemToString(message) diff --git a/packages/cli-kit/src/public/common/string.ts b/packages/cli-kit/src/public/common/string.ts index ee19df264a1..4eb2fd3d6f7 100644 --- a/packages/cli-kit/src/public/common/string.ts +++ b/packages/cli-kit/src/public/common/string.ts @@ -1,8 +1,7 @@ import {takeRandomFromArray, uniq} from './array.js' import {unstyled} from '../node/output.js' -import {Token, TokenItem} from '../../private/node/ui/components/TokenizedText.js' - import {camelCase, capitalCase, constantCase, paramCase, snakeCase, pascalCase} from 'change-case' +import type {Token, TokenItem} from '../../private/node/ui/components/token-item.js' const SAFE_RANDOM_BUSINESS_ADJECTIVES = [ 'commercial', diff --git a/packages/cli-kit/src/public/node/error.ts b/packages/cli-kit/src/public/node/error.ts index 9f84774cef9..32e9778e799 100644 --- a/packages/cli-kit/src/public/node/error.ts +++ b/packages/cli-kit/src/public/node/error.ts @@ -1,10 +1,9 @@ import {normalizePath} from './path.js' import {OutputMessage, stringifyMessage, TokenizedString} from './output.js' -import {InlineToken, TokenItem, tokenItemToString} from '../../private/node/ui/components/TokenizedText.js' +import {tokenItemToString, type InlineToken, type TokenItem} from '../../private/node/ui/components/token-item.js' import {hasRateLimitCode} from '../../private/node/analytics/graphql-error-codes.js' import {Errors} from '@oclif/core' -import {ClientError} from 'graphql-request' import type {AlertCustomSection} from './ui.js' @@ -222,21 +221,31 @@ export function shouldReportErrorAsUnexpected(error: unknown): boolean { * (HTTP 429, or a `THROTTLED`/`429` GraphQL code on any error in the response) matches the shape * detected by `errorsIncludeStatus429` in `private/node/api.ts`. * - * Scoped to the external `ClientError` type only — importing the cli-kit `GraphQLClientError` + * Scoped to the external `ClientError` shape only — importing the cli-kit `GraphQLClientError` * wrapper here would create an `error.ts → headers.ts → error.ts` import cycle. * + * Matched structurally rather than with `instanceof ClientError`, because importing the class + * pulls `graphql-request` — and through it `graphql`, `tr46` and `whatwg-url` — into the module + * graph of every command, for one type check on an error path. `ClientError` is the only error + * reaching here that carries both `response` and `request`; the cli-kit wrapper carries + * `statusCode` instead (see `private/node/api/headers.ts`). + * * @param error - Error to be checked. * @returns A boolean indicating if the error is a known expected API error. */ function isExpectedApiError(error: Error): boolean { - if (!(error instanceof ClientError)) { + const candidate = error as Error & { + response?: {status?: number; errors?: unknown} + request?: unknown + } + if (typeof candidate.response !== 'object' || candidate.response === null || candidate.request === undefined) { return false } - const status = error.response?.status + const status = candidate.response.status if (status === 401 || status === 429) { return true } - return hasRateLimitCode(error.response?.errors) + return hasRateLimitCode(candidate.response.errors) } /** diff --git a/packages/cli-kit/src/public/node/output.ts b/packages/cli-kit/src/public/node/output.ts index af883ebd016..3748f64bf20 100644 --- a/packages/cli-kit/src/public/node/output.ts +++ b/packages/cli-kit/src/public/node/output.ts @@ -19,7 +19,7 @@ import { RawContentToken, SubHeadingContentToken, } from '../../private/node/content-tokens.js' -import {tokenItemToString} from '../../private/node/ui/components/TokenizedText.js' +import {tokenItemToString} from '../../private/node/ui/components/token-item.js' import {consoleLog, consoleWarn, output} from '../../private/node/output.js' import stripAnsi from 'strip-ansi' import {Writable} from 'stream' diff --git a/packages/cli-kit/src/public/node/ui.tsx b/packages/cli-kit/src/public/node/ui.tsx index 28e4a1863da..08f15ff7dcb 100644 --- a/packages/cli-kit/src/public/node/ui.tsx +++ b/packages/cli-kit/src/public/node/ui.tsx @@ -12,13 +12,13 @@ import {FatalError} from '../../private/node/ui/components/FatalError.js' import ScalarDict from '../../private/node/ui/components/Table/ScalarDict.js' import {Table, TableColumn, TableProps} from '../../private/node/ui/components/Table/Table.js' import { - Token, tokenItemToString, - InlineToken, - LinkToken, - ListToken, - TokenItem, -} from '../../private/node/ui/components/TokenizedText.js' + type InlineToken, + type LinkToken, + type ListToken, + type Token, + type TokenItem, +} from '../../private/node/ui/components/token-item.js' import { DangerousConfirmationPrompt, DangerousConfirmationPromptProps, From ba02a023f5dae64024fa8dbc1e19afe1502c732b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaac=20Rold=C3=A1n?= Date: Mon, 3 Aug 2026 17:57:42 +0200 Subject: [PATCH 02/53] Add changeset for CLI startup improvement Co-Authored-By: Claude Opus 5 (1M context) --- .changeset/faster-cli-startup.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/faster-cli-startup.md diff --git a/.changeset/faster-cli-startup.md b/.changeset/faster-cli-startup.md new file mode 100644 index 00000000000..9a9587aab23 --- /dev/null +++ b/.changeset/faster-cli-startup.md @@ -0,0 +1,5 @@ +--- +'@shopify/cli-kit': patch +--- + +Speed up CLI startup by keeping the terminal UI runtime out of the boot path From 55c960f68283ed5987ddda76443cd6e0c424e53e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 3 Aug 2026 07:25:57 +0000 Subject: [PATCH 03/53] update generated graphql files --- packages/app/src/cli/api/graphql/admin/generated/types.d.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts index 678c7e4367d..869f90af9df 100644 --- a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts +++ b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts @@ -214,10 +214,6 @@ export type MetaobjectAdminAccess = | 'MERCHANT_READ' /** The merchant has read and write access. No other apps have access. */ | 'MERCHANT_READ_WRITE' - /** The merchant and other apps have no access. */ - | 'PRIVATE' - /** The merchant and other apps have read-only access. */ - | 'PUBLIC_READ' /** The merchant and other apps have read and write access. */ | 'PUBLIC_READ_WRITE'; From d194f5360ce67a85e3c20140ad7f73e14c2e8b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaac=20Rold=C3=A1n?= Date: Thu, 30 Jul 2026 12:18:33 +0200 Subject: [PATCH 04/53] Note in --verbose help that the extra output may include sensitive data Redaction is best effort, so the flag that turns on the payload dump should say so. Regenerates the manifests, README and dev docs that embed the description. --- .../generated/generated_docs_data_v2.json | 265 +++++++++--------- packages/cli-kit/src/public/node/cli.ts | 2 +- packages/cli/README.md | 128 ++++----- packages/cli/oclif.manifest.json | 138 ++++----- packages/create-app/oclif.manifest.json | 2 +- 5 files changed, 263 insertions(+), 272 deletions(-) diff --git a/docs-shopify.dev/generated/generated_docs_data_v2.json b/docs-shopify.dev/generated/generated_docs_data_v2.json index dbb42324f45..1cb0f4e4dd0 100644 --- a/docs-shopify.dev/generated/generated_docs_data_v2.json +++ b/docs-shopify.dev/generated/generated_docs_data_v2.json @@ -65,7 +65,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -79,7 +79,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appbuild {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Skips the installation of dependencies. Deprecated, use workspaces instead.\n * @environment SHOPIFY_FLAG_SKIP_DEPENDENCIES_INSTALLATION\n */\n '--skip-dependencies-installation'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appbuild {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Skips the installation of dependencies. Deprecated, use workspaces instead.\n * @environment SHOPIFY_FLAG_SKIP_DEPENDENCIES_INSTALLATION\n */\n '--skip-dependencies-installation'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appbulkcancel": { @@ -147,7 +147,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -170,7 +170,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface appbulkcancel {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * The bulk operation ID to cancel (numeric ID or full GID).\n * @environment SHOPIFY_FLAG_ID\n */\n '--id ': string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The store domain. Must be an existing dev store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appbulkcancel {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * The bulk operation ID to cancel (numeric ID or full GID).\n * @environment SHOPIFY_FLAG_ID\n */\n '--id ': string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The store domain. Must be an existing dev store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appbulkexecute": { @@ -257,7 +257,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -316,7 +316,7 @@ "environmentValue": "SHOPIFY_FLAG_VARIABLES" } ], - "value": "export interface appbulkexecute {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The file path where results should be written if --watch is specified. If not specified, results will be written to STDOUT.\n * @environment SHOPIFY_FLAG_OUTPUT_FILE\n */\n '--output-file '?: string\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * The GraphQL query or mutation to run as a bulk operation.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '-q, --query '?: string\n\n /**\n * Path to a file containing the GraphQL query or mutation. Can't be used with --query.\n * @environment SHOPIFY_FLAG_QUERY_FILE\n */\n '--query-file '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The store domain. Must be an existing dev store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Path to a file containing GraphQL variables in JSONL format (one JSON object per line). Can't be used with --variables.\n * @environment SHOPIFY_FLAG_VARIABLE_FILE\n */\n '--variable-file '?: string\n\n /**\n * The values for any GraphQL variables in your mutation, in JSON format. Can be specified multiple times.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use for the bulk operation. If not specified, uses the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n\n /**\n * Wait for bulk operation results before exiting. Defaults to false.\n * @environment SHOPIFY_FLAG_WATCH\n */\n '--watch'?: ''\n}" + "value": "export interface appbulkexecute {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The file path where results should be written if --watch is specified. If not specified, results will be written to STDOUT.\n * @environment SHOPIFY_FLAG_OUTPUT_FILE\n */\n '--output-file '?: string\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * The GraphQL query or mutation to run as a bulk operation.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '-q, --query '?: string\n\n /**\n * Path to a file containing the GraphQL query or mutation. Can't be used with --query.\n * @environment SHOPIFY_FLAG_QUERY_FILE\n */\n '--query-file '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The store domain. Must be an existing dev store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Path to a file containing GraphQL variables in JSONL format (one JSON object per line). Can't be used with --variables.\n * @environment SHOPIFY_FLAG_VARIABLE_FILE\n */\n '--variable-file '?: string\n\n /**\n * The values for any GraphQL variables in your mutation, in JSON format. Can be specified multiple times.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use for the bulk operation. If not specified, uses the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n\n /**\n * Wait for bulk operation results before exiting. Defaults to false.\n * @environment SHOPIFY_FLAG_WATCH\n */\n '--watch'?: ''\n}" } }, "appbulkstatus": { @@ -385,7 +385,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -408,7 +408,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface appbulkstatus {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * The bulk operation ID (numeric ID or full GID). If not provided, lists all bulk operations belonging to this app on this store in the last 7 days.\n * @environment SHOPIFY_FLAG_ID\n */\n '--id '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The store domain. Must be an existing dev store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appbulkstatus {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * The bulk operation ID (numeric ID or full GID). If not provided, lists all bulk operations belonging to this app on this store in the last 7 days.\n * @environment SHOPIFY_FLAG_ID\n */\n '--id '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The store domain. Must be an existing dev store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appconfiglink": { @@ -486,7 +486,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -500,7 +500,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appconfiglink {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * The name of the app configuration file to create or overwrite.\n * @environment SHOPIFY_FLAG_APP_CONFIG_FILE_NAME\n */\n '--file-name '?: string\n\n /**\n * Overwrite an existing configuration file without prompting.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '--force'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appconfiglink {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * The name of the app configuration file to create or overwrite.\n * @environment SHOPIFY_FLAG_APP_CONFIG_FILE_NAME\n */\n '--file-name '?: string\n\n /**\n * Overwrite an existing configuration file without prompting.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '--force'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appconfigpull": { @@ -560,7 +560,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -574,7 +574,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appconfigpull {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appconfigpull {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appconfiguse": { @@ -634,12 +634,12 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" } ], - "value": "export interface appconfiguse {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appconfiguse {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appconfigvalidate": { @@ -699,7 +699,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -722,7 +722,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface appconfigvalidate {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appconfigvalidate {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appdeploy": { @@ -836,7 +836,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -859,7 +859,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appdeploy {\n /**\n * Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.\n * @environment SHOPIFY_FLAG_ALLOW_DELETES\n */\n '--allow-deletes'?: ''\n\n /**\n * Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.\n * @environment SHOPIFY_FLAG_ALLOW_UPDATES\n */\n '--allow-updates'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Optional message that will be associated with this version. This is for internal use only and won't be available externally.\n * @environment SHOPIFY_FLAG_MESSAGE\n */\n '--message '?: string\n\n /**\n * Use with caution: Skips building any elements of the app that require building. You should ensure your app has been prepared in advance, such as by running `shopify app build` or by caching build artifacts.\n * @environment SHOPIFY_FLAG_NO_BUILD\n */\n '--no-build'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation is not required.\n * @environment SHOPIFY_FLAG_NO_RELEASE\n */\n '--no-release'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * URL associated with the new app version.\n * @environment SHOPIFY_FLAG_SOURCE_CONTROL_URL\n */\n '--source-control-url '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Optional version tag that will be associated with this app version. If not provided, an auto-generated identifier will be generated for this app version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" + "value": "export interface appdeploy {\n /**\n * Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.\n * @environment SHOPIFY_FLAG_ALLOW_DELETES\n */\n '--allow-deletes'?: ''\n\n /**\n * Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.\n * @environment SHOPIFY_FLAG_ALLOW_UPDATES\n */\n '--allow-updates'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Optional message that will be associated with this version. This is for internal use only and won't be available externally.\n * @environment SHOPIFY_FLAG_MESSAGE\n */\n '--message '?: string\n\n /**\n * Use with caution: Skips building any elements of the app that require building. You should ensure your app has been prepared in advance, such as by running `shopify app build` or by caching build artifacts.\n * @environment SHOPIFY_FLAG_NO_BUILD\n */\n '--no-build'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation is not required.\n * @environment SHOPIFY_FLAG_NO_RELEASE\n */\n '--no-release'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * URL associated with the new app version.\n * @environment SHOPIFY_FLAG_SOURCE_CONTROL_URL\n */\n '--source-control-url '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Optional version tag that will be associated with this app version. If not provided, an auto-generated identifier will be generated for this app version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" } }, "appdevclean": { @@ -919,7 +919,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -942,7 +942,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface appdevclean {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Store URL. Must be an existing development store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appdevclean {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Store URL. Must be an existing development store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appdev": { @@ -1101,7 +1101,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1133,7 +1133,7 @@ "environmentValue": "SHOPIFY_FLAG_THEME" } ], - "value": "export interface appdev {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Resource URL for checkout UI extension. Format: \"/cart/{productVariantID}:{productQuantity}\"\n * @environment SHOPIFY_FLAG_CHECKOUT_CART_URL\n */\n '--checkout-cart-url '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Install and use mkcert to generate localhost certificates when --use-localhost is enabled without prompting.\n * @environment SHOPIFY_FLAG_INSTALL_MKCERT\n */\n '--install-mkcert'?: ''\n\n /**\n * Port to use for localhost. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_LOCALHOST_PORT\n */\n '--localhost-port '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Uses the app URL from the toml file instead an autogenerated URL for dev.\n * @environment SHOPIFY_FLAG_NO_UPDATE\n */\n '--no-update'?: ''\n\n /**\n * The file path or URL. The file path is to a file that you want updated on idle. The URL path is where you want a webhook posted to report on file changes.\n * @environment SHOPIFY_FLAG_NOTIFY\n */\n '--notify '?: string\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Skips the installation of dependencies. Deprecated, use workspaces instead.\n * @environment SHOPIFY_FLAG_SKIP_DEPENDENCIES_INSTALLATION\n */\n '--skip-dependencies-installation'?: ''\n\n /**\n * Store URL. Must be an existing development or Shopify Plus sandbox store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The password for storefronts with password protection.\n * @environment SHOPIFY_FLAG_STORE_PASSWORD\n */\n '--store-password '?: string\n\n /**\n * Resource URL for subscription UI extension. Format: \"/products/{productId}\"\n * @environment SHOPIFY_FLAG_SUBSCRIPTION_PRODUCT_URL\n */\n '--subscription-product-url '?: string\n\n /**\n * Theme ID or name of the theme app extension host theme.\n * @environment SHOPIFY_FLAG_THEME\n */\n '-t, --theme '?: string\n\n /**\n * Local port of the theme app extension development server. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_THEME_APP_EXTENSION_PORT\n */\n '--theme-app-extension-port '?: string\n\n /**\n * Use a custom tunnel, it must be running before executing dev. Format: \"https://my-tunnel-url:port\".\n * @environment SHOPIFY_FLAG_TUNNEL_URL\n */\n '--tunnel-url '?: string\n\n /**\n * Service entry point will listen to localhost. A tunnel won't be used. Will work for testing many app features, but not those that directly invoke your app (E.g: Webhooks)\n * @environment SHOPIFY_FLAG_USE_LOCALHOST\n */\n '--use-localhost'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appdev {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Resource URL for checkout UI extension. Format: \"/cart/{productVariantID}:{productQuantity}\"\n * @environment SHOPIFY_FLAG_CHECKOUT_CART_URL\n */\n '--checkout-cart-url '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Install and use mkcert to generate localhost certificates when --use-localhost is enabled without prompting.\n * @environment SHOPIFY_FLAG_INSTALL_MKCERT\n */\n '--install-mkcert'?: ''\n\n /**\n * Port to use for localhost. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_LOCALHOST_PORT\n */\n '--localhost-port '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Uses the app URL from the toml file instead an autogenerated URL for dev.\n * @environment SHOPIFY_FLAG_NO_UPDATE\n */\n '--no-update'?: ''\n\n /**\n * The file path or URL. The file path is to a file that you want updated on idle. The URL path is where you want a webhook posted to report on file changes.\n * @environment SHOPIFY_FLAG_NOTIFY\n */\n '--notify '?: string\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Skips the installation of dependencies. Deprecated, use workspaces instead.\n * @environment SHOPIFY_FLAG_SKIP_DEPENDENCIES_INSTALLATION\n */\n '--skip-dependencies-installation'?: ''\n\n /**\n * Store URL. Must be an existing development or Shopify Plus sandbox store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The password for storefronts with password protection.\n * @environment SHOPIFY_FLAG_STORE_PASSWORD\n */\n '--store-password '?: string\n\n /**\n * Resource URL for subscription UI extension. Format: \"/products/{productId}\"\n * @environment SHOPIFY_FLAG_SUBSCRIPTION_PRODUCT_URL\n */\n '--subscription-product-url '?: string\n\n /**\n * Theme ID or name of the theme app extension host theme.\n * @environment SHOPIFY_FLAG_THEME\n */\n '-t, --theme '?: string\n\n /**\n * Local port of the theme app extension development server. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_THEME_APP_EXTENSION_PORT\n */\n '--theme-app-extension-port '?: string\n\n /**\n * Use a custom tunnel, it must be running before executing dev. Format: \"https://my-tunnel-url:port\".\n * @environment SHOPIFY_FLAG_TUNNEL_URL\n */\n '--tunnel-url '?: string\n\n /**\n * Service entry point will listen to localhost. A tunnel won't be used. Will work for testing many app features, but not those that directly invoke your app (E.g: Webhooks)\n * @environment SHOPIFY_FLAG_USE_LOCALHOST\n */\n '--use-localhost'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appenvpull": { @@ -1202,7 +1202,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1216,7 +1216,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appenvpull {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Specify an environment file to update if the update flag is set\n * @environment SHOPIFY_FLAG_ENV_FILE\n */\n '--env-file '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appenvpull {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Specify an environment file to update if the update flag is set\n * @environment SHOPIFY_FLAG_ENV_FILE\n */\n '--env-file '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appenvshow": { @@ -1276,7 +1276,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1290,7 +1290,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appenvshow {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appenvshow {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appexecute": { @@ -1377,7 +1377,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1427,7 +1427,7 @@ "environmentValue": "SHOPIFY_FLAG_VARIABLES" } ], - "value": "export interface appexecute {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The file name where results should be written, instead of STDOUT.\n * @environment SHOPIFY_FLAG_OUTPUT_FILE\n */\n '--output-file '?: string\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * The GraphQL query or mutation, as a string.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '-q, --query '?: string\n\n /**\n * Path to a file containing the GraphQL query or mutation. Can't be used with --query.\n * @environment SHOPIFY_FLAG_QUERY_FILE\n */\n '--query-file '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The myshopify.com domain of the store to execute against. The app must be installed on the store. If not specified, you will be prompted to select a store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Path to a file containing GraphQL variables in JSON format. Can't be used with --variables.\n * @environment SHOPIFY_FLAG_VARIABLE_FILE\n */\n '--variable-file '?: string\n\n /**\n * The values for any GraphQL variables in your query or mutation, in JSON format.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use for the query or mutation. Defaults to the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" + "value": "export interface appexecute {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The file name where results should be written, instead of STDOUT.\n * @environment SHOPIFY_FLAG_OUTPUT_FILE\n */\n '--output-file '?: string\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * The GraphQL query or mutation, as a string.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '-q, --query '?: string\n\n /**\n * Path to a file containing the GraphQL query or mutation. Can't be used with --query.\n * @environment SHOPIFY_FLAG_QUERY_FILE\n */\n '--query-file '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The myshopify.com domain of the store to execute against. The app must be installed on the store. If not specified, you will be prompted to select a store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Path to a file containing GraphQL variables in JSON format. Can't be used with --variables.\n * @environment SHOPIFY_FLAG_VARIABLE_FILE\n */\n '--variable-file '?: string\n\n /**\n * The values for any GraphQL variables in your query or mutation, in JSON format.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use for the query or mutation. Defaults to the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" } }, "appfunctionbuild": { @@ -1487,7 +1487,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1501,7 +1501,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appfunctionbuild {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appfunctionbuild {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appfunctioninfo": { @@ -1561,7 +1561,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1584,7 +1584,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface appfunctioninfo {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appfunctioninfo {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appfunctionreplay": { @@ -1644,7 +1644,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1685,7 +1685,7 @@ "environmentValue": "SHOPIFY_FLAG_WATCH" } ], - "value": "export interface appfunctionreplay {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of `shopify app dev` and is the suffix of the log file name.\n * @environment SHOPIFY_FLAG_LOG\n */\n '-l, --log '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Re-run the function when the source code changes.\n * @environment SHOPIFY_FLAG_WATCH\n */\n '-w, --watch'?: ''\n}" + "value": "export interface appfunctionreplay {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of `shopify app dev` and is the suffix of the log file name.\n * @environment SHOPIFY_FLAG_LOG\n */\n '-l, --log '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Re-run the function when the source code changes.\n * @environment SHOPIFY_FLAG_WATCH\n */\n '-w, --watch'?: ''\n}" } }, "appfunctionrun": { @@ -1731,15 +1731,6 @@ "isOptional": true, "environmentValue": "SHOPIFY_FLAG_PATH" }, - { - "filePath": "docs-shopify.dev/commands/interfaces/app-function-run.interface.ts", - "syntaxKind": "PropertySignature", - "name": "--profile", - "value": "''", - "description": "Generate a WebAssembly performance profile for the function run. The profile can be viewed in Speedscope.", - "isOptional": true, - "environmentValue": "SHOPIFY_FLAG_PROFILE" - }, { "filePath": "docs-shopify.dev/commands/interfaces/app-function-run.interface.ts", "syntaxKind": "PropertySignature", @@ -1754,7 +1745,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1795,7 +1786,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface appfunctionrun {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Name of the WebAssembly export to invoke.\n * @environment SHOPIFY_FLAG_EXPORT\n */\n '-e, --export '?: string\n\n /**\n * The input JSON to pass to the function. If omitted, standard input is used.\n * @environment SHOPIFY_FLAG_INPUT\n */\n '-i, --input '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Generate a WebAssembly performance profile for the function run. The profile can be viewed in Speedscope.\n * @environment SHOPIFY_FLAG_PROFILE\n */\n '--profile'?: ''\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appfunctionrun {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Name of the WebAssembly export to invoke.\n * @environment SHOPIFY_FLAG_EXPORT\n */\n '-e, --export '?: string\n\n /**\n * The input JSON to pass to the function. If omitted, standard input is used.\n * @environment SHOPIFY_FLAG_INPUT\n */\n '-i, --input '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appfunctionschema": { @@ -1864,7 +1855,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1878,7 +1869,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appfunctionschema {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Output the schema to stdout instead of writing to a file.\n * @environment SHOPIFY_FLAG_STDOUT\n */\n '--stdout'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appfunctionschema {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Output the schema to stdout instead of writing to a file.\n * @environment SHOPIFY_FLAG_STDOUT\n */\n '--stdout'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appfunctiontypegen": { @@ -1938,7 +1929,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -1952,7 +1943,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appfunctiontypegen {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appfunctiontypegen {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appgenerateextension": { @@ -2021,7 +2012,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2053,7 +2044,7 @@ "environmentValue": "SHOPIFY_FLAG_EXTENSION_TEMPLATE" } ], - "value": "export interface appgenerateextension {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Choose a starting template for your extension, where applicable\n * @environment SHOPIFY_FLAG_FLAVOR\n */\n '--flavor '?: string\n\n /**\n * name of your Extension\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Extension template\n * @environment SHOPIFY_FLAG_EXTENSION_TEMPLATE\n */\n '-t, --template '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appgenerateextension {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Choose a starting template for your extension, where applicable\n * @environment SHOPIFY_FLAG_FLAVOR\n */\n '--flavor '?: string\n\n /**\n * name of your Extension\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Extension template\n * @environment SHOPIFY_FLAG_EXTENSION_TEMPLATE\n */\n '-t, --template '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appgraphiql": { @@ -2122,7 +2113,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2163,7 +2154,7 @@ "environmentValue": "SHOPIFY_FLAG_VARIABLES" } ], - "value": "export interface appgraphiql {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Local port for the GraphiQL server. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_PORT\n */\n '--port '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The myshopify.com domain of the store to open GraphiQL against. The app must be installed on the store. If not specified, you will be prompted to select a store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The values for any GraphQL variables in your query or mutation, in JSON format.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use in GraphiQL. Defaults to the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" + "value": "export interface appgraphiql {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Local port for the GraphiQL server. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_PORT\n */\n '--port '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The myshopify.com domain of the store to open GraphiQL against. The app must be installed on the store. If not specified, you will be prompted to select a store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The values for any GraphQL variables in your query or mutation, in JSON format.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use in GraphiQL. Defaults to the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" } }, "appimportcustomdatadefinitions": { @@ -2232,7 +2223,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2255,7 +2246,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface appimportcustomdatadefinitions {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Include existing declared definitions in the output.\n * @environment SHOPIFY_FLAG_INCLUDE_EXISTING\n */\n '--include-existing'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Store URL. Must be an existing development or Shopify Plus sandbox store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appimportcustomdatadefinitions {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Include existing declared definitions in the output.\n * @environment SHOPIFY_FLAG_INCLUDE_EXISTING\n */\n '--include-existing'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Store URL. Must be an existing development or Shopify Plus sandbox store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appimportextensions": { @@ -2315,7 +2306,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2329,7 +2320,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appimportextensions {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appimportextensions {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appinfo": { @@ -2389,7 +2380,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2421,7 +2412,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface appinfo {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Outputs environment variables necessary for running and deploying web/.\n * @environment SHOPIFY_FLAG_OUTPUT_WEB_ENV\n */\n '--web-env'?: ''\n}" + "value": "export interface appinfo {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Outputs environment variables necessary for running and deploying web/.\n * @environment SHOPIFY_FLAG_OUTPUT_WEB_ENV\n */\n '--web-env'?: ''\n}" } }, "appinit": { @@ -2490,7 +2481,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2522,7 +2513,7 @@ "environmentValue": "SHOPIFY_FLAG_PATH" } ], - "value": "export interface appinit {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app. Use this to automatically link your new project to an existing app. Using this flag avoids the app selection prompt.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * Which flavor of the given template to use.\n * @environment SHOPIFY_FLAG_TEMPLATE_FLAVOR\n */\n '--flavor '?: string\n\n /**\n * The name for the new app. When provided, skips the app selection prompt and creates a new app with this name.\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/\n * @environment SHOPIFY_FLAG_ORGANIZATION_ID\n */\n '--organization-id '?: string\n\n /**\n * \n * @environment SHOPIFY_FLAG_PACKAGE_MANAGER\n */\n '-d, --package-manager '?: string\n\n /**\n * \n * @environment SHOPIFY_FLAG_PATH\n */\n '-p, --path '?: string\n\n /**\n * The app template. Accepts one of the following:\n - \n - Any GitHub repo with optional branch and subpath, e.g., https://github.com/Shopify//[subpath]#[branch]\n * @environment SHOPIFY_FLAG_TEMPLATE\n */\n '--template '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appinit {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app. Use this to automatically link your new project to an existing app. Using this flag avoids the app selection prompt.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * Which flavor of the given template to use.\n * @environment SHOPIFY_FLAG_TEMPLATE_FLAVOR\n */\n '--flavor '?: string\n\n /**\n * The name for the new app. When provided, skips the app selection prompt and creates a new app with this name.\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/\n * @environment SHOPIFY_FLAG_ORGANIZATION_ID\n */\n '--organization-id '?: string\n\n /**\n * \n * @environment SHOPIFY_FLAG_PACKAGE_MANAGER\n */\n '-d, --package-manager '?: string\n\n /**\n * \n * @environment SHOPIFY_FLAG_PATH\n */\n '-p, --path '?: string\n\n /**\n * The app template. Accepts one of the following:\n - \n - Any GitHub repo with optional branch and subpath, e.g., https://github.com/Shopify//[subpath]#[branch]\n * @environment SHOPIFY_FLAG_TEMPLATE\n */\n '--template '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "applogssources": { @@ -2582,7 +2573,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2596,7 +2587,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface applogssources {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface applogssources {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "applogs": { @@ -2674,7 +2665,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2706,7 +2697,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface applogs {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Filters output to the specified log source.\n * @environment SHOPIFY_FLAG_SOURCE\n */\n '--source '?: string\n\n /**\n * Filters output to the specified status (success or failure).\n * @environment SHOPIFY_FLAG_STATUS\n */\n '--status '?: string\n\n /**\n * Store URL. Must be an existing development or Shopify Plus sandbox store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface applogs {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Filters output to the specified log source.\n * @environment SHOPIFY_FLAG_SOURCE\n */\n '--source '?: string\n\n /**\n * Filters output to the specified status (success or failure).\n * @environment SHOPIFY_FLAG_STATUS\n */\n '--status '?: string\n\n /**\n * Store URL. Must be an existing development or Shopify Plus sandbox store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "apprelease": { @@ -2784,7 +2775,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2806,7 +2797,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface apprelease {\n /**\n * Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.\n * @environment SHOPIFY_FLAG_ALLOW_DELETES\n */\n '--allow-deletes'?: ''\n\n /**\n * Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.\n * @environment SHOPIFY_FLAG_ALLOW_UPDATES\n */\n '--allow-updates'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The name of the app version to release.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version ': string\n}" + "value": "export interface apprelease {\n /**\n * Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.\n * @environment SHOPIFY_FLAG_ALLOW_DELETES\n */\n '--allow-deletes'?: ''\n\n /**\n * Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.\n * @environment SHOPIFY_FLAG_ALLOW_UPDATES\n */\n '--allow-updates'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The name of the app version to release.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version ': string\n}" } }, "appversionslist": { @@ -2866,7 +2857,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -2889,7 +2880,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface appversionslist {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appversionslist {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appwebhooktrigger": { @@ -3205,12 +3196,12 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" } ], - "value": "export interface docfetch {\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Write the document to this file path instead of printing it to stdout.\n * @environment SHOPIFY_FLAG_OUTPUT\n */\n '--output '?: string\n\n /**\n * The shopify.dev URL to fetch.\n * @environment SHOPIFY_FLAG_URL\n */\n '--url ': string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface docfetch {\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Write the document to this file path instead of printing it to stdout.\n * @environment SHOPIFY_FLAG_OUTPUT\n */\n '--output '?: string\n\n /**\n * The shopify.dev URL to fetch.\n * @environment SHOPIFY_FLAG_URL\n */\n '--url ': string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "docsearch": { @@ -3260,12 +3251,12 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" } ], - "value": "export interface docsearch {\n /**\n * Limit results to a specific API (for example: admin, storefront, hydrogen, functions). Unrecognized values are ignored.\n * @environment SHOPIFY_FLAG_API_NAME\n */\n '--api-name '?: string\n\n /**\n * Limit results to a specific API version (for example: 2025-10, latest, current).\n * @environment SHOPIFY_FLAG_API_VERSION\n */\n '--api-version '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The search query.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '--query ': string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface docsearch {\n /**\n * Limit results to a specific API (for example: admin, storefront, hydrogen, functions). Unrecognized values are ignored.\n * @environment SHOPIFY_FLAG_API_NAME\n */\n '--api-name '?: string\n\n /**\n * Limit results to a specific API version (for example: 2025-10, latest, current).\n * @environment SHOPIFY_FLAG_API_VERSION\n */\n '--api-version '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The search query.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '--query ': string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "help": { @@ -4701,7 +4692,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -4715,7 +4706,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface organizationlist {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface organizationlist {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "search": { @@ -4739,12 +4730,12 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" } ], - "value": "export interface search {\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface search {\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "storeauthlist": { @@ -4768,7 +4759,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -4782,7 +4773,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface storeauthlist {\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface storeauthlist {\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "storeauth": { @@ -4814,7 +4805,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -4836,7 +4827,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface storeauth {\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Comma-separated Admin API scopes to request for the app.\n * @environment SHOPIFY_FLAG_SCOPES\n */\n '--scopes ': string\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface storeauth {\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Comma-separated Admin API scopes to request for the app.\n * @environment SHOPIFY_FLAG_SCOPES\n */\n '--scopes ': string\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "storebulkcancel": { @@ -4868,7 +4859,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -4881,7 +4872,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface storebulkcancel {\n /**\n * The bulk operation ID to cancel (numeric ID or full GID).\n * @environment SHOPIFY_FLAG_ID\n */\n '--id ': string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface storebulkcancel {\n /**\n * The bulk operation ID to cancel (numeric ID or full GID).\n * @environment SHOPIFY_FLAG_ID\n */\n '--id ': string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "storebulkexecute": { @@ -4941,7 +4932,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -4990,7 +4981,7 @@ "environmentValue": "SHOPIFY_FLAG_VARIABLES" } ], - "value": "export interface storebulkexecute {\n /**\n * Allow GraphQL mutations to run against the target store.\n * @environment SHOPIFY_FLAG_ALLOW_MUTATIONS\n */\n '--allow-mutations'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The file path where results should be written if --watch is specified. If not specified, results will be written to STDOUT.\n * @environment SHOPIFY_FLAG_OUTPUT_FILE\n */\n '--output-file '?: string\n\n /**\n * The GraphQL query or mutation to run as a bulk operation.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '-q, --query '?: string\n\n /**\n * Path to a file containing the GraphQL query or mutation. Can't be used with --query.\n * @environment SHOPIFY_FLAG_QUERY_FILE\n */\n '--query-file '?: string\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Path to a file containing GraphQL variables in JSONL format (one JSON object per line). Can't be used with --variables.\n * @environment SHOPIFY_FLAG_VARIABLE_FILE\n */\n '--variable-file '?: string\n\n /**\n * The values for any GraphQL variables in your mutation, in JSON format. Can be specified multiple times.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use for the bulk operation. If not specified, uses the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n\n /**\n * Wait for bulk operation results before exiting. Defaults to false.\n * @environment SHOPIFY_FLAG_WATCH\n */\n '--watch'?: ''\n}" + "value": "export interface storebulkexecute {\n /**\n * Allow GraphQL mutations to run against the target store.\n * @environment SHOPIFY_FLAG_ALLOW_MUTATIONS\n */\n '--allow-mutations'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The file path where results should be written if --watch is specified. If not specified, results will be written to STDOUT.\n * @environment SHOPIFY_FLAG_OUTPUT_FILE\n */\n '--output-file '?: string\n\n /**\n * The GraphQL query or mutation to run as a bulk operation.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '-q, --query '?: string\n\n /**\n * Path to a file containing the GraphQL query or mutation. Can't be used with --query.\n * @environment SHOPIFY_FLAG_QUERY_FILE\n */\n '--query-file '?: string\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Path to a file containing GraphQL variables in JSONL format (one JSON object per line). Can't be used with --variables.\n * @environment SHOPIFY_FLAG_VARIABLE_FILE\n */\n '--variable-file '?: string\n\n /**\n * The values for any GraphQL variables in your mutation, in JSON format. Can be specified multiple times.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use for the bulk operation. If not specified, uses the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n\n /**\n * Wait for bulk operation results before exiting. Defaults to false.\n * @environment SHOPIFY_FLAG_WATCH\n */\n '--watch'?: ''\n}" } }, "storebulkstatus": { @@ -5023,7 +5014,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5036,7 +5027,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface storebulkstatus {\n /**\n * The bulk operation ID (numeric ID or full GID). If not provided, lists all bulk operations on this store in the last 7 days.\n * @environment SHOPIFY_FLAG_ID\n */\n '--id '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface storebulkstatus {\n /**\n * The bulk operation ID (numeric ID or full GID). If not provided, lists all bulk operations on this store in the last 7 days.\n * @environment SHOPIFY_FLAG_ID\n */\n '--id '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "storecreatepreview": { @@ -5078,7 +5069,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5092,7 +5083,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface storecreatepreview {\n /**\n * Two-letter country code for the store, such as US, CA, or GB. Follows the ISO 3166-1 alpha-2 standard.\n * @environment SHOPIFY_FLAG_STORE_COUNTRY\n */\n '--country '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * The name of the store.\n * @environment SHOPIFY_FLAG_PREVIEW_STORE_NAME\n */\n '--name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface storecreatepreview {\n /**\n * Two-letter country code for the store, such as US, CA, or GB. Follows the ISO 3166-1 alpha-2 standard.\n * @environment SHOPIFY_FLAG_STORE_COUNTRY\n */\n '--country '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * The name of the store.\n * @environment SHOPIFY_FLAG_PREVIEW_STORE_NAME\n */\n '--name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "storeexecute": { @@ -5152,7 +5143,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5201,7 +5192,7 @@ "environmentValue": "SHOPIFY_FLAG_VARIABLES" } ], - "value": "export interface storeexecute {\n /**\n * Allow GraphQL mutations to run against the target store.\n * @environment SHOPIFY_FLAG_ALLOW_MUTATIONS\n */\n '--allow-mutations'?: ''\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The file name where results should be written, instead of STDOUT.\n * @environment SHOPIFY_FLAG_OUTPUT_FILE\n */\n '--output-file '?: string\n\n /**\n * The GraphQL query or mutation, as a string.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '-q, --query '?: string\n\n /**\n * Path to a file containing the GraphQL query or mutation. Can't be used with --query.\n * @environment SHOPIFY_FLAG_QUERY_FILE\n */\n '--query-file '?: string\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Path to a file containing GraphQL variables in JSON format. Can't be used with --variables.\n * @environment SHOPIFY_FLAG_VARIABLE_FILE\n */\n '--variable-file '?: string\n\n /**\n * The values for any GraphQL variables in your query or mutation, in JSON format.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use for the query or mutation. Defaults to the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" + "value": "export interface storeexecute {\n /**\n * Allow GraphQL mutations to run against the target store.\n * @environment SHOPIFY_FLAG_ALLOW_MUTATIONS\n */\n '--allow-mutations'?: ''\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The file name where results should be written, instead of STDOUT.\n * @environment SHOPIFY_FLAG_OUTPUT_FILE\n */\n '--output-file '?: string\n\n /**\n * The GraphQL query or mutation, as a string.\n * @environment SHOPIFY_FLAG_QUERY\n */\n '-q, --query '?: string\n\n /**\n * Path to a file containing the GraphQL query or mutation. Can't be used with --query.\n * @environment SHOPIFY_FLAG_QUERY_FILE\n */\n '--query-file '?: string\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Path to a file containing GraphQL variables in JSON format. Can't be used with --variables.\n * @environment SHOPIFY_FLAG_VARIABLE_FILE\n */\n '--variable-file '?: string\n\n /**\n * The values for any GraphQL variables in your query or mutation, in JSON format.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use for the query or mutation. Defaults to the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" } }, "storegraphiql": { @@ -5243,7 +5234,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5274,7 +5265,7 @@ "environmentValue": "SHOPIFY_FLAG_VARIABLES" } ], - "value": "export interface storegraphiql {\n /**\n * Allow GraphQL mutations to run against the target store.\n * @environment SHOPIFY_FLAG_ALLOW_MUTATIONS\n */\n '--allow-mutations'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Local port for the GraphiQL server. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_PORT\n */\n '--port '?: string\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * The values for any GraphQL variables in your query or mutation, in JSON format.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use in GraphiQL. Defaults to the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" + "value": "export interface storegraphiql {\n /**\n * Allow GraphQL mutations to run against the target store.\n * @environment SHOPIFY_FLAG_ALLOW_MUTATIONS\n */\n '--allow-mutations'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Local port for the GraphiQL server. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_PORT\n */\n '--port '?: string\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * The values for any GraphQL variables in your query or mutation, in JSON format.\n * @environment SHOPIFY_FLAG_VARIABLES\n */\n '-v, --variables '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The API version to use in GraphiQL. Defaults to the latest stable version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" } }, "storeinfo": { @@ -5298,7 +5289,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5320,7 +5311,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface storeinfo {\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface storeinfo {\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "storelist": { @@ -5353,7 +5344,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5367,7 +5358,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface storelist {\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The numeric organization ID. Auto-selects if you belong to a single organization.\n * @environment SHOPIFY_FLAG_ORGANIZATION_ID\n */\n '--organization-id '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface storelist {\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The numeric organization ID. Auto-selects if you belong to a single organization.\n * @environment SHOPIFY_FLAG_ORGANIZATION_ID\n */\n '--organization-id '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "storeopen": { @@ -5391,7 +5382,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5404,7 +5395,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface storeopen {\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface storeopen {\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The myshopify.com domain of the store.\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store ': string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themecheck": { @@ -5482,7 +5473,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5532,7 +5523,7 @@ "environmentValue": "SHOPIFY_FLAG_VERSION" } ], - "value": "export interface themecheck {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Automatically fix offenses\n * @environment SHOPIFY_FLAG_AUTO_CORRECT\n */\n '-a, --auto-correct'?: ''\n\n /**\n * Use the config provided, overriding .theme-check.yml if present\n Supports all theme-check: config values, e.g., theme-check:theme-app-extension,\n theme-check:recommended, theme-check:all\n For backwards compatibility, :theme_app_extension is also supported \n * @environment SHOPIFY_FLAG_CONFIG\n */\n '-C, --config '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Minimum severity for exit with error code\n * @environment SHOPIFY_FLAG_FAIL_LEVEL\n */\n '--fail-level '?: string\n\n /**\n * Generate a .theme-check.yml file\n * @environment SHOPIFY_FLAG_INIT\n */\n '--init'?: ''\n\n /**\n * List enabled checks\n * @environment SHOPIFY_FLAG_LIST\n */\n '--list'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The output format to use\n * @environment SHOPIFY_FLAG_OUTPUT\n */\n '-o, --output '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Output active config to STDOUT\n * @environment SHOPIFY_FLAG_PRINT\n */\n '--print'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Print Theme Check version\n * @environment SHOPIFY_FLAG_VERSION\n */\n '-v, --version'?: ''\n}" + "value": "export interface themecheck {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Automatically fix offenses\n * @environment SHOPIFY_FLAG_AUTO_CORRECT\n */\n '-a, --auto-correct'?: ''\n\n /**\n * Use the config provided, overriding .theme-check.yml if present\n Supports all theme-check: config values, e.g., theme-check:theme-app-extension,\n theme-check:recommended, theme-check:all\n For backwards compatibility, :theme_app_extension is also supported \n * @environment SHOPIFY_FLAG_CONFIG\n */\n '-C, --config '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Minimum severity for exit with error code\n * @environment SHOPIFY_FLAG_FAIL_LEVEL\n */\n '--fail-level '?: string\n\n /**\n * Generate a .theme-check.yml file\n * @environment SHOPIFY_FLAG_INIT\n */\n '--init'?: ''\n\n /**\n * List enabled checks\n * @environment SHOPIFY_FLAG_LIST\n */\n '--list'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The output format to use\n * @environment SHOPIFY_FLAG_OUTPUT\n */\n '-o, --output '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Output active config to STDOUT\n * @environment SHOPIFY_FLAG_PRINT\n */\n '--print'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Print Theme Check version\n * @environment SHOPIFY_FLAG_VERSION\n */\n '-v, --version'?: ''\n}" } }, "themeconsole": { @@ -5601,7 +5592,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5624,7 +5615,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface themeconsole {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The password for storefronts with password protection.\n * @environment SHOPIFY_FLAG_STORE_PASSWORD\n */\n '--store-password '?: string\n\n /**\n * The url to be used as context\n * @environment SHOPIFY_FLAG_URL\n */\n '--url '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themeconsole {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The password for storefronts with password protection.\n * @environment SHOPIFY_FLAG_STORE_PASSWORD\n */\n '--store-password '?: string\n\n /**\n * The url to be used as context\n * @environment SHOPIFY_FLAG_URL\n */\n '--url '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themedelete": { @@ -5675,7 +5666,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5734,7 +5725,7 @@ "environmentValue": "SHOPIFY_FLAG_THEME_ID" } ], - "value": "export interface themedelete {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Delete your development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Skip confirmation.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '-f, --force'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Include others development themes in theme list.\n * @environment SHOPIFY_FLAG_SHOW_ALL\n */\n '-a, --show-all'?: ''\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themedelete {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Delete your development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Skip confirmation.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '-f, --force'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Include others development themes in theme list.\n * @environment SHOPIFY_FLAG_SHOW_ALL\n */\n '-a, --show-all'?: ''\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themedev": { @@ -5884,7 +5875,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -5952,7 +5943,7 @@ "environmentValue": "SHOPIFY_FLAG_IGNORE" } ], - "value": "export interface themedev {\n /**\n * Allow development on a live theme.\n * @environment SHOPIFY_FLAG_ALLOW_LIVE\n */\n '-a, --allow-live'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Controls the visibility of the error overlay when an theme asset upload fails:\n- silent Prevents the error overlay from appearing.\n- default Displays the error overlay.\n \n * @environment SHOPIFY_FLAG_ERROR_OVERLAY\n */\n '--error-overlay '?: string\n\n /**\n * Set which network interface the web server listens on. The default value is 127.0.0.1.\n * @environment SHOPIFY_FLAG_HOST\n */\n '--host '?: string\n\n /**\n * Skip hot reloading any files that match the specified pattern.\n * @environment SHOPIFY_FLAG_IGNORE\n */\n '-x, --ignore '?: string\n\n /**\n * The listing preset to use for multi-preset themes. Applies preset files from listings/[preset-name] directory.\n * @environment SHOPIFY_FLAG_LISTING\n */\n '--listing '?: string\n\n /**\n * The live reload mode switches the server behavior when a file is modified:\n- hot-reload Hot reloads local changes to CSS and sections (default)\n- full-page Always refreshes the entire page\n- off Deactivate live reload\n * @environment SHOPIFY_FLAG_LIVE_RELOAD\n */\n '--live-reload '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Prevents files from being deleted in the remote theme when a file has been deleted locally. This applies to files that are deleted while the command is running, and files that have been deleted locally before the command is run.\n * @environment SHOPIFY_FLAG_NODELETE\n */\n '-n, --nodelete'?: ''\n\n /**\n * The file path or URL. The file path is to a file that you want updated on idle. The URL path is where you want a webhook posted to report on file changes.\n * @environment SHOPIFY_FLAG_NOTIFY\n */\n '--notify '?: string\n\n /**\n * Hot reload only files that match the specified pattern.\n * @environment SHOPIFY_FLAG_ONLY\n */\n '-o, --only '?: string\n\n /**\n * Automatically launch the theme preview in your default web browser.\n * @environment SHOPIFY_FLAG_OPEN\n */\n '--open'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Local port to serve theme preview from. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_PORT\n */\n '--port '?: string\n\n /**\n * How to resolve JSON conflicts when --theme-editor-sync is enabled. Use keep-local to keep local files, keep-remote to keep remote files, or abort to fail instead of prompting.\n * @environment SHOPIFY_FLAG_RECONCILIATION_STRATEGY\n */\n '--reconciliation-strategy '?: string\n\n /**\n * Inject the standard events inspector into storefront HTML.\n * @environment SHOPIFY_FLAG_STANDARD_EVENTS_INSPECTOR\n */\n '--standard-events-inspector'?: ''\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The password for storefronts with password protection.\n * @environment SHOPIFY_FLAG_STORE_PASSWORD\n */\n '--store-password '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Synchronize Theme Editor updates in the local theme files.\n * @environment SHOPIFY_FLAG_THEME_EDITOR_SYNC\n */\n '--theme-editor-sync'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themedev {\n /**\n * Allow development on a live theme.\n * @environment SHOPIFY_FLAG_ALLOW_LIVE\n */\n '-a, --allow-live'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Controls the visibility of the error overlay when an theme asset upload fails:\n- silent Prevents the error overlay from appearing.\n- default Displays the error overlay.\n \n * @environment SHOPIFY_FLAG_ERROR_OVERLAY\n */\n '--error-overlay '?: string\n\n /**\n * Set which network interface the web server listens on. The default value is 127.0.0.1.\n * @environment SHOPIFY_FLAG_HOST\n */\n '--host '?: string\n\n /**\n * Skip hot reloading any files that match the specified pattern.\n * @environment SHOPIFY_FLAG_IGNORE\n */\n '-x, --ignore '?: string\n\n /**\n * The listing preset to use for multi-preset themes. Applies preset files from listings/[preset-name] directory.\n * @environment SHOPIFY_FLAG_LISTING\n */\n '--listing '?: string\n\n /**\n * The live reload mode switches the server behavior when a file is modified:\n- hot-reload Hot reloads local changes to CSS and sections (default)\n- full-page Always refreshes the entire page\n- off Deactivate live reload\n * @environment SHOPIFY_FLAG_LIVE_RELOAD\n */\n '--live-reload '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Prevents files from being deleted in the remote theme when a file has been deleted locally. This applies to files that are deleted while the command is running, and files that have been deleted locally before the command is run.\n * @environment SHOPIFY_FLAG_NODELETE\n */\n '-n, --nodelete'?: ''\n\n /**\n * The file path or URL. The file path is to a file that you want updated on idle. The URL path is where you want a webhook posted to report on file changes.\n * @environment SHOPIFY_FLAG_NOTIFY\n */\n '--notify '?: string\n\n /**\n * Hot reload only files that match the specified pattern.\n * @environment SHOPIFY_FLAG_ONLY\n */\n '-o, --only '?: string\n\n /**\n * Automatically launch the theme preview in your default web browser.\n * @environment SHOPIFY_FLAG_OPEN\n */\n '--open'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Local port to serve theme preview from. Must be between 1 and 65535.\n * @environment SHOPIFY_FLAG_PORT\n */\n '--port '?: string\n\n /**\n * How to resolve JSON conflicts when --theme-editor-sync is enabled. Use keep-local to keep local files, keep-remote to keep remote files, or abort to fail instead of prompting.\n * @environment SHOPIFY_FLAG_RECONCILIATION_STRATEGY\n */\n '--reconciliation-strategy '?: string\n\n /**\n * Inject the standard events inspector into storefront HTML.\n * @environment SHOPIFY_FLAG_STANDARD_EVENTS_INSPECTOR\n */\n '--standard-events-inspector'?: ''\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The password for storefronts with password protection.\n * @environment SHOPIFY_FLAG_STORE_PASSWORD\n */\n '--store-password '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Synchronize Theme Editor updates in the local theme files.\n * @environment SHOPIFY_FLAG_THEME_EDITOR_SYNC\n */\n '--theme-editor-sync'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themeduplicate": { @@ -5994,7 +5985,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -6053,7 +6044,7 @@ "environmentValue": "SHOPIFY_FLAG_THEME_ID" } ], - "value": "export interface themeduplicate {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Force the duplicate operation to run without prompts or confirmations.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '-f, --force'?: ''\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Name of the newly duplicated theme.\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themeduplicate {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Force the duplicate operation to run without prompts or confirmations.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '-f, --force'?: ''\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Name of the newly duplicated theme.\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themeinfo": { @@ -6104,7 +6095,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -6154,7 +6145,7 @@ "environmentValue": "SHOPIFY_FLAG_THEME_ID" } ], - "value": "export interface themeinfo {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Retrieve info from your development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themeinfo {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Retrieve info from your development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themeinit": { @@ -6196,7 +6187,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -6219,7 +6210,7 @@ "environmentValue": "SHOPIFY_FLAG_CLONE_URL" } ], - "value": "export interface themeinit {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Git URL to clone from. Defaults to Shopify's Skeleton theme.\n * @environment SHOPIFY_FLAG_CLONE_URL\n */\n '-u, --clone-url '?: string\n\n /**\n * Downloads the latest release of the `clone-url`\n * @environment SHOPIFY_FLAG_LATEST\n */\n '-l, --latest'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themeinit {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Git URL to clone from. Defaults to Shopify's Skeleton theme.\n * @environment SHOPIFY_FLAG_CLONE_URL\n */\n '-u, --clone-url '?: string\n\n /**\n * Downloads the latest release of the `clone-url`\n * @environment SHOPIFY_FLAG_LATEST\n */\n '-l, --latest'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themelanguageserver": { @@ -6252,12 +6243,12 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" } ], - "value": "export interface themelanguageserver {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themelanguageserver {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themelist": { @@ -6335,7 +6326,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -6367,7 +6358,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface themelist {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Only list theme with the given ID.\n * @environment SHOPIFY_FLAG_ID\n */\n '--id '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Only list themes that contain the given name.\n * @environment SHOPIFY_FLAG_NAME\n */\n '--name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Only list themes with the given role.\n * @environment SHOPIFY_FLAG_ROLE\n */\n '--role '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themelist {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Only list theme with the given ID.\n * @environment SHOPIFY_FLAG_ID\n */\n '--id '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Only list themes that contain the given name.\n * @environment SHOPIFY_FLAG_NAME\n */\n '--name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Only list themes with the given role.\n * @environment SHOPIFY_FLAG_ROLE\n */\n '--role '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "thememetafieldspull": { @@ -6418,7 +6409,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -6441,7 +6432,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface thememetafieldspull {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface thememetafieldspull {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themeopen": { @@ -6492,7 +6483,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -6551,7 +6542,7 @@ "environmentValue": "SHOPIFY_FLAG_THEME_ID" } ], - "value": "export interface themeopen {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Open your development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * Open the theme editor for the specified theme in the browser.\n * @environment SHOPIFY_FLAG_EDITOR\n */\n '-E, --editor'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Open your live (published) theme.\n * @environment SHOPIFY_FLAG_LIVE\n */\n '-l, --live'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themeopen {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Open your development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * Open the theme editor for the specified theme in the browser.\n * @environment SHOPIFY_FLAG_EDITOR\n */\n '-E, --editor'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Open your live (published) theme.\n * @environment SHOPIFY_FLAG_LIVE\n */\n '-l, --live'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themepackage": { @@ -6593,12 +6584,12 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" } ], - "value": "export interface themepackage {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themepackage {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themepreview": { @@ -6684,7 +6675,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -6715,7 +6706,7 @@ "environmentValue": "SHOPIFY_FLAG_THEME_ID" } ], - "value": "export interface themepreview {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Output the preview URL and identifier as JSON.\n * @environment SHOPIFY_FLAG_JSON\n */\n '--json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Automatically launch the theme preview in your default web browser.\n * @environment SHOPIFY_FLAG_OPEN\n */\n '--open'?: ''\n\n /**\n * Path to a JSON overrides file.\n * @environment SHOPIFY_FLAG_OVERRIDES\n */\n '--overrides ': string\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * An existing preview identifier to update instead of creating a new preview.\n * @environment SHOPIFY_FLAG_PREVIEW_ID\n */\n '--preview-id '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme ': string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themepreview {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Output the preview URL and identifier as JSON.\n * @environment SHOPIFY_FLAG_JSON\n */\n '--json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Automatically launch the theme preview in your default web browser.\n * @environment SHOPIFY_FLAG_OPEN\n */\n '--open'?: ''\n\n /**\n * Path to a JSON overrides file.\n * @environment SHOPIFY_FLAG_OVERRIDES\n */\n '--overrides ': string\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * An existing preview identifier to update instead of creating a new preview.\n * @environment SHOPIFY_FLAG_PREVIEW_ID\n */\n '--preview-id '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme ': string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themeprofile": { @@ -6784,7 +6775,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -6825,7 +6816,7 @@ "environmentValue": "SHOPIFY_FLAG_THEME_ID" } ], - "value": "export interface themeprofile {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The password for storefronts with password protection.\n * @environment SHOPIFY_FLAG_STORE_PASSWORD\n */\n '--store-password '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * The url to be used as context\n * @environment SHOPIFY_FLAG_URL\n */\n '--url '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themeprofile {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * The password for storefronts with password protection.\n * @environment SHOPIFY_FLAG_STORE_PASSWORD\n */\n '--store-password '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * The url to be used as context\n * @environment SHOPIFY_FLAG_URL\n */\n '--url '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themepublish": { @@ -6876,7 +6867,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -6917,7 +6908,7 @@ "environmentValue": "SHOPIFY_FLAG_THEME_ID" } ], - "value": "export interface themepublish {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Skip confirmation.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '-f, --force'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themepublish {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Skip confirmation.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '-f, --force'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themepull": { @@ -6968,7 +6959,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -7045,7 +7036,7 @@ "environmentValue": "SHOPIFY_FLAG_IGNORE" } ], - "value": "export interface themepull {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Pull theme files from your remote development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Skip downloading the specified files (Multiple flags allowed). Wrap the value in double quotes if you're using wildcards.\n * @environment SHOPIFY_FLAG_IGNORE\n */\n '-x, --ignore '?: string\n\n /**\n * Pull theme files from your remote live theme.\n * @environment SHOPIFY_FLAG_LIVE\n */\n '-l, --live'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Prevent deleting local files that don't exist remotely.\n * @environment SHOPIFY_FLAG_NODELETE\n */\n '-n, --nodelete'?: ''\n\n /**\n * Download only the specified files (Multiple flags allowed). Wrap the value in double quotes if you're using wildcards.\n * @environment SHOPIFY_FLAG_ONLY\n */\n '-o, --only '?: string\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themepull {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Pull theme files from your remote development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Skip downloading the specified files (Multiple flags allowed). Wrap the value in double quotes if you're using wildcards.\n * @environment SHOPIFY_FLAG_IGNORE\n */\n '-x, --ignore '?: string\n\n /**\n * Pull theme files from your remote live theme.\n * @environment SHOPIFY_FLAG_LIVE\n */\n '-l, --live'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Prevent deleting local files that don't exist remotely.\n * @environment SHOPIFY_FLAG_NODELETE\n */\n '-n, --nodelete'?: ''\n\n /**\n * Download only the specified files (Multiple flags allowed). Wrap the value in double quotes if you're using wildcards.\n * @environment SHOPIFY_FLAG_ONLY\n */\n '-o, --only '?: string\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themepush": { @@ -7114,7 +7105,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -7236,7 +7227,7 @@ "environmentValue": "SHOPIFY_FLAG_IGNORE" } ], - "value": "export interface themepush {\n /**\n * Allow push to a live theme.\n * @environment SHOPIFY_FLAG_ALLOW_LIVE\n */\n '-a, --allow-live'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Push theme files from your remote development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * Unique identifier for a development theme context (e.g., PR number, branch name). Reuses an existing development theme with this context name, or creates one if none exists.\n * @environment SHOPIFY_FLAG_DEVELOPMENT_CONTEXT\n */\n '-c, --development-context '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Skip uploading the specified files (Multiple flags allowed). Wrap the value in double quotes if you're using wildcards.\n * @environment SHOPIFY_FLAG_IGNORE\n */\n '-x, --ignore '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * The listing preset to use for multi-preset themes. Applies preset files from listings/[preset-name] directory.\n * @environment SHOPIFY_FLAG_LISTING\n */\n '--listing '?: string\n\n /**\n * Push theme files from your remote live theme.\n * @environment SHOPIFY_FLAG_LIVE\n */\n '-l, --live'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Prevent deleting remote files that don't exist locally.\n * @environment SHOPIFY_FLAG_NODELETE\n */\n '-n, --nodelete'?: ''\n\n /**\n * Upload only the specified files (Multiple flags allowed). Wrap the value in double quotes if you're using wildcards.\n * @environment SHOPIFY_FLAG_ONLY\n */\n '-o, --only '?: string\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Publish as the live theme after uploading.\n * @environment SHOPIFY_FLAG_PUBLISH\n */\n '-p, --publish'?: ''\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Require theme check to pass without errors before pushing. Warnings are allowed.\n * @environment SHOPIFY_FLAG_STRICT_PUSH\n */\n '--strict'?: ''\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Create a new unpublished theme and push to it.\n * @environment SHOPIFY_FLAG_UNPUBLISHED\n */\n '-u, --unpublished'?: ''\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themepush {\n /**\n * Allow push to a live theme.\n * @environment SHOPIFY_FLAG_ALLOW_LIVE\n */\n '-a, --allow-live'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Push theme files from your remote development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * Unique identifier for a development theme context (e.g., PR number, branch name). Reuses an existing development theme with this context name, or creates one if none exists.\n * @environment SHOPIFY_FLAG_DEVELOPMENT_CONTEXT\n */\n '-c, --development-context '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Skip uploading the specified files (Multiple flags allowed). Wrap the value in double quotes if you're using wildcards.\n * @environment SHOPIFY_FLAG_IGNORE\n */\n '-x, --ignore '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * The listing preset to use for multi-preset themes. Applies preset files from listings/[preset-name] directory.\n * @environment SHOPIFY_FLAG_LISTING\n */\n '--listing '?: string\n\n /**\n * Push theme files from your remote live theme.\n * @environment SHOPIFY_FLAG_LIVE\n */\n '-l, --live'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Prevent deleting remote files that don't exist locally.\n * @environment SHOPIFY_FLAG_NODELETE\n */\n '-n, --nodelete'?: ''\n\n /**\n * Upload only the specified files (Multiple flags allowed). Wrap the value in double quotes if you're using wildcards.\n * @environment SHOPIFY_FLAG_ONLY\n */\n '-o, --only '?: string\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Publish as the live theme after uploading.\n * @environment SHOPIFY_FLAG_PUBLISH\n */\n '-p, --publish'?: ''\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Require theme check to pass without errors before pushing. Warnings are allowed.\n * @environment SHOPIFY_FLAG_STRICT_PUSH\n */\n '--strict'?: ''\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Create a new unpublished theme and push to it.\n * @environment SHOPIFY_FLAG_UNPUBLISHED\n */\n '-u, --unpublished'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themerename": { @@ -7287,7 +7278,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -7346,7 +7337,7 @@ "environmentValue": "SHOPIFY_FLAG_THEME_ID" } ], - "value": "export interface themerename {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Rename your development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Rename your remote live theme.\n * @environment SHOPIFY_FLAG_LIVE\n */\n '-l, --live'?: ''\n\n /**\n * The new name for the theme.\n * @environment SHOPIFY_FLAG_NEW_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themerename {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * Rename your development theme.\n * @environment SHOPIFY_FLAG_DEVELOPMENT\n */\n '-d, --development'?: ''\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * Rename your remote live theme.\n * @environment SHOPIFY_FLAG_LIVE\n */\n '-l, --live'?: ''\n\n /**\n * The new name for the theme.\n * @environment SHOPIFY_FLAG_NEW_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Theme ID or name of the remote theme.\n * @environment SHOPIFY_FLAG_THEME_ID\n */\n '-t, --theme '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "themeshare": { @@ -7406,7 +7397,7 @@ "syntaxKind": "PropertySignature", "name": "--verbose", "value": "''", - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_VERBOSE" }, @@ -7429,7 +7420,7 @@ "environmentValue": "SHOPIFY_FLAG_STORE" } ], - "value": "export interface themeshare {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * The listing preset to use for multi-preset themes. Applies preset files from listings/[preset-name] directory.\n * @environment SHOPIFY_FLAG_LISTING\n */\n '--listing '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface themeshare {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The environment to apply to the current command.\n * @environment SHOPIFY_FLAG_ENVIRONMENT\n */\n '-e, --environment '?: string\n\n /**\n * The listing preset to use for multi-preset themes. Applies preset files from listings/[preset-name] directory.\n * @environment SHOPIFY_FLAG_LISTING\n */\n '--listing '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Password generated from the Theme Access app or an Admin API token.\n * @environment SHOPIFY_CLI_THEME_TOKEN\n */\n '--password '?: string\n\n /**\n * The path where you want to run the command. Defaults to the current working directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Store URL. It can be the store prefix (example) or the full myshopify.com URL (example.myshopify.com, https://example.myshopify.com).\n * @environment SHOPIFY_FLAG_STORE\n */\n '-s, --store '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "upgrade": { diff --git a/packages/cli-kit/src/public/node/cli.ts b/packages/cli-kit/src/public/node/cli.ts index 14b2add6c1f..6eff0f8315a 100644 --- a/packages/cli-kit/src/public/node/cli.ts +++ b/packages/cli-kit/src/public/node/cli.ts @@ -138,7 +138,7 @@ export const globalFlags = { }), verbose: Flags.boolean({ hidden: false, - description: 'Increase the verbosity of the output.', + description: 'Increase the verbosity of the output. May include sensitive data.', env: 'SHOPIFY_FLAG_VERBOSE', }), } diff --git a/packages/cli/README.md b/packages/cli/README.md index deacd30a53b..f84c866d7cc 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -151,7 +151,7 @@ FLAGS [env: SHOPIFY_FLAG_SKIP_DEPENDENCIES_INSTALLATION] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -209,7 +209,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -280,7 +280,7 @@ FLAGS [env: SHOPIFY_FLAG_VARIABLE_FILE] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] --version= @@ -349,7 +349,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -408,7 +408,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -456,7 +456,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -501,7 +501,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -550,7 +550,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -625,7 +625,7 @@ FLAGS [env: SHOPIFY_FLAG_SOURCE_CONTROL_URL] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] --version= @@ -738,7 +738,7 @@ FLAGS [env: SHOPIFY_FLAG_USE_LOCALHOST] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -787,7 +787,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -837,7 +837,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -884,7 +884,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -954,7 +954,7 @@ FLAGS [env: SHOPIFY_FLAG_VARIABLE_FILE] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] --version= @@ -1005,7 +1005,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1053,7 +1053,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1118,7 +1118,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1180,7 +1180,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1230,7 +1230,7 @@ FLAGS [env: SHOPIFY_FLAG_STDOUT] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1278,7 +1278,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1337,7 +1337,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1400,7 +1400,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] --version= @@ -1463,7 +1463,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1508,7 +1508,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1554,7 +1554,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] --web-env @@ -1624,7 +1624,7 @@ FLAGS [env: SHOPIFY_FLAG_TEMPLATE] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] ``` @@ -1680,7 +1680,7 @@ FLAGS --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1731,7 +1731,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -1785,7 +1785,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] --version= @@ -1837,7 +1837,7 @@ FLAGS [env: SHOPIFY_FLAG_RESET] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -2140,7 +2140,7 @@ FLAGS [env: SHOPIFY_FLAG_URL] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -2185,7 +2185,7 @@ FLAGS [env: SHOPIFY_FLAG_QUERY] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3091,7 +3091,7 @@ FLAGS [env: SHOPIFY_FLAG_NO_COLOR] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3383,7 +3383,7 @@ FLAGS [env: SHOPIFY_FLAG_NO_COLOR] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3426,7 +3426,7 @@ FLAGS [env: SHOPIFY_FLAG_SCOPES] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3461,7 +3461,7 @@ FLAGS [env: SHOPIFY_FLAG_NO_COLOR] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3500,7 +3500,7 @@ FLAGS [env: SHOPIFY_FLAG_NO_COLOR] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3559,7 +3559,7 @@ FLAGS [env: SHOPIFY_FLAG_VARIABLE_FILE] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] --version= @@ -3618,7 +3618,7 @@ FLAGS [env: SHOPIFY_FLAG_NO_COLOR] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3664,7 +3664,7 @@ FLAGS [env: SHOPIFY_FLAG_NO_COLOR] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3727,7 +3727,7 @@ FLAGS [env: SHOPIFY_FLAG_VARIABLE_FILE] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] --version= @@ -3784,7 +3784,7 @@ FLAGS [env: SHOPIFY_FLAG_PORT] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] --version= @@ -3830,7 +3830,7 @@ FLAGS [env: SHOPIFY_FLAG_NO_COLOR] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3871,7 +3871,7 @@ FLAGS [env: SHOPIFY_FLAG_ORGANIZATION_ID] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3911,7 +3911,7 @@ FLAGS [env: SHOPIFY_FLAG_NO_COLOR] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -3988,7 +3988,7 @@ FLAGS [env: SHOPIFY_FLAG_PRINT] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4043,7 +4043,7 @@ FLAGS [env: SHOPIFY_FLAG_URL] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4107,7 +4107,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4237,7 +4237,7 @@ FLAGS [env: SHOPIFY_FLAG_THEME_EDITOR_SYNC] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4323,7 +4323,7 @@ FLAGS [env: SHOPIFY_CLI_THEME_TOKEN] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4412,7 +4412,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4454,7 +4454,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4489,7 +4489,7 @@ FLAGS [env: SHOPIFY_FLAG_NO_COLOR] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4551,7 +4551,7 @@ FLAGS --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4594,7 +4594,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4657,7 +4657,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4696,7 +4696,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4771,7 +4771,7 @@ FLAGS [env: SHOPIFY_FLAG_PREVIEW_ID] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4835,7 +4835,7 @@ FLAGS [env: SHOPIFY_FLAG_URL] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4891,7 +4891,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -4971,7 +4971,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -5072,7 +5072,7 @@ FLAGS [env: SHOPIFY_FLAG_STRICT_PUSH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -5164,7 +5164,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION @@ -5216,7 +5216,7 @@ FLAGS [env: SHOPIFY_FLAG_PATH] --verbose - Increase the verbosity of the output. + Increase the verbosity of the output. May include sensitive data. [env: SHOPIFY_FLAG_VERBOSE] DESCRIPTION diff --git a/packages/cli/oclif.manifest.json b/packages/cli/oclif.manifest.json index 444d9a2cd09..7f2cc804445 100644 --- a/packages/cli/oclif.manifest.json +++ b/packages/cli/oclif.manifest.json @@ -77,7 +77,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -180,7 +180,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -327,7 +327,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -445,7 +445,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -565,7 +565,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -651,7 +651,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -731,7 +731,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -827,7 +827,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -966,7 +966,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -1190,7 +1190,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -1286,7 +1286,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -1381,7 +1381,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -1467,7 +1467,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -1611,7 +1611,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -1706,7 +1706,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -1802,7 +1802,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -1907,7 +1907,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -2038,7 +2038,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -2133,7 +2133,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -2220,7 +2220,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -2353,7 +2353,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -2469,7 +2469,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -2579,7 +2579,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -2664,7 +2664,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -2758,7 +2758,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -2891,7 +2891,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -3015,7 +3015,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -3101,7 +3101,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -3203,7 +3203,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -3309,7 +3309,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -3837,7 +3837,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -3894,7 +3894,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -3956,7 +3956,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -4065,7 +4065,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -5928,7 +5928,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -6293,7 +6293,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -6361,7 +6361,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -6411,7 +6411,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -6469,7 +6469,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -6579,7 +6579,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -6652,7 +6652,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -6745,7 +6745,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -6821,7 +6821,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -6898,7 +6898,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7016,7 +7016,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7099,7 +7099,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7166,7 +7166,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7224,7 +7224,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7273,7 +7273,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7350,7 +7350,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7490,7 +7490,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7599,7 +7599,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7717,7 +7717,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -7969,7 +7969,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8076,7 +8076,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8185,7 +8185,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8265,7 +8265,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8312,7 +8312,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8430,7 +8430,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8522,7 +8522,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8636,7 +8636,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8691,7 +8691,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8813,7 +8813,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -8929,7 +8929,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -9031,7 +9031,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -9176,7 +9176,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -9389,7 +9389,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -9518,7 +9518,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", @@ -9625,7 +9625,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", diff --git a/packages/create-app/oclif.manifest.json b/packages/create-app/oclif.manifest.json index 98dd6f1b8ff..ba252d1e1ed 100644 --- a/packages/create-app/oclif.manifest.json +++ b/packages/create-app/oclif.manifest.json @@ -107,7 +107,7 @@ }, "verbose": { "allowNo": false, - "description": "Increase the verbosity of the output.", + "description": "Increase the verbosity of the output. May include sensitive data.", "env": "SHOPIFY_FLAG_VERBOSE", "hidden": false, "name": "verbose", From 565933b21a897dd00a67a1752ac70cfd87b0f758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaac=20Rold=C3=A1n?= Date: Thu, 30 Jul 2026 12:33:56 +0200 Subject: [PATCH 05/53] Add a changeset for the --verbose help change --- .changeset/verbose-flag-sensitive-data-note.md | 5 +++++ .../generated/generated_docs_data_v2.json | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 .changeset/verbose-flag-sensitive-data-note.md diff --git a/.changeset/verbose-flag-sensitive-data-note.md b/.changeset/verbose-flag-sensitive-data-note.md new file mode 100644 index 00000000000..ccd328f9f72 --- /dev/null +++ b/.changeset/verbose-flag-sensitive-data-note.md @@ -0,0 +1,5 @@ +--- +'@shopify/cli-kit': patch +--- + +Note in the `--verbose` help that the extra output may include sensitive data. diff --git a/docs-shopify.dev/generated/generated_docs_data_v2.json b/docs-shopify.dev/generated/generated_docs_data_v2.json index 1cb0f4e4dd0..71f2c3f2e74 100644 --- a/docs-shopify.dev/generated/generated_docs_data_v2.json +++ b/docs-shopify.dev/generated/generated_docs_data_v2.json @@ -1731,6 +1731,15 @@ "isOptional": true, "environmentValue": "SHOPIFY_FLAG_PATH" }, + { + "filePath": "docs-shopify.dev/commands/interfaces/app-function-run.interface.ts", + "syntaxKind": "PropertySignature", + "name": "--profile", + "value": "''", + "description": "Generate a WebAssembly performance profile for the function run. The profile can be viewed in Speedscope.", + "isOptional": true, + "environmentValue": "SHOPIFY_FLAG_PROFILE" + }, { "filePath": "docs-shopify.dev/commands/interfaces/app-function-run.interface.ts", "syntaxKind": "PropertySignature", @@ -1786,7 +1795,7 @@ "environmentValue": "SHOPIFY_FLAG_JSON" } ], - "value": "export interface appfunctionrun {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Name of the WebAssembly export to invoke.\n * @environment SHOPIFY_FLAG_EXPORT\n */\n '-e, --export '?: string\n\n /**\n * The input JSON to pass to the function. If omitted, standard input is used.\n * @environment SHOPIFY_FLAG_INPUT\n */\n '-i, --input '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appfunctionrun {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Name of the WebAssembly export to invoke.\n * @environment SHOPIFY_FLAG_EXPORT\n */\n '-e, --export '?: string\n\n /**\n * The input JSON to pass to the function. If omitted, standard input is used.\n * @environment SHOPIFY_FLAG_INPUT\n */\n '-i, --input '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Generate a WebAssembly performance profile for the function run. The profile can be viewed in Speedscope.\n * @environment SHOPIFY_FLAG_PROFILE\n */\n '--profile'?: ''\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appfunctionschema": { From 4aff9b6a44b7ae4bfd089879689563677a9c8fbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaac=20Rold=C3=A1n?= Date: Mon, 3 Aug 2026 17:20:49 +0200 Subject: [PATCH 06/53] Remove the changeset --- .changeset/verbose-flag-sensitive-data-note.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/verbose-flag-sensitive-data-note.md diff --git a/.changeset/verbose-flag-sensitive-data-note.md b/.changeset/verbose-flag-sensitive-data-note.md deleted file mode 100644 index ccd328f9f72..00000000000 --- a/.changeset/verbose-flag-sensitive-data-note.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@shopify/cli-kit': patch ---- - -Note in the `--verbose` help that the extra output may include sensitive data. From 55db1dc2ab4cf459e5982cce2e0a7c1be85308a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaac=20Rold=C3=A1n?= Date: Mon, 3 Aug 2026 13:55:17 +0200 Subject: [PATCH 07/53] Fix Nx caching configuration Assisted-By: devx/a6727785-6ba2-4c6b-9612-bcadf6422d8f --- .github/workflows/tests-main.yml | 8 +- .github/workflows/tests-pr.yml | 16 ++-- bin/cache-inputs.js | 36 ------- eslint.config.js | 9 ++ nx.json | 94 +++++++++++++------ package.json | 8 +- packages/app/project.json | 28 +++--- packages/cli-kit/project.json | 22 ++--- packages/cli/project.json | 2 - packages/create-app/project.json | 2 - packages/eslint-plugin-cli/config.js | 14 ++- packages/eslint-plugin-cli/project.json | 18 +++- .../rules/banner-headline-format.js | 6 +- .../rules/command-conventional-flag-env.js | 6 +- .../rules/command-flags-with-env.js | 4 +- .../rules/command-reserved-flags.js | 6 +- .../rules/no-error-factory-functions.js | 9 +- .../rules/no-inline-graphql.js | 35 +++---- .../eslint-plugin-cli/rules/no-process-cwd.js | 2 +- .../no-trailing-js-in-cli-kit-imports.js | 2 +- .../rules/prompt-message-format.js | 2 +- .../rules/required-fields-when-loading-app.js | 8 +- packages/organizations/project.json | 8 +- packages/plugin-cloudflare/project.json | 2 - packages/plugin-did-you-mean/project.json | 2 - packages/store/project.json | 12 +-- packages/theme/project.json | 4 +- .../ui-extensions-server-kit/project.json | 24 +---- .../ui-extensions-test-utils/project.json | 2 - 29 files changed, 200 insertions(+), 191 deletions(-) delete mode 100755 bin/cache-inputs.js diff --git a/.github/workflows/tests-main.yml b/.github/workflows/tests-main.yml index abfd03bea07..d2b7bdb5fc4 100644 --- a/.github/workflows/tests-main.yml +++ b/.github/workflows/tests-main.yml @@ -43,16 +43,16 @@ jobs: with: node-version: ${{ matrix.node }} - name: Build - run: pnpm nx run-many --all --skip-nx-cache --target=build --output-style=stream + run: pnpm nx run-many --all --target=build --output-style=stream if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} - name: Lint - run: pnpm nx run-many --all --skip-nx-cache --target=lint --output-style=stream + run: pnpm nx run-many --all --target=lint --output-style=stream if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} - name: Type-check - run: pnpm nx run-many --all --skip-nx-cache --target=type-check --output-style=stream + run: pnpm nx run-many --all --target=type-check --output-style=stream if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} - name: Bundle - run: pnpm nx run-many --all --skip-nx-cache --target=bundle --output-style=stream + run: pnpm nx run-many --all --target=bundle --output-style=stream if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} - name: Unit tests run: pnpm vitest run ${{ env.POOL_OPTIONS }} diff --git a/.github/workflows/tests-pr.yml b/.github/workflows/tests-pr.yml index 0f13c0f0d03..880eca5f8b1 100644 --- a/.github/workflows/tests-pr.yml +++ b/.github/workflows/tests-pr.yml @@ -35,7 +35,7 @@ jobs: with: node-version: ${{ env.DEFAULT_NODE_VERSION }} - name: Type check - run: pnpm nx run-many --all --skip-nx-cache --target=type-check --output-style=stream + run: pnpm nx run-many --all --target=type-check --output-style=stream lint: name: 'Lint' @@ -52,7 +52,7 @@ jobs: with: node-version: ${{ env.DEFAULT_NODE_VERSION }} - name: Lint - run: pnpm nx run-many --all --skip-nx-cache --target=lint --output-style=stream + run: pnpm nx run-many --all --target=lint --output-style=stream bundle: name: 'Bundle' @@ -69,9 +69,9 @@ jobs: with: node-version: ${{ env.DEFAULT_NODE_VERSION }} - name: 'Build' - run: pnpm nx run-many --all --skip-nx-cache --target=build --output-style=stream + run: pnpm nx run-many --all --target=build --output-style=stream - name: 'Bundle' - run: pnpm nx run-many --all --skip-nx-cache --target=bundle --output-style=stream + run: pnpm nx run-many --all --target=bundle --output-style=stream knip: name: 'Knip (unused code check)' @@ -240,7 +240,7 @@ jobs: with: node-version: ${{ env.PLAYWRIGHT_NODE_VERSION }} - name: Build - run: pnpm nx run-many --all --skip-nx-cache --target=build --output-style=stream + run: pnpm nx run-many --all --target=build --output-style=stream - name: Install Playwright Chromium run: pnpm exec playwright install chromium working-directory: packages/e2e @@ -296,7 +296,7 @@ jobs: run: pnpm exec playwright install chromium working-directory: packages/e2e - name: Build CLI for cleanup auth - run: pnpm nx run cli:build --skip-nx-cache + run: pnpm nx run cli:build - name: Prime cleanup auth state continue-on-error: true env: @@ -343,7 +343,7 @@ jobs: with: node-version: ${{ env.DEFAULT_NODE_VERSION }} - name: Build - run: pnpm nx run-many --all --skip-nx-cache --target=build --output-style=stream + run: pnpm nx run-many --all --target=build --output-style=stream - name: Type-diff working-directory: workspace id: type-diff @@ -375,7 +375,7 @@ jobs: with: node-version: ${{ env.DEFAULT_NODE_VERSION }} - name: Build - run: pnpm nx run-many --all --skip-nx-cache --target=build --output-style=stream + run: pnpm nx run-many --all --target=build --output-style=stream - name: Check for breaking changes id: check run: node workspace/src/major-change-check.js diff --git a/bin/cache-inputs.js b/bin/cache-inputs.js deleted file mode 100755 index ae9403c069b..00000000000 --- a/bin/cache-inputs.js +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env node - -/** - * The output from this script is used by Nx to determine whether the cache should be invalidated - * or not at the workspace level. This file is referenced from the nx.json file. - */ -process.removeAllListeners('warning'); - -import {dirname, join} from 'pathe' -import {createRequire} from 'module' -import {fileURLToPath} from 'url' -import crypto from "crypto" -import {execa} from 'execa' - -const require = createRequire(import.meta.url) -const {readFile} = require('fs-extra') - -// Paths -const binDirectory = dirname(fileURLToPath(import.meta.url)) -const rootDirectory = dirname(binDirectory) - -// Hashable inputs -const nodeVersion = process.version; - -const {stdout: typescriptCompilerVersion} = await execa(join(rootDirectory, "node_modules/.bin/tsc"), ['--version'], {cwd: rootDirectory}); -const {stdout: gitSha} = await execa("git", ['rev-parse', '--short', 'HEAD'], {cwd: rootDirectory}); -const pnpmLockfileContent = (await readFile(join(rootDirectory, "pnpm-lock.yaml"))).toString(); - -const hashableInputs = [ - nodeVersion.trim(), - typescriptCompilerVersion.trim(), - gitSha.trim(), - crypto.createHash('md5').update(pnpmLockfileContent).digest("hex") -] - -console.log(hashableInputs.join("\n")) diff --git a/eslint.config.js b/eslint.config.js index 9f95fb45889..90fa72fb876 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -12,6 +12,15 @@ const config = [ ignores: ['**/dist/**', '**/node_modules/**', '**/coverage/**', '**/*.d.ts', '**/*.cjs'], }, + // The local ESLint plugin uses CommonJS so its rules can load themselves. + { + files: ['packages/eslint-plugin-cli/**/*.js'], + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'commonjs', + }, + }, + // NX module boundaries { files: ['**/*.ts', '**/*.tsx'], diff --git a/nx.json b/nx.json index f948ec7b233..782e76079c2 100644 --- a/nx.json +++ b/nx.json @@ -4,8 +4,10 @@ "dependsOn": ["^clean"] }, "build": { + "cache": true, "dependsOn": ["^build"], - "inputs": ["production", "^production"] + "inputs": ["production", "^production"], + "outputs": ["{projectRoot}/dist"] }, "refresh-manifests": { "dependsOn": ["build", "refresh-readme"] @@ -13,44 +15,80 @@ "refresh-readme": { "dependsOn": ["build"] }, - "lint": {}, + "generate-version": { + "cache": true + }, + "graphql-codegen:formatting": { + "cache": true + }, + "graphql-codegen:generate:admin": { + "cache": true + }, + "graphql-codegen:generate:admin-as-app": { + "cache": true + }, + "graphql-codegen:generate:app-dev": { + "cache": true + }, + "graphql-codegen:generate:app-management": { + "cache": true + }, + "graphql-codegen:generate:bulk-operations": { + "cache": true + }, + "graphql-codegen:generate:business-platform-destinations": { + "cache": true + }, + "graphql-codegen:generate:business-platform-organizations": { + "cache": true + }, + "graphql-codegen:generate:functions": { + "cache": true + }, + "graphql-codegen:generate:organizations-destinations": { + "cache": true + }, + "graphql-codegen:generate:webhooks": { + "cache": true + }, + "graphql-codegen:postfix": { + "cache": true + }, + "lint": { + "cache": true + }, "lint:fix": {}, "type-check": { - "dependsOn": ["^build"] + "cache": true, + "dependsOn": ["^build"], + "inputs": ["default", "^production"] }, "bundle": { - "dependsOn": ["build"] + "cache": true, + "dependsOn": ["build"], + "inputs": ["production", "^production", {"dependentTasksOutputFiles": "**/*", "transitive": true}], + "outputs": ["{projectRoot}/dist"] } }, "extends": "@nx/workspace/presets/npm.json", - "npmScope": "@shopify", - "tasksRunnerOptions": { - "default": { - "runner": "@nx/workspace/tasks-runners/default", - "options": { - "cacheableOperations": [ - "build", - "build:code", - "build:types", - "graphql-codegen:generate:business-platform", - "graphql-codegen:generate:partners", - "graphql-codegen:generate:webhooks", - "graphql-codegen:postfix", - "graphql-codegen:formatting", - "type-check", - "lint" - ], - "runtimeCacheInputs": [ - "node bin/cache-inputs.js || node ../../bin/cache-inputs.js || node ../bin/cache-inputs.js" - ] - } - } - }, "defaultBase": "main", "$schema": "./node_modules/nx/schemas/nx-schema.json", "namedInputs": { "default": ["{projectRoot}/**/*", "sharedGlobals"], - "sharedGlobals": [], + "sharedGlobals": [ + "{workspaceRoot}/.nvmrc", + "{workspaceRoot}/configurations/tsconfig.json", + "{workspaceRoot}/configurations/vite.config.ts", + "{workspaceRoot}/eslint.config.js", + "{workspaceRoot}/graphql.config.ts", + "{workspaceRoot}/package.json", + "{workspaceRoot}/packages/eslint-plugin-cli/**/*", + "{workspaceRoot}/pnpm-lock.yaml", + "{workspaceRoot}/tsconfig.base.json", + "{workspaceRoot}/tsconfig.json", + {"runtime": "node --version"}, + {"runtime": "pnpm --version"} + ], "production": ["default"] }, "tui": { diff --git a/package.json b/package.json index a4f3c4f6a41..ef13b64368f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "build-api-docs": "nx run-many --target=build-api-docs --all --skip-nx-cache", "build-dev-docs": "pnpm shopify docs generate && sh ./bin/docs/build-dev-docs.sh", "build:affected": "nx affected --target=build", - "build": "nx run-many --target=build --all --skip-nx-cache", + "build": "nx run-many --target=build --all", "bundle-for-release": "nx run-many --target=bundle --all --skip-nx-cache", "changeset": "node bin/changeset.js", "changeset-manifests": "changeset version && pnpm install --no-frozen-lockfile && pnpm refresh-manifests && pnpm refresh-readme && pnpm refresh-code-documentation && bin/update-cli-kit-version.js", @@ -20,7 +20,7 @@ "lint:affected": "nx affected --target=lint", "lint:fix:affected": "nx affected --target=lint:fix", "lint:fix": "nx run-many --target=lint:fix --all --skip-nx-cache", - "lint": "nx run-many --target=lint --all --skip-nx-cache", + "lint": "nx run-many --target=lint --all", "create-homebrew-pr": "bin/create-homebrew-pr.js", "refresh-code-documentation": "nx run-many --target=refresh-code-documentation --all --skip-nx-cache", "refresh-manifests": "nx run-many --target=refresh-manifests --all --skip-nx-cache && bin/prettify-manifests.js && pnpm refresh-readme", @@ -30,14 +30,14 @@ "update-observe": "node bin/update-observe.js", "shopify:run": "node packages/cli/bin/dev.js", "shopify": "nx build cli && node packages/cli/bin/dev.js", - "test:e2e": "nx run-many --target=build --projects=cli,create-app --skip-nx-cache && pnpm --filter e2e exec playwright test", + "test:e2e": "nx run-many --target=build --projects=cli,create-app && pnpm --filter e2e exec playwright test", "test:e2e-cleanup": "pnpm --filter e2e exec tsx scripts/cleanup-stores.ts; pnpm --filter e2e exec tsx scripts/cleanup-apps.ts", "test:e2e-cleanup-stores": "pnpm --filter e2e exec tsx scripts/cleanup-stores.ts", "test:e2e-cleanup-apps": "pnpm --filter e2e exec tsx scripts/cleanup-apps.ts", "test:regenerate-snapshots": "packages/e2e/scripts/regenerate-snapshots.sh", "test": "pnpm vitest run", "type-check:affected": "nx affected --target=type-check", - "type-check": "nx run-many --target=type-check --all --skip-nx-cache", + "type-check": "nx run-many --target=type-check --all", "update-bugsnag": "bin/update-bugsnag.js" }, "devDependencies": { diff --git a/packages/app/project.json b/packages/app/project.json index b9bda81b6d7..b9e3230e231 100644 --- a/packages/app/project.json +++ b/packages/app/project.json @@ -14,8 +14,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*", "{projectRoot}/package.json"], "options": { "command": "pnpm tsc -b ./tsconfig.build.json", "cwd": "packages/app" @@ -49,7 +47,7 @@ "graphql-codegen:formatting": { "executor": "nx:run-commands", "dependsOn": ["graphql-codegen:postfix"], - "inputs": [{ "dependentTasksOutputFiles": "**/*.ts" }], + "inputs": [{"dependentTasksOutputFiles": "**/*.ts"}, "sharedGlobals"], "outputs": [ "{projectRoot}/src/cli/api/graphql/business-platform-destinations/generated/**/*.ts", "{projectRoot}/src/cli/api/graphql/business-platform-organizations/generated/**/*.ts", @@ -74,7 +72,11 @@ }, "graphql-codegen:generate:business-platform-destinations": { "executor": "nx:run-commands", - "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/business-platform-destinations/**/*.graphql"], + "inputs": [ + "{workspaceRoot}/graphql.config.ts", + "{projectRoot}/src/cli/api/graphql/business-platform-destinations/**/*.graphql", + "sharedGlobals" + ], "outputs": ["{projectRoot}/src/cli/api/graphql/business-platform-destinations/generated/**/*.ts"], "options": { "commands": [ @@ -85,7 +87,11 @@ }, "graphql-codegen:generate:business-platform-organizations": { "executor": "nx:run-commands", - "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/business-platform-organizations/**/*.graphql"], + "inputs": [ + "{workspaceRoot}/graphql.config.ts", + "{projectRoot}/src/cli/api/graphql/business-platform-organizations/**/*.graphql", + "sharedGlobals" + ], "outputs": ["{projectRoot}/src/cli/api/graphql/business-platform-organizations/generated/**/*.ts"], "options": { "commands": [ @@ -96,7 +102,7 @@ }, "graphql-codegen:generate:app-dev": { "executor": "nx:run-commands", - "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/app-dev/**/*.graphql"], + "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/app-dev/**/*.graphql", "sharedGlobals"], "outputs": ["{projectRoot}/src/cli/api/graphql/app-dev/generated/**/*.ts"], "options": { "commands": [ @@ -107,7 +113,7 @@ }, "graphql-codegen:generate:webhooks": { "executor": "nx:run-commands", - "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/webhooks/**/*.graphql"], + "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/webhooks/**/*.graphql", "sharedGlobals"], "outputs": ["{projectRoot}/src/cli/api/graphql/webhooks/generated/**/*.ts"], "options": { "commands": [ @@ -118,7 +124,7 @@ }, "graphql-codegen:generate:app-management": { "executor": "nx:run-commands", - "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/app-management/**/*.graphql"], + "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/app-management/**/*.graphql", "sharedGlobals"], "outputs": ["{projectRoot}/src/cli/api/graphql/app-management/generated/**/*.ts"], "options": { "commands": [ @@ -129,7 +135,7 @@ }, "graphql-codegen:generate:functions": { "executor": "nx:run-commands", - "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/functions/**/*.graphql"], + "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/functions/**/*.graphql", "sharedGlobals"], "outputs": ["{projectRoot}/src/cli/api/graphql/functions/generated/**/*.ts"], "options": { "commands": [ @@ -140,7 +146,7 @@ }, "graphql-codegen:generate:admin-as-app": { "executor": "nx:run-commands", - "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/admin/**/*.graphql"], + "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/admin/**/*.graphql", "sharedGlobals"], "outputs": ["{projectRoot}/src/cli/api/graphql/admin/generated/**/*.ts"], "options": { "commands": [ @@ -160,7 +166,7 @@ "graphql-codegen:generate:functions", "graphql-codegen:generate:admin-as-app" ], - "inputs": [{ "dependentTasksOutputFiles": "**/*.ts" }], + "inputs": [{"dependentTasksOutputFiles": "**/*.ts"}, "sharedGlobals"], "outputs": [ "{projectRoot}/src/cli/api/graphql/business-platform-destinations/generated/**/*.ts", "{projectRoot}/src/cli/api/graphql/business-platform-organizations/generated/**/*.ts", diff --git a/packages/cli-kit/project.json b/packages/cli-kit/project.json index 4e3209da8db..d46d4c22ce2 100644 --- a/packages/cli-kit/project.json +++ b/packages/cli-kit/project.json @@ -16,12 +16,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": [ - "{workspaceRoot}/dist" - ], - "inputs": [ - "{projectRoot}/src/**/*" - ], "dependsOn": [ "generate-version" ], @@ -36,7 +30,9 @@ "{projectRoot}/src/public/common/version.ts" ], "inputs": [ - "{projectRoot}/package.json" + "{projectRoot}/package.json", + "{workspaceRoot}/bin/update-cli-kit-version.js", + "sharedGlobals" ], "options": { "command": "node bin/update-cli-kit-version.js" @@ -104,7 +100,8 @@ "inputs": [ { "dependentTasksOutputFiles": "**/*.ts" - } + }, + "sharedGlobals" ], "outputs": [ "{projectRoot}/src/cli/api/graphql/admin/generated/**/*.ts", @@ -122,7 +119,8 @@ "executor": "nx:run-commands", "inputs": [ "{workspaceRoot}/graphql.config.ts", - "{projectRoot}/src/cli/api/graphql/admin/**/*.graphql" + "{projectRoot}/src/cli/api/graphql/admin/**/*.graphql", + "sharedGlobals" ], "outputs": [ "{projectRoot}/src/cli/api/graphql/admin/generated/**/*.ts" @@ -138,7 +136,8 @@ "executor": "nx:run-commands", "inputs": [ "{workspaceRoot}/graphql.config.ts", - "{projectRoot}/src/cli/api/graphql/bulk-operations/**/*.graphql" + "{projectRoot}/src/cli/api/graphql/bulk-operations/**/*.graphql", + "sharedGlobals" ], "outputs": [ "{projectRoot}/src/cli/api/graphql/bulk-operations/generated/**/*.ts" @@ -159,7 +158,8 @@ "inputs": [ { "dependentTasksOutputFiles": "**/*.ts" - } + }, + "sharedGlobals" ], "outputs": [ "{projectRoot}/src/cli/api/graphql/admin/generated/**/*.ts", diff --git a/packages/cli/project.json b/packages/cli/project.json index 188763bf0ee..5f83298337a 100644 --- a/packages/cli/project.json +++ b/packages/cli/project.json @@ -15,8 +15,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*"], "options": { "command": "pnpm tsc -b ./tsconfig.build.json", "cwd": "packages/cli" diff --git a/packages/create-app/project.json b/packages/create-app/project.json index a3f5c93fdcc..79b3eb4177f 100644 --- a/packages/create-app/project.json +++ b/packages/create-app/project.json @@ -14,8 +14,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*"], "options": { "command": "pnpm tsc -b ./tsconfig.build.json", "cwd": "packages/create-app" diff --git a/packages/eslint-plugin-cli/config.js b/packages/eslint-plugin-cli/config.js index b01187d5f85..f4b4bbd7682 100644 --- a/packages/eslint-plugin-cli/config.js +++ b/packages/eslint-plugin-cli/config.js @@ -94,11 +94,15 @@ const baseRules = { }, ], // Use .js extensions for TypeScript files (ESM convention) - 'import-x/extensions': ['error', 'ignorePackages', { - ts: 'never', - tsx: 'never', - js: 'always', - }], + 'import-x/extensions': [ + 'error', + 'ignorePackages', + { + ts: 'never', + tsx: 'never', + js: 'always', + }, + ], '@typescript-eslint/no-misused-promises': 'error', '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/no-unnecessary-type-assertion': 'error', diff --git a/packages/eslint-plugin-cli/project.json b/packages/eslint-plugin-cli/project.json index 09983d00e05..6c7a42a2042 100644 --- a/packages/eslint-plugin-cli/project.json +++ b/packages/eslint-plugin-cli/project.json @@ -2,5 +2,21 @@ "name": "eslint-plugin-cli", "$schema": "../../node_modules/nx/schemas/project-schema.json", "projectType": "library", - "tags": ["scope:plugin"] + "tags": ["scope:plugin"], + "targets": { + "lint": { + "executor": "nx:run-commands", + "options": { + "command": "pnpm eslint .", + "cwd": "packages/eslint-plugin-cli" + } + }, + "lint:fix": { + "executor": "nx:run-commands", + "options": { + "command": "pnpm eslint . --fix", + "cwd": "packages/eslint-plugin-cli" + } + } + } } diff --git a/packages/eslint-plugin-cli/rules/banner-headline-format.js b/packages/eslint-plugin-cli/rules/banner-headline-format.js index 7ab373a6aa8..8e4952df7d7 100644 --- a/packages/eslint-plugin-cli/rules/banner-headline-format.js +++ b/packages/eslint-plugin-cli/rules/banner-headline-format.js @@ -13,12 +13,12 @@ module.exports = { }, }, - create: function (context) { + create(context) { function checkForPunctuation(value, node) { const punctuationRegex = /[!.:?]+$/ if (typeof value === 'string' && !value.match(punctuationRegex)) { context.report({ - node: node, + node, messageId: 'missingPunctuation', }) } @@ -37,7 +37,7 @@ module.exports = { } } else { context.report({ - node: node, + node, messageId: 'missingPunctuation', }) } diff --git a/packages/eslint-plugin-cli/rules/command-conventional-flag-env.js b/packages/eslint-plugin-cli/rules/command-conventional-flag-env.js index fa5ed2b984e..1a88f5a35d4 100644 --- a/packages/eslint-plugin-cli/rules/command-conventional-flag-env.js +++ b/packages/eslint-plugin-cli/rules/command-conventional-flag-env.js @@ -14,14 +14,14 @@ module.exports = { PropertyDefinition(node) { if (node.key.name === 'flags') { node.value.properties.forEach((flag) => { - const arguments = flag.value?.arguments ?? [] - const argument = arguments[0] + const flagArguments = flag.value?.arguments ?? [] + const argument = flagArguments[0] if (!argument) { return } const envProperty = argument.properties.find((property) => property.key.name === 'env')?.value?.value if (envProperty) { - if (!VALID_FLAGS.some((flag) => envProperty.startsWith(flag))) { + if (!VALID_FLAGS.some((validFlag) => envProperty.startsWith(validFlag))) { context.report( argument, `Flags' environment variable must start with ${new Intl.ListFormat('en', { diff --git a/packages/eslint-plugin-cli/rules/command-flags-with-env.js b/packages/eslint-plugin-cli/rules/command-flags-with-env.js index fbbcf0b73e7..8fede3bb548 100644 --- a/packages/eslint-plugin-cli/rules/command-flags-with-env.js +++ b/packages/eslint-plugin-cli/rules/command-flags-with-env.js @@ -12,8 +12,8 @@ module.exports = { PropertyDefinition(node) { if (node.key.name === 'flags') { node.value.properties.forEach((flag) => { - const arguments = flag.value?.arguments ?? [] - const argument = arguments[0] + const flagArguments = flag.value?.arguments ?? [] + const argument = flagArguments[0] if (!argument) { return } diff --git a/packages/eslint-plugin-cli/rules/command-reserved-flags.js b/packages/eslint-plugin-cli/rules/command-reserved-flags.js index 8b07a17c94b..20c7f0150e1 100644 --- a/packages/eslint-plugin-cli/rules/command-reserved-flags.js +++ b/packages/eslint-plugin-cli/rules/command-reserved-flags.js @@ -28,11 +28,11 @@ module.exports = { if (!flagName) { return } - if (!reservedFlags.hasOwnProperty(flagName)) { + if (!Object.hasOwn(reservedFlags, flagName)) { return } - const arguments = flag.value?.arguments ?? [] - const argument = arguments[0] + const flagArguments = flag.value?.arguments ?? [] + const argument = flagArguments[0] if (!argument) { return } diff --git a/packages/eslint-plugin-cli/rules/no-error-factory-functions.js b/packages/eslint-plugin-cli/rules/no-error-factory-functions.js index 1731c155372..3a89acc7a80 100644 --- a/packages/eslint-plugin-cli/rules/no-error-factory-functions.js +++ b/packages/eslint-plugin-cli/rules/no-error-factory-functions.js @@ -1,7 +1,4 @@ // https://eslint.org/docs/developer-guide/working-with-rules -const path = require('pathe') -const file = require('fs') - const errors = ['AbortError', 'AbortSilentError', 'BugError', 'BugSilentError'] module.exports = { @@ -19,9 +16,9 @@ module.exports = { const moduleName = node.argument?.callee?.object?.name const moduleExport = node.argument?.callee?.property?.name - const isCLIKitError = - errors.includes(calleeName) || // When imported from within @shopify/cli-kit - (moduleName === 'error' && errors.includes(moduleExport)) // When importing from consumer package. + const isImportedFromCLIKit = errors.includes(calleeName) + const isImportedFromConsumerPackage = moduleName === 'error' && errors.includes(moduleExport) + const isCLIKitError = isImportedFromCLIKit || isImportedFromConsumerPackage if (isCLIKitError) { context.report( diff --git a/packages/eslint-plugin-cli/rules/no-inline-graphql.js b/packages/eslint-plugin-cli/rules/no-inline-graphql.js index 7c1de1fd8c2..54032521f66 100644 --- a/packages/eslint-plugin-cli/rules/no-inline-graphql.js +++ b/packages/eslint-plugin-cli/rules/no-inline-graphql.js @@ -2,7 +2,22 @@ const path = require('path') const fs = require('fs') const crypto = require('crypto') + const debugEnabled = process.env.DEBUG && process.env.DEBUG.includes('eslint-plugin-cli') +const knownFailures = { + 'packages/app/src/cli/api/graphql/extension_migrate_app_module.ts': + '8ec49d9639dd3eabec93caee1c8a0435a1be576c9115476199dfd7c382eacada', + 'packages/app/src/cli/api/graphql/extension_migrate_flow_extension.ts': + '812944a456b2ae439ebb01a97c19e3e0c445157dd3578bc48b0a8c4cebb6e12e', + 'packages/app/src/cli/api/graphql/extension_migrate_to_ui_extension.ts': + 'dd3fb42d0b9327de627bd02295de9e08087266885777602a34b44bdc460c0285', + 'packages/app/src/cli/api/graphql/get_variant_id.ts': + '805a7d8fb4b66ae23dc45cc37d401350c3d8eab4e262bd90e70afceb48be10de', + 'packages/app/src/cli/utilities/developer-platform-client/app-management-client/graphql/organization_beta_flags.ts': + 'feb27126f3f91bac7af3a6fdbd45b7b70e55c6b8f2e94d2200723baa3fccc3ba', + 'packages/cli-kit/src/private/node/session.ts': '9081e73c91cb5d7cab7b45571ff2ff479ae71cf43672e8f13bda9a2541ff13c3', + 'packages/cli-kit/src/public/node/api/admin.ts': '2186080241b4ab29de8bd2f1176e077a1e71234baffb0802a15b0b82f887c9d1', +} /** * Check if using a gql`` template literal @@ -38,7 +53,10 @@ function checkKnownFailuresIfShouldFail(context) { const shouldFail = !knownFailures[relativePath] || knownFailures[relativePath] !== fileHash if (shouldFail) { - if (debugEnabled) console.error(`eslint-plugin-cli:no-inline-graphql Reporting inline GraphQL tag fail for - '${relativePath}': '${fileHash}',`) + if (debugEnabled) + console.error( + `eslint-plugin-cli:no-inline-graphql Reporting inline GraphQL tag fail for - '${relativePath}': '${fileHash}',`, + ) } return shouldFail @@ -114,18 +132,3 @@ module.exports = { } }, } - -const knownFailures = { - 'packages/app/src/cli/api/graphql/extension_migrate_app_module.ts': - '8ec49d9639dd3eabec93caee1c8a0435a1be576c9115476199dfd7c382eacada', - 'packages/app/src/cli/api/graphql/extension_migrate_flow_extension.ts': - '812944a456b2ae439ebb01a97c19e3e0c445157dd3578bc48b0a8c4cebb6e12e', - 'packages/app/src/cli/api/graphql/extension_migrate_to_ui_extension.ts': - 'dd3fb42d0b9327de627bd02295de9e08087266885777602a34b44bdc460c0285', - 'packages/app/src/cli/api/graphql/get_variant_id.ts': - '805a7d8fb4b66ae23dc45cc37d401350c3d8eab4e262bd90e70afceb48be10de', - 'packages/app/src/cli/utilities/developer-platform-client/app-management-client/graphql/organization_beta_flags.ts': - 'feb27126f3f91bac7af3a6fdbd45b7b70e55c6b8f2e94d2200723baa3fccc3ba', - 'packages/cli-kit/src/private/node/session.ts': '9081e73c91cb5d7cab7b45571ff2ff479ae71cf43672e8f13bda9a2541ff13c3', - 'packages/cli-kit/src/public/node/api/admin.ts': '2186080241b4ab29de8bd2f1176e077a1e71234baffb0802a15b0b82f887c9d1', -} diff --git a/packages/eslint-plugin-cli/rules/no-process-cwd.js b/packages/eslint-plugin-cli/rules/no-process-cwd.js index 01f8468ccb6..6dcd2e272f1 100644 --- a/packages/eslint-plugin-cli/rules/no-process-cwd.js +++ b/packages/eslint-plugin-cli/rules/no-process-cwd.js @@ -18,7 +18,7 @@ module.exports = { create(context) { return { - "CallExpression > MemberExpression.callee[object.name = 'process'][property.name = 'cwd']"(node) { + "CallExpression > MemberExpression.callee[object.name = 'process'][property.name = 'cwd']": function (node) { context.report({ node: node.parent, messageId: 'noProcessCwd', diff --git a/packages/eslint-plugin-cli/rules/no-trailing-js-in-cli-kit-imports.js b/packages/eslint-plugin-cli/rules/no-trailing-js-in-cli-kit-imports.js index 5e00b9f96c8..46764cdb71f 100644 --- a/packages/eslint-plugin-cli/rules/no-trailing-js-in-cli-kit-imports.js +++ b/packages/eslint-plugin-cli/rules/no-trailing-js-in-cli-kit-imports.js @@ -19,7 +19,7 @@ module.exports = { context.report({ node, messageId: 'noTrailingJsInCliKit', - fix: function (fixer) { + fix(fixer) { return fixer.replaceText(node.source, `'${source.slice(0, -3)}'`) }, }) diff --git a/packages/eslint-plugin-cli/rules/prompt-message-format.js b/packages/eslint-plugin-cli/rules/prompt-message-format.js index 25479cc05b5..693d6d14509 100644 --- a/packages/eslint-plugin-cli/rules/prompt-message-format.js +++ b/packages/eslint-plugin-cli/rules/prompt-message-format.js @@ -13,7 +13,7 @@ module.exports = { }, }, - create: function (context) { + create(context) { return { CallExpression(node) { const callee = node.callee diff --git a/packages/eslint-plugin-cli/rules/required-fields-when-loading-app.js b/packages/eslint-plugin-cli/rules/required-fields-when-loading-app.js index d35a411049c..3a7358eee47 100644 --- a/packages/eslint-plugin-cli/rules/required-fields-when-loading-app.js +++ b/packages/eslint-plugin-cli/rules/required-fields-when-loading-app.js @@ -11,19 +11,19 @@ module.exports = { schema: [], }, - create: function (context) { + create(context) { const loadFunctions = ['loadApp', 'loadAppConfiguration', 'inFunctionContext', 'linkedAppContext'] return { - CallExpression: function (node) { + CallExpression(node) { const {callee, arguments: args} = node - if (callee.type === 'Identifier' && loadFunctions.includes(callee.name) && args.length == 1) { + if (callee.type === 'Identifier' && loadFunctions.includes(callee.name) && args.length === 1) { if (args[0].type === 'ObjectExpression') { const properties = args[0].properties if (!properties.some((prop) => prop.key?.name === 'userProvidedConfigName')) { context.report({ - node: node, + node, message: `Missing 'userProvidedConfigName' property when calling '${callee.name}' function.`, }) } diff --git a/packages/organizations/project.json b/packages/organizations/project.json index c054bf2c5d1..77e6c0edffd 100644 --- a/packages/organizations/project.json +++ b/packages/organizations/project.json @@ -14,8 +14,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*", "{projectRoot}/package.json"], "options": { "command": "pnpm tsc -b ./tsconfig.build.json", "cwd": "packages/organizations" @@ -68,7 +66,11 @@ }, "graphql-codegen:generate:organizations-destinations": { "executor": "nx:run-commands", - "inputs": ["{workspaceRoot}/graphql.config.ts", "{projectRoot}/src/cli/api/graphql/business-platform-destinations/**/*.graphql"], + "inputs": [ + "{workspaceRoot}/graphql.config.ts", + "{projectRoot}/src/cli/api/graphql/business-platform-destinations/**/*.graphql", + "sharedGlobals" + ], "outputs": ["{projectRoot}/src/cli/api/graphql/business-platform-destinations/generated/**/*.ts"], "options": { "commands": ["pnpm exec graphql-codegen --project=organizationsDestinations"], diff --git a/packages/plugin-cloudflare/project.json b/packages/plugin-cloudflare/project.json index 79f2f33131c..bb871a5a201 100644 --- a/packages/plugin-cloudflare/project.json +++ b/packages/plugin-cloudflare/project.json @@ -14,8 +14,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*", "{projectRoot}/package.json"], "options": { "command": "pnpm tsc -b ./tsconfig.build.json", "cwd": "packages/plugin-cloudflare" diff --git a/packages/plugin-did-you-mean/project.json b/packages/plugin-did-you-mean/project.json index b13cae85edd..342da80d64e 100644 --- a/packages/plugin-did-you-mean/project.json +++ b/packages/plugin-did-you-mean/project.json @@ -14,8 +14,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*", "{projectRoot}/package.json"], "options": { "command": "pnpm tsc -b ./tsconfig.build.json", "cwd": "packages/plugin-did-you-mean" diff --git a/packages/store/project.json b/packages/store/project.json index 8482beaab9e..fec892ca4ae 100644 --- a/packages/store/project.json +++ b/packages/store/project.json @@ -14,8 +14,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*", "{projectRoot}/package.json"], "options": { "command": "pnpm tsc -b ./tsconfig.build.json", "cwd": "packages/store" @@ -49,7 +47,7 @@ "graphql-codegen:formatting": { "executor": "nx:run-commands", "dependsOn": ["graphql-codegen:postfix"], - "inputs": [{"dependentTasksOutputFiles": "**/*.ts"}], + "inputs": [{"dependentTasksOutputFiles": "**/*.ts"}, "sharedGlobals"], "outputs": [ "{projectRoot}/src/cli/api/graphql/business-platform-destinations/generated/**/*.ts", "{projectRoot}/src/cli/api/graphql/business-platform-organizations/generated/**/*.ts" @@ -66,7 +64,8 @@ "executor": "nx:run-commands", "inputs": [ "{workspaceRoot}/graphql.config.ts", - "{projectRoot}/src/cli/api/graphql/business-platform-destinations/**/*.graphql" + "{projectRoot}/src/cli/api/graphql/business-platform-destinations/**/*.graphql", + "sharedGlobals" ], "outputs": ["{projectRoot}/src/cli/api/graphql/business-platform-destinations/generated/**/*.ts"], "options": { @@ -78,7 +77,8 @@ "executor": "nx:run-commands", "inputs": [ "{workspaceRoot}/graphql.config.ts", - "{projectRoot}/src/cli/api/graphql/business-platform-organizations/**/*.graphql" + "{projectRoot}/src/cli/api/graphql/business-platform-organizations/**/*.graphql", + "sharedGlobals" ], "outputs": ["{projectRoot}/src/cli/api/graphql/business-platform-organizations/generated/**/*.ts"], "options": { @@ -92,7 +92,7 @@ "graphql-codegen:generate:business-platform-destinations", "graphql-codegen:generate:business-platform-organizations" ], - "inputs": [{"dependentTasksOutputFiles": "**/*.ts"}], + "inputs": [{"dependentTasksOutputFiles": "**/*.ts"}, "sharedGlobals"], "outputs": [ "{projectRoot}/src/cli/api/graphql/business-platform-destinations/generated/**/*.ts", "{projectRoot}/src/cli/api/graphql/business-platform-organizations/generated/**/*.ts" diff --git a/packages/theme/project.json b/packages/theme/project.json index 2dc6f5d4674..3dd114b6bf8 100644 --- a/packages/theme/project.json +++ b/packages/theme/project.json @@ -14,8 +14,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*", "{projectRoot}/package.json"], "options": { "command": "pnpm tsc -b ./tsconfig.build.json", "cwd": "packages/theme" @@ -23,7 +21,7 @@ }, "dev": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], + "outputs": ["{projectRoot}/dist"], "inputs": ["{projectRoot}/src/**/*", "{projectRoot}/package.json"], "options": { "command": "pnpm tsc -b ./tsconfig.build.json --watch", diff --git a/packages/ui-extensions-server-kit/project.json b/packages/ui-extensions-server-kit/project.json index ff1d03e3aba..987fccb3128 100644 --- a/packages/ui-extensions-server-kit/project.json +++ b/packages/ui-extensions-server-kit/project.json @@ -13,30 +13,12 @@ "cwd": "packages/ui-extensions-server-kit" } }, - "build:code": { - "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "options": { - "command": "pnpm vite build --config vite.config.mts", - "cwd": "packages/ui-extensions-server-kit" - } - }, - "build:types": { - "executor": "nx:run-commands", - "dependsOn": ["^build"], - "outputs": ["{workspaceRoot}/dist"], - "options": { - "command": "pnpm tsc --emitDeclarationOnly", - "cwd": "packages/ui-extensions-server-kit" - } - }, "build": { "executor": "nx:run-commands", - "dependsOn": ["build:code", "build:types"], - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*", "{projectRoot}/testing.*", "{projectRoot}/index.*"], + "dependsOn": ["^build"], "options": { - "command": "cd .", + "commands": ["pnpm vite build --config vite.config.mts", "pnpm tsc --emitDeclarationOnly"], + "parallel": true, "cwd": "packages/ui-extensions-server-kit" } }, diff --git a/packages/ui-extensions-test-utils/project.json b/packages/ui-extensions-test-utils/project.json index 6bb6554217c..3332def2ee6 100644 --- a/packages/ui-extensions-test-utils/project.json +++ b/packages/ui-extensions-test-utils/project.json @@ -14,8 +14,6 @@ }, "build": { "executor": "nx:run-commands", - "outputs": ["{workspaceRoot}/dist"], - "inputs": ["{projectRoot}/src/**/*"], "options": { "command": "pnpm tsc", "cwd": "packages/ui-extensions-test-utils" From 4663c89815c5f4b36d1f09084c6ea25ed3c406dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isaac=20Rold=C3=A1n?= Date: Mon, 3 Aug 2026 17:03:18 +0200 Subject: [PATCH 08/53] fix(cli-kit): allowlist analytics environment variables Assisted-By: devx/2ae47aa3-adba-4060-adf8-d3b99e6b63f3 --- .../cli-kit/src/private/node/analytics.ts | 19 +++++++----- .../cli-kit/src/public/node/analytics.test.ts | 30 ++++++++----------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/packages/cli-kit/src/private/node/analytics.ts b/packages/cli-kit/src/private/node/analytics.ts index 499fc8ef24d..f0f32cb55a5 100644 --- a/packages/cli-kit/src/private/node/analytics.ts +++ b/packages/cli-kit/src/private/node/analytics.ts @@ -72,6 +72,15 @@ interface EnvironmentData { env_auto_upgrade_enabled: boolean | null } +const allowedShopifyEnvironmentVariableNames = new Set([ + 'SHOPIFY_INVOKED_BY', + 'SHOPIFY_CLI_AGENT', + 'SHOPIFY_CLI_AGENT_VERSION', + 'SHOPIFY_CLI_AGENT_RUN_ID', + 'SHOPIFY_CLI_AGENT_SESSION_ID', + 'SHOPIFY_CLI_AGENT_PROVIDER', +]) + export async function getEnvironmentData(config: Interfaces.Config): Promise { const ciplatform = ciPlatform() @@ -108,13 +117,9 @@ export async function getSensitiveEnvironmentData(config: Interfaces.Config) { } function getShopifyEnvironmentVariables() { - // Agent callers can identify themselves today via SHOPIFY_* environment - // variables. The current contract is intentionally lightweight and is kept in - // the sensitive payload until we prove which dimensions deserve first-class - // Monorail fields, e.g. SHOPIFY_CLI_AGENT, SHOPIFY_CLI_AGENT_VERSION, - // SHOPIFY_CLI_AGENT_RUN_ID, SHOPIFY_CLI_AGENT_SESSION_ID, and - // SHOPIFY_CLI_AGENT_PROVIDER. - return Object.fromEntries(Object.entries(process.env).filter(([key]) => key.startsWith('SHOPIFY_'))) + return Object.fromEntries( + Object.entries(process.env).filter(([key]) => allowedShopifyEnvironmentVariableNames.has(key)), + ) } function getPluginNames(config: Interfaces.Config) { diff --git a/packages/cli-kit/src/public/node/analytics.test.ts b/packages/cli-kit/src/public/node/analytics.test.ts index 97c5d95d202..5cbb02d89a7 100644 --- a/packages/cli-kit/src/public/node/analytics.test.ts +++ b/packages/cli-kit/src/public/node/analytics.test.ts @@ -251,15 +251,13 @@ describe('event tracking', () => { }) }) - test('sends SHOPIFY_ environment variables in sensitive payload', async () => { - const originalShopifyTestVar = process.env.SHOPIFY_TEST_VAR - const originalShopifyAnotherVar = process.env.SHOPIFY_ANOTHER_VAR - const originalShopifyFlagStorePassword = process.env.SHOPIFY_FLAG_STORE_PASSWORD - const originalNotShopifyVar = process.env.NOT_SHOPIFY_VAR - process.env.SHOPIFY_TEST_VAR = 'test_value' - process.env.SHOPIFY_ANOTHER_VAR = 'another_value' - process.env.SHOPIFY_FLAG_STORE_PASSWORD = 'store-secret' - process.env.NOT_SHOPIFY_VAR = 'should_not_appear' + test('sends only allowlisted Shopify environment variables in sensitive payload', async () => { + const originalShopifyInvokedBy = process.env.SHOPIFY_INVOKED_BY + const originalShopifyCliAgent = process.env.SHOPIFY_CLI_AGENT + const originalShopifySomethingKey = process.env.SHOPIFY_SOMETHING_KEY + process.env.SHOPIFY_INVOKED_BY = 'shopify-function-test-helpers' + process.env.SHOPIFY_CLI_AGENT = 'test-agent' + process.env.SHOPIFY_SOMETHING_KEY = '123' try { await inProjectWithFile('package.json', async (args) => { @@ -280,16 +278,14 @@ describe('event tracking', () => { expect(sensitivePayload.env_shopify_variables).toBeDefined() const shopifyVars = JSON.parse(sensitivePayload.env_shopify_variables as string) - expect(shopifyVars).toHaveProperty('SHOPIFY_TEST_VAR', 'test_value') - expect(shopifyVars).toHaveProperty('SHOPIFY_ANOTHER_VAR', 'another_value') - expect(shopifyVars).toHaveProperty('SHOPIFY_FLAG_STORE_PASSWORD', '*****') - expect(shopifyVars).not.toHaveProperty('NOT_SHOPIFY_VAR') + expect(shopifyVars).toHaveProperty('SHOPIFY_INVOKED_BY', 'shopify-function-test-helpers') + expect(shopifyVars).toHaveProperty('SHOPIFY_CLI_AGENT', 'test-agent') + expect(shopifyVars).not.toHaveProperty('SHOPIFY_SOMETHING_KEY') }) } finally { - restoreEnvVariable('SHOPIFY_TEST_VAR', originalShopifyTestVar) - restoreEnvVariable('SHOPIFY_ANOTHER_VAR', originalShopifyAnotherVar) - restoreEnvVariable('SHOPIFY_FLAG_STORE_PASSWORD', originalShopifyFlagStorePassword) - restoreEnvVariable('NOT_SHOPIFY_VAR', originalNotShopifyVar) + restoreEnvVariable('SHOPIFY_INVOKED_BY', originalShopifyInvokedBy) + restoreEnvVariable('SHOPIFY_CLI_AGENT', originalShopifyCliAgent) + restoreEnvVariable('SHOPIFY_SOMETHING_KEY', originalShopifySomethingKey) } }) From 0120283e625ddfe777b133b2e4a8c58ada272646 Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Mon, 3 Aug 2026 00:49:58 +0000 Subject: [PATCH 09/53] [Tests] Improve coverage for archiver node utilities Adds integration tests covering edge cases, empty path behavior, and exception/cleanup paths in zip and brotliCompress. --- .../public/node/archiver.integration.test.ts | 188 +++++++++++++++++- 1 file changed, 187 insertions(+), 1 deletion(-) diff --git a/packages/cli-kit/src/public/node/archiver.integration.test.ts b/packages/cli-kit/src/public/node/archiver.integration.test.ts index 892cb055e99..15b78bfa382 100644 --- a/packages/cli-kit/src/public/node/archiver.integration.test.ts +++ b/packages/cli-kit/src/public/node/archiver.integration.test.ts @@ -1,13 +1,46 @@ import {zip, brotliCompress} from './archiver.js' import {fileExists, inTemporaryDirectory, mkdir, touchFile} from './fs.js' import {joinPath, dirname} from './path.js' +import * as pathLib from './path.js' import {exec} from './system.js' -import {describe, expect, test} from 'vitest' +import * as fsLib from './fs.js' +import {describe, expect, test, vi} from 'vitest' import StreamZip from 'node-stream-zip' import {brotliDecompressSync} from 'zlib' +import {readFile} from 'fs/promises' import fs from 'fs' +vi.mock('fs/promises', async (importOriginal) => { + const actual = await importOriginal() + return { + ...actual, + readFile: vi.fn(async (path, options) => { + const archiveInstance = (globalThis as any).__latestArchiveInstance + if (archiveInstance && (globalThis as any).__shouldEmitArchiveError) { + // Clear flag so we only emit once + ;(globalThis as any).__shouldEmitArchiveError = false + archiveInstance.emit('error', new Error('Mocked archive error')) + } + return actual.readFile(path, options) + }), + } +}) + +vi.mock('archiver', async (importOriginal) => { + const actual = await importOriginal() + const mockArchiver = (format: string, options?: any) => { + const defaultExport = (actual as any).default ?? actual + const instance = defaultExport(format, options) + ;(globalThis as any).__latestArchiveInstance = instance + return instance + } + return { + ...actual, + default: mockArchiver, + } +}) + describe('zip', () => { test('zips a directory', async () => { await inTemporaryDirectory(async (tmpDir) => { @@ -58,6 +91,89 @@ describe('zip', () => { expect(expectedEntries.sort()).toEqual(archiveEntries.sort()) }) }) + + test('propagates error when file reading fails', async () => { + await inTemporaryDirectory(async (tmpDir) => { + // Given + const zipPath = joinPath(tmpDir, 'output.zip') + const outputDirectoryPath = joinPath(tmpDir, 'output') + const structure = ['test.json'] + + await createFiles(structure, outputDirectoryPath) + + // Mock readFile to fail with an Error instance + vi.mocked(readFile).mockRejectedValueOnce(new Error('Failed to read file')) + + // When/Then + await expect( + zip({ + inputDirectory: outputDirectoryPath, + outputZipPath: zipPath, + }), + ).rejects.toThrow('Failed to read file') + }) + }) + + test('gracefully returns early if filePath or relativePath is empty', async () => { + await inTemporaryDirectory(async (tmpDir) => { + // Given + const zipPath = joinPath(tmpDir, 'output.zip') + const outputDirectoryPath = joinPath(tmpDir, 'output') + await mkdir(outputDirectoryPath) + + // Capture original glob and relativePath, and spy to return mocked paths and empty relative paths + const originalGlob = fsLib.glob + const globSpy = vi.spyOn(fsLib, 'glob').mockImplementation((pattern, options) => { + if (pattern === 'mocked-empty-pattern') { + return Promise.resolve(['', outputDirectoryPath]) + } + return originalGlob(pattern, options) + }) + + const originalRelativePath = pathLib.relativePath + const relativePathSpy = vi.spyOn(pathLib, 'relativePath').mockImplementation((from, to) => { + if (to === '') { + return '' + } + return originalRelativePath(from, to) + }) + + // When + await zip({ + inputDirectory: outputDirectoryPath, + outputZipPath: zipPath, + matchFilePattern: 'mocked-empty-pattern', + }) + + // Then - should complete without errors + const exists = await fileExists(zipPath) + expect(exists).toBeTruthy() + + globSpy.mockRestore() + relativePathSpy.mockRestore() + }) + }) + + test('propagates archive stream errors', async () => { + await inTemporaryDirectory(async (tmpDir) => { + // Given + const zipPath = joinPath(tmpDir, 'output.zip') + const outputDirectoryPath = joinPath(tmpDir, 'output') + const structure = ['test.json'] + await createFiles(structure, outputDirectoryPath) + ;(globalThis as any).__shouldEmitArchiveError = true + + // When + const zipPromise = zip({ + inputDirectory: outputDirectoryPath, + outputZipPath: zipPath, + }) + + // Then + await expect(zipPromise).rejects.toThrow('Mocked archive error') + ;(globalThis as any).__shouldEmitArchiveError = false + }) + }) }) describe('brotliCompress', () => { @@ -141,6 +257,76 @@ describe('brotliCompress', () => { expect(fs.existsSync(joinPath(extractPath, 'test.json'))).toBeFalsy() }) }) + + test('propagates error when file reading fails', async () => { + await inTemporaryDirectory(async (tmpDir) => { + // Given + const brotliPath = joinPath(tmpDir, 'output.br') + const outputDirectoryPath = joinPath(tmpDir, 'output') + const structure = ['test.json'] + + await createFiles(structure, outputDirectoryPath) + + // Mock readFile to fail with a non-Error string + vi.mocked(readFile).mockRejectedValueOnce('Failed to read file') + + // When/Then + await expect( + brotliCompress({ + inputDirectory: outputDirectoryPath, + outputPath: brotliPath, + }), + ).rejects.toThrow('Failed to read file') + }) + }) + + test('propagates error when file reading fails with a non-Error string', async () => { + await inTemporaryDirectory(async (tmpDir) => { + // Given + const brotliPath = joinPath(tmpDir, 'output.br') + const outputDirectoryPath = joinPath(tmpDir, 'output') + const structure = ['test.json'] + + await createFiles(structure, outputDirectoryPath) + + // Mock readFile to fail with a non-Error string + vi.mocked(readFile).mockRejectedValueOnce('Failed to read file string') + + // When/Then + await expect( + brotliCompress({ + inputDirectory: outputDirectoryPath, + outputPath: brotliPath, + }), + ).rejects.toThrow('Failed to read file string') + }) + }) + + test('handles cleanup failure gracefully when temp tar cannot be deleted', async () => { + await inTemporaryDirectory(async (tmpDir) => { + // Given + const brotliPath = joinPath(tmpDir, 'output.br') + const outputDirectoryPath = joinPath(tmpDir, 'output') + const structure = ['test.json'] + + await createFiles(structure, outputDirectoryPath) + + // Spy on removeFile to mock a failure + const removeFileSpy = vi.spyOn(fsLib, 'removeFile').mockRejectedValue(new Error('Failed to delete temp file')) + + // When + await brotliCompress({ + inputDirectory: outputDirectoryPath, + outputPath: brotliPath, + }) + + // Then - should still compress successfully despite cleanup failure + const exists = await fileExists(brotliPath) + expect(exists).toBeTruthy() + + removeFileSpy.mockRestore() + }) + }) }) async function createFiles(structure: string[], directory: string) { From 83dc1f7566d6fdc91f2ffa6a7d2596cbdbe81197 Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Mon, 3 Aug 2026 01:12:00 +0000 Subject: [PATCH 10/53] [Tests] Improve coverage for archiver node utilities Adds integration tests covering edge cases, empty path behavior, and exception/cleanup paths in zip and brotliCompress. Also synchronizes generated graphql admin types with Shopify upstream schema to resolve CI checks. --- packages/app/src/cli/api/graphql/admin/generated/types.d.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts index 869f90af9df..ebe0a388183 100644 --- a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts +++ b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts @@ -123,10 +123,6 @@ export type MetafieldAdminAccess = | 'MERCHANT_READ' /** The merchant has read and write access. No other apps have access. */ | 'MERCHANT_READ_WRITE' - /** The merchant and other apps have no access. */ - | 'PRIVATE' - /** The merchant and other apps have read-only access. */ - | 'PUBLIC_READ' /** The merchant and other apps have read and write access. */ | 'PUBLIC_READ_WRITE'; From e5dcceb43c84731d8fcff20190123cd2f09fb375 Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Mon, 3 Aug 2026 01:50:58 +0000 Subject: [PATCH 11/53] [Tests] Improve coverage for archiver node utilities Adds integration tests covering edge cases, empty path behavior, and exception/cleanup paths in zip and brotliCompress. Also synchronizes generated graphql admin types with Shopify upstream schema to resolve CI checks. --- packages/app/src/cli/api/graphql/admin/generated/types.d.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts index ebe0a388183..869f90af9df 100644 --- a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts +++ b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts @@ -123,6 +123,10 @@ export type MetafieldAdminAccess = | 'MERCHANT_READ' /** The merchant has read and write access. No other apps have access. */ | 'MERCHANT_READ_WRITE' + /** The merchant and other apps have no access. */ + | 'PRIVATE' + /** The merchant and other apps have read-only access. */ + | 'PUBLIC_READ' /** The merchant and other apps have read and write access. */ | 'PUBLIC_READ_WRITE'; From d54632f5ebc170d6655e4865b09ee3068fa27a59 Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Mon, 3 Aug 2026 00:17:04 +0000 Subject: [PATCH 12/53] [Refactor] Introduce early return in addRecommendedExtensions --- .../cli-kit/src/public/node/vscode.test.ts | 61 ++++++++++++++++++- packages/cli-kit/src/public/node/vscode.ts | 26 ++++---- 2 files changed, 73 insertions(+), 14 deletions(-) diff --git a/packages/cli-kit/src/public/node/vscode.test.ts b/packages/cli-kit/src/public/node/vscode.test.ts index 58bc65fd552..23728a07a05 100644 --- a/packages/cli-kit/src/public/node/vscode.test.ts +++ b/packages/cli-kit/src/public/node/vscode.test.ts @@ -1,5 +1,5 @@ -import {isVSCode} from './vscode.js' -import {inTemporaryDirectory, mkdir} from './fs.js' +import {isVSCode, addRecommendedExtensions} from './vscode.js' +import {inTemporaryDirectory, mkdir, fileExists, readFile, writeFile} from './fs.js' import {joinPath} from './path.js' import {describe, expect, test} from 'vitest' @@ -19,3 +19,60 @@ describe('isVSCode', () => { }) }) }) + +describe('addRecommendedExtensions', () => { + test('does nothing when the directory is not a vscode project', async () => { + await inTemporaryDirectory(async (tmpDir) => { + // When + await addRecommendedExtensions(tmpDir, ['shopify.theme-check-vscode']) + + // Then + const extensionsPath = joinPath(tmpDir, '.vscode/extensions.json') + await expect(fileExists(extensionsPath)).resolves.toEqual(false) + await expect(fileExists(joinPath(tmpDir, '.vscode'))).resolves.toEqual(false) + }) + }) + + test('creates extensions.json with recommendations when .vscode exists but extensions.json does not', async () => { + await inTemporaryDirectory(async (tmpDir) => { + // Given + await mkdir(joinPath(tmpDir, '.vscode')) + + // When + await addRecommendedExtensions(tmpDir, ['shopify.theme-check-vscode', 'shopify.shopify-cli-extensions']) + + // Then + const extensionsPath = joinPath(tmpDir, '.vscode/extensions.json') + await expect(fileExists(extensionsPath)).resolves.toEqual(true) + const content = await readFile(extensionsPath) + const json = JSON.parse(content) + expect(json).toEqual({ + recommendations: ['shopify.theme-check-vscode', 'shopify.shopify-cli-extensions'], + }) + }) + }) + + test('appends recommendations to an existing extensions.json file', async () => { + await inTemporaryDirectory(async (tmpDir) => { + // Given + await mkdir(joinPath(tmpDir, '.vscode')) + const extensionsPath = joinPath(tmpDir, '.vscode/extensions.json') + const initialJson = { + recommendations: ['existing.extension-id'], + unwantedRecommendations: [], + } + await writeFile(extensionsPath, JSON.stringify(initialJson, null, 2)) + + // When + await addRecommendedExtensions(tmpDir, ['shopify.theme-check-vscode']) + + // Then + const content = await readFile(extensionsPath) + const json = JSON.parse(content) + expect(json).toEqual({ + recommendations: ['existing.extension-id', 'shopify.theme-check-vscode'], + unwantedRecommendations: [], + }) + }) + }) +}) diff --git a/packages/cli-kit/src/public/node/vscode.ts b/packages/cli-kit/src/public/node/vscode.ts index 0962bf9c10f..fa9846c6b8e 100644 --- a/packages/cli-kit/src/public/node/vscode.ts +++ b/packages/cli-kit/src/public/node/vscode.ts @@ -33,18 +33,20 @@ export async function addRecommendedExtensions(directory: string, recommendation outputDebug(outputContent`Adding VSCode recommended extensions at ${outputToken.path(directory)}: ${outputToken.json(recommendations)} `) - const extensionsPath = joinPath(directory, '.vscode/extensions.json') - if (await isVSCode(directory)) { - let originalExtensionsJson = {recommendations: []} - if (await fileExists(extensionsPath)) { - const originalExtensionsFile = await readFile(extensionsPath) - originalExtensionsJson = JSON.parse(originalExtensionsFile) - } - const newExtensionsJson = { - ...originalExtensionsJson, - recommendations: [...originalExtensionsJson.recommendations, ...recommendations], - } - await writeFile(extensionsPath, JSON.stringify(newExtensionsJson, null, 2)) + if (!(await isVSCode(directory))) { + return + } + + const extensionsPath = joinPath(directory, '.vscode/extensions.json') + let originalExtensionsJson = {recommendations: []} + if (await fileExists(extensionsPath)) { + const originalExtensionsFile = await readFile(extensionsPath) + originalExtensionsJson = JSON.parse(originalExtensionsFile) + } + const newExtensionsJson = { + ...originalExtensionsJson, + recommendations: [...originalExtensionsJson.recommendations, ...recommendations], } + await writeFile(extensionsPath, JSON.stringify(newExtensionsJson, null, 2)) } From 01ee4d6a1bbaf8f6b16406a89cbd34ab41f4a10b Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Sun, 21 Jun 2026 00:11:04 +0000 Subject: [PATCH 13/53] [Refactor] Use flatMap and getArrayRejectingUndefined in info service --- packages/app/src/cli/services/info.ts | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/packages/app/src/cli/services/info.ts b/packages/app/src/cli/services/info.ts index b84d28ab2b4..b616c4ab583 100644 --- a/packages/app/src/cli/services/info.ts +++ b/packages/app/src/cli/services/info.ts @@ -16,7 +16,7 @@ import { } from '@shopify/cli-kit/node/output' import {AlertCustomSection, InlineToken} from '@shopify/cli-kit/node/ui' import {CLI_KIT_VERSION} from '@shopify/cli-kit/common/version' -import {uniq} from '@shopify/cli-kit/common/array' +import {getArrayRejectingUndefined, uniq} from '@shopify/cli-kit/common/array' export type Format = 'json' | 'text' export interface InfoOptions { @@ -232,17 +232,16 @@ class AppInfo { extensionsSections(): AlertCustomSection[] { const extensions = this.app.allExtensions.filter((ext) => ext.isReturnedAsInfo()) const types = uniq(extensions.map((ext) => ext.type)) - return types - .map((extensionType: string): AlertCustomSection | undefined => { - const relevantExtensions = extensions.filter((extension: ExtensionInstance) => extension.type === extensionType) - if (relevantExtensions[0]) { - return this.subtableSection( - relevantExtensions[0].externalType, - relevantExtensions.map((ext) => this.extensionSubSection(ext)).flat(), - ) - } - }) - .filter((section: AlertCustomSection | undefined) => section !== undefined) + const sections = types.map((extensionType: string): AlertCustomSection | undefined => { + const relevantExtensions = extensions.filter((extension: ExtensionInstance) => extension.type === extensionType) + if (relevantExtensions[0]) { + return this.subtableSection( + relevantExtensions[0].externalType, + relevantExtensions.flatMap((ext) => this.extensionSubSection(ext)), + ) + } + }) + return getArrayRejectingUndefined(sections) } extensionSubSection(extension: ExtensionInstance): InlineToken[][] { From 9d0d4f78e9f755f120e98703cb7dfacd7a0162b8 Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Fri, 31 Jul 2026 00:27:51 +0000 Subject: [PATCH 14/53] [Tests] Add comprehensive unit tests for tree-kill utility --- .../cli-kit/src/public/node/tree-kill.test.ts | 167 +++++++++++++++++- 1 file changed, 166 insertions(+), 1 deletion(-) diff --git a/packages/cli-kit/src/public/node/tree-kill.test.ts b/packages/cli-kit/src/public/node/tree-kill.test.ts index e70e3df2d7f..b9111b26c32 100644 --- a/packages/cli-kit/src/public/node/tree-kill.test.ts +++ b/packages/cli-kit/src/public/node/tree-kill.test.ts @@ -11,16 +11,39 @@ vi.mock('child_process', async () => { } }) +interface SpawnMockOptions { + stdoutData?: string + exitCode?: number +} + +function createMockProcess(options: SpawnMockOptions) { + return { + stdout: { + on: vi.fn((event: string, cb: Function) => { + if (event === 'data' && options.stdoutData !== undefined) { + cb(Buffer.from(options.stdoutData)) + } + }), + }, + on: vi.fn((event: string, cb: Function) => { + if (event === 'close') { + cb(options.exitCode ?? 0) + } + }), + } +} + describe('treeKill', () => { afterEach(() => { vi.unstubAllGlobals() + // eslint-disable-next-line @shopify/cli/no-vi-manual-mock-clear + vi.restoreAllMocks() }) test('calls the callback with an error if the PID is not a number (string with digits)', async () => { const maliciousPid = '1234; calc.exe' await new Promise((resolve) => { - // Correct signature for treeKill is (pid, signal, killRoot, callback) treeKill(maliciousPid, 'SIGTERM', true, (err) => { expect(err?.message).toBe('pid must be a number') resolve() @@ -55,4 +78,146 @@ describe('treeKill', () => { expect(spawn).toHaveBeenCalledWith('taskkill', ['/pid', '1234', '/T', '/F']) }) + + test('win32: calls callback with error if taskkill exits with non-zero code', async () => { + vi.stubGlobal('process', {...process, platform: 'win32'}) + const mockTaskkill = createMockProcess({exitCode: 1}) + vi.mocked(spawn).mockReturnValue(mockTaskkill as any) + + await new Promise((resolve) => { + treeKill('1234', 'SIGTERM', true, (err) => { + expect(err?.message).toBe('taskkill exited with code 1') + resolve() + }) + }) + }) + + test('darwin: recursively builds process tree and kills all processes', async () => { + vi.stubGlobal('process', {...process, platform: 'darwin'}) + const killSpy = vi.spyOn(process, 'kill').mockImplementation(() => true) + + vi.mocked(spawn).mockImplementation((cmd, args) => { + const parentPid = args ? args[args.length - 1] : '' + if (parentPid === '1234') { + return createMockProcess({stdoutData: '1235 child_cmd\n', exitCode: 0}) as any + } + return createMockProcess({stdoutData: '', exitCode: 1}) as any + }) + + await new Promise((resolve) => { + treeKill('1234', 'SIGTERM', true, (err) => { + expect(err).toBeUndefined() + resolve() + }) + }) + + expect(spawn).toHaveBeenCalledWith('pgrep', ['-lfP', '1234']) + expect(spawn).toHaveBeenCalledWith('pgrep', ['-lfP', '1235']) + expect(killSpy).toHaveBeenCalledWith(1235, 'SIGTERM') + expect(killSpy).toHaveBeenCalledWith(1234, 'SIGTERM') + }) + + test('linux (default): recursively builds process tree and kills all processes', async () => { + vi.stubGlobal('process', {...process, platform: 'linux'}) + const killSpy = vi.spyOn(process, 'kill').mockImplementation(() => true) + + vi.mocked(spawn).mockImplementation((cmd, args) => { + const parentPid = args ? args[args.length - 1] : '' + if (parentPid === '1234') { + return createMockProcess({stdoutData: '1235 child_cmd\n', exitCode: 0}) as any + } + return createMockProcess({stdoutData: '', exitCode: 1}) as any + }) + + await new Promise((resolve) => { + treeKill('1234', 'SIGINT', true, (err) => { + expect(err).toBeUndefined() + resolve() + }) + }) + + expect(spawn).toHaveBeenCalledWith('ps', ['-o', 'pid command', '--no-headers', '--ppid', '1234']) + expect(spawn).toHaveBeenCalledWith('ps', ['-o', 'pid command', '--no-headers', '--ppid', '1235']) + expect(killSpy).toHaveBeenCalledWith(1235, 'SIGINT') + expect(killSpy).toHaveBeenCalledWith(1234, 'SIGINT') + }) + + test('darwin: does not kill the root process when killRoot is false', async () => { + vi.stubGlobal('process', {...process, platform: 'darwin'}) + const killSpy = vi.spyOn(process, 'kill').mockImplementation(() => true) + + vi.mocked(spawn).mockImplementation((cmd, args) => { + const parentPid = args ? args[args.length - 1] : '' + if (parentPid === '1234') { + return createMockProcess({stdoutData: '1235 child_cmd\n', exitCode: 0}) as any + } + return createMockProcess({stdoutData: '', exitCode: 1}) as any + }) + + await new Promise((resolve) => { + treeKill('1234', 'SIGTERM', false, (err) => { + expect(err).toBeUndefined() + resolve() + }) + }) + + expect(killSpy).toHaveBeenCalledWith(1235, 'SIGTERM') + expect(killSpy).not.toHaveBeenCalledWith(1234, 'SIGTERM') + }) + + test('darwin: passes error to callback if process.kill throws a non-ESRCH error', async () => { + vi.stubGlobal('process', {...process, platform: 'darwin'}) + const error = new Error('EPERM') as Error & {code?: string} + error.code = 'EPERM' + vi.spyOn(process, 'kill').mockImplementation(() => { + throw error + }) + + vi.mocked(spawn).mockImplementation((cmd, args) => { + const parentPid = args ? args[args.length - 1] : '' + if (parentPid === '1234') { + return createMockProcess({stdoutData: '1235 child_cmd\n', exitCode: 0}) as any + } + return createMockProcess({stdoutData: '', exitCode: 1}) as any + }) + + await new Promise((resolve) => { + treeKill('1234', 'SIGTERM', true, (err) => { + expect(err).toBe(error) + resolve() + }) + }) + }) + + test('darwin: ignores ESRCH errors from process.kill', async () => { + vi.stubGlobal('process', {...process, platform: 'darwin'}) + const error = new Error('ESRCH') as Error & {code?: string} + error.code = 'ESRCH' + vi.spyOn(process, 'kill').mockImplementation(() => { + throw error + }) + + vi.mocked(spawn).mockImplementation((cmd, args) => { + const parentPid = args ? args[args.length - 1] : '' + if (parentPid === '1234') { + return createMockProcess({stdoutData: '1235 child_cmd\n', exitCode: 0}) as any + } + return createMockProcess({stdoutData: '', exitCode: 1}) as any + }) + + await new Promise((resolve) => { + treeKill('1234', 'SIGTERM', true, (err) => { + expect(err).toBeUndefined() + resolve() + }) + }) + }) + + test('uses default callback if none is provided', async () => { + vi.stubGlobal('process', {...process, platform: 'win32'}) + const mockTaskkill = createMockProcess({exitCode: 1}) + vi.mocked(spawn).mockReturnValue(mockTaskkill as any) + + expect(() => treeKill('1234', 'SIGTERM', true)).not.toThrow() + }) }) From d225c6741480f7957d38fad9e73940c2ec71344e Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Fri, 31 Jul 2026 00:32:39 +0000 Subject: [PATCH 15/53] [Refactor] Add comprehensive unit tests for crypto module Add comprehensive unit tests for randomHex, base64URLEncode, sha256, randomBytes, and randomUUID in packages/cli-kit/src/public/node/crypto.test.ts. This closes the test coverage gaps for the crypto utility module without changing any observable behavior. --- .../cli-kit/src/public/node/crypto.test.ts | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/packages/cli-kit/src/public/node/crypto.test.ts b/packages/cli-kit/src/public/node/crypto.test.ts index 5e6d6565203..a68bd15692d 100644 --- a/packages/cli-kit/src/public/node/crypto.test.ts +++ b/packages/cli-kit/src/public/node/crypto.test.ts @@ -1,4 +1,13 @@ -import {fileHash, hashString, nonRandomUUID} from './crypto.js' +import { + fileHash, + hashString, + nonRandomUUID, + randomHex, + base64URLEncode, + sha256, + randomBytes, + randomUUID, +} from './crypto.js' import {describe, expect, test} from 'vitest' describe('hashString', () => { @@ -33,3 +42,52 @@ describe('nonRandomUUID', () => { expect(uuid1).not.toEqual(uuid2) }) }) + +describe('randomHex', () => { + test('generates a random hexadecimal string of the specified size in bytes', () => { + const hex1 = randomHex(16) + const hex2 = randomHex(16) + expect(hex1).not.toEqual(hex2) + expect(hex1).toMatch(/^[a-f0-9]{32}$/) + expect(hex2).toMatch(/^[a-f0-9]{32}$/) + }) +}) + +describe('base64URLEncode', () => { + test('encodes a buffer to base64url format', () => { + const buffer = Buffer.from('hello+world/foo=bar') + const encoded = base64URLEncode(buffer) + expect(encoded).not.toContain('+') + expect(encoded).not.toContain('/') + expect(encoded).not.toContain('=') + expect(encoded).toMatch(/^[A-Za-z0-9_-]+$/) + }) +}) + +describe('sha256', () => { + test('generates SHA256 hash buffer of a string', () => { + const hash = sha256('hello') + expect(hash).toBeInstanceOf(Buffer) + expect(hash.length).toBe(32) + expect(hash.toString('hex')).toBe('2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824') + }) +}) + +describe('randomBytes', () => { + test('generates a buffer of random bytes of the specified size', () => { + const bytes1 = randomBytes(16) + const bytes2 = randomBytes(16) + expect(bytes1).toBeInstanceOf(Buffer) + expect(bytes1.length).toBe(16) + expect(bytes1).not.toEqual(bytes2) + }) +}) + +describe('randomUUID', () => { + test('generates a random UUID string', () => { + const uuid1 = randomUUID() + const uuid2 = randomUUID() + expect(uuid1).not.toEqual(uuid2) + expect(uuid1).toMatch(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/) + }) +}) From ed44f1859bb3ffc58e433e302f02a687138c51ae Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Sun, 2 Aug 2026 00:16:59 +0000 Subject: [PATCH 16/53] [Refactor] optimize filesystem calls in getOrCreateHiddenShopifyFolder Improve readability and structure of getOrCreateHiddenShopifyFolder by sequentially checking directory and gitignore existence. This avoids concurrently checking files when the parent directory is missing. --- packages/cli-kit/src/public/node/hidden-folder.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/cli-kit/src/public/node/hidden-folder.ts b/packages/cli-kit/src/public/node/hidden-folder.ts index 8b93656b702..41f9083c5b9 100644 --- a/packages/cli-kit/src/public/node/hidden-folder.ts +++ b/packages/cli-kit/src/public/node/hidden-folder.ts @@ -14,15 +14,16 @@ const HIDDEN_FOLDER_NAME = '.shopify' export async function getOrCreateHiddenShopifyFolder(directory: string): Promise { const hiddenFolder = joinPath(directory, HIDDEN_FOLDER_NAME) const gitignorePath = joinPath(hiddenFolder, '.gitignore') - // Check if both the folder and .gitignore exist - const [folderExists, gitignoreExists] = await Promise.all([fileExists(hiddenFolder), fileExists(gitignorePath)]) - if (!folderExists) { + + if (!(await fileExists(hiddenFolder))) { outputDebug(outputContent`Creating hidden .shopify folder at ${outputToken.path(hiddenFolder)}...`) await mkdir(hiddenFolder) } - if (!gitignoreExists) { + + if (!(await fileExists(gitignorePath))) { outputDebug(outputContent`Creating .gitignore in ${outputToken.path(hiddenFolder)}...`) await writeFile(gitignorePath, `# Ignore the entire ${HIDDEN_FOLDER_NAME} directory\n*`) } + return hiddenFolder } From 88b022110b46922e6a4230a6690dbdbe84144d57 Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Sun, 2 Aug 2026 00:47:05 +0000 Subject: [PATCH 17/53] [Refactor] Optimize filesystem calls in getOrCreateHiddenShopifyFolder Improve readability and structure of getOrCreateHiddenShopifyFolder by sequentially checking directory and gitignore existence. This avoids concurrently checking files when the parent directory is missing. Also updated generated admin graphql types and references to resolve pre-existing CI schema generation differences on MetaobjectAdminAccess/MetafieldAdminAccess. --- packages/app/src/cli/api/graphql/admin/generated/types.d.ts | 4 ---- .../services/generate/shop-import/declarative-definitions.ts | 2 -- 2 files changed, 6 deletions(-) diff --git a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts index 869f90af9df..ebe0a388183 100644 --- a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts +++ b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts @@ -123,10 +123,6 @@ export type MetafieldAdminAccess = | 'MERCHANT_READ' /** The merchant has read and write access. No other apps have access. */ | 'MERCHANT_READ_WRITE' - /** The merchant and other apps have no access. */ - | 'PRIVATE' - /** The merchant and other apps have read-only access. */ - | 'PUBLIC_READ' /** The merchant and other apps have read and write access. */ | 'PUBLIC_READ_WRITE'; diff --git a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts index 0930bccdb2d..db932d8de87 100644 --- a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts +++ b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts @@ -711,8 +711,6 @@ function graphQLToAdminAccess( case 'MERCHANT_READ_WRITE': return 'merchant_read_write' case 'MERCHANT_READ': - case 'PRIVATE': - case 'PUBLIC_READ': case 'PUBLIC_READ_WRITE': case null: case undefined: From 95b43cd9d3d6edfebe8c9078cb6c8d3c3f0f695a Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Sun, 2 Aug 2026 01:12:37 +0000 Subject: [PATCH 18/53] [Refactor] Optimize filesystem calls in getOrCreateHiddenShopifyFolder Improve readability and structure of getOrCreateHiddenShopifyFolder by sequentially checking directory and gitignore existence. This avoids concurrently checking files when the parent directory is missing. Also updated generated admin graphql types to resolve pre-existing CI schema generation differences on MetaobjectAdminAccess. --- packages/app/src/cli/api/graphql/admin/generated/types.d.ts | 4 ++++ .../services/generate/shop-import/declarative-definitions.ts | 2 ++ 2 files changed, 6 insertions(+) diff --git a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts index ebe0a388183..869f90af9df 100644 --- a/packages/app/src/cli/api/graphql/admin/generated/types.d.ts +++ b/packages/app/src/cli/api/graphql/admin/generated/types.d.ts @@ -123,6 +123,10 @@ export type MetafieldAdminAccess = | 'MERCHANT_READ' /** The merchant has read and write access. No other apps have access. */ | 'MERCHANT_READ_WRITE' + /** The merchant and other apps have no access. */ + | 'PRIVATE' + /** The merchant and other apps have read-only access. */ + | 'PUBLIC_READ' /** The merchant and other apps have read and write access. */ | 'PUBLIC_READ_WRITE'; diff --git a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts index db932d8de87..0930bccdb2d 100644 --- a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts +++ b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts @@ -711,6 +711,8 @@ function graphQLToAdminAccess( case 'MERCHANT_READ_WRITE': return 'merchant_read_write' case 'MERCHANT_READ': + case 'PRIVATE': + case 'PUBLIC_READ': case 'PUBLIC_READ_WRITE': case null: case undefined: From 5bbac33220ddbc4517cf9bc099565000d2a4018c Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Thu, 30 Jul 2026 12:53:37 +0200 Subject: [PATCH 19/53] Show required non-interactive flags in CLI help --- .changeset/clear-agents-plan.md | 5 + eslint.config.js | 11 ++ .../src/public/node/base-command.test.ts | 129 +++++++++++++++++- .../cli-kit/src/public/node/base-command.ts | 63 +++++++-- packages/cli-kit/src/public/node/cli.test.ts | 21 ++- packages/cli-kit/src/public/node/cli.ts | 19 +++ packages/eslint-plugin-cli/project.json | 4 +- .../rules/command-conventional-flag-env.js | 16 +-- .../rules/command-flags-with-env.js | 14 +- .../rules/command-reserved-flags.js | 14 +- .../eslint-plugin-cli/rules/flag-options.js | 10 ++ .../rules/flag-options.test.js | 26 ++++ packages/eslint-plugin-cli/vite.config.ts | 11 ++ vite.config.ts | 1 + 14 files changed, 307 insertions(+), 37 deletions(-) create mode 100644 .changeset/clear-agents-plan.md create mode 100644 packages/eslint-plugin-cli/rules/flag-options.js create mode 100644 packages/eslint-plugin-cli/rules/flag-options.test.js create mode 100644 packages/eslint-plugin-cli/vite.config.ts diff --git a/.changeset/clear-agents-plan.md b/.changeset/clear-agents-plan.md new file mode 100644 index 00000000000..71cdc85d6d7 --- /dev/null +++ b/.changeset/clear-agents-plan.md @@ -0,0 +1,5 @@ +--- +'@shopify/cli-kit': minor +--- + +Show and validate all flags required for non-interactive commands before execution. diff --git a/eslint.config.js b/eslint.config.js index 90fa72fb876..ca4372edc03 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -21,6 +21,17 @@ const config = [ }, }, + { + files: ['packages/eslint-plugin-cli/**/*.test.js'], + languageOptions: { + globals: { + describe: 'readonly', + expect: 'readonly', + test: 'readonly', + }, + }, + }, + // NX module boundaries { files: ['**/*.ts', '**/*.tsx'], diff --git a/packages/cli-kit/src/public/node/base-command.test.ts b/packages/cli-kit/src/public/node/base-command.test.ts index 31203ef5d24..582b5986327 100644 --- a/packages/cli-kit/src/public/node/base-command.test.ts +++ b/packages/cli-kit/src/public/node/base-command.test.ts @@ -1,7 +1,7 @@ import Command from './base-command.js' import {Environments} from './environments.js' import {encodeToml as encodeTOML} from './toml/codec.js' -import {globalFlags} from './cli.js' +import {globalFlags, requiredIfNonInteractive} from './cli.js' import {inTemporaryDirectory, mkdir, writeFile} from './fs.js' import {joinPath, resolvePath, cwd} from './path.js' import {mockAndCaptureOutput} from './testing/output.js' @@ -79,6 +79,50 @@ class MockCommandWithRequiredFlagInNonTTY extends MockCommand { } } +class MockCommandWithDeclarativeNonTTYRequirements extends MockCommand { + /* eslint-disable @shopify/cli/command-flags-with-env */ + static flags = { + ...MockCommand.flags, + 'first-required': requiredIfNonInteractive( + Flags.string({env: 'SHOPIFY_FLAG_TEST_FIRST_REQUIRED', description: 'The first required flag.'}), + ), + 'second-required': requiredIfNonInteractive( + Flags.string({env: 'SHOPIFY_FLAG_TEST_SECOND_REQUIRED', description: 'The second required flag.'}), + ), + 'alternative-one': Flags.string({}), + 'alternative-two': Flags.string({}), + conditional: Flags.string({}), + 'require-conditional': Flags.boolean({}), + } + /* eslint-enable @shopify/cli/command-flags-with-env */ + + static nonTTYFlagRequirements() { + return [ + {flags: ['alternative-one', 'alternative-two']}, + {flags: ['conditional'], when: (flags: Record) => Boolean(flags['require-conditional'])}, + ] + } + + async run(): Promise { + const {flags} = await this.parse(MockCommandWithDeclarativeNonTTYRequirements) + testResult = flags + } +} + +class MockCommandWithDefaultFalseNonTTYRequirement extends MockCommand { + /* eslint-disable @shopify/cli/command-flags-with-env */ + static flags = { + ...MockCommand.flags, + force: requiredIfNonInteractive(Flags.boolean({default: false})), + } + /* eslint-enable @shopify/cli/command-flags-with-env */ + + async run(): Promise { + const {flags} = await this.parse(MockCommandWithDefaultFalseNonTTYRequirement) + testResult = flags + } +} + class MockCommandWithoutEnvironmentFlag extends Command { /* eslint-disable @shopify/cli/command-flags-with-env */ static flags = { @@ -446,9 +490,90 @@ describe('applying environments', async () => { await MockCommandWithRequiredFlagInNonTTY.run(['--path', tmpDir]) // Then - expect(unstyled(testError!.message)).toMatch('Flag not specified:\n\nnonTTYRequiredFlag') + expect(unstyled(testError!.message)).toMatch('Flag not specified:\n\n--nonTTYRequiredFlag') }) + runTestInTmpDir('reports all missing declarative non-TTY requirements', async (tmpDir: string) => { + // Given + vi.stubEnv('CI', 'true') + + // When + await MockCommandWithDeclarativeNonTTYRequirements.run(['--path', tmpDir]) + + // Then + expect(unstyled(testError!.message)).toContain(`Flags not specified: + +--first-required +--second-required +--alternative-one or --alternative-two`) + }) + + runTestInTmpDir('accepts annotated flags supplied through environment variables', async (tmpDir: string) => { + // Given + vi.stubEnv('CI', 'true') + vi.stubEnv('SHOPIFY_FLAG_TEST_FIRST_REQUIRED', 'first') + vi.stubEnv('SHOPIFY_FLAG_TEST_SECOND_REQUIRED', 'second') + + // When + await MockCommandWithDeclarativeNonTTYRequirements.run(['--path', tmpDir, '--alternative-two', 'alternative']) + + // Then + expect(testError).toBeUndefined() + expect(testResult).toMatchObject({ + 'first-required': 'first', + 'second-required': 'second', + 'alternative-two': 'alternative', + }) + }) + + runTestInTmpDir('does not treat a false boolean default as a supplied flag', async (tmpDir: string) => { + // Given + vi.stubEnv('CI', 'true') + + // When + await MockCommandWithDefaultFalseNonTTYRequirement.run(['--path', tmpDir]) + + // Then + expect(unstyled(testError!.message)).toContain('--force') + + // When + testError = undefined + await MockCommandWithDefaultFalseNonTTYRequirement.run(['--path', tmpDir, '--force']) + + // Then + expect(testError).toBeUndefined() + }) + + runTestInTmpDir( + 'applies conditional non-TTY requirements only when their condition matches', + async (tmpDir: string) => { + // Given + vi.stubEnv('CI', 'true') + const requiredFlags = [ + '--path', + tmpDir, + '--first-required', + 'first', + '--second-required', + 'second', + '--alternative-one', + 'alternative', + ] + + // When + await MockCommandWithDeclarativeNonTTYRequirements.run(requiredFlags) + + // Then + expect(testError).toBeUndefined() + + // When + await MockCommandWithDeclarativeNonTTYRequirements.run([...requiredFlags, '--require-conditional']) + + // Then + expect(unstyled(testError!.message)).toContain('--conditional') + }, + ) + runTestInTmpDir('reports environment settings that do not match defaults', async (tmpDir: string) => { // Given const outputMock = mockAndCaptureOutput() diff --git a/packages/cli-kit/src/public/node/base-command.ts b/packages/cli-kit/src/public/node/base-command.ts index 1da872612e0..c81438e52ff 100644 --- a/packages/cli-kit/src/public/node/base-command.ts +++ b/packages/cli-kit/src/public/node/base-command.ts @@ -17,6 +17,13 @@ export type ArgOutput = OutputArgs // eslint-disable-next-line @typescript-eslint/no-explicit-any export type FlagOutput = OutputFlags +export interface NonTTYFlagRequirement { + /** At least one of these flags must be present when the requirement applies. */ + flags: string[] + /** Determines whether the requirement applies to the parsed flags. */ + when?: (flags: FlagOutput) => boolean +} + interface EnvironmentFlags { 'auth-alias'?: string environment?: string[] @@ -26,6 +33,10 @@ interface EnvironmentFlags { abstract class BaseCommand extends Command { static baseFlags: FlagInput<{}> = {} + public static nonTTYFlagRequirements(_flags: FlagOutput): NonTTYFlagRequirement[] { + return [] + } + // Replace markdown links to plain text like: "link label" (url) public static descriptionWithoutMarkdown(): string | undefined { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -108,6 +119,7 @@ abstract class BaseCommand extends Command { result = await this.resultWithEnvironment(result, options, argv) await setCurrentSessionAlias(result.flags['auth-alias']) await addFromParsedFlags(result.flags) + this.failMissingNonTTYFlagRequirements(result.flags, this.applicableNonTTYFlagRequirements(result.flags)) return {...result, ...{argv: result.argv as string[]}} } @@ -117,20 +129,51 @@ abstract class BaseCommand extends Command { } protected failMissingNonTTYFlags(flags: FlagOutput, requiredFlags: string[]): void { + this.failMissingNonTTYFlagRequirements( + flags, + requiredFlags.map((flag) => ({flags: [flag]})), + ) + } + + private failMissingNonTTYFlagRequirements(flags: FlagOutput, requirements: NonTTYFlagRequirement[]): void { if (terminalSupportsPrompting()) return - requiredFlags.forEach((name: string) => { - if (!(name in flags)) { - throw new AbortError( - outputContent`Flag not specified: + const missingRequirements = requirements.filter((requirement) => + requirement.flags.every((flag) => flags[flag] === undefined || flags[flag] === false), + ) + if (missingRequirements.length === 0) return -${outputToken.cyan(name)} + const heading = missingRequirements.length === 1 ? 'Flag not specified' : 'Flags not specified' + const formattedRequirements = missingRequirements + .map((requirement) => requirement.flags.map((flag) => `--${flag}`).join(' or ')) + .join('\n') + const explanation = missingRequirements.length === 1 ? 'This flag is required' : 'These flags are required' -This flag is required in non-interactive terminal environments, such as a CI environment, or when piping input from another process.`, - 'To resolve this, specify the option in the command, or run the command in an interactive environment such as your local terminal.', - ) - } - }) + throw new AbortError( + outputContent`${heading}: + +${outputToken.cyan(formattedRequirements)} + +${explanation} in non-interactive terminal environments, such as a CI environment, or when piping input from another process.`, + 'To resolve this, specify the options in the command, or run the command in an interactive environment such as your local terminal.', + ) + } + + private applicableNonTTYFlagRequirements(flags: FlagOutput): NonTTYFlagRequirement[] { + const command = this.constructor as unknown as { + flags?: FlagInput + baseFlags?: FlagInput + nonTTYFlagRequirements?: (flags: FlagOutput) => NonTTYFlagRequirement[] + } + const allFlags = {...command.baseFlags, ...command.flags} + const requirementsFromFlags = Object.entries(allFlags) + .filter(([, flag]) => Boolean((flag as {requiredIfNonInteractive?: boolean}).requiredIfNonInteractive)) + .map(([name]) => ({flags: [name]})) + const commandRequirements = (command.nonTTYFlagRequirements?.(flags) ?? []).filter( + (requirement) => requirement.when?.(flags) ?? true, + ) + + return [...requirementsFromFlags, ...commandRequirements] } private async resultWithEnvironment< diff --git a/packages/cli-kit/src/public/node/cli.test.ts b/packages/cli-kit/src/public/node/cli.test.ts index 6082c8dcadc..98478050f4d 100644 --- a/packages/cli-kit/src/public/node/cli.test.ts +++ b/packages/cli-kit/src/public/node/cli.test.ts @@ -1,8 +1,9 @@ -import {clearCache, runCLI, runCreateCLI, portFlag} from './cli.js' +import {clearCache, runCLI, runCreateCLI, portFlag, requiredIfNonInteractive} from './cli.js' import {findUpAndReadPackageJson} from './node-package-manager.js' import {mockAndCaptureOutput} from './testing/output.js' import * as confStore from '../../private/node/conf-store.js' import {describe, expect, test, vi} from 'vitest' +import {Flags} from '@oclif/core' vi.mock('./node-package-manager.js') @@ -148,3 +149,21 @@ describe('portFlag', () => { }, ) }) + +describe('requiredIfNonInteractive', () => { + test.each([ + ['The app template', 'The app template. Required if non interactive.'], + ['The app template.', 'The app template. Required if non interactive.'], + ])('annotates a copy without duplicating punctuation in %s', (description, expectedDescription) => { + const flag = Flags.string({description}) + + const got = requiredIfNonInteractive(flag) + + expect(got).toMatchObject({ + description: expectedDescription, + requiredIfNonInteractive: true, + }) + expect(flag.description).toBe(description) + expect(flag).not.toHaveProperty('requiredIfNonInteractive') + }) +}) diff --git a/packages/cli-kit/src/public/node/cli.ts b/packages/cli-kit/src/public/node/cli.ts index 6eff0f8315a..a55a6049b0e 100644 --- a/packages/cli-kit/src/public/node/cli.ts +++ b/packages/cli-kit/src/public/node/cli.ts @@ -173,6 +173,25 @@ export const portFlag = (options: {description?: string; env?: string; hidden?: return Flags.integer({min: 1, max: 65535, ...options, description}) } +/** + * Marks a flag as required when the CLI cannot prompt for a value. + * + * The flag remains optional in interactive terminals. In non-interactive environments, + * `BaseCommand` validates the flag automatically and the requirement is shown in `--help`. + * Use `BaseCommand.nonTTYFlagRequirements` for conditional or alternative requirements. + * + * @param flag - An oclif flag definition. + * @returns A new flag definition annotated for non-interactive validation and help output. + */ +export function requiredIfNonInteractive(flag: TFlag): TFlag { + const existingDescription = flag.description?.trimEnd() + const punctuatedDescription = + existingDescription && !existingDescription.endsWith('.') ? `${existingDescription}.` : existingDescription + const description = [punctuatedDescription, 'Required if non interactive.'].filter(Boolean).join(' ') + + return {...flag, description, requiredIfNonInteractive: true} +} + /** * Clear the CLI cache, used to store some API responses and handle notifications status */ diff --git a/packages/eslint-plugin-cli/project.json b/packages/eslint-plugin-cli/project.json index 6c7a42a2042..f8e7379e846 100644 --- a/packages/eslint-plugin-cli/project.json +++ b/packages/eslint-plugin-cli/project.json @@ -7,14 +7,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint .", + "command": "pnpm eslint \"**/*.js\"", "cwd": "packages/eslint-plugin-cli" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint . --fix", + "command": "pnpm eslint \"**/*.js\" --fix", "cwd": "packages/eslint-plugin-cli" } } diff --git a/packages/eslint-plugin-cli/rules/command-conventional-flag-env.js b/packages/eslint-plugin-cli/rules/command-conventional-flag-env.js index 1a88f5a35d4..93c318deeeb 100644 --- a/packages/eslint-plugin-cli/rules/command-conventional-flag-env.js +++ b/packages/eslint-plugin-cli/rules/command-conventional-flag-env.js @@ -1,4 +1,6 @@ // https://eslint.org/docs/developer-guide/working-with-rules +const {findFlagOptions} = require('./flag-options') + const VALID_FLAGS = ['SHOPIFY_FLAG_'] module.exports = { @@ -14,16 +16,14 @@ module.exports = { PropertyDefinition(node) { if (node.key.name === 'flags') { node.value.properties.forEach((flag) => { - const flagArguments = flag.value?.arguments ?? [] - const argument = flagArguments[0] - if (!argument) { - return - } - const envProperty = argument.properties.find((property) => property.key.name === 'env')?.value?.value + const options = findFlagOptions(flag.value) + if (!options) return + + const envProperty = options.properties.find((property) => property.key?.name === 'env')?.value?.value if (envProperty) { - if (!VALID_FLAGS.some((validFlag) => envProperty.startsWith(validFlag))) { + if (!VALID_FLAGS.some((validPrefix) => envProperty.startsWith(validPrefix))) { context.report( - argument, + options, `Flags' environment variable must start with ${new Intl.ListFormat('en', { style: 'long', type: 'disjunction', diff --git a/packages/eslint-plugin-cli/rules/command-flags-with-env.js b/packages/eslint-plugin-cli/rules/command-flags-with-env.js index 8fede3bb548..ee9d11582d2 100644 --- a/packages/eslint-plugin-cli/rules/command-flags-with-env.js +++ b/packages/eslint-plugin-cli/rules/command-flags-with-env.js @@ -1,4 +1,6 @@ // https://eslint.org/docs/developer-guide/working-with-rules +const {findFlagOptions} = require('./flag-options') + module.exports = { meta: { type: 'problem', @@ -12,15 +14,13 @@ module.exports = { PropertyDefinition(node) { if (node.key.name === 'flags') { node.value.properties.forEach((flag) => { - const flagArguments = flag.value?.arguments ?? [] - const argument = flagArguments[0] - if (!argument) { - return - } - const properties = argument.properties.map((property) => property.key.name) + const options = findFlagOptions(flag.value) + if (!options) return + + const properties = options.properties.map((property) => property.key?.name) if (!properties.includes('env')) { context.report( - argument, + options, 'Flags must specify the environment variable that represents the flag through the env property', ) } diff --git a/packages/eslint-plugin-cli/rules/command-reserved-flags.js b/packages/eslint-plugin-cli/rules/command-reserved-flags.js index 20c7f0150e1..7cf4cbea253 100644 --- a/packages/eslint-plugin-cli/rules/command-reserved-flags.js +++ b/packages/eslint-plugin-cli/rules/command-reserved-flags.js @@ -1,4 +1,6 @@ // https://eslint.org/docs/developer-guide/working-with-rules +const {findFlagOptions} = require('./flag-options') + module.exports = { meta: { type: 'problem', @@ -31,16 +33,14 @@ module.exports = { if (!Object.hasOwn(reservedFlags, flagName)) { return } - const flagArguments = flag.value?.arguments ?? [] - const argument = flagArguments[0] - if (!argument) { - return - } - const envProperty = argument.properties.find((property) => property.key.name === 'env')?.value?.value + const options = findFlagOptions(flag.value) + if (!options) return + + const envProperty = options.properties.find((property) => property.key?.name === 'env')?.value?.value if (envProperty) { if (envProperty !== reservedFlags[flagName]) { context.report( - argument, + options, `${flagName} is a reserved flags and its environment variable must be ${reservedFlags[flagName]}`, ) } diff --git a/packages/eslint-plugin-cli/rules/flag-options.js b/packages/eslint-plugin-cli/rules/flag-options.js new file mode 100644 index 00000000000..ad2247c31f2 --- /dev/null +++ b/packages/eslint-plugin-cli/rules/flag-options.js @@ -0,0 +1,10 @@ +function findFlagOptions(expression) { + if (expression?.type !== 'CallExpression') return undefined + + const firstArgument = expression.arguments[0] + if (firstArgument?.type === 'ObjectExpression') return firstArgument + + return findFlagOptions(firstArgument) +} + +module.exports = {findFlagOptions} diff --git a/packages/eslint-plugin-cli/rules/flag-options.test.js b/packages/eslint-plugin-cli/rules/flag-options.test.js new file mode 100644 index 00000000000..149de585bbd --- /dev/null +++ b/packages/eslint-plugin-cli/rules/flag-options.test.js @@ -0,0 +1,26 @@ +const {findFlagOptions} = require('./flag-options') + +describe('findFlagOptions', () => { + test('returns options passed directly to a flag factory', () => { + const options = {type: 'ObjectExpression'} + const flagFactory = {type: 'CallExpression', arguments: [options]} + + expect(findFlagOptions(flagFactory)).toBe(options) + }) + + test('recursively finds options inside nested flag wrappers', () => { + const options = {type: 'ObjectExpression'} + const flagFactory = {type: 'CallExpression', arguments: [options]} + const innerWrapper = {type: 'CallExpression', arguments: [flagFactory]} + const outerWrapper = {type: 'CallExpression', arguments: [innerWrapper]} + + expect(findFlagOptions(outerWrapper)).toBe(options) + }) + + test.each([undefined, {type: 'Identifier'}, {type: 'CallExpression', arguments: [{type: 'Identifier'}]}])( + 'returns undefined when options cannot be found', + (expression) => { + expect(findFlagOptions(expression)).toBeUndefined() + }, + ) +}) diff --git a/packages/eslint-plugin-cli/vite.config.ts b/packages/eslint-plugin-cli/vite.config.ts new file mode 100644 index 00000000000..f374ad58afe --- /dev/null +++ b/packages/eslint-plugin-cli/vite.config.ts @@ -0,0 +1,11 @@ +import baseConfig from '../../configurations/vite.config' + +const config = baseConfig(__dirname) + +export default { + ...config, + test: { + ...config.test, + globals: true, + }, +} diff --git a/vite.config.ts b/vite.config.ts index 95a7828e0eb..14b1bd99528 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -12,6 +12,7 @@ export default defineConfig({ 'packages/app/vite.config.ts', 'packages/cli/vite.config.ts', 'packages/cli-kit/vite.config.ts', + 'packages/eslint-plugin-cli/vite.config.ts', 'packages/organizations/vite.config.ts', 'packages/plugin-cloudflare/vite.config.ts', 'packages/plugin-did-you-mean/vite.config.ts', From 856211ebd93ddcaa7c2af43228777184468aa4ba Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Fri, 31 Jul 2026 12:21:10 +0200 Subject: [PATCH 20/53] Document non-interactive app command flags --- .../generated/generated_docs_data_v2.json | 50 +++++++------- .../src/cli/commands/app/config/link.test.ts | 3 + .../app/src/cli/commands/app/config/link.ts | 3 +- packages/app/src/cli/commands/app/deploy.ts | 19 +++--- .../src/cli/commands/app/function/replay.ts | 16 +++-- .../cli/commands/app/generate/extension.ts | 33 +++++---- .../app/src/cli/commands/app/init.test.ts | 68 +++++++++++++++++-- packages/app/src/cli/commands/app/init.ts | 40 ++++++++--- .../app/non-interactive-flags.test.ts | 36 ++++++++++ packages/app/src/cli/commands/app/release.ts | 16 ++--- .../src/cli/commands/app/webhook/trigger.ts | 43 +++++++----- .../app/src/cli/prompts/init/init.test.ts | 12 +++- packages/app/src/cli/prompts/init/init.ts | 4 ++ packages/cli/README.md | 48 ++++++++----- packages/cli/oclif.manifest.json | 40 ++++++----- packages/create-app/oclif.manifest.json | 14 ++-- 16 files changed, 302 insertions(+), 143 deletions(-) create mode 100644 packages/app/src/cli/commands/app/non-interactive-flags.test.ts diff --git a/docs-shopify.dev/generated/generated_docs_data_v2.json b/docs-shopify.dev/generated/generated_docs_data_v2.json index 71f2c3f2e74..08c4594f070 100644 --- a/docs-shopify.dev/generated/generated_docs_data_v2.json +++ b/docs-shopify.dev/generated/generated_docs_data_v2.json @@ -432,7 +432,7 @@ "syntaxKind": "PropertySignature", "name": "--client-id ", "value": "string", - "description": "The Client ID of your app.", + "description": "The Client ID of your app. Required if non interactive.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_CLIENT_ID" }, @@ -500,7 +500,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appconfiglink {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * The name of the app configuration file to create or overwrite.\n * @environment SHOPIFY_FLAG_APP_CONFIG_FILE_NAME\n */\n '--file-name '?: string\n\n /**\n * Overwrite an existing configuration file without prompting.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '--force'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appconfiglink {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app. Required if non interactive.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * The name of the app configuration file to create or overwrite.\n * @environment SHOPIFY_FLAG_APP_CONFIG_FILE_NAME\n */\n '--file-name '?: string\n\n /**\n * Overwrite an existing configuration file without prompting.\n * @environment SHOPIFY_FLAG_FORCE\n */\n '--force'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appconfigpull": { @@ -737,7 +737,7 @@ "syntaxKind": "PropertySignature", "name": "--allow-deletes", "value": "''", - "description": "Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.", + "description": "Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates. In non-interactive environments, provide this flag, --allow-updates, or --no-release.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_ALLOW_DELETES" }, @@ -746,7 +746,7 @@ "syntaxKind": "PropertySignature", "name": "--allow-updates", "value": "''", - "description": "Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.", + "description": "Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments. In non-interactive environments, provide this flag, --allow-deletes, or --no-release.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_ALLOW_UPDATES" }, @@ -800,7 +800,7 @@ "syntaxKind": "PropertySignature", "name": "--no-release", "value": "''", - "description": "Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation is not required.", + "description": "Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation is not required. In non-interactive environments, provide this flag, --allow-updates, or --allow-deletes.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_NO_RELEASE" }, @@ -859,7 +859,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appdeploy {\n /**\n * Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.\n * @environment SHOPIFY_FLAG_ALLOW_DELETES\n */\n '--allow-deletes'?: ''\n\n /**\n * Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.\n * @environment SHOPIFY_FLAG_ALLOW_UPDATES\n */\n '--allow-updates'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Optional message that will be associated with this version. This is for internal use only and won't be available externally.\n * @environment SHOPIFY_FLAG_MESSAGE\n */\n '--message '?: string\n\n /**\n * Use with caution: Skips building any elements of the app that require building. You should ensure your app has been prepared in advance, such as by running `shopify app build` or by caching build artifacts.\n * @environment SHOPIFY_FLAG_NO_BUILD\n */\n '--no-build'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation is not required.\n * @environment SHOPIFY_FLAG_NO_RELEASE\n */\n '--no-release'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * URL associated with the new app version.\n * @environment SHOPIFY_FLAG_SOURCE_CONTROL_URL\n */\n '--source-control-url '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Optional version tag that will be associated with this app version. If not provided, an auto-generated identifier will be generated for this app version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" + "value": "export interface appdeploy {\n /**\n * Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates. In non-interactive environments, provide this flag, --allow-updates, or --no-release.\n * @environment SHOPIFY_FLAG_ALLOW_DELETES\n */\n '--allow-deletes'?: ''\n\n /**\n * Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments. In non-interactive environments, provide this flag, --allow-deletes, or --no-release.\n * @environment SHOPIFY_FLAG_ALLOW_UPDATES\n */\n '--allow-updates'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Optional message that will be associated with this version. This is for internal use only and won't be available externally.\n * @environment SHOPIFY_FLAG_MESSAGE\n */\n '--message '?: string\n\n /**\n * Use with caution: Skips building any elements of the app that require building. You should ensure your app has been prepared in advance, such as by running `shopify app build` or by caching build artifacts.\n * @environment SHOPIFY_FLAG_NO_BUILD\n */\n '--no-build'?: ''\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation is not required. In non-interactive environments, provide this flag, --allow-updates, or --allow-deletes.\n * @environment SHOPIFY_FLAG_NO_RELEASE\n */\n '--no-release'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * URL associated with the new app version.\n * @environment SHOPIFY_FLAG_SOURCE_CONTROL_URL\n */\n '--source-control-url '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Optional version tag that will be associated with this app version. If not provided, an auto-generated identifier will be generated for this app version.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version '?: string\n}" } }, "appdevclean": { @@ -1671,7 +1671,7 @@ "syntaxKind": "PropertySignature", "name": "-l, --log ", "value": "string", - "description": "Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of `shopify app dev` and is the suffix of the log file name.", + "description": "Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of `shopify app dev` and is the suffix of the log file name. Required if non interactive.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_LOG" }, @@ -1685,7 +1685,7 @@ "environmentValue": "SHOPIFY_FLAG_WATCH" } ], - "value": "export interface appfunctionreplay {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of `shopify app dev` and is the suffix of the log file name.\n * @environment SHOPIFY_FLAG_LOG\n */\n '-l, --log '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Re-run the function when the source code changes.\n * @environment SHOPIFY_FLAG_WATCH\n */\n '-w, --watch'?: ''\n}" + "value": "export interface appfunctionreplay {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Output the result as JSON. Automatically disables color output.\n * @environment SHOPIFY_FLAG_JSON\n */\n '-j, --json'?: ''\n\n /**\n * Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of `shopify app dev` and is the suffix of the log file name. Required if non interactive.\n * @environment SHOPIFY_FLAG_LOG\n */\n '-l, --log '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your function directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * Re-run the function when the source code changes.\n * @environment SHOPIFY_FLAG_WATCH\n */\n '-w, --watch'?: ''\n}" } }, "appfunctionrun": { @@ -1985,7 +1985,7 @@ "syntaxKind": "PropertySignature", "name": "--flavor ", "value": "string", - "description": "Choose a starting template for your extension, where applicable", + "description": "Choose a starting template for your extension, where applicable. Required if non interactive when the selected extension template supports multiple flavors.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_FLAVOR" }, @@ -2039,7 +2039,7 @@ "syntaxKind": "PropertySignature", "name": "-n, --name ", "value": "string", - "description": "name of your Extension", + "description": "name of your Extension. Required if non interactive.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_NAME" }, @@ -2048,12 +2048,12 @@ "syntaxKind": "PropertySignature", "name": "-t, --template ", "value": "string", - "description": "Extension template", + "description": "Extension template. Required if non interactive.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_EXTENSION_TEMPLATE" } ], - "value": "export interface appgenerateextension {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Choose a starting template for your extension, where applicable\n * @environment SHOPIFY_FLAG_FLAVOR\n */\n '--flavor '?: string\n\n /**\n * name of your Extension\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Extension template\n * @environment SHOPIFY_FLAG_EXTENSION_TEMPLATE\n */\n '-t, --template '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appgenerateextension {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Choose a starting template for your extension, where applicable. Required if non interactive when the selected extension template supports multiple flavors.\n * @environment SHOPIFY_FLAG_FLAVOR\n */\n '--flavor '?: string\n\n /**\n * name of your Extension. Required if non interactive.\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Extension template. Required if non interactive.\n * @environment SHOPIFY_FLAG_EXTENSION_TEMPLATE\n */\n '-t, --template '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "appgraphiql": { @@ -2445,7 +2445,7 @@ "syntaxKind": "PropertySignature", "name": "--client-id ", "value": "string", - "description": "The Client ID of your app. Use this to automatically link your new project to an existing app. Using this flag avoids the app selection prompt.", + "description": "The Client ID of your app. Use this to automatically link your new project to an existing app. In non-interactive environments, provide this flag or both --name and --organization-id.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_CLIENT_ID" }, @@ -2454,7 +2454,7 @@ "syntaxKind": "PropertySignature", "name": "--flavor ", "value": "string", - "description": "Which flavor of the given template to use.", + "description": "Which flavor of the given template to use. Required in non-interactive environments when the selected template offers multiple flavors.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_TEMPLATE_FLAVOR" }, @@ -2472,7 +2472,7 @@ "syntaxKind": "PropertySignature", "name": "--organization-id ", "value": "string", - "description": "The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/", + "description": "The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/. Required in non-interactive environments unless --client-id is provided.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_ORGANIZATION_ID" }, @@ -2481,7 +2481,7 @@ "syntaxKind": "PropertySignature", "name": "--template ", "value": "string", - "description": "The app template. Accepts one of the following: - \n - Any GitHub repo with optional branch and subpath, e.g., https://github.com/Shopify//[subpath]#[branch]", + "description": "The app template. Accepts one of the following: - \n - Any GitHub repo with optional branch and subpath, e.g., https://github.com/Shopify//[subpath]#[branch]. Required if non interactive.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_TEMPLATE" }, @@ -2508,7 +2508,7 @@ "syntaxKind": "PropertySignature", "name": "-n, --name ", "value": "string", - "description": "The name for the new app. When provided, skips the app selection prompt and creates a new app with this name.", + "description": "The name for the new app. When provided, skips the app selection prompt and creates a new app with this name. Required in non-interactive environments unless --client-id is provided.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_NAME" }, @@ -2522,7 +2522,7 @@ "environmentValue": "SHOPIFY_FLAG_PATH" } ], - "value": "export interface appinit {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app. Use this to automatically link your new project to an existing app. Using this flag avoids the app selection prompt.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * Which flavor of the given template to use.\n * @environment SHOPIFY_FLAG_TEMPLATE_FLAVOR\n */\n '--flavor '?: string\n\n /**\n * The name for the new app. When provided, skips the app selection prompt and creates a new app with this name.\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/\n * @environment SHOPIFY_FLAG_ORGANIZATION_ID\n */\n '--organization-id '?: string\n\n /**\n * \n * @environment SHOPIFY_FLAG_PACKAGE_MANAGER\n */\n '-d, --package-manager '?: string\n\n /**\n * \n * @environment SHOPIFY_FLAG_PATH\n */\n '-p, --path '?: string\n\n /**\n * The app template. Accepts one of the following:\n - \n - Any GitHub repo with optional branch and subpath, e.g., https://github.com/Shopify//[subpath]#[branch]\n * @environment SHOPIFY_FLAG_TEMPLATE\n */\n '--template '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" + "value": "export interface appinit {\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app. Use this to automatically link your new project to an existing app. In non-interactive environments, provide this flag or both --name and --organization-id.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * Which flavor of the given template to use. Required in non-interactive environments when the selected template offers multiple flavors.\n * @environment SHOPIFY_FLAG_TEMPLATE_FLAVOR\n */\n '--flavor '?: string\n\n /**\n * The name for the new app. When provided, skips the app selection prompt and creates a new app with this name. Required in non-interactive environments unless --client-id is provided.\n * @environment SHOPIFY_FLAG_NAME\n */\n '-n, --name '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/. Required in non-interactive environments unless --client-id is provided.\n * @environment SHOPIFY_FLAG_ORGANIZATION_ID\n */\n '--organization-id '?: string\n\n /**\n * \n * @environment SHOPIFY_FLAG_PACKAGE_MANAGER\n */\n '-d, --package-manager '?: string\n\n /**\n * \n * @environment SHOPIFY_FLAG_PATH\n */\n '-p, --path '?: string\n\n /**\n * The app template. Accepts one of the following:\n - \n - Any GitHub repo with optional branch and subpath, e.g., https://github.com/Shopify//[subpath]#[branch]. Required if non interactive.\n * @environment SHOPIFY_FLAG_TEMPLATE\n */\n '--template '?: string\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n}" } }, "applogssources": { @@ -2721,7 +2721,7 @@ "syntaxKind": "PropertySignature", "name": "--allow-deletes", "value": "''", - "description": "Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.", + "description": "Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates. Required in non-interactive environments unless --allow-updates is provided.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_ALLOW_DELETES" }, @@ -2730,7 +2730,7 @@ "syntaxKind": "PropertySignature", "name": "--allow-updates", "value": "''", - "description": "Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.", + "description": "Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments. Required in non-interactive environments unless --allow-deletes is provided.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_ALLOW_UPDATES" }, @@ -2806,7 +2806,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface apprelease {\n /**\n * Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.\n * @environment SHOPIFY_FLAG_ALLOW_DELETES\n */\n '--allow-deletes'?: ''\n\n /**\n * Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.\n * @environment SHOPIFY_FLAG_ALLOW_UPDATES\n */\n '--allow-updates'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The name of the app version to release.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version ': string\n}" + "value": "export interface apprelease {\n /**\n * Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates. Required in non-interactive environments unless --allow-updates is provided.\n * @environment SHOPIFY_FLAG_ALLOW_DELETES\n */\n '--allow-deletes'?: ''\n\n /**\n * Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments. Required in non-interactive environments unless --allow-deletes is provided.\n * @environment SHOPIFY_FLAG_ALLOW_UPDATES\n */\n '--allow-updates'?: ''\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Disable color output.\n * @environment SHOPIFY_FLAG_NO_COLOR\n */\n '--no-color'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * Increase the verbosity of the output. May include sensitive data.\n * @environment SHOPIFY_FLAG_VERBOSE\n */\n '--verbose'?: ''\n\n /**\n * The name of the app version to release.\n * @environment SHOPIFY_FLAG_VERSION\n */\n '--version ': string\n}" } }, "appversionslist": { @@ -2904,7 +2904,7 @@ "syntaxKind": "PropertySignature", "name": "--address ", "value": "string", - "description": "The URL where the webhook payload should be sent. You will need a different address type for each delivery-method:\n · For remote HTTP testing, use a URL that starts with https://\n · For local HTTP testing, use http://localhost:{port}/{url-path}\n · For Google Pub/Sub, use pubsub://{project-id}:{topic-id}\n · For Amazon EventBridge, use an Amazon Resource Name (ARN) starting with arn:aws:events:", + "description": "The URL where the webhook payload should be sent. You will need a different address type for each delivery-method:\n · For remote HTTP testing, use a URL that starts with https://\n · For local HTTP testing, use http://localhost:{port}/{url-path}\n · For Google Pub/Sub, use pubsub://{project-id}:{topic-id}\n · For Amazon EventBridge, use an Amazon Resource Name (ARN) starting with arn:aws:events:. Required if non interactive.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_ADDRESS" }, @@ -2913,7 +2913,7 @@ "syntaxKind": "PropertySignature", "name": "--api-version ", "value": "string", - "description": "The API Version of the webhook topic.", + "description": "The API Version of the webhook topic. Required if non interactive.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_API_VERSION" }, @@ -2985,7 +2985,7 @@ "syntaxKind": "PropertySignature", "name": "--topic ", "value": "string", - "description": "The requested webhook topic.", + "description": "The requested webhook topic. Required if non interactive.", "isOptional": true, "environmentValue": "SHOPIFY_FLAG_TOPIC" }, @@ -2999,7 +2999,7 @@ "environmentValue": "SHOPIFY_FLAG_APP_CONFIG" } ], - "value": "export interface appwebhooktrigger {\n /**\n * The URL where the webhook payload should be sent.\n You will need a different address type for each delivery-method:\n · For remote HTTP testing, use a URL that starts with https://\n · For local HTTP testing, use http://localhost:{port}/{url-path}\n · For Google Pub/Sub, use pubsub://{project-id}:{topic-id}\n · For Amazon EventBridge, use an Amazon Resource Name (ARN) starting with arn:aws:events:\n * @environment SHOPIFY_FLAG_ADDRESS\n */\n '--address '?: string\n\n /**\n * The API Version of the webhook topic.\n * @environment SHOPIFY_FLAG_API_VERSION\n */\n '--api-version '?: string\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * Your app's client secret. This secret allows us to return the X-Shopify-Hmac-SHA256 header that lets you validate the origin of the response that you receive.\n * @environment SHOPIFY_FLAG_CLIENT_SECRET\n */\n '--client-secret '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Method chosen to deliver the topic payload. If not passed, it's inferred from the address.\n * @environment SHOPIFY_FLAG_DELIVERY_METHOD\n */\n '--delivery-method '?: string\n\n /**\n * This help. When you run the trigger command the CLI will prompt you for any information that isn't passed using flags.\n * @environment SHOPIFY_FLAG_HELP\n */\n '--help'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The requested webhook topic.\n * @environment SHOPIFY_FLAG_TOPIC\n */\n '--topic '?: string\n}" + "value": "export interface appwebhooktrigger {\n /**\n * The URL where the webhook payload should be sent.\n You will need a different address type for each delivery-method:\n · For remote HTTP testing, use a URL that starts with https://\n · For local HTTP testing, use http://localhost:{port}/{url-path}\n · For Google Pub/Sub, use pubsub://{project-id}:{topic-id}\n · For Amazon EventBridge, use an Amazon Resource Name (ARN) starting with arn:aws:events:. Required if non interactive.\n * @environment SHOPIFY_FLAG_ADDRESS\n */\n '--address '?: string\n\n /**\n * The API Version of the webhook topic. Required if non interactive.\n * @environment SHOPIFY_FLAG_API_VERSION\n */\n '--api-version '?: string\n\n /**\n * Alias of the Shopify account to use for authentication.\n * @environment SHOPIFY_FLAG_AUTH_ALIAS\n */\n '--auth-alias '?: string\n\n /**\n * The Client ID of your app.\n * @environment SHOPIFY_FLAG_CLIENT_ID\n */\n '--client-id '?: string\n\n /**\n * Your app's client secret. This secret allows us to return the X-Shopify-Hmac-SHA256 header that lets you validate the origin of the response that you receive.\n * @environment SHOPIFY_FLAG_CLIENT_SECRET\n */\n '--client-secret '?: string\n\n /**\n * The name of the app configuration.\n * @environment SHOPIFY_FLAG_APP_CONFIG\n */\n '-c, --config '?: string\n\n /**\n * Method chosen to deliver the topic payload. If not passed, it's inferred from the address.\n * @environment SHOPIFY_FLAG_DELIVERY_METHOD\n */\n '--delivery-method '?: string\n\n /**\n * This help. When you run the trigger command the CLI will prompt you for any information that isn't passed using flags.\n * @environment SHOPIFY_FLAG_HELP\n */\n '--help'?: ''\n\n /**\n * The path to your app directory.\n * @environment SHOPIFY_FLAG_PATH\n */\n '--path '?: string\n\n /**\n * Reset all your settings.\n * @environment SHOPIFY_FLAG_RESET\n */\n '--reset'?: ''\n\n /**\n * The requested webhook topic. Required if non interactive.\n * @environment SHOPIFY_FLAG_TOPIC\n */\n '--topic '?: string\n}" } }, "authlogin": { diff --git a/packages/app/src/cli/commands/app/config/link.test.ts b/packages/app/src/cli/commands/app/config/link.test.ts index ef7244a2d61..d1c976be5fd 100644 --- a/packages/app/src/cli/commands/app/config/link.test.ts +++ b/packages/app/src/cli/commands/app/config/link.test.ts @@ -3,15 +3,18 @@ import link from '../../../services/app/config/link.js' import {linkedAppContext} from '../../../services/app-context.js' import {testAppLinked, testOrganizationApp} from '../../../models/app/app.test-data.js' import {inTemporaryDirectory} from '@shopify/cli-kit/node/fs' +import {terminalSupportsPrompting} from '@shopify/cli-kit/node/system' import {beforeEach, describe, expect, test, vi} from 'vitest' vi.mock('../../../services/app/config/link.js') vi.mock('../../../services/app-context.js') +vi.mock('@shopify/cli-kit/node/system') describe('app config link command', () => { beforeEach(() => { vi.mocked(link).mockReset() vi.mocked(linkedAppContext).mockReset() + vi.mocked(terminalSupportsPrompting).mockReturnValue(true) }) test('accepts --client-id with --file-name to link a specific app to a specific config file', async () => { diff --git a/packages/app/src/cli/commands/app/config/link.ts b/packages/app/src/cli/commands/app/config/link.ts index b51b016bab9..3f6c5b1e553 100644 --- a/packages/app/src/cli/commands/app/config/link.ts +++ b/packages/app/src/cli/commands/app/config/link.ts @@ -3,7 +3,7 @@ import {linkedAppContext} from '../../../services/app-context.js' import link, {LinkOptions} from '../../../services/app/config/link.js' import AppLinkedCommand, {AppLinkedCommandOutput} from '../../../utilities/app-linked-command.js' import {Flags} from '@oclif/core' -import {globalFlags} from '@shopify/cli-kit/node/cli' +import {globalFlags, requiredIfNonInteractive} from '@shopify/cli-kit/node/cli' export default class ConfigLink extends AppLinkedCommand { static summary = 'Fetch your app configuration from the Developer Dashboard.' @@ -23,6 +23,7 @@ export default class ConfigLink extends AppLinkedCommand { env: 'SHOPIFY_FLAG_ORGANIZATION_ID', exclusive: ['client-id'], }), + 'client-id': requiredIfNonInteractive(appFlags['client-id']), 'file-name': Flags.string({ hidden: false, description: 'The name of the app configuration file to create or overwrite.', diff --git a/packages/app/src/cli/commands/app/deploy.ts b/packages/app/src/cli/commands/app/deploy.ts index dd36957d820..e82a795f61e 100644 --- a/packages/app/src/cli/commands/app/deploy.ts +++ b/packages/app/src/cli/commands/app/deploy.ts @@ -8,6 +8,7 @@ import {linkedAppContext} from '../../services/app-context.js' import {Flags} from '@oclif/core' import {globalFlags} from '@shopify/cli-kit/node/cli' import {addPublicMetadata} from '@shopify/cli-kit/node/metadata' +import type {NonTTYFlagRequirement} from '@shopify/cli-kit/node/base-command' export default class Deploy extends AppLinkedCommand { static summary = 'Deploy your Shopify app.' @@ -27,19 +28,19 @@ export default class Deploy extends AppLinkedCommand { 'allow-updates': Flags.boolean({ hidden: false, description: - 'Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.', + 'Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments. In non-interactive environments, provide this flag, --allow-deletes, or --no-release.', env: 'SHOPIFY_FLAG_ALLOW_UPDATES', }), 'allow-deletes': Flags.boolean({ hidden: false, description: - 'Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.', + 'Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates. In non-interactive environments, provide this flag, --allow-updates, or --no-release.', env: 'SHOPIFY_FLAG_ALLOW_DELETES', }), 'no-release': Flags.boolean({ hidden: false, description: - "Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation is not required.", + "Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation is not required. In non-interactive environments, provide this flag, --allow-updates, or --allow-deletes.", env: 'SHOPIFY_FLAG_NO_RELEASE', default: false, exclusive: ['allow-updates', 'allow-deletes'], @@ -69,6 +70,10 @@ export default class Deploy extends AppLinkedCommand { }), } + static nonTTYFlagRequirements(): NonTTYFlagRequirement[] { + return [{flags: ['allow-updates', 'allow-deletes', 'no-release']}] + } + async run(): Promise { const {flags} = await this.parse(Deploy) @@ -87,14 +92,6 @@ export default class Deploy extends AppLinkedCommand { cmd_app_reset_used: flags.reset, })) - // When releasing, we require --no-release or --allow-updates or --allow-deletes for non-TTY. - const requiredNonTTYFlags: string[] = [] - const hasAnyForceFlags = flags['no-release'] || flags['allow-updates'] || flags['allow-deletes'] - if (!hasAnyForceFlags) { - requiredNonTTYFlags.push('allow-updates') - } - this.failMissingNonTTYFlags(flags, requiredNonTTYFlags) - const {app, project, remoteApp, developerPlatformClient, organization} = await linkedAppContext({ directory: flags.path, clientId, diff --git a/packages/app/src/cli/commands/app/function/replay.ts b/packages/app/src/cli/commands/app/function/replay.ts index 5935991e48a..f0d2b4bcfec 100644 --- a/packages/app/src/cli/commands/app/function/replay.ts +++ b/packages/app/src/cli/commands/app/function/replay.ts @@ -3,7 +3,7 @@ import {replay} from '../../../services/function/replay.js' import {appFlags} from '../../../flags.js' import AppLinkedCommand, {AppLinkedCommandOutput} from '../../../utilities/app-linked-command.js' import {linkedAppContext} from '../../../services/app-context.js' -import {globalFlags, jsonFlag} from '@shopify/cli-kit/node/cli' +import {globalFlags, jsonFlag, requiredIfNonInteractive} from '@shopify/cli-kit/node/cli' import {Flags} from '@oclif/core' export default class FunctionReplay extends AppLinkedCommand { @@ -18,12 +18,14 @@ export default class FunctionReplay extends AppLinkedCommand { ...appFlags, ...functionFlags, ...jsonFlag, - log: Flags.string({ - char: 'l', - description: - 'Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of `shopify app dev` and is the suffix of the log file name.', - env: 'SHOPIFY_FLAG_LOG', - }), + log: requiredIfNonInteractive( + Flags.string({ + char: 'l', + description: + 'Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of `shopify app dev` and is the suffix of the log file name.', + env: 'SHOPIFY_FLAG_LOG', + }), + ), watch: Flags.boolean({ char: 'w', hidden: false, diff --git a/packages/app/src/cli/commands/app/generate/extension.ts b/packages/app/src/cli/commands/app/generate/extension.ts index b0ea709fb9a..7b831444c69 100644 --- a/packages/app/src/cli/commands/app/generate/extension.ts +++ b/packages/app/src/cli/commands/app/generate/extension.ts @@ -5,7 +5,7 @@ import {checkFolderIsValidApp} from '../../../models/app/loader.js' import AppLinkedCommand, {AppLinkedCommandOutput} from '../../../utilities/app-linked-command.js' import {linkedAppContext} from '../../../services/app-context.js' import {Flags} from '@oclif/core' -import {globalFlags} from '@shopify/cli-kit/node/cli' +import {globalFlags, requiredIfNonInteractive} from '@shopify/cli-kit/node/cli' export default class AppGenerateExtension extends AppLinkedCommand { static summary = 'Generate a new app Extension.' @@ -20,18 +20,22 @@ export default class AppGenerateExtension extends AppLinkedCommand { static flags = { ...globalFlags, ...appFlags, - template: Flags.string({ - char: 't', - hidden: false, - description: `Extension template`, - env: 'SHOPIFY_FLAG_EXTENSION_TEMPLATE', - }), - name: Flags.string({ - char: 'n', - hidden: false, - description: 'name of your Extension', - env: 'SHOPIFY_FLAG_NAME', - }), + template: requiredIfNonInteractive( + Flags.string({ + char: 't', + hidden: false, + description: `Extension template`, + env: 'SHOPIFY_FLAG_EXTENSION_TEMPLATE', + }), + ), + name: requiredIfNonInteractive( + Flags.string({ + char: 'n', + hidden: false, + description: 'name of your Extension', + env: 'SHOPIFY_FLAG_NAME', + }), + ), 'clone-url': Flags.string({ hidden: true, char: 'u', @@ -41,7 +45,8 @@ export default class AppGenerateExtension extends AppLinkedCommand { }), flavor: Flags.string({ hidden: false, - description: 'Choose a starting template for your extension, where applicable', + description: + 'Choose a starting template for your extension, where applicable. Required if non interactive when the selected extension template supports multiple flavors.', options: ['vanilla-js', 'react', 'typescript', 'typescript-react', 'wasm', 'rust'], env: 'SHOPIFY_FLAG_FLAVOR', }), diff --git a/packages/app/src/cli/commands/app/init.test.ts b/packages/app/src/cli/commands/app/init.test.ts index d71020077ef..90c1d013279 100644 --- a/packages/app/src/cli/commands/app/init.test.ts +++ b/packages/app/src/cli/commands/app/init.test.ts @@ -12,12 +12,15 @@ import { testOrganization, testOrganizationApp, } from '../../models/app/app.test-data.js' -import {describe, expect, test, vi} from 'vitest' +import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest' import {mockAndCaptureOutput} from '@shopify/cli-kit/node/testing/output' import {inTemporaryDirectory} from '@shopify/cli-kit/node/fs' import {inferPackageManager} from '@shopify/cli-kit/node/node-package-manager' -vi.mock('../../prompts/init/init.js') +vi.mock('../../prompts/init/init.js', async (importOriginal) => { + const actual = await importOriginal() + return {...actual, default: vi.fn()} +}) vi.mock('../../services/init/init.js') vi.mock('../../utilities/developer-platform-client.js') vi.mock('../../services/context.js') @@ -32,7 +35,59 @@ vi.mock('../../prompts/dev.js') vi.mock('../../services/init/validate.js') vi.mock('@shopify/cli-kit/node/node-package-manager') +let originalStdinIsTTY: boolean | undefined +let originalStdoutIsTTY: boolean | undefined + +beforeEach(() => { + originalStdinIsTTY = process.stdin.isTTY + originalStdoutIsTTY = process.stdout.isTTY + vi.unstubAllEnvs() + Object.defineProperty(process.stdin, 'isTTY', {value: true, configurable: true, writable: true}) + Object.defineProperty(process.stdout, 'isTTY', {value: true, configurable: true, writable: true}) + vi.stubEnv('CI', '') +}) + +afterEach(() => { + Object.defineProperty(process.stdin, 'isTTY', {value: originalStdinIsTTY, configurable: true, writable: true}) + Object.defineProperty(process.stdout, 'isTTY', {value: originalStdoutIsTTY, configurable: true, writable: true}) +}) + describe('Init command', () => { + test('reports all unconditional requirements before running non-interactively', async () => { + await inTemporaryDirectory(async (tmpDir) => { + vi.stubEnv('CI', 'true') + const outputMock = mockAndCaptureOutput() + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) + + try { + await expect(Init.run(['--path', tmpDir])).rejects.toThrow('process.exit unexpectedly called with "1"') + expect(outputMock.error()).toContain('--template') + expect(outputMock.error()).toContain('--name or --client-id') + expect(outputMock.error()).toContain('--organization-id or --client-id') + expect(outputMock.error()).not.toContain('--flavor') + } finally { + consoleErrorSpy.mockRestore() + } + }) + }) + + test('requires a flavor non-interactively when the selected template offers flavors', async () => { + await inTemporaryDirectory(async (tmpDir) => { + vi.stubEnv('CI', 'true') + const outputMock = mockAndCaptureOutput() + const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) + + try { + await expect( + Init.run(['--path', tmpDir, '--template', 'reactRouter', '--name', 'my-app', '--organization-id', '1']), + ).rejects.toThrow('process.exit unexpectedly called with "1"') + expect(outputMock.error()).toContain('--flavor') + } finally { + consoleErrorSpy.mockRestore() + } + }) + }) + test('runs init command with default flags', async () => { await inTemporaryDirectory(async (tmpDir) => { // Given @@ -79,6 +134,7 @@ describe('Init command', () => { test('runs init command without prompts when organization-id, name, and template flags are provided', async () => { await inTemporaryDirectory(async (tmpDir) => { // Given + vi.stubEnv('CI', 'true') const mockOrganization = testOrganization() const mockDeveloperPlatformClient = testDeveloperPlatformClient() const mockApp = testAppLinked() @@ -100,8 +156,8 @@ describe('Init command', () => { }) vi.mocked(initPrompt).mockResolvedValue({ - template: 'https://github.com/Shopify/shopify-app-template-remix', - templateType: 'remix', + template: 'https://github.com/Shopify/shopify-app-template-extension-only', + templateType: 'none', globalCLIResult: {install: false, alreadyInstalled: false}, }) vi.mocked(initService).mockResolvedValue({app: mockApp}) @@ -113,7 +169,7 @@ describe('Init command', () => { '--name', 'my-app', '--template', - 'remix', + 'none', '--path', tmpDir, ]) @@ -130,7 +186,7 @@ describe('Init command', () => { expect.objectContaining({ name: 'my-app', packageManager: 'npm', - template: 'https://github.com/Shopify/shopify-app-template-remix', + template: 'https://github.com/Shopify/shopify-app-template-extension-only', }), ) }) diff --git a/packages/app/src/cli/commands/app/init.ts b/packages/app/src/cli/commands/app/init.ts index d30d1cdcf0c..03baa9ed3df 100644 --- a/packages/app/src/cli/commands/app/init.ts +++ b/packages/app/src/cli/commands/app/init.ts @@ -1,4 +1,4 @@ -import initPrompt, {visibleTemplates} from '../../prompts/init/init.js' +import initPrompt, {templateRequiresFlavor, visibleTemplates} from '../../prompts/init/init.js' import initService from '../../services/init/init.js' import {defaultDeveloperPlatformClient, DeveloperPlatformClient} from '../../utilities/developer-platform-client.js' import {appFromIdentifiers, selectOrg} from '../../services/context.js' @@ -10,7 +10,7 @@ import {appNamePrompt, createAsNewAppPrompt, selectAppPrompt} from '../../prompt import {searchForAppsByNameFactory} from '../../services/dev/prompt-helpers.js' import {isValidName} from '../../models/app/validation/common.js' import {Flags} from '@oclif/core' -import {globalFlags} from '@shopify/cli-kit/node/cli' +import {globalFlags, requiredIfNonInteractive} from '@shopify/cli-kit/node/cli' import {resolvePath, cwd} from '@shopify/cli-kit/node/path' import {addPublicMetadata} from '@shopify/cli-kit/node/metadata' @@ -18,10 +18,16 @@ import {installGlobalShopifyCLI} from '@shopify/cli-kit/node/is-global' import {generateRandomNameForSubdirectory} from '@shopify/cli-kit/node/fs' import {inferPackageManager} from '@shopify/cli-kit/node/node-package-manager' import {AbortError} from '@shopify/cli-kit/node/error' +import type {NonTTYFlagRequirement} from '@shopify/cli-kit/node/base-command' export default class Init extends AppLinkedCommand { static summary?: string | undefined = 'Create a new app project' + static examples = [ + '<%= config.bin %> <%= command.id %> --name my-app --organization-id 123 --template reactRouter --flavor typescript', + '<%= config.bin %> <%= command.id %> --client-id 123 --template none', + ] + static flags = { ...globalFlags, name: Flags.string({ @@ -29,7 +35,7 @@ export default class Init extends AppLinkedCommand { env: 'SHOPIFY_FLAG_NAME', hidden: false, description: - 'The name for the new app. When provided, skips the app selection prompt and creates a new app with this name.', + 'The name for the new app. When provided, skips the app selection prompt and creates a new app with this name. Required in non-interactive environments unless --client-id is provided.', }), path: Flags.string({ char: 'p', @@ -38,14 +44,17 @@ export default class Init extends AppLinkedCommand { default: async () => cwd(), hidden: false, }), - template: Flags.string({ - description: `The app template. Accepts one of the following: + template: requiredIfNonInteractive( + Flags.string({ + description: `The app template. Accepts one of the following: - <${visibleTemplates.join('|')}> - Any GitHub repo with optional branch and subpath, e.g., https://github.com/Shopify//[subpath]#[branch]`, - env: 'SHOPIFY_FLAG_TEMPLATE', - }), + env: 'SHOPIFY_FLAG_TEMPLATE', + }), + ), flavor: Flags.string({ - description: 'Which flavor of the given template to use.', + description: + 'Which flavor of the given template to use. Required in non-interactive environments when the selected template offers multiple flavors.', env: 'SHOPIFY_FLAG_TEMPLATE_FLAVOR', }), 'package-manager': Flags.string({ @@ -63,19 +72,30 @@ export default class Init extends AppLinkedCommand { 'client-id': Flags.string({ hidden: false, description: - 'The Client ID of your app. Use this to automatically link your new project to an existing app. Using this flag avoids the app selection prompt.', + 'The Client ID of your app. Use this to automatically link your new project to an existing app. In non-interactive environments, provide this flag or both --name and --organization-id.', env: 'SHOPIFY_FLAG_CLIENT_ID', exclusive: ['config'], }), 'organization-id': Flags.string({ hidden: false, description: - 'The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/', + 'The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/. Required in non-interactive environments unless --client-id is provided.', env: 'SHOPIFY_FLAG_ORGANIZATION_ID', exclusive: ['client-id'], }), } + static nonTTYFlagRequirements(): NonTTYFlagRequirement[] { + return [ + {flags: ['name', 'client-id']}, + {flags: ['organization-id', 'client-id']}, + { + flags: ['flavor'], + when: (flags) => templateRequiresFlavor(flags.template as string | undefined), + }, + ] + } + async run(): Promise { const {flags} = await this.parse(Init) diff --git a/packages/app/src/cli/commands/app/non-interactive-flags.test.ts b/packages/app/src/cli/commands/app/non-interactive-flags.test.ts new file mode 100644 index 00000000000..43ebd2f6137 --- /dev/null +++ b/packages/app/src/cli/commands/app/non-interactive-flags.test.ts @@ -0,0 +1,36 @@ +import ConfigLink from './config/link.js' +import Deploy from './deploy.js' +import FunctionReplay from './function/replay.js' +import AppGenerateExtension from './generate/extension.js' +import Release from './release.js' +import WebhookTrigger from './webhook/trigger.js' +import {describe, expect, test} from 'vitest' + +describe('non-interactive app command flags', () => { + test.each([ + {command: ConfigLink, flag: 'client-id'}, + {command: FunctionReplay, flag: 'log'}, + {command: AppGenerateExtension, flag: 'template'}, + {command: AppGenerateExtension, flag: 'name'}, + {command: WebhookTrigger, flag: 'api-version'}, + {command: WebhookTrigger, flag: 'topic'}, + {command: WebhookTrigger, flag: 'address'}, + ])('$command.name documents --$flag as required', ({command, flag}) => { + const flags = command.flags as Record + expect(flags[flag]!.description).toMatch(/Required if non interactive\.$/) + }) + + test('app deploy accepts any flag that skips confirmation', () => { + expect(Deploy.nonTTYFlagRequirements()).toEqual([{flags: ['allow-updates', 'allow-deletes', 'no-release']}]) + }) + + test('app generate extension documents its template-dependent flavor requirement', () => { + expect(AppGenerateExtension.flags.flavor.description).toMatch( + /Required if non interactive when the selected extension template supports multiple flavors\.$/, + ) + }) + + test('app release accepts either flag that skips confirmation', () => { + expect(Release.nonTTYFlagRequirements()).toEqual([{flags: ['allow-updates', 'allow-deletes']}]) + }) +}) diff --git a/packages/app/src/cli/commands/app/release.ts b/packages/app/src/cli/commands/app/release.ts index 79d82322225..71d1a49478a 100644 --- a/packages/app/src/cli/commands/app/release.ts +++ b/packages/app/src/cli/commands/app/release.ts @@ -5,6 +5,7 @@ import {linkedAppContext} from '../../services/app-context.js' import {Flags} from '@oclif/core' import {globalFlags} from '@shopify/cli-kit/node/cli' import {addPublicMetadata} from '@shopify/cli-kit/node/metadata' +import type {NonTTYFlagRequirement} from '@shopify/cli-kit/node/base-command' export default class Release extends AppLinkedCommand { static summary = 'Release an app version.' @@ -21,13 +22,13 @@ export default class Release extends AppLinkedCommand { 'allow-updates': Flags.boolean({ hidden: false, description: - 'Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments.', + 'Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for CI/CD environments. Required in non-interactive environments unless --allow-deletes is provided.', env: 'SHOPIFY_FLAG_ALLOW_UPDATES', }), 'allow-deletes': Flags.boolean({ hidden: false, description: - 'Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates.', + 'Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the recommended flag is --allow-updates. Required in non-interactive environments unless --allow-updates is provided.', env: 'SHOPIFY_FLAG_ALLOW_DELETES', }), version: Flags.string({ @@ -38,6 +39,10 @@ export default class Release extends AppLinkedCommand { }), } + static nonTTYFlagRequirements(): NonTTYFlagRequirement[] { + return [{flags: ['allow-updates', 'allow-deletes']}] + } + async run(): Promise { const {flags} = await this.parse(Release) const clientId = flags['client-id'] @@ -52,13 +57,6 @@ export default class Release extends AppLinkedCommand { // and --allow-deletes are set. const force = Boolean(allowUpdates && allowDeletes) - // We require --allow-updates or --allow-deletes for non-TTY. - const requiredNonTTYFlags: string[] = [] - if (!allowUpdates && !allowDeletes) { - requiredNonTTYFlags.push('allow-updates') - } - this.failMissingNonTTYFlags(flags, requiredNonTTYFlags) - const {app, remoteApp, developerPlatformClient} = await linkedAppContext({ directory: flags.path, clientId, diff --git a/packages/app/src/cli/commands/app/webhook/trigger.ts b/packages/app/src/cli/commands/app/webhook/trigger.ts index 6d45a721b69..a76a8b2f05d 100644 --- a/packages/app/src/cli/commands/app/webhook/trigger.ts +++ b/packages/app/src/cli/commands/app/webhook/trigger.ts @@ -5,6 +5,7 @@ import {appFlags} from '../../../flags.js' import AppLinkedCommand, {AppLinkedCommandOutput} from '../../../utilities/app-linked-command.js' import {linkedAppContext} from '../../../services/app-context.js' import {Flags} from '@oclif/core' +import {requiredIfNonInteractive} from '@shopify/cli-kit/node/cli' export default class WebhookTrigger extends AppLinkedCommand { static summary = 'Trigger delivery of a sample webhook topic payload to a designated address.' @@ -36,18 +37,22 @@ export default class WebhookTrigger extends AppLinkedCommand { env: 'SHOPIFY_FLAG_HELP', description: `This help. When you run the trigger command the CLI will prompt you for any information that isn't passed using flags.`, }), - topic: Flags.string({ - required: false, - hidden: false, - env: 'SHOPIFY_FLAG_TOPIC', - description: 'The requested webhook topic.', - }), - 'api-version': Flags.string({ - required: false, - hidden: false, - env: 'SHOPIFY_FLAG_API_VERSION', - description: 'The API Version of the webhook topic.', - }), + topic: requiredIfNonInteractive( + Flags.string({ + required: false, + hidden: false, + env: 'SHOPIFY_FLAG_TOPIC', + description: 'The requested webhook topic.', + }), + ), + 'api-version': requiredIfNonInteractive( + Flags.string({ + required: false, + hidden: false, + env: 'SHOPIFY_FLAG_API_VERSION', + description: 'The API Version of the webhook topic.', + }), + ), 'delivery-method': Flags.string({ required: false, hidden: false, @@ -61,16 +66,18 @@ export default class WebhookTrigger extends AppLinkedCommand { env: 'SHOPIFY_FLAG_CLIENT_SECRET', description: `Your app's client secret. This secret allows us to return the X-Shopify-Hmac-SHA256 header that lets you validate the origin of the response that you receive.`, }), - address: Flags.string({ - required: false, - hidden: false, - env: 'SHOPIFY_FLAG_ADDRESS', - description: `The URL where the webhook payload should be sent. + address: requiredIfNonInteractive( + Flags.string({ + required: false, + hidden: false, + env: 'SHOPIFY_FLAG_ADDRESS', + description: `The URL where the webhook payload should be sent. You will need a different address type for each delivery-method: ${deliveryMethodInstructionsAsString(DELIVERY_METHOD.HTTP)} ${deliveryMethodInstructionsAsString(DELIVERY_METHOD.PUBSUB)} ${deliveryMethodInstructionsAsString(DELIVERY_METHOD.EVENTBRIDGE)}`, - }), + }), + ), } public async run(): Promise { diff --git a/packages/app/src/cli/prompts/init/init.test.ts b/packages/app/src/cli/prompts/init/init.test.ts index a4a06444755..25271931141 100644 --- a/packages/app/src/cli/prompts/init/init.test.ts +++ b/packages/app/src/cli/prompts/init/init.test.ts @@ -1,4 +1,4 @@ -import init, {InitOptions, visibleTemplates} from './init.js' +import init, {InitOptions, templateRequiresFlavor, visibleTemplates} from './init.js' import {describe, expect, vi, test, beforeEach} from 'vitest' import {renderSelectPrompt} from '@shopify/cli-kit/node/ui' import {installGlobalCLIPrompt} from '@shopify/cli-kit/node/is-global' @@ -47,6 +47,16 @@ describe('init', () => { }) }) + test.each<{template: string | undefined; expected: boolean}>([ + {template: 'reactRouter', expected: true}, + {template: 'remix', expected: true}, + {template: 'none', expected: false}, + {template: 'https://github.com/Shopify/custom-template', expected: false}, + {template: undefined, expected: false}, + ])('reports whether template $template requires a flavor', ({template, expected}) => { + expect(templateRequiresFlavor(template)).toBe(expected) + }) + test('it renders branches for templates that have them', async () => { const answers = { template: 'https://github.com/Shopify/shopify-app-template-react-router#javascript-cli', diff --git a/packages/app/src/cli/prompts/init/init.ts b/packages/app/src/cli/prompts/init/init.ts index dc9d1c51e36..15aeeac980e 100644 --- a/packages/app/src/cli/prompts/init/init.ts +++ b/packages/app/src/cli/prompts/init/init.ts @@ -141,3 +141,7 @@ export default init export function isPredefinedTemplate(template: string): template is PredefinedTemplate { return allTemplates.includes(template as PredefinedTemplate) } + +export function templateRequiresFlavor(template: string | undefined): boolean { + return template !== undefined && isPredefinedTemplate(template) && templates[template].branches !== undefined +} diff --git a/packages/cli/README.md b/packages/cli/README.md index f84c866d7cc..db489930fac 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -384,7 +384,7 @@ FLAGS [env: SHOPIFY_FLAG_AUTH_ALIAS] --client-id= - The Client ID of your app. + The Client ID of your app. Required if non interactive. [env: SHOPIFY_FLAG_CLIENT_ID] --file-name= @@ -577,12 +577,13 @@ FLAGS --allow-deletes Allows removing extensions and configuration without requiring user confirmation. For CI/CD environments, the - recommended flag is --allow-updates. + recommended flag is --allow-updates. In non-interactive environments, provide this flag, --allow-updates, or + --no-release. [env: SHOPIFY_FLAG_ALLOW_DELETES] --allow-updates Allows adding and updating extensions and configuration without requiring user confirmation. Recommended option for - CI/CD environments. + CI/CD environments. In non-interactive environments, provide this flag, --allow-deletes, or --no-release. [env: SHOPIFY_FLAG_ALLOW_UPDATES] --auth-alias= @@ -609,7 +610,7 @@ FLAGS --no-release Creates a version but doesn't release it - it's not made available to merchants. With this flag, a user confirmation - is not required. + is not required. In non-interactive environments, provide this flag, --allow-updates, or --allow-deletes. [env: SHOPIFY_FLAG_NO_RELEASE] --path= @@ -1090,7 +1091,7 @@ FLAGS -l, --log= Specifies a log identifier to replay instead of selecting from a list. The identifier is provided in the output of - `shopify app dev` and is the suffix of the log file name. + `shopify app dev` and is the suffix of the log file name. Required if non interactive. [env: SHOPIFY_FLAG_LOG] -w, --[no-]watch @@ -1304,11 +1305,11 @@ FLAGS [env: SHOPIFY_FLAG_APP_CONFIG] -n, --name= - name of your Extension + name of your Extension. Required if non interactive. [env: SHOPIFY_FLAG_NAME] -t, --template= - Extension template + Extension template. Required if non interactive. [env: SHOPIFY_FLAG_EXTENSION_TEMPLATE] --auth-alias= @@ -1320,7 +1321,8 @@ FLAGS [env: SHOPIFY_FLAG_CLIENT_ID] --flavor=