shopify-cli 1.4.0 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (302) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +2 -2
  3. data/.github/CONTRIBUTING.md +9 -1
  4. data/.github/PULL_REQUEST_TEMPLATE.md +10 -1
  5. data/.github/workflows/release.yml +61 -0
  6. data/.github/workflows/triage.yml +22 -0
  7. data/.rubocop.yml +56 -7
  8. data/.rubocop_todo.yml +4 -13
  9. data/.travis.yml +1 -0
  10. data/CHANGELOG.md +27 -1
  11. data/Gemfile +12 -10
  12. data/Gemfile.lock +33 -31
  13. data/README.md +39 -7
  14. data/RELEASING.md +5 -27
  15. data/Rakefile +32 -28
  16. data/bin/load_shopify.rb +6 -6
  17. data/bin/shopify +2 -2
  18. data/dev.yml +2 -2
  19. data/docs/_config.yml +1 -18
  20. data/docs/app/node/commands/index.md +2 -80
  21. data/docs/app/node/index.md +2 -33
  22. data/docs/app/rails/commands/index.md +2 -78
  23. data/docs/app/rails/index.md +2 -34
  24. data/docs/core/index.md +2 -84
  25. data/docs/getting-started/index.md +2 -25
  26. data/docs/getting-started/install/index.md +1 -118
  27. data/docs/getting-started/migrate/index.md +2 -94
  28. data/docs/getting-started/uninstall/index.md +2 -35
  29. data/docs/getting-started/upgrade/index.md +2 -39
  30. data/docs/help/start-app/index.md +2 -4
  31. data/docs/index.md +2 -24
  32. data/ext/shopify-cli/extconf.rb +7 -7
  33. data/install.sh +1 -1
  34. data/lib/docgen/markdown.rb +11 -11
  35. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  36. data/lib/project_types/extension/cli.rb +64 -47
  37. data/lib/project_types/extension/commands/build.rb +3 -3
  38. data/lib/project_types/extension/commands/create.rb +16 -9
  39. data/lib/project_types/extension/commands/extension_command.rb +8 -5
  40. data/lib/project_types/extension/commands/push.rb +8 -8
  41. data/lib/project_types/extension/commands/register.rb +19 -30
  42. data/lib/project_types/extension/commands/serve.rb +23 -3
  43. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  44. data/lib/project_types/extension/extension_project.rb +4 -4
  45. data/lib/project_types/extension/extension_project_keys.rb +4 -4
  46. data/lib/project_types/extension/features/argo.rb +117 -0
  47. data/lib/project_types/extension/features/argo_config.rb +5 -5
  48. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  49. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  50. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  51. data/lib/project_types/extension/forms/create.rb +28 -34
  52. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  53. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  54. data/lib/project_types/extension/forms/questions/ask_type.rb +36 -0
  55. data/lib/project_types/extension/messages/messages.rb +53 -52
  56. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  57. data/lib/project_types/extension/models/specification.rb +35 -0
  58. data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
  59. data/lib/project_types/extension/models/specification_handlers/default.rb +67 -0
  60. data/lib/project_types/extension/models/specifications.rb +77 -0
  61. data/lib/project_types/extension/tasks/configure_features.rb +52 -0
  62. data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
  63. data/lib/project_types/extension/tasks/converters/registration_converter.rb +6 -6
  64. data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
  65. data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
  66. data/lib/project_types/extension/tasks/create_extension.rb +4 -4
  67. data/lib/project_types/extension/tasks/fetch_specifications.rb +38 -0
  68. data/lib/project_types/extension/tasks/get_app.rb +4 -4
  69. data/lib/project_types/extension/tasks/get_apps.rb +3 -3
  70. data/lib/project_types/extension/tasks/update_draft.rb +4 -4
  71. data/lib/project_types/extension/tasks/user_errors.rb +4 -4
  72. data/lib/project_types/node/cli.rb +19 -16
  73. data/lib/project_types/node/commands/connect.rb +15 -0
  74. data/lib/project_types/node/commands/create.rb +44 -41
  75. data/lib/project_types/node/commands/deploy.rb +4 -4
  76. data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
  77. data/lib/project_types/node/commands/generate.rb +9 -18
  78. data/lib/project_types/node/commands/open.rb +2 -2
  79. data/lib/project_types/node/commands/populate.rb +6 -6
  80. data/lib/project_types/node/commands/populate/customer.rb +5 -5
  81. data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
  82. data/lib/project_types/node/commands/populate/product.rb +5 -5
  83. data/lib/project_types/node/commands/serve.rb +9 -9
  84. data/lib/project_types/node/commands/tunnel.rb +7 -7
  85. data/lib/project_types/node/forms/create.rb +7 -7
  86. data/lib/project_types/node/messages/messages.rb +19 -53
  87. data/lib/project_types/rails/cli.rb +21 -18
  88. data/lib/project_types/rails/commands/connect.rb +15 -0
  89. data/lib/project_types/rails/commands/create.rb +58 -57
  90. data/lib/project_types/rails/commands/deploy.rb +4 -4
  91. data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
  92. data/lib/project_types/rails/commands/generate.rb +7 -7
  93. data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
  94. data/lib/project_types/rails/commands/open.rb +2 -2
  95. data/lib/project_types/rails/commands/populate.rb +6 -6
  96. data/lib/project_types/rails/commands/populate/customer.rb +5 -5
  97. data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
  98. data/lib/project_types/rails/commands/populate/product.rb +5 -5
  99. data/lib/project_types/rails/commands/serve.rb +11 -11
  100. data/lib/project_types/rails/commands/tunnel.rb +7 -7
  101. data/lib/project_types/rails/forms/create.rb +24 -24
  102. data/lib/project_types/rails/gem.rb +24 -24
  103. data/lib/project_types/rails/messages/messages.rb +12 -9
  104. data/lib/project_types/rails/ruby.rb +2 -2
  105. data/lib/project_types/script/cli.rb +44 -38
  106. data/lib/project_types/script/commands/create.rb +15 -10
  107. data/lib/project_types/script/commands/disable.rb +3 -3
  108. data/lib/project_types/script/commands/enable.rb +19 -9
  109. data/lib/project_types/script/commands/push.rb +10 -17
  110. data/lib/project_types/script/config/extension_points.yml +17 -12
  111. data/lib/project_types/script/errors.rb +22 -0
  112. data/lib/project_types/script/forms/create.rb +29 -5
  113. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +12 -1
  114. data/lib/project_types/script/layers/application/build_script.rb +19 -19
  115. data/lib/project_types/script/layers/application/create_script.rb +41 -12
  116. data/lib/project_types/script/layers/application/disable_script.rb +2 -2
  117. data/lib/project_types/script/layers/application/enable_script.rb +2 -2
  118. data/lib/project_types/script/layers/application/extension_points.rb +24 -0
  119. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  120. data/lib/project_types/script/layers/application/push_script.rb +15 -18
  121. data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
  122. data/lib/project_types/script/layers/domain/errors.rb +23 -0
  123. data/lib/project_types/script/layers/domain/extension_point.rb +62 -7
  124. data/lib/project_types/script/layers/domain/metadata.rb +55 -0
  125. data/lib/project_types/script/layers/domain/push_package.rb +29 -6
  126. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +19 -55
  127. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +49 -18
  128. data/lib/project_types/script/layers/infrastructure/config_ui_repository.rb +46 -0
  129. data/lib/project_types/script/layers/infrastructure/errors.rb +37 -1
  130. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
  131. data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
  132. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +20 -13
  133. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
  134. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
  135. data/lib/project_types/script/layers/infrastructure/script_service.rb +39 -17
  136. data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
  137. data/lib/project_types/script/messages/messages.rb +79 -10
  138. data/lib/project_types/script/script_project.rb +26 -16
  139. data/lib/project_types/script/ui/error_handler.rb +141 -45
  140. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  141. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  142. data/lib/project_types/theme/cli.rb +40 -0
  143. data/lib/project_types/theme/commands/connect.rb +54 -0
  144. data/lib/project_types/theme/commands/create.rb +48 -0
  145. data/lib/project_types/theme/commands/deploy.rb +38 -0
  146. data/lib/project_types/theme/commands/generate.rb +20 -0
  147. data/lib/project_types/theme/commands/generate/env.rb +79 -0
  148. data/lib/project_types/theme/commands/push.rb +55 -0
  149. data/lib/project_types/theme/commands/serve.rb +31 -0
  150. data/lib/project_types/theme/forms/connect.rb +34 -0
  151. data/lib/project_types/theme/forms/create.rb +22 -0
  152. data/lib/project_types/theme/messages/messages.rb +147 -0
  153. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
  154. data/lib/project_types/theme/themekit.rb +113 -0
  155. data/lib/rubygems_plugin.rb +3 -3
  156. data/lib/shopify-cli/admin_api.rb +52 -12
  157. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  158. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  159. data/lib/shopify-cli/api.rb +36 -31
  160. data/lib/shopify-cli/command.rb +1 -1
  161. data/lib/shopify-cli/commands.rb +9 -9
  162. data/lib/shopify-cli/commands/config.rb +28 -28
  163. data/lib/shopify-cli/commands/connect.rb +35 -18
  164. data/lib/shopify-cli/commands/create.rb +5 -5
  165. data/lib/shopify-cli/commands/help.rb +6 -6
  166. data/lib/shopify-cli/commands/logout.rb +3 -3
  167. data/lib/shopify-cli/commands/system.rb +33 -33
  168. data/lib/shopify-cli/commands/version.rb +2 -2
  169. data/lib/shopify-cli/context.rb +43 -22
  170. data/lib/shopify-cli/core.rb +4 -4
  171. data/lib/shopify-cli/core/entry_point.rb +5 -5
  172. data/lib/shopify-cli/core/executor.rb +1 -1
  173. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  174. data/lib/shopify-cli/core/monorail.rb +21 -19
  175. data/lib/shopify-cli/db.rb +2 -2
  176. data/lib/shopify-cli/feature.rb +1 -3
  177. data/lib/shopify-cli/form.rb +1 -1
  178. data/lib/shopify-cli/git.rb +17 -17
  179. data/lib/shopify-cli/helpers.rb +1 -1
  180. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  181. data/lib/shopify-cli/heroku.rb +28 -28
  182. data/lib/shopify-cli/http_request.rb +21 -9
  183. data/lib/shopify-cli/js_deps.rb +13 -13
  184. data/lib/shopify-cli/js_system.rb +5 -5
  185. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  186. data/lib/shopify-cli/messages/messages.rb +21 -10
  187. data/lib/shopify-cli/method_object.rb +104 -0
  188. data/lib/shopify-cli/oauth.rb +25 -25
  189. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  190. data/lib/shopify-cli/options.rb +3 -3
  191. data/lib/shopify-cli/packager.rb +24 -24
  192. data/lib/shopify-cli/partners_api.rb +38 -16
  193. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  194. data/lib/shopify-cli/process_supervision.rb +8 -8
  195. data/lib/shopify-cli/project.rb +27 -23
  196. data/lib/shopify-cli/project_type.rb +21 -5
  197. data/lib/shopify-cli/resolve_constant.rb +25 -0
  198. data/lib/shopify-cli/resources.rb +1 -1
  199. data/lib/shopify-cli/resources/env_file.rb +9 -9
  200. data/lib/shopify-cli/result.rb +432 -0
  201. data/lib/shopify-cli/shopifolk.rb +35 -18
  202. data/lib/shopify-cli/sub_command.rb +1 -1
  203. data/lib/shopify-cli/task.rb +9 -1
  204. data/lib/shopify-cli/tasks.rb +7 -7
  205. data/lib/shopify-cli/tasks/create_api_client.rb +17 -6
  206. data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
  207. data/lib/shopify-cli/tasks/ensure_env.rb +18 -15
  208. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  209. data/lib/shopify-cli/tasks/select_org_and_shop.rb +29 -24
  210. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  211. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  212. data/lib/shopify-cli/tunnel.rb +36 -30
  213. data/lib/shopify-cli/version.rb +1 -1
  214. data/lib/shopify_cli.rb +57 -52
  215. data/shopify-cli.gemspec +6 -6
  216. data/shopify.fish +1 -1
  217. data/shopify.sh +1 -1
  218. data/vendor/deps/cli-kit/REVISION +1 -1
  219. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
  220. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
  221. data/vendor/deps/cli-ui/REVISION +1 -1
  222. data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
  223. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
  224. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
  225. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
  226. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
  227. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
  228. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
  229. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
  230. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
  231. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
  232. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
  233. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  234. data/vendor/deps/webrick/.gitignore +9 -0
  235. data/vendor/deps/webrick/Gemfile +3 -0
  236. data/vendor/deps/webrick/LICENSE.txt +22 -0
  237. data/vendor/deps/webrick/README.md +61 -0
  238. data/vendor/deps/webrick/Rakefile +10 -0
  239. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  240. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  241. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  242. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  243. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  244. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  245. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  246. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  247. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  248. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  249. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  250. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  251. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  252. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  253. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  254. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  255. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  256. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  257. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  258. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  259. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  260. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  261. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  262. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  263. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  264. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  265. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  266. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  267. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  268. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  269. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  270. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  271. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  272. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  273. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  274. data/vendor/deps/webrick/webrick.gemspec +74 -0
  275. data/vendor/gen/template/bin/update-deps +9 -9
  276. metadata +83 -29
  277. data/docs/Gemfile +0 -5
  278. data/docs/Gemfile.lock +0 -258
  279. data/docs/_data/nav.yml +0 -35
  280. data/docs/_includes/footer.html +0 -15
  281. data/docs/_includes/head.html +0 -19
  282. data/docs/_includes/sidebar_nav.html +0 -22
  283. data/docs/_includes/toc.html +0 -112
  284. data/docs/_layouts/default.html +0 -79
  285. data/docs/css/docs.css +0 -157
  286. data/docs/images/header.png +0 -0
  287. data/docs/installing-ruby.md +0 -28
  288. data/lib/project_types/extension/features/argo/admin.rb +0 -20
  289. data/lib/project_types/extension/features/argo/base.rb +0 -129
  290. data/lib/project_types/extension/features/argo/checkout.rb +0 -20
  291. data/lib/project_types/extension/forms/register.rb +0 -47
  292. data/lib/project_types/extension/models/type.rb +0 -81
  293. data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
  294. data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
  295. data/lib/project_types/node/commands/generate/billing.rb +0 -39
  296. data/lib/project_types/node/commands/generate/page.rb +0 -59
  297. data/lib/project_types/node/commands/generate/webhook.rb +0 -37
  298. data/lib/project_types/script/layers/domain/script.rb +0 -18
  299. data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
  300. data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
  301. data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
  302. data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
@@ -1,6 +1,4 @@
1
1
  ---
2
- title: Start your app
3
- toc: false
2
+ title: Getting started with Shopify App CLI
3
+ redirect_to: https://shopify.dev/tools/cli/getting-started
4
4
  ---
5
-
6
- Your app is not running, and no app URL has been set. Try running `shopify serve` in your project to get started.
data/docs/index.md CHANGED
@@ -1,26 +1,4 @@
1
1
  ---
2
- title: Introduction
3
- section: intro
4
- toc: false
2
+ title: Shopify App CLI
3
+ redirect_to: https://shopify.dev/tools/cli
5
4
  ---
6
-
7
- Shopify App CLI helps you build Shopify apps faster. It quickly scaffolds Node.js and Ruby on Rails apps, and automates many common development tasks.
8
-
9
- **[Get started with Shopify App CLI]({{ site.baseurl }}{% link getting-started/index.md %})**
10
-
11
- ## Quick start
12
-
13
- 1. [Install Shopify App CLI]({{ site.baseurl }}{% link getting-started/install/index.md %}).
14
- 2. Create an app:
15
- ```console
16
- $ shopify create
17
- ```
18
- 3. Start and install your app on a Shopify development store:
19
- ```console
20
- $ shopify serve
21
- ```
22
- ```console
23
- $ shopify open
24
- ```
25
-
26
- **[Learn more in our Getting Started guide]({{ site.baseurl }}{% link getting-started/index.md %})**
@@ -1,8 +1,8 @@
1
- require 'rbconfig'
2
- require 'fileutils'
1
+ require "rbconfig"
2
+ require "fileutils"
3
3
 
4
- gem = File.expand_path('../../../', __FILE__)
5
- exe = File.join(gem, 'bin', 'shopify')
4
+ gem = File.expand_path("../../../", __FILE__)
5
+ exe = File.join(gem, "bin", "shopify")
6
6
 
7
7
  if RUBY_PLATFORM.match(/mingw32/)
8
8
  bat_path = File.dirname(RbConfig.ruby)
@@ -22,8 +22,8 @@ if RUBY_PLATFORM.match(/mingw32/)
22
22
  \t echo "#{script_content}">> "#{bat}"
23
23
  MAKEFILE
24
24
  else
25
- script = exe + '.sh'
26
- symlink = '/usr/local/bin/shopify'
25
+ script = exe + ".sh"
26
+ symlink = "/usr/local/bin/shopify"
27
27
 
28
28
  script_content = <<~SCRIPT
29
29
  #!/usr/bin/env bash
@@ -44,4 +44,4 @@ else
44
44
  MAKEFILE
45
45
  end
46
46
 
47
- File.write('Makefile', makefile_content)
47
+ File.write("Makefile", makefile_content)
data/install.sh CHANGED
@@ -3,5 +3,5 @@
3
3
  This install method for Shopify App CLI is no longer supported.
4
4
 
5
5
  Please visit this page for complete instructions:
6
- https://shopify.github.io/shopify-app-cli/migrate/
6
+ https://shopify.dev/tools/cli/troubleshooting#migrate-from-a-legacy-version
7
7
  EOF
@@ -1,5 +1,5 @@
1
- require 'rdoc/rdoc'
2
- require 'erb'
1
+ require "rdoc/rdoc"
2
+ require "erb"
3
3
 
4
4
  module RDoc
5
5
  module Generator
@@ -26,13 +26,13 @@ module RDoc
26
26
  private
27
27
 
28
28
  def render(data)
29
- class_template_path = File.join(File.dirname(__FILE__), 'class_template.md.erb')
30
- class_renderer = ERB.new(File.read(class_template_path), nil, '-')
29
+ class_template_path = File.join(File.dirname(__FILE__), "class_template.md.erb")
30
+ class_renderer = ERB.new(File.read(class_template_path), nil, "-")
31
31
  data.each do |cls|
32
32
  File.write("#{cls.filename}.md", class_renderer.result(cls.instance_eval { binding }))
33
33
  end
34
- index_template_path = File.join(File.dirname(__FILE__), 'index_template.md.erb')
35
- index_renderer = ERB.new(File.read(index_template_path), nil, '-')
34
+ index_template_path = File.join(File.dirname(__FILE__), "index_template.md.erb")
35
+ index_renderer = ERB.new(File.read(index_template_path), nil, "-")
36
36
  File.write("Core-APIs.md", index_renderer.result(OpenStruct.new(classes: data).instance_eval { binding }))
37
37
  end
38
38
 
@@ -46,8 +46,8 @@ module RDoc
46
46
  kind: kind,
47
47
  comment: @converter.convert(klass.comment.parse),
48
48
  constants: build_members(klass.constants),
49
- class_methods: build_members(klass.method_list.select { |m| m.type == 'class' }),
50
- instance_methods: build_members(klass.method_list.select { |m| m.type == 'instance' }),
49
+ class_methods: build_members(klass.method_list.select { |m| m.type == "class" }),
50
+ instance_methods: build_members(klass.method_list.select { |m| m.type == "instance" }),
51
51
  attributes: build_members(klass.attributes),
52
52
  extended: build_members(klass.extends),
53
53
  included: build_members(klass.includes),
@@ -68,7 +68,7 @@ module RDoc
68
68
  ClassMember.new(
69
69
  title: m.name,
70
70
  comment: @converter.convert(m.comment.parse),
71
- signature: m.respond_to?(:arglists) ? m.arglists : '',
71
+ signature: m.respond_to?(:arglists) ? m.arglists : "",
72
72
  source_code: source(m),
73
73
  )
74
74
  end
@@ -77,7 +77,7 @@ module RDoc
77
77
  # Just extracts sourcecode from html formatting/highlighting into a text
78
78
  # blob so that markdown can format it with a codeblock
79
79
  def source(m)
80
- return '' unless m.respond_to?(:token_stream)
80
+ return "" unless m.respond_to?(:token_stream)
81
81
  # each line, get the text
82
82
  src = (m.token_stream || []).map do |t|
83
83
  next unless t
@@ -93,7 +93,7 @@ module RDoc
93
93
  indent = n if n < indent
94
94
  break if n == 0
95
95
  end
96
- src.gsub!(/^#{' ' * indent}/, '') if indent > 0
96
+ src.gsub!(/^#{' ' * indent}/, "") if indent > 0
97
97
  src
98
98
  end
99
99
  end
@@ -3,75 +3,92 @@
3
3
  module Extension
4
4
  class Project < ShopifyCli::ProjectType
5
5
  hidden_feature
6
- creator 'App Extension', 'Extension::Commands::Create'
6
+ title("App Extension")
7
+ creator("Extension::Commands::Create")
7
8
 
8
- register_command('Extension::Commands::Build', "build")
9
- register_command('Extension::Commands::Register', "register")
10
- register_command('Extension::Commands::Push', "push")
11
- register_command('Extension::Commands::Serve', "serve")
12
- register_command('Extension::Commands::Tunnel', "tunnel")
9
+ register_command("Extension::Commands::Build", "build")
10
+ register_command("Extension::Commands::Register", "register")
11
+ register_command("Extension::Commands::Push", "push")
12
+ register_command("Extension::Commands::Serve", "serve")
13
+ register_command("Extension::Commands::Tunnel", "tunnel")
13
14
 
14
- require Project.project_filepath('messages/messages')
15
- require Project.project_filepath('messages/message_loading')
16
- require Project.project_filepath('extension_project_keys')
15
+ require Project.project_filepath("messages/messages")
16
+ require Project.project_filepath("messages/message_loading")
17
+ require Project.project_filepath("extension_project_keys")
17
18
  register_messages(Extension::Messages::MessageLoading.load)
18
19
  end
19
20
 
20
21
  module Commands
21
- autoload :ExtensionCommand, Project.project_filepath('commands/extension_command')
22
- autoload :Create, Project.project_filepath('commands/create')
23
- autoload :Register, Project.project_filepath('commands/register')
24
- autoload :Build, Project.project_filepath('commands/build')
25
- autoload :Serve, Project.project_filepath('commands/serve')
26
- autoload :Push, Project.project_filepath('commands/push')
27
- autoload :Tunnel, Project.project_filepath('commands/tunnel')
22
+ autoload :ExtensionCommand, Project.project_filepath("commands/extension_command")
23
+ autoload :Create, Project.project_filepath("commands/create")
24
+ autoload :Register, Project.project_filepath("commands/register")
25
+ autoload :Build, Project.project_filepath("commands/build")
26
+ autoload :Serve, Project.project_filepath("commands/serve")
27
+ autoload :Push, Project.project_filepath("commands/push")
28
+ autoload :Tunnel, Project.project_filepath("commands/tunnel")
28
29
  end
29
30
 
30
31
  module Tasks
31
- autoload :UserErrors, Project.project_filepath('tasks/user_errors')
32
- autoload :GetApps, Project.project_filepath('tasks/get_apps')
33
- autoload :GetApp, Project.project_filepath('tasks/get_app')
34
- autoload :CreateExtension, Project.project_filepath('tasks/create_extension')
35
- autoload :UpdateDraft, Project.project_filepath('tasks/update_draft')
32
+ autoload :UserErrors, Project.project_filepath("tasks/user_errors")
33
+ autoload :GetApps, Project.project_filepath("tasks/get_apps")
34
+ autoload :GetApp, Project.project_filepath("tasks/get_app")
35
+ autoload :CreateExtension, Project.project_filepath("tasks/create_extension")
36
+ autoload :UpdateDraft, Project.project_filepath("tasks/update_draft")
37
+ autoload :FetchSpecifications, Project.project_filepath("tasks/fetch_specifications")
38
+ autoload :ConfigureFeatures, Project.project_filepath("tasks/configure_features")
36
39
 
37
40
  module Converters
38
- autoload :RegistrationConverter, Project.project_filepath('tasks/converters/registration_converter')
39
- autoload :VersionConverter, Project.project_filepath('tasks/converters/version_converter')
40
- autoload :ValidationErrorConverter, Project.project_filepath('tasks/converters/validation_error_converter')
41
- autoload :AppConverter, Project.project_filepath('tasks/converters/app_converter')
41
+ autoload :RegistrationConverter, Project.project_filepath("tasks/converters/registration_converter")
42
+ autoload :VersionConverter, Project.project_filepath("tasks/converters/version_converter")
43
+ autoload :ValidationErrorConverter, Project.project_filepath("tasks/converters/validation_error_converter")
44
+ autoload :AppConverter, Project.project_filepath("tasks/converters/app_converter")
42
45
  end
43
46
  end
44
47
 
45
48
  module Forms
46
- autoload :Create, Project.project_filepath('forms/create')
47
- autoload :Register, Project.project_filepath('forms/register')
49
+ module Questions
50
+ autoload :AskApp, Project.project_filepath("forms/questions/ask_app")
51
+ autoload :AskName, Project.project_filepath("forms/questions/ask_name")
52
+ autoload :AskType, Project.project_filepath("forms/questions/ask_type")
53
+ end
54
+
55
+ autoload :Create, Project.project_filepath("forms/create")
56
+ autoload :Register, Project.project_filepath("forms/register")
48
57
  end
49
58
 
50
59
  module Features
51
- autoload :ArgoSetup, Project.project_filepath('features/argo_setup')
52
- autoload :ArgoSetupStep, Project.project_filepath('features/argo_setup_step')
53
- autoload :ArgoSetupSteps, Project.project_filepath('features/argo_setup_steps')
54
- autoload :ArgoDependencies, Project.project_filepath('features/argo_dependencies')
55
- autoload :ArgoConfig, Project.project_filepath('features/argo_config')
56
- module Argo
57
- autoload :Base, Project.project_filepath('features/argo/base')
58
- autoload :Admin, Project.project_filepath('features/argo/admin')
59
- autoload :Checkout, Project.project_filepath('features/argo/checkout')
60
- end
60
+ autoload :ArgoSetup, Project.project_filepath("features/argo_setup")
61
+ autoload :ArgoSetupStep, Project.project_filepath("features/argo_setup_step")
62
+ autoload :ArgoSetupSteps, Project.project_filepath("features/argo_setup_steps")
63
+ autoload :ArgoDependencies, Project.project_filepath("features/argo_dependencies")
64
+ autoload :ArgoConfig, Project.project_filepath("features/argo_config")
65
+ autoload :Argo, Project.project_filepath("features/argo")
61
66
  end
62
67
 
63
68
  module Models
64
- autoload :App, Project.project_filepath('models/app')
65
- autoload :Registration, Project.project_filepath('models/registration')
66
- autoload :Version, Project.project_filepath('models/version')
67
- autoload :Type, Project.project_filepath('models/type')
68
- autoload :ValidationError, Project.project_filepath('models/validation_error')
69
-
70
- class << self
71
- Models::Type.load_all
69
+ module SpecificationHandlers
70
+ autoload :Default, Project.project_filepath("models/specification_handlers/default")
72
71
  end
72
+
73
+ autoload :App, Project.project_filepath("models/app")
74
+ autoload :Registration, Project.project_filepath("models/registration")
75
+ autoload :Version, Project.project_filepath("models/version")
76
+ autoload :ValidationError, Project.project_filepath("models/validation_error")
77
+ autoload :Specification, Project.project_filepath("models/specification")
78
+ autoload :Specifications, Project.project_filepath("models/specifications")
79
+ autoload :LazySpecificationHandler, Project.project_filepath("models/lazy_specification_handler")
73
80
  end
74
81
 
75
- autoload :ExtensionProjectKeys, Project.project_filepath('extension_project_keys')
76
- autoload :ExtensionProject, Project.project_filepath('extension_project')
82
+ autoload :ExtensionProjectKeys, Project.project_filepath("extension_project_keys")
83
+ autoload :ExtensionProject, Project.project_filepath("extension_project")
84
+
85
+ def self.specifications
86
+ @specifications ||= Models::Specifications.new(
87
+ fetch_specifications: Tasks::FetchSpecifications
88
+ )
89
+ end
90
+
91
+ def self.specifications=(specifications)
92
+ @specifications = specifications
93
+ end
77
94
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_cli'
2
+ require "shopify_cli"
3
3
 
4
4
  module Extension
5
5
  module Commands
@@ -12,9 +12,9 @@ module Extension
12
12
  def call(_args, _command_name)
13
13
  system = ShopifyCli::JsSystem.new(ctx: @ctx)
14
14
 
15
- CLI::UI::Frame.open(@ctx.message('build.frame_title', system.package_manager)) do
15
+ CLI::UI::Frame.open(@ctx.message("build.frame_title", system.package_manager)) do
16
16
  success = system.call(yarn: YARN_BUILD_COMMAND, npm: NPM_BUILD_COMMAND)
17
- @ctx.abort(@ctx.message('build.build_failure_message')) unless success
17
+ @ctx.abort(@ctx.message("build.build_failure_message")) unless success
18
18
  end
19
19
  end
20
20
 
@@ -4,24 +4,30 @@ module Extension
4
4
  module Commands
5
5
  class Create < ShopifyCli::SubCommand
6
6
  options do |parser, flags|
7
- parser.on('--name=NAME') { |name| flags[:name] = name }
8
- parser.on('--type=TYPE') { |type| flags[:type] = type.upcase }
7
+ parser.on("--name=NAME") { |name| flags[:name] = name }
8
+ parser.on("--type=TYPE") { |type| flags[:type] = type.upcase }
9
+ parser.on("--api-key=KEY") { |key| flags[:api_key] = key.downcase }
9
10
  end
10
11
 
11
12
  def call(args, _)
12
13
  with_create_form(args) do |form|
13
14
  if Dir.exist?(form.directory_name)
14
- @ctx.abort(@ctx.message('create.errors.directory_exists', form.directory_name))
15
+ @ctx.abort(@ctx.message("create.errors.directory_exists", form.directory_name))
15
16
  end
16
17
 
17
18
  if form.type.create(form.directory_name, @ctx)
18
19
  ExtensionProject.write_cli_file(context: @ctx, type: form.type.identifier)
19
- ExtensionProject.write_env_file(context: @ctx, title: form.name)
20
-
21
- @ctx.puts(@ctx.message('create.ready_to_start', form.directory_name, form.name))
22
- @ctx.puts(@ctx.message('create.learn_more', form.type.name))
20
+ ExtensionProject.write_env_file(
21
+ context: @ctx,
22
+ title: form.name,
23
+ api_key: form.app.api_key,
24
+ api_secret: form.app.secret
25
+ )
26
+
27
+ @ctx.puts(@ctx.message("create.ready_to_start", form.directory_name, form.name))
28
+ @ctx.puts(@ctx.message("create.learn_more", form.type.name))
23
29
  else
24
- @ctx.puts(@ctx.message('create.try_again'))
30
+ @ctx.puts(@ctx.message("create.try_again"))
25
31
  end
26
32
  end
27
33
  end
@@ -29,10 +35,11 @@ module Extension
29
35
  def self.help
30
36
  <<~HELP
31
37
  Create a new app extension.
32
- Usage: {{command:#{ShopifyCli::TOOL_NAME} create extension <name>}}
38
+ Usage: {{command:#{ShopifyCli::TOOL_NAME} create extension}}
33
39
  Options:
34
40
  {{command:--type=TYPE}} The type of extension you would like to create.
35
41
  {{command:--name=NAME}} The name of your extension (50 characters).”
42
+ {{command:--api-key=KEY}} The API key of your app.”
36
43
  HELP
37
44
  end
38
45
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_cli'
2
+ require "shopify_cli"
3
3
 
4
4
  module Extension
5
5
  module Commands
@@ -10,11 +10,14 @@ module Extension
10
10
 
11
11
  def extension_type
12
12
  @extension_type ||= begin
13
- unless Models::Type.valid?(project.extension_type_identifier)
14
- @ctx.abort(@ctx.message('errors.unknown_type', project.extension_type_identifier))
15
- end
13
+ identifier = project.extension_type_identifier
14
+ Models::LazySpecificationHandler.new(identifier) do
15
+ unless Extension.specifications.valid?(identifier)
16
+ @ctx.abort(@ctx.message("errors.unknown_type", project.extension_type_identifier))
17
+ end
16
18
 
17
- Models::Type.load_type(project.extension_type_identifier)
19
+ Extension.specifications[identifier]
20
+ end
18
21
  end
19
22
  end
20
23
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_cli'
2
+ require "shopify_cli"
3
3
 
4
4
  module Extension
5
5
  module Commands
@@ -10,7 +10,7 @@ module Extension
10
10
  Commands::Register.new(@ctx).call(args, name) unless project.registered?
11
11
  Commands::Build.new(@ctx).call(args, name)
12
12
 
13
- CLI::UI::Frame.open(@ctx.message('push.frame_title')) do
13
+ CLI::UI::Frame.open(@ctx.message("push.frame_title")) do
14
14
  updated_draft_version = update_draft
15
15
  show_message(updated_draft_version)
16
16
  end
@@ -30,18 +30,18 @@ module Extension
30
30
  end
31
31
 
32
32
  def output_success_messages(draft)
33
- @ctx.puts(@ctx.message('push.success_confirmation', project.title, format_time(draft.last_user_interaction_at)))
34
- @ctx.puts(@ctx.message('push.success_info', draft.location))
33
+ @ctx.puts(@ctx.message("push.success_confirmation", project.title, format_time(draft.last_user_interaction_at)))
34
+ @ctx.puts(@ctx.message("push.success_info", draft.location))
35
35
  end
36
36
 
37
37
  def output_validation_errors(draft)
38
- @ctx.puts(@ctx.message('push.pushed_with_errors', format_time(draft.last_user_interaction_at)))
38
+ @ctx.puts(@ctx.message("push.pushed_with_errors", format_time(draft.last_user_interaction_at)))
39
39
 
40
40
  draft.validation_errors.each do |error|
41
- @ctx.puts(format('{{x}} %s: %s', error.field.last, error.message))
41
+ @ctx.puts(format("{{x}} %s: %s", error.field.last, error.message))
42
42
  end
43
43
 
44
- @ctx.puts(@ctx.message('push.push_with_errors_info'))
44
+ @ctx.puts(@ctx.message("push.push_with_errors_info"))
45
45
  end
46
46
 
47
47
  def format_time(time)
@@ -49,7 +49,7 @@ module Extension
49
49
  end
50
50
 
51
51
  def with_waiting_text
52
- @ctx.puts(@ctx.message('push.waiting_text'))
52
+ @ctx.puts(@ctx.message("push.waiting_text"))
53
53
  yield
54
54
  end
55
55
 
@@ -3,23 +3,17 @@
3
3
  module Extension
4
4
  module Commands
5
5
  class Register < ExtensionCommand
6
- options do |parser, flags|
7
- parser.on('--api_key=KEY') { |key| flags[:api_key] = key.downcase }
8
- end
9
-
10
- def call(args, _command_name)
11
- CLI::UI::Frame.open(@ctx.message('register.frame_title')) do
12
- @ctx.abort(@ctx.message('register.already_registered')) if project.registered?
6
+ def call(_args, _command_name)
7
+ CLI::UI::Frame.open(@ctx.message("register.frame_title")) do
8
+ @ctx.abort(@ctx.message("register.already_registered")) if project.registered?
13
9
 
14
- with_register_form(args) do |form|
15
- should_continue = confirm_registration(form.app)
16
- registration = should_continue ? register_extension(form.app) : abort_not_registered
10
+ should_continue = confirm_registration
11
+ registration = should_continue ? register_extension : abort_not_registered
17
12
 
18
- update_project_files(form.app, registration)
13
+ update_project_files(registration)
19
14
 
20
- @ctx.puts(@ctx.message('register.success', project.title, form.app.title))
21
- @ctx.puts(@ctx.message('register.success_info'))
22
- end
15
+ @ctx.puts(@ctx.message("register.success", project.title, app.title))
16
+ @ctx.puts(@ctx.message("register.success_info"))
23
17
  end
24
18
  end
25
19
 
@@ -27,27 +21,18 @@ module Extension
27
21
  <<~HELP
28
22
  Register your local extension to a Shopify app
29
23
  Usage: {{command:#{ShopifyCli::TOOL_NAME} register}}
30
- Options:
31
- {{command:--api_key=API_KEY}} The API key used to register an app with the extension. This can be found on the app page on Partners Dashboard.
32
24
  HELP
33
25
  end
34
26
 
35
27
  private
36
28
 
37
- def with_register_form(args)
38
- form = Forms::Register.ask(@ctx, args, options.flags)
39
- return @ctx.puts(self.class.help) if form.nil?
40
-
41
- yield form
29
+ def confirm_registration
30
+ @ctx.puts(@ctx.message("register.confirm_info", extension_type.name))
31
+ CLI::UI::Prompt.confirm(@ctx.message("register.confirm_question", app.title))
42
32
  end
43
33
 
44
- def confirm_registration(app)
45
- @ctx.puts(@ctx.message('register.confirm_info', extension_type.name))
46
- CLI::UI::Prompt.confirm(@ctx.message('register.confirm_question', app.title))
47
- end
48
-
49
- def register_extension(app)
50
- @ctx.puts(@ctx.message('register.waiting_text'))
34
+ def register_extension
35
+ @ctx.puts(@ctx.message("register.waiting_text"))
51
36
 
52
37
  Tasks::CreateExtension.call(
53
38
  context: @ctx,
@@ -59,7 +44,7 @@ module Extension
59
44
  )
60
45
  end
61
46
 
62
- def update_project_files(app, registration)
47
+ def update_project_files(registration)
63
48
  ExtensionProject.write_env_file(
64
49
  context: @ctx,
65
50
  api_key: app.api_key,
@@ -69,8 +54,12 @@ module Extension
69
54
  )
70
55
  end
71
56
 
57
+ def app
58
+ @app ||= project.app
59
+ end
60
+
72
61
  def abort_not_registered
73
- @ctx.puts(@ctx.message('register.confirm_abort'))
62
+ @ctx.puts(@ctx.message("register.confirm_abort"))
74
63
  raise ShopifyCli::AbortSilent
75
64
  end
76
65
  end