@shopify/cli-kit 3.16.3 → 3.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +1 -1
  3. package/assets/success.html +1 -1
  4. package/dist/analytics.d.ts +5 -5
  5. package/dist/analytics.js +5 -5
  6. package/dist/analytics.js.map +1 -1
  7. package/dist/api/common.d.ts +2 -2
  8. package/dist/api/common.js +2 -2
  9. package/dist/api/common.js.map +1 -1
  10. package/dist/api/graphql/index.d.ts +0 -2
  11. package/dist/api/graphql/index.js +0 -2
  12. package/dist/api/graphql/index.js.map +1 -1
  13. package/dist/api/oxygen.d.ts +5 -0
  14. package/dist/api/oxygen.js +30 -0
  15. package/dist/api/oxygen.js.map +1 -0
  16. package/dist/api/partners.d.ts +7 -7
  17. package/dist/api/partners.js +7 -7
  18. package/dist/api/partners.js.map +1 -1
  19. package/dist/api.d.ts +2 -2
  20. package/dist/api.js +2 -2
  21. package/dist/api.js.map +1 -1
  22. package/dist/common/object.d.ts +3 -3
  23. package/dist/common/object.js +3 -3
  24. package/dist/common/object.js.map +1 -1
  25. package/dist/content-tokens.js.map +1 -1
  26. package/dist/environment/fqdn.d.ts +3 -3
  27. package/dist/environment/fqdn.js +3 -3
  28. package/dist/environment/fqdn.js.map +1 -1
  29. package/dist/environment/local.d.ts +13 -13
  30. package/dist/environment/local.js +16 -16
  31. package/dist/environment/local.js.map +1 -1
  32. package/dist/environment/service.d.ts +1 -0
  33. package/dist/environment/service.js +3 -0
  34. package/dist/environment/service.js.map +1 -1
  35. package/dist/environment/spin.d.ts +12 -12
  36. package/dist/environment/spin.js +12 -12
  37. package/dist/environment/spin.js.map +1 -1
  38. package/dist/environment/utilities.d.ts +0 -2
  39. package/dist/environment/utilities.js +0 -2
  40. package/dist/environment/utilities.js.map +1 -1
  41. package/dist/environment.d.ts +3 -1
  42. package/dist/environment.js +3 -1
  43. package/dist/environment.js.map +1 -1
  44. package/dist/error.d.ts +1 -1
  45. package/dist/error.js +4 -3
  46. package/dist/error.js.map +1 -1
  47. package/dist/file.d.ts +17 -18
  48. package/dist/file.js +17 -18
  49. package/dist/file.js.map +1 -1
  50. package/dist/git.d.ts +1 -1
  51. package/dist/git.js +5 -2
  52. package/dist/git.js.map +1 -1
  53. package/dist/http/fetch.d.ts +2 -2
  54. package/dist/http/fetch.js +2 -2
  55. package/dist/http/fetch.js.map +1 -1
  56. package/dist/http.d.ts +1 -1
  57. package/dist/http.js +1 -1
  58. package/dist/http.js.map +1 -1
  59. package/dist/id.d.ts +1 -1
  60. package/dist/id.js +1 -1
  61. package/dist/id.js.map +1 -1
  62. package/dist/network/service.d.ts +0 -2
  63. package/dist/network/service.js +0 -1
  64. package/dist/network/service.js.map +1 -1
  65. package/dist/node/archiver.d.ts +2 -2
  66. package/dist/node/archiver.js +2 -2
  67. package/dist/node/archiver.js.map +1 -1
  68. package/dist/node/checksum.d.ts +2 -2
  69. package/dist/node/checksum.js +2 -2
  70. package/dist/node/checksum.js.map +1 -1
  71. package/dist/node/cli.d.ts +1 -2
  72. package/dist/node/cli.js +2 -8
  73. package/dist/node/cli.js.map +1 -1
  74. package/dist/node/colors.d.ts +2 -1
  75. package/dist/node/colors.js +2 -7
  76. package/dist/node/colors.js.map +1 -1
  77. package/dist/node/dot-env.d.ts +7 -7
  78. package/dist/node/dot-env.js +7 -7
  79. package/dist/node/dot-env.js.map +1 -1
  80. package/dist/node/framework.d.ts +2 -2
  81. package/dist/node/framework.js +2 -2
  82. package/dist/node/framework.js.map +1 -1
  83. package/dist/node/hooks/prerun.js +6 -6
  84. package/dist/node/hooks/prerun.js.map +1 -1
  85. package/dist/node/node-package-manager.d.ts +32 -28
  86. package/dist/node/node-package-manager.js +29 -29
  87. package/dist/node/node-package-manager.js.map +1 -1
  88. package/dist/node/ruby.d.ts +4 -4
  89. package/dist/node/ruby.js +5 -5
  90. package/dist/node/ruby.js.map +1 -1
  91. package/dist/os.d.ts +1 -1
  92. package/dist/os.js +1 -1
  93. package/dist/os.js.map +1 -1
  94. package/dist/output.d.ts +26 -34
  95. package/dist/output.js +23 -143
  96. package/dist/output.js.map +1 -1
  97. package/dist/path.d.ts +4 -4
  98. package/dist/path.js +4 -4
  99. package/dist/path.js.map +1 -1
  100. package/dist/plugins.d.ts +4 -4
  101. package/dist/plugins.js +4 -4
  102. package/dist/plugins.js.map +1 -1
  103. package/dist/port.d.ts +1 -1
  104. package/dist/port.js +1 -1
  105. package/dist/port.js.map +1 -1
  106. package/dist/private/node/ui/alert.d.ts +2 -0
  107. package/dist/private/node/ui/alert.js +18 -0
  108. package/dist/private/node/ui/alert.js.map +1 -0
  109. package/dist/private/node/ui/components/Alert.d.ts +17 -0
  110. package/dist/private/node/ui/components/Alert.js +21 -0
  111. package/dist/private/node/ui/components/Alert.js.map +1 -0
  112. package/dist/private/node/ui/components/Banner.d.ts +7 -0
  113. package/dist/private/node/ui/components/Banner.js +35 -0
  114. package/dist/private/node/ui/components/Banner.js.map +1 -0
  115. package/dist/private/node/ui/components/Command.d.ts +9 -0
  116. package/dist/private/node/ui/components/Command.js +10 -0
  117. package/dist/private/node/ui/components/Command.js.map +1 -0
  118. package/dist/private/node/ui/components/ConcurrentOutput.d.ts +48 -0
  119. package/dist/private/node/ui/components/ConcurrentOutput.js +98 -0
  120. package/dist/private/node/ui/components/ConcurrentOutput.js.map +1 -0
  121. package/dist/private/node/ui/components/Error.d.ts +8 -0
  122. package/dist/private/node/ui/components/Error.js +13 -0
  123. package/dist/private/node/ui/components/Error.js.map +1 -0
  124. package/dist/private/node/ui/components/FatalError.d.ts +7 -0
  125. package/dist/private/node/ui/components/FatalError.js +42 -0
  126. package/dist/private/node/ui/components/FatalError.js.map +1 -0
  127. package/dist/private/node/ui/components/FullScreen.d.ts +8 -0
  128. package/dist/private/node/ui/components/FullScreen.js +32 -0
  129. package/dist/private/node/ui/components/FullScreen.js.map +1 -0
  130. package/dist/private/node/ui/components/Link.d.ts +10 -0
  131. package/dist/private/node/ui/components/Link.js +14 -0
  132. package/dist/private/node/ui/components/Link.js.map +1 -0
  133. package/dist/private/node/ui/components/List.d.ts +13 -0
  134. package/dist/private/node/ui/components/List.js +19 -0
  135. package/dist/private/node/ui/components/List.js.map +1 -0
  136. package/dist/private/node/ui/components/TextAnimation.d.ts +11 -0
  137. package/dist/private/node/ui/components/TextAnimation.js +46 -0
  138. package/dist/private/node/ui/components/TextAnimation.js.map +1 -0
  139. package/dist/private/node/ui/components/TokenizedText.d.ts +21 -0
  140. package/dist/private/node/ui/components/TokenizedText.js +26 -0
  141. package/dist/private/node/ui/components/TokenizedText.js.map +1 -0
  142. package/dist/private/node/ui/error.d.ts +4 -0
  143. package/dist/private/node/ui/error.js +12 -0
  144. package/dist/private/node/ui/error.js.map +1 -0
  145. package/dist/private/node/ui.d.ts +10 -0
  146. package/dist/private/node/ui.js +47 -0
  147. package/dist/private/node/ui.js.map +1 -0
  148. package/dist/public/common/array.d.ts +4 -4
  149. package/dist/public/common/array.js +4 -4
  150. package/dist/public/common/array.js.map +1 -1
  151. package/dist/public/node/ui.d.ts +155 -0
  152. package/dist/public/node/ui.js +163 -0
  153. package/dist/public/node/ui.js.map +1 -0
  154. package/dist/secure-store.d.ts +4 -4
  155. package/dist/secure-store.js +4 -4
  156. package/dist/secure-store.js.map +1 -1
  157. package/dist/session/device-authorization.d.ts +5 -5
  158. package/dist/session/device-authorization.js +5 -5
  159. package/dist/session/device-authorization.js.map +1 -1
  160. package/dist/session/exchange.d.ts +10 -16
  161. package/dist/session/exchange.js +10 -16
  162. package/dist/session/exchange.js.map +1 -1
  163. package/dist/session/post-auth.js +2 -2
  164. package/dist/session/post-auth.js.map +1 -1
  165. package/dist/session/redirect-listener.js +1 -1
  166. package/dist/session/redirect-listener.js.map +1 -1
  167. package/dist/session/schema.d.ts +3 -2
  168. package/dist/session/schema.js +3 -2
  169. package/dist/session/schema.js.map +1 -1
  170. package/dist/session/scopes.d.ts +3 -3
  171. package/dist/session/scopes.js +3 -3
  172. package/dist/session/scopes.js.map +1 -1
  173. package/dist/session/store.d.ts +2 -2
  174. package/dist/session/store.js +2 -2
  175. package/dist/session/store.js.map +1 -1
  176. package/dist/session/token.d.ts +1 -1
  177. package/dist/session/token.js +1 -1
  178. package/dist/session/token.js.map +1 -1
  179. package/dist/session/validate.d.ts +4 -4
  180. package/dist/session/validate.js +4 -7
  181. package/dist/session/validate.js.map +1 -1
  182. package/dist/session.d.ts +10 -10
  183. package/dist/session.js +12 -12
  184. package/dist/session.js.map +1 -1
  185. package/dist/string.d.ts +2 -2
  186. package/dist/string.js +2 -2
  187. package/dist/string.js.map +1 -1
  188. package/dist/system.d.ts +6 -9
  189. package/dist/system.js +23 -23
  190. package/dist/system.js.map +1 -1
  191. package/dist/template.d.ts +3 -3
  192. package/dist/template.js +3 -3
  193. package/dist/template.js.map +1 -1
  194. package/dist/testing/fixtures/render-concurrent.d.ts +1 -0
  195. package/dist/testing/fixtures/render-concurrent.js +28 -0
  196. package/dist/testing/fixtures/render-concurrent.js.map +1 -0
  197. package/dist/testing/output.d.ts +1 -0
  198. package/dist/testing/output.js +1 -0
  199. package/dist/testing/output.js.map +1 -1
  200. package/dist/testing/store.d.ts +2 -2
  201. package/dist/testing/store.js +2 -2
  202. package/dist/testing/store.js.map +1 -1
  203. package/dist/testing/ui.d.ts +8 -0
  204. package/dist/testing/ui.js +17 -0
  205. package/dist/testing/ui.js.map +1 -0
  206. package/dist/tsconfig.tsbuildinfo +1 -1
  207. package/dist/ui/inquirer/input.d.ts +1 -1
  208. package/dist/ui.d.ts +1 -1
  209. package/dist/ui.js +17 -8
  210. package/dist/ui.js.map +1 -1
  211. package/dist/version.d.ts +3 -3
  212. package/dist/version.js +3 -3
  213. package/dist/version.js.map +1 -1
  214. package/package.json +9 -2
  215. package/dist/api/graphql/functions/compile_module.d.ts +0 -15
  216. package/dist/api/graphql/functions/compile_module.js +0 -13
  217. package/dist/api/graphql/functions/compile_module.js.map +0 -1
  218. package/dist/api/graphql/functions/module_compilation_status.d.ts +0 -15
  219. package/dist/api/graphql/functions/module_compilation_status.js +0 -13
  220. package/dist/api/graphql/functions/module_compilation_status.js.map +0 -1
@@ -7,7 +7,7 @@ export declare class CustomInput extends Input {
7
7
  constructor(questions: inquirer.Question<inquirer.Answers>, rl: Interface, answers: inquirer.Answers);
8
8
  protected render(error?: string): void;
9
9
  protected getQuestion(): string;
10
- protected prefix(): any;
10
+ protected prefix(): string;
11
11
  protected onError(data: {
12
12
  isValid: string;
13
13
  value: string;
package/dist/ui.d.ts CHANGED
@@ -34,4 +34,4 @@ export declare const task: ({ title, task }: TaskOptions) => Promise<void>;
34
34
  export declare const prompt: <TName extends string & keyof TAnswers, TAnswers extends { [key in TName]: string; } = { [key_1 in TName]: string; }>(questions: readonly Question<TName>[]) => Promise<TAnswers>;
35
35
  export declare function nonEmptyDirectoryPrompt(directory: string): Promise<void>;
36
36
  export declare function terminateBlockingPortProcessPrompt(port: number, stepDescription?: string): Promise<boolean>;
37
- export declare const keypress: () => Promise<void>;
37
+ export declare const keypress: () => Promise<unknown>;
package/dist/ui.js CHANGED
@@ -1,6 +1,6 @@
1
- import { CancelExecution, Abort } from './error.js';
1
+ import { CancelExecution, Abort, AbortSilent } from './error.js';
2
2
  import { remove, exists } from './file.js';
3
- import { info, completed, content, token, logUpdate, stringifyMessage } from './output.js';
3
+ import { info, completed, content, token, logUpdate, stringifyMessage, debug } from './output.js';
4
4
  import { colors } from './node/colors.js';
5
5
  import { relative } from './path.js';
6
6
  import { isTerminalInteractive } from './environment/local.js';
@@ -120,11 +120,20 @@ export async function terminateBlockingPortProcessPrompt(port, stepDescription)
120
120
  return choice.value === 'finish';
121
121
  }
122
122
  export const keypress = async () => {
123
- process.stdin.setRawMode(true);
124
- process.stdin.resume();
125
- return new Promise((resolve) => process.stdin.once('data', () => {
126
- process.stdin.setRawMode(false);
127
- resolve();
128
- }));
123
+ return new Promise((resolve, reject) => {
124
+ const handler = (buffer) => {
125
+ process.stdin.setRawMode(false);
126
+ process.stdin.pause();
127
+ const bytes = Array.from(buffer);
128
+ if (bytes.length && bytes[0] === 3) {
129
+ debug('Canceled keypress, User pressed CTRL+C');
130
+ reject(new AbortSilent());
131
+ }
132
+ process.nextTick(resolve);
133
+ };
134
+ process.stdin.resume();
135
+ process.stdin.setRawMode(true);
136
+ process.stdin.once('data', handler);
137
+ });
129
138
  };
130
139
  //# sourceMappingURL=ui.js.map
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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","sourcesContent":["import {CancelExecution, Abort} from './error.js'\nimport {remove, exists} from './file.js'\nimport {info, completed, content, token, logUpdate, Message, Logger, stringifyMessage} from './output.js'\nimport {colors} from './node/colors.js'\nimport {relative} from './path.js'\nimport {isTerminalInteractive} from './environment/local.js'\nimport {mapper as mapperUI, run as executorUI} from './ui/executor.js'\nimport {logToFile} from './log.js'\nimport {Listr as OriginalListr, ListrTask, ListrEvent, ListrTaskState, ListrBaseClassOptions} from 'listr2'\nimport findProcess from 'find-process'\n\nexport function newListr(tasks: ListrTask[], options?: object | ListrBaseClassOptions) {\n const listr = new OriginalListr(tasks, options)\n listr.tasks.forEach((task) => {\n const loggedSubtaskTitles: string[] = []\n task.subscribe((event: ListrEvent) => {\n if (event.type === 'TITLE' && typeof event.data === 'string') {\n logToFile(event.data, 'INFO')\n }\n })\n task.renderHook$.subscribe(() => {\n if (task.hasSubtasks()) {\n const activeSubtasks = task.subtasks.filter((subtask) => {\n return [ListrTaskState.PENDING, ListrTaskState.COMPLETED].includes(subtask.state as ListrTaskState)\n })\n activeSubtasks.forEach((subtask) => {\n if (subtask.title && !loggedSubtaskTitles.includes(subtask.title)) {\n loggedSubtaskTitles.push(subtask.title)\n logToFile(subtask.title, 'INFO')\n }\n })\n }\n })\n })\n return listr\n}\n\nexport type ListrTasks = ConstructorParameters<typeof OriginalListr>[0]\nexport type {ListrTaskWrapper, ListrDefaultRenderer, ListrTask} from 'listr2'\n\nexport interface Question<TName extends string = string> {\n name: TName\n message: string\n preface?: string\n validate?: (value: string) => string | true\n default?: string\n result?: (value: string) => string | boolean\n type: 'input' | 'select' | 'autocomplete' | 'password'\n choices?: QuestionChoiceType[]\n}\n\nexport interface QuestionChoiceType {\n name: string\n value: string\n group?: {name: string; order: number}\n}\n\nconst started = (content: Message, logger: Logger) => {\n const message = `${colors.yellow('❯')} ${stringifyMessage(content)}`\n info(message, logger)\n}\n\nconst failed = (content: Message, logger: Logger) => {\n const message = `${colors.red('✖')} ${stringifyMessage(content)}`\n info(message, logger)\n}\n\n/**\n * Performs a task with the title kept up to date and stdout available to the\n * task while it runs (there is no re-writing stdout while the task runs).\n */\nexport interface TaskOptions {\n title: string\n task: () => Promise<void | {successMessage: string}>\n}\nexport const task = async ({title, task}: TaskOptions) => {\n let success\n started(title, logUpdate)\n try {\n const result = await task()\n success = result?.successMessage || title\n } catch (err) {\n failed(title, logUpdate)\n logUpdate.done()\n throw err\n }\n completed(success, logUpdate)\n logUpdate.done()\n}\nexport const prompt = async <\n TName extends string & keyof TAnswers,\n TAnswers extends {[key in TName]: string} = {[key in TName]: string},\n>(\n questions: ReadonlyArray<Question<TName>>,\n): Promise<TAnswers> => {\n if (!isTerminalInteractive() && questions.length !== 0) {\n throw new Abort(content`\nThe CLI prompted in a non-interactive terminal with the following questions:\n${token.json(questions)}\n `)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mappedQuestions: any[] = questions.map(mapperUI)\n const value = {} as TAnswers\n for (const question of mappedQuestions) {\n if (question.preface) {\n info(question.preface)\n }\n\n // eslint-disable-next-line no-await-in-loop\n value[question.name as TName] = await executorUI(question)\n\n logPromptResults(question.message, value[question.name as TName])\n }\n return value\n}\n\nfunction logPromptResults(questionName: string, answer: string) {\n logToFile([questionName, answer].join(' '), 'INFO')\n}\n\nexport async function nonEmptyDirectoryPrompt(directory: string) {\n if (await exists(directory)) {\n const options = [\n {name: 'No, don’t delete the files', value: 'abort'},\n {name: 'Yes, delete the files', value: 'overwrite'},\n ]\n\n const relativeDirectory = relative(process.cwd(), directory)\n\n const questions: Question<'value'> = {\n type: 'select',\n name: 'value',\n message: `${relativeDirectory} is not an empty directory. Do you want to delete the existing files and continue?`,\n choices: options,\n }\n\n const choice = await prompt([questions])\n\n if (choice.value === 'abort') {\n throw new CancelExecution()\n }\n\n await remove(directory)\n }\n}\n\nexport async function terminateBlockingPortProcessPrompt(port: number, stepDescription?: string): Promise<boolean> {\n const stepDescriptionContent = stepDescription ?? 'current step'\n\n const processInfo = await findProcess('port', port)\n const formattedProcessName =\n processInfo && processInfo.length > 0 && processInfo[0]?.name\n ? ` ${content`${token.italic(`(${processInfo[0].name})`)}`.value}`\n : ''\n\n const options = [\n {name: 'Yes, terminate process in order to log in now', value: 'finish'},\n {name: `No, cancel command and try later`, value: 'cancel'},\n ]\n\n const choice = await prompt([\n {\n type: 'select',\n name: 'value',\n message: `${stepDescriptionContent} requires a port ${port} that's unavailable because it's running another process${formattedProcessName}. Terminate that process? `,\n choices: options,\n },\n ])\n return choice.value === 'finish'\n}\n\nexport const keypress = async () => {\n process.stdin.setRawMode(true)\n process.stdin.resume()\n return new Promise<void>((resolve) =>\n process.stdin.once('data', () => {\n process.stdin.setRawMode(false)\n resolve()\n }),\n )\n}\n"]}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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","sourcesContent":["import {CancelExecution, Abort, AbortSilent} from './error.js'\nimport {remove, exists} from './file.js'\nimport {info, completed, content, token, logUpdate, Message, Logger, stringifyMessage, debug} from './output.js'\nimport {colors} from './node/colors.js'\nimport {relative} from './path.js'\nimport {isTerminalInteractive} from './environment/local.js'\nimport {mapper as mapperUI, run as executorUI} from './ui/executor.js'\nimport {logToFile} from './log.js'\nimport {Listr as OriginalListr, ListrTask, ListrEvent, ListrTaskState, ListrBaseClassOptions} from 'listr2'\nimport findProcess from 'find-process'\n\nexport function newListr(tasks: ListrTask[], options?: object | ListrBaseClassOptions) {\n const listr = new OriginalListr(tasks, options)\n listr.tasks.forEach((task) => {\n const loggedSubtaskTitles: string[] = []\n task.subscribe((event: ListrEvent) => {\n if (event.type === 'TITLE' && typeof event.data === 'string') {\n logToFile(event.data, 'INFO')\n }\n })\n task.renderHook$.subscribe(() => {\n if (task.hasSubtasks()) {\n const activeSubtasks = task.subtasks.filter((subtask) => {\n return [ListrTaskState.PENDING, ListrTaskState.COMPLETED].includes(subtask.state as ListrTaskState)\n })\n activeSubtasks.forEach((subtask) => {\n if (subtask.title && !loggedSubtaskTitles.includes(subtask.title)) {\n loggedSubtaskTitles.push(subtask.title)\n logToFile(subtask.title, 'INFO')\n }\n })\n }\n })\n })\n return listr\n}\n\nexport type ListrTasks = ConstructorParameters<typeof OriginalListr>[0]\nexport type {ListrTaskWrapper, ListrDefaultRenderer, ListrTask} from 'listr2'\n\nexport interface Question<TName extends string = string> {\n name: TName\n message: string\n preface?: string\n validate?: (value: string) => string | true\n default?: string\n result?: (value: string) => string | boolean\n type: 'input' | 'select' | 'autocomplete' | 'password'\n choices?: QuestionChoiceType[]\n}\n\nexport interface QuestionChoiceType {\n name: string\n value: string\n group?: {name: string; order: number}\n}\n\nconst started = (content: Message, logger: Logger) => {\n const message = `${colors.yellow('❯')} ${stringifyMessage(content)}`\n info(message, logger)\n}\n\nconst failed = (content: Message, logger: Logger) => {\n const message = `${colors.red('✖')} ${stringifyMessage(content)}`\n info(message, logger)\n}\n\n/**\n * Performs a task with the title kept up to date and stdout available to the\n * task while it runs (there is no re-writing stdout while the task runs).\n */\nexport interface TaskOptions {\n title: string\n task: () => Promise<void | {successMessage: string}>\n}\nexport const task = async ({title, task}: TaskOptions) => {\n let success\n started(title, logUpdate)\n try {\n const result = await task()\n success = result?.successMessage || title\n } catch (err) {\n failed(title, logUpdate)\n logUpdate.done()\n throw err\n }\n completed(success, logUpdate)\n logUpdate.done()\n}\nexport const prompt = async <\n TName extends string & keyof TAnswers,\n TAnswers extends {[key in TName]: string} = {[key in TName]: string},\n>(\n questions: ReadonlyArray<Question<TName>>,\n): Promise<TAnswers> => {\n if (!isTerminalInteractive() && questions.length !== 0) {\n throw new Abort(content`\nThe CLI prompted in a non-interactive terminal with the following questions:\n${token.json(questions)}\n `)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mappedQuestions: any[] = questions.map(mapperUI)\n const value = {} as TAnswers\n for (const question of mappedQuestions) {\n if (question.preface) {\n info(question.preface)\n }\n\n // eslint-disable-next-line no-await-in-loop\n value[question.name as TName] = await executorUI(question)\n\n logPromptResults(question.message, value[question.name as TName])\n }\n return value\n}\n\nfunction logPromptResults(questionName: string, answer: string) {\n logToFile([questionName, answer].join(' '), 'INFO')\n}\n\nexport async function nonEmptyDirectoryPrompt(directory: string) {\n if (await exists(directory)) {\n const options = [\n {name: 'No, don’t delete the files', value: 'abort'},\n {name: 'Yes, delete the files', value: 'overwrite'},\n ]\n\n const relativeDirectory = relative(process.cwd(), directory)\n\n const questions: Question<'value'> = {\n type: 'select',\n name: 'value',\n message: `${relativeDirectory} is not an empty directory. Do you want to delete the existing files and continue?`,\n choices: options,\n }\n\n const choice = await prompt([questions])\n\n if (choice.value === 'abort') {\n throw new CancelExecution()\n }\n\n await remove(directory)\n }\n}\n\nexport async function terminateBlockingPortProcessPrompt(port: number, stepDescription?: string): Promise<boolean> {\n const stepDescriptionContent = stepDescription ?? 'current step'\n\n const processInfo = await findProcess('port', port)\n const formattedProcessName =\n processInfo && processInfo.length > 0 && processInfo[0]?.name\n ? ` ${content`${token.italic(`(${processInfo[0].name})`)}`.value}`\n : ''\n\n const options = [\n {name: 'Yes, terminate process in order to log in now', value: 'finish'},\n {name: `No, cancel command and try later`, value: 'cancel'},\n ]\n\n const choice = await prompt([\n {\n type: 'select',\n name: 'value',\n message: `${stepDescriptionContent} requires a port ${port} that's unavailable because it's running another process${formattedProcessName}. Terminate that process? `,\n choices: options,\n },\n ])\n return choice.value === 'finish'\n}\n\nexport const keypress = async () => {\n return new Promise((resolve, reject) => {\n const handler = (buffer: Buffer) => {\n process.stdin.setRawMode(false)\n process.stdin.pause()\n\n const bytes = Array.from(buffer)\n\n if (bytes.length && bytes[0] === 3) {\n debug('Canceled keypress, User pressed CTRL+C')\n reject(new AbortSilent())\n }\n process.nextTick(resolve)\n }\n\n process.stdin.resume()\n process.stdin.setRawMode(true)\n process.stdin.once('data', handler)\n })\n}\n"]}
package/dist/version.d.ts CHANGED
@@ -3,7 +3,7 @@ import { Bug } from './error.js';
3
3
  export declare const PackageJsonVersionNotFoundError: (packageJsonPath: string) => Bug;
4
4
  /**
5
5
  * Returns the latest available version of an NPM package.
6
- * @param name {string} The name of the NPM package.
6
+ * @param name - The name of the NPM package.
7
7
  * @returns A promise to get the latest available version of a package.
8
8
  */
9
9
  export declare function latestNpmPackageVersion(name: string): Promise<string>;
@@ -13,8 +13,8 @@ interface FindPackageVersionUpOptions {
13
13
  /**
14
14
  * Given a module URL, it traverses the directory hierarchy up until it finds a package.json
15
15
  * and then it returns the version in it.
16
- * @param options {FindPackageVersionUpOptions} Options
17
- * @returns {Promise<string>} The version if it can find the package.json and it exists. An error otherwise.
16
+ * @param options - Options
17
+ * @returns The version if it can find the package.json and it exists. An error otherwise.
18
18
  */
19
19
  export declare function findPackageVersionUp(options: FindPackageVersionUpOptions): Promise<string>;
20
20
  export {};
package/dist/version.js CHANGED
@@ -8,7 +8,7 @@ export const PackageJsonVersionNotFoundError = (packageJsonPath) => {
8
8
  };
9
9
  /**
10
10
  * Returns the latest available version of an NPM package.
11
- * @param name {string} The name of the NPM package.
11
+ * @param name - The name of the NPM package.
12
12
  * @returns A promise to get the latest available version of a package.
13
13
  */
14
14
  export async function latestNpmPackageVersion(name) {
@@ -18,8 +18,8 @@ export async function latestNpmPackageVersion(name) {
18
18
  /**
19
19
  * Given a module URL, it traverses the directory hierarchy up until it finds a package.json
20
20
  * and then it returns the version in it.
21
- * @param options {FindPackageVersionUpOptions} Options
22
- * @returns {Promise<string>} The version if it can find the package.json and it exists. An error otherwise.
21
+ * @param options - Options
22
+ * @returns The version if it can find the package.json and it exists. An error otherwise.
23
23
  */
24
24
  export async function findPackageVersionUp(options) {
25
25
  const fromDirectory = moduleDirectory(options.fromModuleURL);
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AACjD,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAA;AACzC,OAAO,EAAC,GAAG,EAAC,MAAM,YAAY,CAAA;AAC9B,OAAO,EAAC,wBAAwB,EAAC,MAAM,gCAAgC,CAAA;AACvE,OAAO,aAAa,MAAM,gBAAgB,CAAA;AAE1C,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,eAAuB,EAAE,EAAE;IACzE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAA,4BAA4B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAA;AAC5G,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAY;IACxD,KAAK,CAAC,OAAO,CAAA,8CAA8C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC7E,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAMD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAoC;IAC7E,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IAC5D,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAAC,aAAa,CAAC,CAAA;IACjE,8DAA8D;IAC9D,MAAM,OAAO,GAAI,WAAW,CAAC,OAAe,CAAC,OAAO,CAAA;IACpD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,+BAA+B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;KACxD;IACD,OAAO,OAAO,CAAA;AAChB,CAAC","sourcesContent":["import {content, token, debug} from './output.js'\nimport {moduleDirectory} from './path.js'\nimport {Bug} from './error.js'\nimport {findUpAndReadPackageJson} from './node/node-package-manager.js'\nimport latestVersion from 'latest-version'\n\nexport const PackageJsonVersionNotFoundError = (packageJsonPath: string) => {\n return new Bug(content`The package.json at path ${token.path(packageJsonPath)} doesn't contain a version`)\n}\n\n/**\n * Returns the latest available version of an NPM package.\n * @param name {string} The name of the NPM package.\n * @returns A promise to get the latest available version of a package.\n */\nexport async function latestNpmPackageVersion(name: string) {\n debug(content`Getting the latest version of NPM package: ${token.raw(name)}`)\n return latestVersion(name)\n}\n\ninterface FindPackageVersionUpOptions {\n fromModuleURL: URL | string\n}\n\n/**\n * Given a module URL, it traverses the directory hierarchy up until it finds a package.json\n * and then it returns the version in it.\n * @param options {FindPackageVersionUpOptions} Options\n * @returns {Promise<string>} The version if it can find the package.json and it exists. An error otherwise.\n */\nexport async function findPackageVersionUp(options: FindPackageVersionUpOptions): Promise<string> {\n const fromDirectory = moduleDirectory(options.fromModuleURL)\n const packageJson = await findUpAndReadPackageJson(fromDirectory)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const version = (packageJson.content as any).version\n if (!version) {\n throw PackageJsonVersionNotFoundError(packageJson.path)\n }\n return version\n}\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AACjD,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAA;AACzC,OAAO,EAAC,GAAG,EAAC,MAAM,YAAY,CAAA;AAC9B,OAAO,EAAC,wBAAwB,EAAC,MAAM,gCAAgC,CAAA;AACvE,OAAO,aAAa,MAAM,gBAAgB,CAAA;AAE1C,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,eAAuB,EAAE,EAAE;IACzE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAA,4BAA4B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAA;AAC5G,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAY;IACxD,KAAK,CAAC,OAAO,CAAA,8CAA8C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC7E,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAMD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAoC;IAC7E,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IAC5D,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAAC,aAAa,CAAC,CAAA;IACjE,8DAA8D;IAC9D,MAAM,OAAO,GAAI,WAAW,CAAC,OAAe,CAAC,OAAO,CAAA;IACpD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,+BAA+B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;KACxD;IACD,OAAO,OAAO,CAAA;AAChB,CAAC","sourcesContent":["import {content, token, debug} from './output.js'\nimport {moduleDirectory} from './path.js'\nimport {Bug} from './error.js'\nimport {findUpAndReadPackageJson} from './node/node-package-manager.js'\nimport latestVersion from 'latest-version'\n\nexport const PackageJsonVersionNotFoundError = (packageJsonPath: string) => {\n return new Bug(content`The package.json at path ${token.path(packageJsonPath)} doesn't contain a version`)\n}\n\n/**\n * Returns the latest available version of an NPM package.\n * @param name - The name of the NPM package.\n * @returns A promise to get the latest available version of a package.\n */\nexport async function latestNpmPackageVersion(name: string) {\n debug(content`Getting the latest version of NPM package: ${token.raw(name)}`)\n return latestVersion(name)\n}\n\ninterface FindPackageVersionUpOptions {\n fromModuleURL: URL | string\n}\n\n/**\n * Given a module URL, it traverses the directory hierarchy up until it finds a package.json\n * and then it returns the version in it.\n * @param options - Options\n * @returns The version if it can find the package.json and it exists. An error otherwise.\n */\nexport async function findPackageVersionUp(options: FindPackageVersionUpOptions): Promise<string> {\n const fromDirectory = moduleDirectory(options.fromModuleURL)\n const packageJson = await findUpAndReadPackageJson(fromDirectory)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const version = (packageJson.content as any).version\n if (!version) {\n throw PackageJsonVersionNotFoundError(packageJson.path)\n }\n return version\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopify/cli-kit",
3
- "version": "3.16.3",
3
+ "version": "3.18.0",
4
4
  "private": false,
5
5
  "description": "A set of utilities, interfaces, and models that are common across all the platform features",
6
6
  "keywords": [
@@ -21,6 +21,10 @@
21
21
  "import": "./dist/public/common/array.js",
22
22
  "types": "./dist/public/common/array.d.ts"
23
23
  },
24
+ "./node/ui": {
25
+ "import": "./dist/public/node/ui.js",
26
+ "types": "./dist/public/node/ui.d.ts"
27
+ },
24
28
  "./node/*": {
25
29
  "node": "./dist/node/*.js",
26
30
  "types": "./dist/node/*.d.ts"
@@ -80,8 +84,9 @@
80
84
  "@oclif/core": "1.9.2",
81
85
  "@types/archiver": "^5.3.1",
82
86
  "abort-controller": "^3.0.0",
83
- "ansi-colors": "^4.1.1",
84
87
  "archiver": "^5.3.1",
88
+ "chalk": "^5.1.0",
89
+ "chalk-animation": "^2.0.3",
85
90
  "change-case": "^4.1.2",
86
91
  "color-json": "^2.0.1",
87
92
  "commondir": "^1.0.1",
@@ -103,6 +108,7 @@
103
108
  "graphql": "^16.4.0",
104
109
  "graphql-request": "^4.3.0",
105
110
  "h3": "^0.7.21",
111
+ "ink": "^3.2.0",
106
112
  "inquirer": "^8.2.4",
107
113
  "inquirer-autocomplete-prompt": "^2.0.0",
108
114
  "is-interactive": "^2.0.0",
@@ -119,6 +125,7 @@
119
125
  "open": "^8.4.0",
120
126
  "pathe": "0.2.0",
121
127
  "prettier": "^2.7.1",
128
+ "react": "^17.0.2",
122
129
  "semver": "^7.3.6",
123
130
  "simple-git": "^3.5.0",
124
131
  "source-map-support": "^0.5.21",
@@ -1,15 +0,0 @@
1
- export declare const CompileModuleMutation: string;
2
- export interface CompileModuleMutationSchema {
3
- data: {
4
- compileModule: {
5
- jobId: string;
6
- userErrors: {
7
- field: string;
8
- message: string;
9
- }[];
10
- };
11
- };
12
- }
13
- export interface CompileModuleMutationVariables {
14
- moduleUploadUrl: string;
15
- }
@@ -1,13 +0,0 @@
1
- import { gql } from 'graphql-request';
2
- export const CompileModuleMutation = gql `
3
- mutation compileModule($moduleUploadUrl: String!) {
4
- compileModule(moduleUploadUrl: $moduleUploadUrl) {
5
- jobId
6
- userErrors {
7
- field
8
- message
9
- }
10
- }
11
- }
12
- `;
13
- //# sourceMappingURL=compile_module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compile_module.js","sourceRoot":"","sources":["../../../../src/api/graphql/functions/compile_module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAA;AAEnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;;;;;;;;;;CAUvC,CAAA","sourcesContent":["import {gql} from 'graphql-request'\n\nexport const CompileModuleMutation = gql`\n mutation compileModule($moduleUploadUrl: String!) {\n compileModule(moduleUploadUrl: $moduleUploadUrl) {\n jobId\n userErrors {\n field\n message\n }\n }\n }\n`\n\nexport interface CompileModuleMutationSchema {\n data: {\n compileModule: {\n jobId: string\n userErrors: {\n field: string\n message: string\n }[]\n }\n }\n}\n\nexport interface CompileModuleMutationVariables {\n moduleUploadUrl: string\n}\n"]}
@@ -1,15 +0,0 @@
1
- export declare const ModuleCompilationStatusQuery: string;
2
- export interface ModuleCompilationStatusQuerySchema {
3
- data: {
4
- moduleCompilationStatus: {
5
- status: string;
6
- userErrors: {
7
- field: string;
8
- message: string;
9
- }[];
10
- };
11
- };
12
- }
13
- export interface ModuleCompilationQueryVariables {
14
- jobId: string;
15
- }
@@ -1,13 +0,0 @@
1
- import { gql } from 'graphql-request';
2
- export const ModuleCompilationStatusQuery = gql `
3
- query moduleCompilationStatus($jobId: String!) {
4
- moduleCompilationStatus(jobId: $jobId) {
5
- status
6
- userErrors {
7
- field
8
- message
9
- }
10
- }
11
- }
12
- `;
13
- //# sourceMappingURL=module_compilation_status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module_compilation_status.js","sourceRoot":"","sources":["../../../../src/api/graphql/functions/module_compilation_status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAA;AAEnC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAA;;;;;;;;;;CAU9C,CAAA","sourcesContent":["import {gql} from 'graphql-request'\n\nexport const ModuleCompilationStatusQuery = gql`\n query moduleCompilationStatus($jobId: String!) {\n moduleCompilationStatus(jobId: $jobId) {\n status\n userErrors {\n field\n message\n }\n }\n }\n`\n\nexport interface ModuleCompilationStatusQuerySchema {\n data: {\n moduleCompilationStatus: {\n status: string\n userErrors: {\n field: string\n message: string\n }[]\n }\n }\n}\n\nexport interface ModuleCompilationQueryVariables {\n jobId: string\n}\n"]}