@shopify/cli-kit 3.31.1 → 3.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/README.md +1 -1
  2. package/dist/api.d.ts +2 -5
  3. package/dist/api.js +2 -5
  4. package/dist/api.js.map +1 -1
  5. package/dist/constants.d.ts +1 -0
  6. package/dist/constants.js +1 -0
  7. package/dist/constants.js.map +1 -1
  8. package/dist/environment/local.d.ts +1 -0
  9. package/dist/environment/local.js +4 -1
  10. package/dist/environment/local.js.map +1 -1
  11. package/dist/file.d.ts +10 -3
  12. package/dist/file.js +34 -34
  13. package/dist/file.js.map +1 -1
  14. package/dist/http/fetch.js +1 -1
  15. package/dist/http/fetch.js.map +1 -1
  16. package/dist/http.d.ts +0 -1
  17. package/dist/http.js +0 -1
  18. package/dist/http.js.map +1 -1
  19. package/dist/index.d.ts +0 -8
  20. package/dist/index.js +0 -8
  21. package/dist/index.js.map +1 -1
  22. package/dist/metadata.d.ts +1 -1
  23. package/dist/metadata.js.map +1 -1
  24. package/dist/monorail.d.ts +1 -1
  25. package/dist/monorail.js.map +1 -1
  26. package/dist/npm.js +1 -1
  27. package/dist/npm.js.map +1 -1
  28. package/dist/output.d.ts +2 -2
  29. package/dist/output.js +1 -1
  30. package/dist/output.js.map +1 -1
  31. package/dist/path.d.ts +3 -1
  32. package/dist/path.js +2 -2
  33. package/dist/path.js.map +1 -1
  34. package/dist/plugins.d.ts +1 -1
  35. package/dist/plugins.js.map +1 -1
  36. package/dist/{json.d.ts → private/common/json.d.ts} +0 -0
  37. package/dist/{json.js → private/common/json.js} +0 -0
  38. package/dist/private/common/json.js.map +1 -0
  39. package/dist/private/node/analytics.d.ts +27 -0
  40. package/dist/private/node/analytics.js +57 -0
  41. package/dist/private/node/analytics.js.map +1 -0
  42. package/dist/private/node/api/graphql.d.ts +5 -0
  43. package/dist/private/node/api/graphql.js +63 -0
  44. package/dist/private/node/api/graphql.js.map +1 -0
  45. package/dist/{api/common.d.ts → private/node/api/headers.d.ts} +3 -8
  46. package/dist/{api/common.js → private/node/api/headers.js} +20 -60
  47. package/dist/private/node/api/headers.js.map +1 -0
  48. package/dist/private/node/ui/components/Alert.test.js +5 -5
  49. package/dist/private/node/ui/components/Alert.test.js.map +1 -1
  50. package/dist/private/node/ui/components/Banner.js +5 -5
  51. package/dist/private/node/ui/components/Banner.js.map +1 -1
  52. package/dist/private/node/ui/components/Banner.test.js +11 -11
  53. package/dist/private/node/ui/components/Banner.test.js.map +1 -1
  54. package/dist/private/node/ui/components/Command.test.js +3 -3
  55. package/dist/private/node/ui/components/Command.test.js.map +1 -1
  56. package/dist/private/node/ui/components/ConcurrentOutput.d.ts +2 -2
  57. package/dist/private/node/ui/components/ConcurrentOutput.js +1 -1
  58. package/dist/private/node/ui/components/ConcurrentOutput.js.map +1 -1
  59. package/dist/private/node/ui/components/ConcurrentOutput.test.js +3 -3
  60. package/dist/private/node/ui/components/ConcurrentOutput.test.js.map +1 -1
  61. package/dist/private/node/ui/components/FatalError.test.js +9 -9
  62. package/dist/private/node/ui/components/FatalError.test.js.map +1 -1
  63. package/dist/private/node/ui/components/FilePath.test.js +3 -3
  64. package/dist/private/node/ui/components/FilePath.test.js.map +1 -1
  65. package/dist/private/node/ui/components/FullScreen.js +11 -9
  66. package/dist/private/node/ui/components/FullScreen.js.map +1 -1
  67. package/dist/private/node/ui/components/Link.test.js +5 -5
  68. package/dist/private/node/ui/components/Link.test.js.map +1 -1
  69. package/dist/private/node/ui/components/List.test.js +5 -5
  70. package/dist/private/node/ui/components/List.test.js.map +1 -1
  71. package/dist/private/node/ui/components/SelectInput.d.ts +2 -2
  72. package/dist/private/node/ui/components/SelectInput.js +16 -24
  73. package/dist/private/node/ui/components/SelectInput.js.map +1 -1
  74. package/dist/private/node/ui/components/SelectInput.test.js +62 -32
  75. package/dist/private/node/ui/components/SelectInput.test.js.map +1 -1
  76. package/dist/private/node/ui/components/{Prompt.d.ts → SelectPrompt.d.ts} +4 -3
  77. package/dist/private/node/ui/components/SelectPrompt.js +46 -0
  78. package/dist/private/node/ui/components/SelectPrompt.js.map +1 -0
  79. package/dist/private/node/ui/components/{Prompt.test.d.ts → SelectPrompt.test.d.ts} +0 -0
  80. package/dist/private/node/ui/components/{Prompt.test.js → SelectPrompt.test.js} +7 -6
  81. package/dist/private/node/ui/components/SelectPrompt.test.js.map +1 -0
  82. package/dist/private/node/ui/components/Table.js +2 -2
  83. package/dist/private/node/ui/components/Table.js.map +1 -1
  84. package/dist/private/node/ui/components/Tasks.d.ts +1 -1
  85. package/dist/private/node/ui/components/Tasks.js +3 -3
  86. package/dist/private/node/ui/components/Tasks.js.map +1 -1
  87. package/dist/private/node/ui/components/Tasks.test.js +4 -4
  88. package/dist/private/node/ui/components/Tasks.test.js.map +1 -1
  89. package/dist/private/node/ui/components/TextAnimation.js.map +1 -1
  90. package/dist/private/node/ui/components/TextInput.d.ts +9 -0
  91. package/dist/private/node/ui/components/TextInput.js +74 -0
  92. package/dist/private/node/ui/components/TextInput.js.map +1 -0
  93. package/dist/private/node/ui/components/TextInput.test.d.ts +1 -0
  94. package/dist/private/node/ui/components/TextInput.test.js +139 -0
  95. package/dist/private/node/ui/components/TextInput.test.js.map +1 -0
  96. package/dist/private/node/ui/components/TextPrompt.d.ts +8 -0
  97. package/dist/private/node/ui/components/TextPrompt.js +52 -0
  98. package/dist/private/node/ui/components/TextPrompt.js.map +1 -0
  99. package/dist/private/node/ui/components/TextPrompt.test.d.ts +1 -0
  100. package/dist/private/node/ui/components/TextPrompt.test.js +68 -0
  101. package/dist/private/node/ui/components/TextPrompt.test.js.map +1 -0
  102. package/dist/private/node/ui/components/TokenizedText.test.js +3 -3
  103. package/dist/private/node/ui/components/TokenizedText.test.js.map +1 -1
  104. package/dist/private/node/ui/components/UserInput.test.js +3 -3
  105. package/dist/private/node/ui/components/UserInput.test.js.map +1 -1
  106. package/dist/private/node/ui/hooks/use-layout.d.ts +6 -3
  107. package/dist/private/node/ui/hooks/use-layout.js +17 -8
  108. package/dist/private/node/ui/hooks/use-layout.js.map +1 -1
  109. package/dist/private/node/ui.d.ts +2 -3
  110. package/dist/private/node/ui.js +7 -16
  111. package/dist/private/node/ui.js.map +1 -1
  112. package/dist/public/common/array.js +1 -1
  113. package/dist/public/common/array.js.map +1 -1
  114. package/dist/public/common/collection.js +1 -1
  115. package/dist/public/common/collection.js.map +1 -1
  116. package/dist/public/common/function.js +1 -1
  117. package/dist/public/common/function.js.map +1 -1
  118. package/dist/public/common/lang.js +1 -1
  119. package/dist/public/common/lang.js.map +1 -1
  120. package/dist/public/common/object.js +4 -4
  121. package/dist/public/common/object.js.map +1 -1
  122. package/dist/public/common/string.d.ts +55 -1
  123. package/dist/public/common/string.js +93 -1
  124. package/dist/public/common/string.js.map +1 -1
  125. package/dist/public/common/url.d.ts +7 -0
  126. package/dist/public/common/url.js +17 -0
  127. package/dist/public/common/url.js.map +1 -0
  128. package/dist/public/node/abort.d.ts +16 -0
  129. package/dist/public/node/abort.js +17 -0
  130. package/dist/public/node/abort.js.map +1 -0
  131. package/dist/public/node/analytics.d.ts +13 -0
  132. package/dist/public/node/analytics.js +82 -0
  133. package/dist/public/node/analytics.js.map +1 -0
  134. package/dist/public/node/api/admin.d.ts +11 -0
  135. package/dist/public/node/api/admin.js +70 -0
  136. package/dist/public/node/api/admin.js.map +1 -0
  137. package/dist/public/node/api/oxygen.d.ts +22 -0
  138. package/dist/public/node/api/oxygen.js +40 -0
  139. package/dist/public/node/api/oxygen.js.map +1 -0
  140. package/dist/{api → public/node/api}/partners.d.ts +11 -3
  141. package/dist/public/node/api/partners.js +40 -0
  142. package/dist/public/node/api/partners.js.map +1 -0
  143. package/dist/public/node/archiver.js +1 -1
  144. package/dist/public/node/archiver.js.map +1 -1
  145. package/dist/public/node/base-command.js +1 -1
  146. package/dist/public/node/base-command.js.map +1 -1
  147. package/dist/public/node/crypto.d.ts +42 -0
  148. package/dist/public/node/crypto.js +55 -0
  149. package/dist/public/node/crypto.js.map +1 -0
  150. package/dist/public/node/error-handler.js +3 -2
  151. package/dist/public/node/error-handler.js.map +1 -1
  152. package/dist/public/node/framework.js +1 -1
  153. package/dist/public/node/framework.js.map +1 -1
  154. package/dist/public/node/hooks/postrun.js +2 -2
  155. package/dist/public/node/hooks/postrun.js.map +1 -1
  156. package/dist/public/node/hooks/prerun.js +2 -2
  157. package/dist/public/node/hooks/prerun.js.map +1 -1
  158. package/dist/{template.d.ts → public/node/liquid.d.ts} +10 -2
  159. package/dist/{template.js → public/node/liquid.js} +18 -13
  160. package/dist/public/node/liquid.js.map +1 -0
  161. package/dist/public/node/node-package-manager.d.ts +3 -3
  162. package/dist/public/node/node-package-manager.js +1 -1
  163. package/dist/public/node/node-package-manager.js.map +1 -1
  164. package/dist/public/node/os.d.ts +16 -0
  165. package/dist/{os.js → public/node/os.js} +33 -29
  166. package/dist/public/node/os.js.map +1 -0
  167. package/dist/public/node/presets.d.ts +1 -1
  168. package/dist/public/node/presets.js +2 -2
  169. package/dist/public/node/presets.js.map +1 -1
  170. package/dist/public/node/ruby.d.ts +13 -9
  171. package/dist/public/node/ruby.js +91 -23
  172. package/dist/public/node/ruby.js.map +1 -1
  173. package/dist/public/node/tcp.d.ts +2 -0
  174. package/dist/public/node/tcp.js +9 -0
  175. package/dist/public/node/tcp.js.map +1 -1
  176. package/dist/public/node/toml.d.ts +15 -0
  177. package/dist/public/node/toml.js +20 -0
  178. package/dist/public/node/toml.js.map +1 -0
  179. package/dist/public/node/ui.d.ts +12 -17
  180. package/dist/public/node/ui.js +25 -29
  181. package/dist/public/node/ui.js.map +1 -1
  182. package/dist/public/node/vscode.d.ts +14 -0
  183. package/dist/{vscode.js → public/node/vscode.js} +13 -7
  184. package/dist/public/node/vscode.js.map +1 -0
  185. package/dist/session/authorize.d.ts +4 -0
  186. package/dist/session/authorize.js +8 -3
  187. package/dist/session/authorize.js.map +1 -1
  188. package/dist/{api/identity.d.ts → session/identity-token-validation.d.ts} +0 -0
  189. package/dist/{api/identity.js → session/identity-token-validation.js} +1 -1
  190. package/dist/session/identity-token-validation.js.map +1 -0
  191. package/dist/session/redirect-listener.js +6 -3
  192. package/dist/session/redirect-listener.js.map +1 -1
  193. package/dist/session/schema.d.ts +18 -18
  194. package/dist/session/store.js +1 -1
  195. package/dist/session/store.js.map +1 -1
  196. package/dist/session.js +3 -3
  197. package/dist/session.js.map +1 -1
  198. package/dist/system.d.ts +2 -2
  199. package/dist/system.js +1 -1
  200. package/dist/system.js.map +1 -1
  201. package/dist/testing/ui.d.ts +1 -1
  202. package/dist/testing/ui.js +1 -1
  203. package/dist/testing/ui.js.map +1 -1
  204. package/dist/tsconfig.tsbuildinfo +1 -1
  205. package/dist/ui/inquirer/autocomplete.d.ts +2 -2
  206. package/dist/ui/inquirer/autocomplete.js +1 -1
  207. package/dist/ui/inquirer/autocomplete.js.map +1 -1
  208. package/dist/ui/inquirer/input.d.ts +2 -2
  209. package/dist/ui/inquirer/input.js.map +1 -1
  210. package/dist/ui/inquirer/password.d.ts +2 -2
  211. package/dist/ui/inquirer/password.js.map +1 -1
  212. package/dist/ui/inquirer/select.d.ts +2 -2
  213. package/dist/ui/inquirer/select.js +2 -2
  214. package/dist/ui/inquirer/select.js.map +1 -1
  215. package/package.json +30 -27
  216. package/dist/abort.d.ts +0 -1
  217. package/dist/abort.js +0 -2
  218. package/dist/abort.js.map +0 -1
  219. package/dist/analytics.d.ts +0 -44
  220. package/dist/analytics.js +0 -154
  221. package/dist/analytics.js.map +0 -1
  222. package/dist/api/admin.d.ts +0 -3
  223. package/dist/api/admin.js +0 -56
  224. package/dist/api/admin.js.map +0 -1
  225. package/dist/api/common.js.map +0 -1
  226. package/dist/api/identity.js.map +0 -1
  227. package/dist/api/oxygen.d.ts +0 -5
  228. package/dist/api/oxygen.js +0 -30
  229. package/dist/api/oxygen.js.map +0 -1
  230. package/dist/api/partners.js +0 -44
  231. package/dist/api/partners.js.map +0 -1
  232. package/dist/http/graphql.d.ts +0 -13
  233. package/dist/http/graphql.js +0 -12
  234. package/dist/http/graphql.js.map +0 -1
  235. package/dist/id.d.ts +0 -6
  236. package/dist/id.js +0 -18
  237. package/dist/id.js.map +0 -1
  238. package/dist/json.js.map +0 -1
  239. package/dist/os.d.ts +0 -10
  240. package/dist/os.js.map +0 -1
  241. package/dist/private/node/ui/components/Prompt.js +0 -23
  242. package/dist/private/node/ui/components/Prompt.js.map +0 -1
  243. package/dist/private/node/ui/components/Prompt.test.js.map +0 -1
  244. package/dist/string.d.ts +0 -28
  245. package/dist/string.js +0 -77
  246. package/dist/string.js.map +0 -1
  247. package/dist/template.js.map +0 -1
  248. package/dist/toml.d.ts +0 -3
  249. package/dist/toml.js +0 -8
  250. package/dist/toml.js.map +0 -1
  251. package/dist/vscode.d.ts +0 -8
  252. package/dist/vscode.js.map +0 -1
@@ -1,10 +1,10 @@
1
1
  /// <reference types="node" />
2
2
  import AutocompletePrompt from 'inquirer-autocomplete-prompt';
3
- import inquirer from 'inquirer';
3
+ import { Question, Answers } from 'inquirer';
4
4
  import { Interface } from 'readline';
5
5
  export declare class CustomAutocomplete extends AutocompletePrompt {
6
6
  protected isAutocomplete: boolean;
7
- constructor(questions: inquirer.Question<inquirer.Answers>, rl: Interface, answers: inquirer.Answers);
7
+ constructor(questions: Question<Answers>, rl: Interface, answers: Answers);
8
8
  protected render(error?: string): void;
9
9
  protected getQuestion(): string;
10
10
  protected prefix(): string;
@@ -1,5 +1,5 @@
1
1
  import colors from '../../public/node/colors.js';
2
- import { escapeRegExp } from '../../string.js';
2
+ import { escapeRegExp } from '../../public/common/string.js';
3
3
  import AutocompletePrompt from 'inquirer-autocomplete-prompt';
4
4
  import Paginator from 'inquirer/lib/utils/paginator.js';
5
5
  export class CustomAutocomplete extends AutocompletePrompt {
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../../src/ui/inquirer/autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import colors from '../../public/node/colors.js'\nimport {escapeRegExp} from '../../string.js'\nimport AutocompletePrompt from 'inquirer-autocomplete-prompt'\nimport DistinctChoice from 'inquirer/lib/objects/choices'\nimport inquirer from 'inquirer'\n\nimport Paginator from 'inquirer/lib/utils/paginator.js'\nimport {Interface} from 'readline'\n\nexport class CustomAutocomplete extends AutocompletePrompt {\n protected isAutocomplete: boolean\n\n constructor(questions: inquirer.Question<inquirer.Answers>, rl: Interface, answers: inquirer.Answers) {\n super(questions, rl, answers)\n this.isAutocomplete = true\n this.paginator = new Paginator(this.screen, {\n isInfinite: false,\n })\n }\n\n protected render(error?: string) {\n let content = this.getQuestion()\n let bottomContent = ''\n\n if (this.status !== 'answered') {\n content += colors.gray(this.isAutocomplete && this.firstRender ? 'Type to search… ' : '… ')\n }\n\n if (this.status === 'answered') {\n content += `${colors.dim('·')} ${colors.magenta(this.shortAnswer || this.answerName || this.answer)}`\n process.stdout.write('\\u001b[?25h')\n } else if (this.searching) {\n content += this.rl.line\n bottomContent += ` ${colors.magenta.dim('Searching...')}`\n } else if (this.nbChoices) {\n const choicesStr = listRender(this.currentChoices, this.selected, this.isAutocomplete ? this.rl.line : undefined)\n content += this.isAutocomplete ? this.rl.line : ''\n const indexPosition = this.selected\n let realIndexPosition = 0\n this.currentChoices.choices.every((choice, index: number) => {\n if (index > indexPosition) {\n return false\n }\n if (choice.type === 'separator') {\n return true\n }\n const name = choice.name\n realIndexPosition += name ? name.split('\\n').length : 0\n return true\n })\n bottomContent += this.paginator.paginate(choicesStr, realIndexPosition, this.isAutocomplete ? 10 : 500)\n } else {\n content += this.rl.line\n bottomContent += ` ${colors.magenta('No matching choices')}`\n }\n\n if (error) {\n bottomContent += `\\n${colors.magenta('>> ')}${error}`\n }\n\n this.firstRender = false\n\n this.screen.render(content, bottomContent)\n }\n\n protected getQuestion(): string {\n return `${this.prefix()} ${colors.bold(this.opt.message)}${this.opt.suffix}${colors.reset(' ')}`\n }\n\n protected prefix(): string {\n const color = colors.magenta.bold\n return this.status === 'answered' ? color('✔') : color('?')\n }\n}\n\nfunction listRender(choices: DistinctChoice, pointer: number, searchToken?: string): string {\n let output = ''\n let separatorOffset = 0\n\n choices.forEach((choice, i: number) => {\n if (choice.type === 'separator') {\n separatorOffset++\n if (choice.line.includes('──────────────')) {\n output += `\\n`\n } else {\n output += ` ${colors.dim.underline(choice)}\\n`\n }\n return\n }\n\n if (choice.disabled) {\n separatorOffset++\n output += ` - ${choice.name}`\n output += ` (${typeof choice.disabled === 'string' ? choice.disabled : 'Disabled'})`\n output += '\\n'\n return\n }\n\n const isSelected = i - separatorOffset === pointer\n let line = (isSelected ? '> ' : ' ') + choice.name\n\n if (isSelected) {\n line = colors.magenta(line)\n }\n\n if (searchToken) {\n const regexified = escapeRegExp(searchToken)\n line = line\n .split(new RegExp(`(${regexified})`, 'ig'))\n .map((token) => {\n if (token.match(new RegExp(regexified, 'ig'))) {\n return colors.magenta.dim(token)\n } else {\n return isSelected ? colors.magenta(token) : token\n }\n })\n .join('')\n } else if (isSelected) {\n line = colors.magenta(line)\n }\n\n output += `${line} \\n`\n })\n\n return output.replace(/\\n$/, '')\n}\n"]}
1
+ {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../../src/ui/inquirer/autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import colors from '../../public/node/colors.js'\nimport {escapeRegExp} from '../../public/common/string.js'\nimport AutocompletePrompt from 'inquirer-autocomplete-prompt'\nimport DistinctChoice from 'inquirer/lib/objects/choices'\nimport {Question, Answers} from 'inquirer'\n\nimport Paginator from 'inquirer/lib/utils/paginator.js'\nimport {Interface} from 'readline'\n\nexport class CustomAutocomplete extends AutocompletePrompt {\n protected isAutocomplete: boolean\n\n constructor(questions: Question<Answers>, rl: Interface, answers: Answers) {\n super(questions, rl, answers)\n this.isAutocomplete = true\n this.paginator = new Paginator(this.screen, {\n isInfinite: false,\n })\n }\n\n protected render(error?: string) {\n let content = this.getQuestion()\n let bottomContent = ''\n\n if (this.status !== 'answered') {\n content += colors.gray(this.isAutocomplete && this.firstRender ? 'Type to search… ' : '… ')\n }\n\n if (this.status === 'answered') {\n content += `${colors.dim('·')} ${colors.magenta(this.shortAnswer || this.answerName || this.answer)}`\n process.stdout.write('\\u001b[?25h')\n } else if (this.searching) {\n content += this.rl.line\n bottomContent += ` ${colors.magenta.dim('Searching...')}`\n } else if (this.nbChoices) {\n const choicesStr = listRender(this.currentChoices, this.selected, this.isAutocomplete ? this.rl.line : undefined)\n content += this.isAutocomplete ? this.rl.line : ''\n const indexPosition = this.selected\n let realIndexPosition = 0\n this.currentChoices.choices.every((choice, index: number) => {\n if (index > indexPosition) {\n return false\n }\n if (choice.type === 'separator') {\n return true\n }\n const name = choice.name\n realIndexPosition += name ? name.split('\\n').length : 0\n return true\n })\n bottomContent += this.paginator.paginate(choicesStr, realIndexPosition, this.isAutocomplete ? 10 : 500)\n } else {\n content += this.rl.line\n bottomContent += ` ${colors.magenta('No matching choices')}`\n }\n\n if (error) {\n bottomContent += `\\n${colors.magenta('>> ')}${error}`\n }\n\n this.firstRender = false\n\n this.screen.render(content, bottomContent)\n }\n\n protected getQuestion(): string {\n return `${this.prefix()} ${colors.bold(this.opt.message)}${this.opt.suffix}${colors.reset(' ')}`\n }\n\n protected prefix(): string {\n const color = colors.magenta.bold\n return this.status === 'answered' ? color('✔') : color('?')\n }\n}\n\nfunction listRender(choices: DistinctChoice, pointer: number, searchToken?: string): string {\n let output = ''\n let separatorOffset = 0\n\n choices.forEach((choice, i: number) => {\n if (choice.type === 'separator') {\n separatorOffset++\n if (choice.line.includes('──────────────')) {\n output += `\\n`\n } else {\n output += ` ${colors.dim.underline(choice)}\\n`\n }\n return\n }\n\n if (choice.disabled) {\n separatorOffset++\n output += ` - ${choice.name}`\n output += ` (${typeof choice.disabled === 'string' ? choice.disabled : 'Disabled'})`\n output += '\\n'\n return\n }\n\n const isSelected = i - separatorOffset === pointer\n let line = (isSelected ? '> ' : ' ') + choice.name\n\n if (isSelected) {\n line = colors.magenta(line)\n }\n\n if (searchToken) {\n const regexified = escapeRegExp(searchToken)\n line = line\n .split(new RegExp(`(${regexified})`, 'ig'))\n .map((token) => {\n if (token.match(new RegExp(regexified, 'ig'))) {\n return colors.magenta.dim(token)\n } else {\n return isSelected ? colors.magenta(token) : token\n }\n })\n .join('')\n } else if (isSelected) {\n line = colors.magenta(line)\n }\n\n output += `${line} \\n`\n })\n\n return output.replace(/\\n$/, '')\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  /// <reference types="node" />
2
2
  import Input from 'inquirer/lib/prompts/input.js';
3
- import inquirer from 'inquirer';
3
+ import { Question, Answers } from 'inquirer';
4
4
  import { Interface } from 'readline';
5
5
  export declare class CustomInput extends Input {
6
6
  protected isPassword: boolean;
7
- constructor(questions: inquirer.Question<inquirer.Answers>, rl: Interface, answers: inquirer.Answers);
7
+ constructor(questions: Question<Answers>, rl: Interface, answers: Answers);
8
8
  protected render(error?: string): void;
9
9
  protected getQuestion(): string;
10
10
  protected prefix(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/ui/inquirer/input.ts"],"names":[],"mappings":"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","sourcesContent":["import colors from '../../public/node/colors.js'\nimport Input from 'inquirer/lib/prompts/input.js'\nimport inquirer from 'inquirer'\nimport readline, {Interface} from 'readline'\n\nexport class CustomInput extends Input {\n protected isPassword: boolean\n\n constructor(questions: inquirer.Question<inquirer.Answers>, rl: Interface, answers: inquirer.Answers) {\n super(questions, rl, answers)\n this.isPassword = false\n }\n\n protected render(error?: string): void {\n const color = colors.magenta\n const isFinal = this.status === 'answered'\n\n let prompt = this.getQuestion()\n\n let bottomContent = ''\n if (isFinal) {\n prompt += `${colors.dim('·')} ${color(this.formatContent(this.answer))}`\n } else {\n prompt += `\\n${color('>')} ${this.rl.line ? this.formatContent(this.rl.line) : color.dim(this.opt.default)}`\n bottomContent = '─'.repeat(Math.max(this.rl.line.length, 30))\n bottomContent = ` ${color(bottomContent)}`\n if (error) {\n bottomContent += `\\n\\n ${colors.red(`! ${error}`)}`\n }\n }\n this.screen.render(prompt, bottomContent)\n if (!isFinal && !this.rl.line) {\n readline.cursorTo(process.stdout, 2)\n }\n }\n\n protected getQuestion() {\n return `${this.prefix()} ${colors.bold(this.opt.message)}${this.opt.suffix}${colors.reset(' ')}`\n }\n\n protected prefix() {\n const color = colors.magenta.bold\n return this.status === 'answered' ? color('✔') : color('?')\n }\n\n protected onError(data: {isValid: string; value: string}) {\n this.rl.write(data.value === this.opt.default ? '' : data.value)\n this.render(data.isValid)\n }\n\n private formatContent(content: string): string {\n return this.isPassword ? colors.gray('*'.repeat(content.length)) : content\n }\n}\n"]}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/ui/inquirer/input.ts"],"names":[],"mappings":"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","sourcesContent":["import colors from '../../public/node/colors.js'\nimport Input from 'inquirer/lib/prompts/input.js'\nimport {Question, Answers} from 'inquirer'\nimport readline, {Interface} from 'readline'\n\nexport class CustomInput extends Input {\n protected isPassword: boolean\n\n constructor(questions: Question<Answers>, rl: Interface, answers: Answers) {\n super(questions, rl, answers)\n this.isPassword = false\n }\n\n protected render(error?: string): void {\n const color = colors.magenta\n const isFinal = this.status === 'answered'\n\n let prompt = this.getQuestion()\n\n let bottomContent = ''\n if (isFinal) {\n prompt += `${colors.dim('·')} ${color(this.formatContent(this.answer))}`\n } else {\n prompt += `\\n${color('>')} ${this.rl.line ? this.formatContent(this.rl.line) : color.dim(this.opt.default)}`\n bottomContent = '─'.repeat(Math.max(this.rl.line.length, 30))\n bottomContent = ` ${color(bottomContent)}`\n if (error) {\n bottomContent += `\\n\\n ${colors.red(`! ${error}`)}`\n }\n }\n this.screen.render(prompt, bottomContent)\n if (!isFinal && !this.rl.line) {\n readline.cursorTo(process.stdout, 2)\n }\n }\n\n protected getQuestion() {\n return `${this.prefix()} ${colors.bold(this.opt.message)}${this.opt.suffix}${colors.reset(' ')}`\n }\n\n protected prefix() {\n const color = colors.magenta.bold\n return this.status === 'answered' ? color('✔') : color('?')\n }\n\n protected onError(data: {isValid: string; value: string}) {\n this.rl.write(data.value === this.opt.default ? '' : data.value)\n this.render(data.isValid)\n }\n\n private formatContent(content: string): string {\n return this.isPassword ? colors.gray('*'.repeat(content.length)) : content\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import { CustomInput } from './input.js';
3
- import inquirer from 'inquirer';
3
+ import { Question, Answers } from 'inquirer';
4
4
  import { Interface } from 'readline';
5
5
  export declare class CustomPassword extends CustomInput {
6
- constructor(questions: inquirer.Question<inquirer.Answers>, rl: Interface, answers: inquirer.Answers);
6
+ constructor(questions: Question<Answers>, rl: Interface, answers: Answers);
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"password.js","sourceRoot":"","sources":["../../../src/ui/inquirer/password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAA;AAItC,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C,YAAY,SAA8C,EAAE,EAAa,EAAE,OAAyB;QAClG,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IACxB,CAAC;CACF","sourcesContent":["import {CustomInput} from './input.js'\nimport inquirer from 'inquirer'\nimport {Interface} from 'readline'\n\nexport class CustomPassword extends CustomInput {\n constructor(questions: inquirer.Question<inquirer.Answers>, rl: Interface, answers: inquirer.Answers) {\n super(questions, rl, answers)\n this.isPassword = true\n }\n}\n"]}
1
+ {"version":3,"file":"password.js","sourceRoot":"","sources":["../../../src/ui/inquirer/password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAA;AAItC,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C,YAAY,SAA4B,EAAE,EAAa,EAAE,OAAgB;QACvE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IACxB,CAAC;CACF","sourcesContent":["import {CustomInput} from './input.js'\nimport {Question, Answers} from 'inquirer'\nimport {Interface} from 'readline'\n\nexport class CustomPassword extends CustomInput {\n constructor(questions: Question<Answers>, rl: Interface, answers: Answers) {\n super(questions, rl, answers)\n this.isPassword = true\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  /// <reference types="node" />
2
2
  import { CustomAutocomplete } from './autocomplete.js';
3
- import inquirer from 'inquirer';
3
+ import { Question, Answers } from 'inquirer';
4
4
  import { Interface } from 'readline';
5
5
  export declare class CustomSelect extends CustomAutocomplete {
6
- constructor(questions: inquirer.Question<inquirer.Answers>, rl: Interface, answers: inquirer.Answers);
6
+ constructor(questions: Question<Answers>, rl: Interface, answers: Answers);
7
7
  onKeypress(event: {
8
8
  key: {
9
9
  name: string;
@@ -1,5 +1,5 @@
1
1
  import { CustomAutocomplete } from './autocomplete.js';
2
- import utils from 'inquirer/lib/utils/readline.js';
2
+ import { up } from 'inquirer/lib/utils/readline.js';
3
3
  export class CustomSelect extends CustomAutocomplete {
4
4
  constructor(questions, rl, answers) {
5
5
  super(questions, rl, answers);
@@ -13,7 +13,7 @@ export class CustomSelect extends CustomAutocomplete {
13
13
  this.selected = this.selected < len - 1 ? this.selected + 1 : 0;
14
14
  this.ensureSelectedInRange();
15
15
  super.render();
16
- utils.up(this.rl, 2);
16
+ up(this.rl, 2);
17
17
  }
18
18
  else if (keyName === 'up' || (keyName === 'p' && event.key.ctrl)) {
19
19
  len = this.nbChoices;
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/ui/inquirer/select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,MAAM,gCAAgC,CAAA;AAIlD,MAAM,OAAO,YAAa,SAAQ,kBAAkB;IAClD,YAAY,SAA8C,EAAE,EAAa,EAAE,OAAyB;QAClG,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QAC7B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;IAC7B,CAAC;IAED,UAAU,CAAC,KAA0D;QACnE,IAAI,GAAG,CAAA;QACP,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA;QAE1D,IAAI,OAAO,KAAK,MAAM,IAAI,CAAC,OAAO,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC7D,GAAG,GAAG,IAAI,CAAC,SAAS,CAAA;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/D,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC5B,KAAK,CAAC,MAAM,EAAE,CAAA;YACd,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;SACrB;aAAM,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAClE,GAAG,GAAG,IAAI,CAAC,SAAS,CAAA;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;YAC/D,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAA;SACd;IACH,CAAC;CACF","sourcesContent":["import {CustomAutocomplete} from './autocomplete.js'\n\nimport utils from 'inquirer/lib/utils/readline.js'\nimport inquirer from 'inquirer'\nimport {Interface} from 'readline'\n\nexport class CustomSelect extends CustomAutocomplete {\n constructor(questions: inquirer.Question<inquirer.Answers>, rl: Interface, answers: inquirer.Answers) {\n super(questions, rl, answers)\n this.isAutocomplete = false\n }\n\n onKeypress(event: {key: {name: string; ctrl: boolean}; value: string}) {\n let len\n const keyName = (event.key && event.key.name) || undefined\n\n if (keyName === 'down' || (keyName === 'n' && event.key.ctrl)) {\n len = this.nbChoices\n this.selected = this.selected < len - 1 ? this.selected + 1 : 0\n this.ensureSelectedInRange()\n super.render()\n utils.up(this.rl, 2)\n } else if (keyName === 'up' || (keyName === 'p' && event.key.ctrl)) {\n len = this.nbChoices\n this.selected = this.selected > 0 ? this.selected - 1 : len - 1\n this.ensureSelectedInRange()\n this.render()\n }\n }\n}\n"]}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/ui/inquirer/select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAC,EAAE,EAAC,MAAM,gCAAgC,CAAA;AAIjD,MAAM,OAAO,YAAa,SAAQ,kBAAkB;IAClD,YAAY,SAA4B,EAAE,EAAa,EAAE,OAAgB;QACvE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QAC7B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;IAC7B,CAAC;IAED,UAAU,CAAC,KAA0D;QACnE,IAAI,GAAG,CAAA;QACP,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA;QAE1D,IAAI,OAAO,KAAK,MAAM,IAAI,CAAC,OAAO,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC7D,GAAG,GAAG,IAAI,CAAC,SAAS,CAAA;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/D,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC5B,KAAK,CAAC,MAAM,EAAE,CAAA;YACd,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;SACf;aAAM,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAClE,GAAG,GAAG,IAAI,CAAC,SAAS,CAAA;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;YAC/D,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAA;SACd;IACH,CAAC;CACF","sourcesContent":["import {CustomAutocomplete} from './autocomplete.js'\n\nimport {up} from 'inquirer/lib/utils/readline.js'\nimport {Question, Answers} from 'inquirer'\nimport {Interface} from 'readline'\n\nexport class CustomSelect extends CustomAutocomplete {\n constructor(questions: Question<Answers>, rl: Interface, answers: Answers) {\n super(questions, rl, answers)\n this.isAutocomplete = false\n }\n\n onKeypress(event: {key: {name: string; ctrl: boolean}; value: string}) {\n let len\n const keyName = (event.key && event.key.name) || undefined\n\n if (keyName === 'down' || (keyName === 'n' && event.key.ctrl)) {\n len = this.nbChoices\n this.selected = this.selected < len - 1 ? this.selected + 1 : 0\n this.ensureSelectedInRange()\n super.render()\n up(this.rl, 2)\n } else if (keyName === 'up' || (keyName === 'p' && event.key.ctrl)) {\n len = this.nbChoices\n this.selected = this.selected > 0 ? this.selected - 1 : len - 1\n this.ensureSelectedInRange()\n this.render()\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopify/cli-kit",
3
- "version": "3.31.1",
3
+ "version": "3.32.1",
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": [
@@ -8,10 +8,15 @@
8
8
  "shopify-cli",
9
9
  "shopify-partners"
10
10
  ],
11
+ "bugs": {
12
+ "url": "https://github.com/Shopify/cli/issues/new/choose"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/Shopify/cli/edit/main/packages/cli-kit"
17
+ },
11
18
  "license": "MIT",
12
19
  "type": "module",
13
- "module": "dist/index.js",
14
- "types": "dist/index.d.ts",
15
20
  "exports": {
16
21
  ".": {
17
22
  "import": "./dist/index.js",
@@ -30,14 +35,12 @@
30
35
  "types": "./dist/typing/*.d.ts"
31
36
  }
32
37
  },
38
+ "module": "dist/index.js",
39
+ "types": "dist/index.d.ts",
33
40
  "files": [
34
41
  "/dist",
35
42
  "/assets"
36
43
  ],
37
- "publishConfig": {
38
- "access": "public",
39
- "@shopify:registry": "https://registry.npmjs.org"
40
- },
41
44
  "eslintConfig": {
42
45
  "extends": [
43
46
  "../../.eslintrc.cjs"
@@ -68,21 +71,13 @@
68
71
  }
69
72
  ]
70
73
  },
71
- "engine-strict": true,
72
- "engines": {
73
- "node": ">=14.17.0"
74
- },
75
- "os": [
76
- "darwin",
77
- "linux",
78
- "win32"
79
- ],
80
74
  "dependencies": {
81
75
  "@bugsnag/js": "7.16.7",
82
76
  "@iarna/toml": "2.2.5",
83
77
  "@oclif/core": "1.21.0",
84
78
  "@types/archiver": "5.3.1",
85
79
  "abort-controller": "3.0.0",
80
+ "ansi-escapes": "6.0.0",
86
81
  "archiver": "5.3.1",
87
82
  "chalk": "5.1.0",
88
83
  "change-case": "4.1.2",
@@ -108,19 +103,20 @@
108
103
  "graphql-request": "4.3.0",
109
104
  "h3": "0.7.21",
110
105
  "ink": "3.2.0",
111
- "inquirer": "8.2.4",
112
- "inquirer-autocomplete-prompt": "2.0.0",
106
+ "inquirer": "9.1.4",
107
+ "inquirer-autocomplete-prompt": "3.0.0",
113
108
  "is-interactive": "2.0.0",
114
109
  "js-yaml": "4.1.0",
115
110
  "keytar": "7.9.0",
116
111
  "kill-port-process": "3.1.0",
117
- "latest-version": "6.0.0",
112
+ "latest-version": "7.0.0",
118
113
  "liquidjs": "9.36.0",
119
114
  "listr2": "4.0.5",
120
115
  "lodash": "4.17.21",
121
116
  "log-update": "4.0.0",
122
117
  "macaddress": "0.5.3",
123
118
  "md5-file": "5.0.0",
119
+ "node-abort-controller": "3.0.1",
124
120
  "node-fetch": "3.2.4",
125
121
  "open": "8.4.0",
126
122
  "pathe": "0.2.0",
@@ -140,13 +136,14 @@
140
136
  "zod": "3.17.3"
141
137
  },
142
138
  "devDependencies": {
143
- "@types/lodash": "4.14.191",
144
139
  "@types/commondir": "^1.0.0",
145
140
  "@types/cross-zip": "^4.0.0",
146
141
  "@types/diff": "^5.0.2",
147
142
  "@types/fs-extra": "9.0.13",
148
143
  "@types/gradient-string": "^1.1.2",
149
- "@types/inquirer": "^8.2.1",
144
+ "@types/inquirer": "^9.0.3",
145
+ "@types/lodash": "4.14.191",
146
+ "@types/node": "14.17.0",
150
147
  "@types/react": "17.0.2",
151
148
  "@types/semver": "^7.3.9",
152
149
  "@vitest/coverage-istanbul": "^0.26.3",
@@ -155,21 +152,27 @@
155
152
  "vite": "^2.9.13",
156
153
  "vitest": "^0.26.3"
157
154
  },
158
- "repository": {
159
- "type": "git",
160
- "url": "https://github.com/Shopify/cli/edit/main/packages/cli-kit"
155
+ "engines": {
156
+ "node": ">=14.17.0"
161
157
  },
162
- "bugs": {
163
- "url": "https://github.com/Shopify/cli/issues/new/choose"
158
+ "os": [
159
+ "darwin",
160
+ "linux",
161
+ "win32"
162
+ ],
163
+ "publishConfig": {
164
+ "@shopify:registry": "https://registry.npmjs.org",
165
+ "access": "public"
164
166
  },
167
+ "engine-strict": true,
165
168
  "scripts": {
166
169
  "build": "nx build",
167
170
  "clean": "nx clean",
168
171
  "lint": "nx lint",
169
172
  "lint:fix": "nx lint:fix",
170
173
  "test": "nx run cli-kit:test",
171
- "test:watch": "nx test:watch",
172
174
  "test:coverage": "nx test:coverage",
175
+ "test:watch": "nx test:watch",
173
176
  "type-check": "nx type-check"
174
177
  }
175
178
  }
package/dist/abort.d.ts DELETED
@@ -1 +0,0 @@
1
- export { AbortController as Controller, AbortSignal as Signal } from 'abort-controller';
package/dist/abort.js DELETED
@@ -1,2 +0,0 @@
1
- export { AbortController as Controller, AbortSignal as Signal } from 'abort-controller';
2
- //# sourceMappingURL=abort.js.map
package/dist/abort.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"abort.js","sourceRoot":"","sources":["../src/abort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,IAAI,UAAU,EAAE,WAAW,IAAI,MAAM,EAAC,MAAM,kBAAkB,CAAA","sourcesContent":["export {AbortController as Controller, AbortSignal as Signal} from 'abort-controller'\n"]}
@@ -1,44 +0,0 @@
1
- import BaseCommand from './public/node/base-command.js';
2
- import { CommandContent } from './public/node/hooks/prerun.js';
3
- import { Config, Interfaces } from '@oclif/core';
4
- interface StartOptions {
5
- commandContent: CommandContent;
6
- args: string[];
7
- currentTime?: number;
8
- commandClass?: Interfaces.Command.Class | typeof BaseCommand;
9
- }
10
- export declare const start: ({ commandContent, args, currentTime, commandClass }: StartOptions) => Promise<void>;
11
- interface ReportEventOptions {
12
- config: Interfaces.Config;
13
- errorMessage?: string;
14
- }
15
- /**
16
- * Report an analytics event, sending it off to Monorail -- Shopify's internal analytics service.
17
- *
18
- * The payload for an event includes both generic data, and data gathered from installed plug-ins.
19
- *
20
- */
21
- export declare function reportEvent(options: ReportEventOptions): Promise<void>;
22
- /**
23
- * Return the name of the tunnel provider used to send analytics. Returns 'localhost' or provider name if any of those
24
- * strings are included in the {@link tunnelUrl} param. Returns 'custom' otherwise
25
- *
26
- * @param options - Oclif configuration. Needed to call the hook for retrieving the list of tunner providers
27
- * @param tunnelUrl - Tunnel url. Used as pattern to match provider name
28
- * @returns 'localhost' or provider name if any of those strings are included in
29
- * the tunnelUrl or 'custom' otherwise
30
- */
31
- export declare function getAnalyticsTunnelType(options: Config, tunnelUrl: string): Promise<string | undefined>;
32
- export declare function getEnvironmentData(config: Interfaces.Config): Promise<{
33
- uname: string;
34
- env_ci: boolean;
35
- env_ci_platform: string | undefined;
36
- env_plugin_installed_any_custom: boolean;
37
- env_plugin_installed_shopify: string;
38
- env_shell: string;
39
- env_web_ide: "spin" | "codespaces" | "gitpod" | "localhost" | undefined;
40
- env_device_id: string;
41
- env_cloud: "spin" | "codespaces" | "gitpod" | "localhost";
42
- env_package_manager: "yarn" | "npm" | "pnpm";
43
- }>;
44
- export {};
package/dist/analytics.js DELETED
@@ -1,154 +0,0 @@
1
- import * as environment from './environment.js';
2
- import { platformAndArch } from './os.js';
3
- import { version as rubyVersion } from './public/node/ruby.js';
4
- import { content, debug, token } from './output.js';
5
- import constants from './constants.js';
6
- import * as metadata from './metadata.js';
7
- import { publishEvent, MONORAIL_COMMAND_TOPIC } from './monorail.js';
8
- import { fanoutHooks, getListOfTunnelPlugins } from './plugins.js';
9
- import { getPackageManager, packageManagerUsedForCreating } from './public/node/node-package-manager.js';
10
- import { hashString } from './string.js';
11
- import { macAddress } from './environment/local.js';
12
- export const start = async ({ commandContent, args, currentTime = new Date().getTime(), commandClass }) => {
13
- let startCommand = commandContent.command;
14
- if (commandClass && Object.prototype.hasOwnProperty.call(commandClass, 'analyticsNameOverride')) {
15
- startCommand = commandClass.analyticsNameOverride() ?? commandContent.command;
16
- }
17
- await metadata.addSensitive(() => ({
18
- commandStartOptions: {
19
- startTime: currentTime,
20
- startCommand,
21
- startArgs: args,
22
- },
23
- }));
24
- await metadata.addPublic(() => ({
25
- cmd_all_launcher: packageManagerUsedForCreating(),
26
- cmd_all_alias_used: commandContent.alias,
27
- cmd_all_topic: commandContent.topic,
28
- cmd_all_plugin: commandClass?.plugin?.name,
29
- }));
30
- };
31
- /**
32
- * Report an analytics event, sending it off to Monorail -- Shopify's internal analytics service.
33
- *
34
- * The payload for an event includes both generic data, and data gathered from installed plug-ins.
35
- *
36
- */
37
- export async function reportEvent(options) {
38
- try {
39
- const payload = await buildPayload(options);
40
- if (payload === undefined) {
41
- // Nothing to log
42
- return;
43
- }
44
- if (!environment.local.alwaysLogAnalytics() && environment.local.analyticsDisabled()) {
45
- debug(content `Skipping command analytics, payload: ${token.json(payload)}`);
46
- return;
47
- }
48
- const response = await publishEvent(MONORAIL_COMMAND_TOPIC, payload.public, payload.sensitive);
49
- if (response.type === 'error') {
50
- debug(response.message);
51
- }
52
- // eslint-disable-next-line no-catch-all/no-catch-all
53
- }
54
- catch (error) {
55
- let message = 'Failed to report usage analytics';
56
- if (error instanceof Error) {
57
- message = message.concat(`: ${error.message}`);
58
- }
59
- debug(message);
60
- }
61
- }
62
- /**
63
- * Return the name of the tunnel provider used to send analytics. Returns 'localhost' or provider name if any of those
64
- * strings are included in the {@link tunnelUrl} param. Returns 'custom' otherwise
65
- *
66
- * @param options - Oclif configuration. Needed to call the hook for retrieving the list of tunner providers
67
- * @param tunnelUrl - Tunnel url. Used as pattern to match provider name
68
- * @returns 'localhost' or provider name if any of those strings are included in
69
- * the tunnelUrl or 'custom' otherwise
70
- */
71
- export async function getAnalyticsTunnelType(options, tunnelUrl) {
72
- if (!tunnelUrl) {
73
- return;
74
- }
75
- if (tunnelUrl.includes('localhost')) {
76
- return 'localhost';
77
- }
78
- const provider = (await getListOfTunnelPlugins(options)).plugins.find((plugin) => tunnelUrl?.includes(plugin));
79
- return provider ?? 'custom';
80
- }
81
- const buildPayload = async ({ config, errorMessage }) => {
82
- const { commandStartOptions, ...sensitiveMetadata } = metadata.getAllSensitive();
83
- if (commandStartOptions === undefined) {
84
- debug('Unable to log analytics event - no information on executed command');
85
- return;
86
- }
87
- const { startCommand, startArgs, startTime } = commandStartOptions;
88
- const currentTime = new Date().getTime();
89
- const { '@shopify/app': appPublic, ...otherPluginsPublic } = await fanoutHooks(config, 'public_command_metadata', {});
90
- const { '@shopify/app': appSensitive, ...otherPluginsSensitive } = await fanoutHooks(config, 'sensitive_command_metadata', {});
91
- const environmentData = await getEnvironmentData(config);
92
- const sensitiveEnvironmentData = await getSensitiveEnvironmentData(config);
93
- return {
94
- public: {
95
- command: startCommand,
96
- time_start: startTime,
97
- time_end: currentTime,
98
- total_time: currentTime - startTime,
99
- success: errorMessage === undefined,
100
- cli_version: await constants.versions.cliKit(),
101
- ruby_version: (await rubyVersion()) || '',
102
- node_version: process.version.replace('v', ''),
103
- is_employee: await environment.local.isShopify(),
104
- ...environmentData,
105
- ...appPublic,
106
- ...metadata.getAllPublic(),
107
- },
108
- sensitive: {
109
- args: startArgs.join(' '),
110
- error_message: errorMessage,
111
- ...appSensitive,
112
- ...sensitiveEnvironmentData,
113
- metadata: JSON.stringify({
114
- ...sensitiveMetadata,
115
- extraPublic: {
116
- ...otherPluginsPublic,
117
- },
118
- extraSensitive: { ...otherPluginsSensitive },
119
- }),
120
- },
121
- };
122
- };
123
- export async function getEnvironmentData(config) {
124
- const ciPlatform = environment.local.ciPlatform();
125
- const pluginNames = getPluginNames(config);
126
- const shopifyPlugins = pluginNames.filter((plugin) => plugin.startsWith('@shopify/'));
127
- const { platform, arch } = platformAndArch();
128
- return {
129
- uname: `${platform} ${arch}`,
130
- env_ci: ciPlatform.isCI,
131
- env_ci_platform: ciPlatform.name,
132
- env_plugin_installed_any_custom: pluginNames.length !== shopifyPlugins.length,
133
- env_plugin_installed_shopify: JSON.stringify(shopifyPlugins),
134
- env_shell: config.shell,
135
- env_web_ide: environment.local.cloudEnvironment().editor
136
- ? environment.local.cloudEnvironment().platform
137
- : undefined,
138
- env_device_id: hashString(await macAddress()),
139
- env_cloud: environment.local.cloudEnvironment().platform,
140
- env_package_manager: await getPackageManager(process.cwd()),
141
- };
142
- }
143
- async function getSensitiveEnvironmentData(config) {
144
- return {
145
- env_plugin_installed_all: JSON.stringify(getPluginNames(config)),
146
- };
147
- }
148
- function getPluginNames(config) {
149
- return config.plugins
150
- .map((plugin) => plugin.name)
151
- .sort()
152
- .filter((plugin) => !plugin.startsWith('@oclif/'));
153
- }
154
- //# sourceMappingURL=analytics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"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","sourcesContent":["import * as environment from './environment.js'\nimport {platformAndArch} from './os.js'\nimport {version as rubyVersion} from './public/node/ruby.js'\nimport {content, debug, token} from './output.js'\nimport constants from './constants.js'\nimport * as metadata from './metadata.js'\nimport {publishEvent, MONORAIL_COMMAND_TOPIC} from './monorail.js'\nimport {fanoutHooks, getListOfTunnelPlugins} from './plugins.js'\nimport {getPackageManager, packageManagerUsedForCreating} from './public/node/node-package-manager.js'\nimport BaseCommand from './public/node/base-command.js'\nimport {CommandContent} from './public/node/hooks/prerun.js'\nimport {hashString} from './string.js'\nimport {macAddress} from './environment/local.js'\nimport {Config, Interfaces} from '@oclif/core'\n\ninterface StartOptions {\n commandContent: CommandContent\n args: string[]\n currentTime?: number\n commandClass?: Interfaces.Command.Class | typeof BaseCommand\n}\n\nexport const start = async ({commandContent, args, currentTime = new Date().getTime(), commandClass}: StartOptions) => {\n let startCommand: string = commandContent.command\n if (commandClass && Object.prototype.hasOwnProperty.call(commandClass, 'analyticsNameOverride')) {\n startCommand = (commandClass as typeof BaseCommand).analyticsNameOverride() ?? commandContent.command\n }\n\n await metadata.addSensitive(() => ({\n commandStartOptions: {\n startTime: currentTime,\n startCommand,\n startArgs: args,\n },\n }))\n\n await metadata.addPublic(() => ({\n cmd_all_launcher: packageManagerUsedForCreating(),\n cmd_all_alias_used: commandContent.alias,\n cmd_all_topic: commandContent.topic,\n cmd_all_plugin: commandClass?.plugin?.name,\n }))\n}\n\ninterface ReportEventOptions {\n config: Interfaces.Config\n errorMessage?: string\n}\n\n/**\n * Report an analytics event, sending it off to Monorail -- Shopify's internal analytics service.\n *\n * The payload for an event includes both generic data, and data gathered from installed plug-ins.\n *\n */\nexport async function reportEvent(options: ReportEventOptions) {\n try {\n const payload = await buildPayload(options)\n if (payload === undefined) {\n // Nothing to log\n return\n }\n if (!environment.local.alwaysLogAnalytics() && environment.local.analyticsDisabled()) {\n debug(content`Skipping command analytics, payload: ${token.json(payload)}`)\n return\n }\n const response = await publishEvent(MONORAIL_COMMAND_TOPIC, payload.public, payload.sensitive)\n if (response.type === 'error') {\n debug(response.message)\n }\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n let message = 'Failed to report usage analytics'\n if (error instanceof Error) {\n message = message.concat(`: ${error.message}`)\n }\n debug(message)\n }\n}\n\n/**\n * Return the name of the tunnel provider used to send analytics. Returns 'localhost' or provider name if any of those\n * strings are included in the {@link tunnelUrl} param. Returns 'custom' otherwise\n *\n * @param options - Oclif configuration. Needed to call the hook for retrieving the list of tunner providers\n * @param tunnelUrl - Tunnel url. Used as pattern to match provider name\n * @returns 'localhost' or provider name if any of those strings are included in\n * the tunnelUrl or 'custom' otherwise\n */\nexport async function getAnalyticsTunnelType(options: Config, tunnelUrl: string): Promise<string | undefined> {\n if (!tunnelUrl) {\n return\n }\n\n if (tunnelUrl.includes('localhost')) {\n return 'localhost'\n }\n\n const provider = (await getListOfTunnelPlugins(options)).plugins.find((plugin) => tunnelUrl?.includes(plugin))\n return provider ?? 'custom'\n}\n\nconst buildPayload = async ({config, errorMessage}: ReportEventOptions) => {\n const {commandStartOptions, ...sensitiveMetadata} = metadata.getAllSensitive()\n if (commandStartOptions === undefined) {\n debug('Unable to log analytics event - no information on executed command')\n return\n }\n const {startCommand, startArgs, startTime} = commandStartOptions\n const currentTime = new Date().getTime()\n\n const {'@shopify/app': appPublic, ...otherPluginsPublic} = await fanoutHooks(config, 'public_command_metadata', {})\n const {'@shopify/app': appSensitive, ...otherPluginsSensitive} = await fanoutHooks(\n config,\n 'sensitive_command_metadata',\n {},\n )\n\n const environmentData = await getEnvironmentData(config)\n const sensitiveEnvironmentData = await getSensitiveEnvironmentData(config)\n\n return {\n public: {\n command: startCommand,\n time_start: startTime,\n time_end: currentTime,\n total_time: currentTime - startTime,\n success: errorMessage === undefined,\n cli_version: await constants.versions.cliKit(),\n ruby_version: (await rubyVersion()) || '',\n node_version: process.version.replace('v', ''),\n is_employee: await environment.local.isShopify(),\n ...environmentData,\n ...appPublic,\n ...metadata.getAllPublic(),\n },\n sensitive: {\n args: startArgs.join(' '),\n error_message: errorMessage,\n ...appSensitive,\n ...sensitiveEnvironmentData,\n metadata: JSON.stringify({\n ...sensitiveMetadata,\n extraPublic: {\n ...otherPluginsPublic,\n },\n extraSensitive: {...otherPluginsSensitive},\n }),\n },\n }\n}\n\nexport async function getEnvironmentData(config: Interfaces.Config) {\n const ciPlatform = environment.local.ciPlatform()\n\n const pluginNames = getPluginNames(config)\n const shopifyPlugins = pluginNames.filter((plugin) => plugin.startsWith('@shopify/'))\n\n const {platform, arch} = platformAndArch()\n\n return {\n uname: `${platform} ${arch}`,\n env_ci: ciPlatform.isCI,\n env_ci_platform: ciPlatform.name,\n env_plugin_installed_any_custom: pluginNames.length !== shopifyPlugins.length,\n env_plugin_installed_shopify: JSON.stringify(shopifyPlugins),\n env_shell: config.shell,\n env_web_ide: environment.local.cloudEnvironment().editor\n ? environment.local.cloudEnvironment().platform\n : undefined,\n env_device_id: hashString(await macAddress()),\n env_cloud: environment.local.cloudEnvironment().platform,\n env_package_manager: await getPackageManager(process.cwd()),\n }\n}\n\nasync function getSensitiveEnvironmentData(config: Interfaces.Config) {\n return {\n env_plugin_installed_all: JSON.stringify(getPluginNames(config)),\n }\n}\n\nfunction getPluginNames(config: Interfaces.Config) {\n return config.plugins\n .map((plugin) => plugin.name)\n .sort()\n .filter((plugin) => !plugin.startsWith('@oclif/'))\n}\n"]}
@@ -1,3 +0,0 @@
1
- import { AdminSession } from '../session.js';
2
- import { RequestDocument, Variables } from 'graphql-request';
3
- export declare function request<T>(query: RequestDocument, session: AdminSession, variables?: Variables): Promise<T>;
package/dist/api/admin.js DELETED
@@ -1,56 +0,0 @@
1
- import { buildHeaders, debugLogRequest, handlingErrors } from './common.js';
2
- import { debug, content, token as outputToken } from '../output.js';
3
- import { Bug, Abort } from '../error.js';
4
- import { graphqlClient } from '../http/graphql.js';
5
- import { gql } from 'graphql-request';
6
- export async function request(query, session, variables) {
7
- const api = 'Admin';
8
- return handlingErrors(api, async () => {
9
- const version = await fetchApiVersion(session);
10
- const url = adminUrl(session.storeFqdn, version);
11
- const headers = await buildHeaders(session.token);
12
- const client = await graphqlClient({ headers, url });
13
- debugLogRequest(api, query, variables, headers);
14
- const response = await client.request(query, variables);
15
- return response;
16
- });
17
- }
18
- async function fetchApiVersion(session) {
19
- const url = adminUrl(session.storeFqdn, 'unstable');
20
- const query = apiVersionQuery();
21
- const headers = await buildHeaders(session.token);
22
- const client = await graphqlClient({ url, headers });
23
- debug(`
24
- Sending Admin GraphQL request to URL ${url} with query:
25
- ${query}
26
- `);
27
- const data = await client
28
- .request(query, {})
29
- .catch((err) => {
30
- if (err.response.status === 403) {
31
- const storeName = session.storeFqdn.replace('.myshopify.com', '');
32
- throw new Abort(content `Looks like you don't have access this dev store: (${outputToken.link(storeName, `https://${session.storeFqdn}`)})`, content `If you're not the owner, create a dev store staff account for yourself`);
33
- }
34
- throw new Bug(`Unknown error connecting to your store`);
35
- });
36
- return data.publicApiVersions
37
- .filter((item) => item.supported)
38
- .map((item) => item.handle)
39
- .sort()
40
- .reverse()[0];
41
- }
42
- function adminUrl(store, version) {
43
- const realVersion = version || 'unstable';
44
- return `https://${store}/admin/api/${realVersion}/graphql.json`;
45
- }
46
- function apiVersionQuery() {
47
- return gql `
48
- query {
49
- publicApiVersions {
50
- handle
51
- supported
52
- }
53
- }
54
- `;
55
- }
56
- //# sourceMappingURL=admin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/api/admin.ts"],"names":[],"mappings":"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","sourcesContent":["import {buildHeaders, debugLogRequest, handlingErrors} from './common.js'\nimport {AdminSession} from '../session.js'\nimport {debug, content, token as outputToken} from '../output.js'\nimport {Bug, Abort} from '../error.js'\nimport {graphqlClient} from '../http/graphql.js'\nimport {gql, RequestDocument, Variables} from 'graphql-request'\n\nexport async function request<T>(query: RequestDocument, session: AdminSession, variables?: Variables): Promise<T> {\n const api = 'Admin'\n return handlingErrors(api, async () => {\n const version = await fetchApiVersion(session)\n const url = adminUrl(session.storeFqdn, version)\n const headers = await buildHeaders(session.token)\n const client = await graphqlClient({headers, url})\n debugLogRequest(api, query, variables, headers)\n const response = await client.request<T>(query, variables)\n return response\n })\n}\n\nasync function fetchApiVersion(session: AdminSession): Promise<string> {\n const url = adminUrl(session.storeFqdn, 'unstable')\n const query = apiVersionQuery()\n const headers = await buildHeaders(session.token)\n const client = await graphqlClient({url, headers})\n debug(`\nSending Admin GraphQL request to URL ${url} with query:\n${query}\n `)\n const data = await client\n .request<{\n publicApiVersions: {handle: string; supported: boolean}[]\n }>(query, {})\n .catch((err) => {\n if (err.response.status === 403) {\n const storeName = session.storeFqdn.replace('.myshopify.com', '')\n throw new Abort(\n content`Looks like you don't have access this dev store: (${outputToken.link(\n storeName,\n `https://${session.storeFqdn}`,\n )})`,\n content`If you're not the owner, create a dev store staff account for yourself`,\n )\n }\n throw new Bug(`Unknown error connecting to your store`)\n })\n\n return data.publicApiVersions\n .filter((item) => item.supported)\n .map((item) => item.handle)\n .sort()\n .reverse()[0]!\n}\n\nfunction adminUrl(store: string, version: string | undefined): string {\n const realVersion = version || 'unstable'\n return `https://${store}/admin/api/${realVersion}/graphql.json`\n}\n\nfunction apiVersionQuery(): string {\n return gql`\n query {\n publicApiVersions {\n handle\n supported\n }\n }\n `\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {firstPartyDev} from '../environment/local.js'\nimport constants from '../constants.js'\nimport {stringifyMessage, content, token as outputToken, token, debug} from '../output.js'\nimport {Abort, ExtendableError} from '../error.js'\nimport {ClientError, RequestDocument, Variables} from 'graphql-request'\nimport {randomUUID} from 'crypto'\n\nexport class RequestClientError extends ExtendableError {\n statusCode: number\n public constructor(message: string, statusCode: number) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\nexport async function buildHeaders(token?: string): Promise<{[key: string]: string}> {\n const userAgent = `Shopify CLI; v=${await constants.versions.cliKit()}`\n\n const headers: {[header: string]: string} = {\n 'User-Agent': userAgent,\n // 'Sec-CH-UA': secCHUA, This header requires the Git sha.\n 'Sec-CH-UA-PLATFORM': process.platform,\n 'X-Request-Id': randomUUID(),\n 'Content-Type': 'application/json',\n ...(firstPartyDev() && {'X-Shopify-Cli-Employee': '1'}),\n }\n if (token) {\n // eslint-disable-next-line dot-notation\n headers['authorization'] = `Bearer ${token}`\n headers['X-Shopify-Access-Token'] = `Bearer ${token}`\n }\n\n return headers\n}\n\n/**\n * Removes the sensitive data from the headers and outputs them as a string.\n * @param headers - HTTP headers.\n * @returns A sanitized version of the headers as a string.\n */\nexport function sanitizedHeadersOutput(headers: {[key: string]: string}): string {\n const sanitized: {[key: string]: string} = {}\n const keywords = ['token', 'authorization']\n Object.keys(headers).forEach((header) => {\n if (keywords.find((keyword) => header.toLocaleLowerCase().includes(keyword)) === undefined) {\n sanitized[header] = headers[header]!\n }\n })\n return Object.keys(sanitized)\n .map((header) => {\n return ` - ${header}: ${sanitized[header]}`\n })\n .join('\\n')\n}\n\nexport function debugLogRequest<T>(\n api: string,\n query: RequestDocument,\n variables?: Variables,\n headers: {[key: string]: string} = {},\n) {\n debug(content`\nSending ${token.json(api)} GraphQL request:\n${token.raw(query.toString())}\n\nWith variables:\n${variables ? JSON.stringify(variables, null, 2) : ''}\n\nAnd headers:\n${sanitizedHeadersOutput(headers)}\n`)\n}\n\nexport async function handlingErrors<T>(api: string, action: () => Promise<T>): Promise<T> {\n try {\n return await action()\n } catch (error) {\n if (error instanceof ClientError) {\n const errorMessage = stringifyMessage(content`\n The ${token.raw(\n api,\n )} GraphQL API responded unsuccessfully with the HTTP status ${`${error.response.status}`} and errors:\n\n ${outputToken.json(error.response.errors)}\n `)\n let mappedError: Error\n if (error.response.status < 500) {\n mappedError = new RequestClientError(errorMessage, error.response.status)\n } else {\n mappedError = new Abort(errorMessage)\n }\n mappedError.stack = error.stack\n throw mappedError\n } else {\n throw error\n }\n }\n}\n"]}