shopify-cli 1.5.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/.github/PULL_REQUEST_TEMPLATE.md +1 -0
  3. data/.rubocop_todo.yml +15 -2
  4. data/.travis.yml +1 -0
  5. data/CHANGELOG.md +26 -0
  6. data/Gemfile +12 -12
  7. data/Gemfile.lock +14 -14
  8. data/README.md +39 -7
  9. data/Rakefile +32 -28
  10. data/bin/load_shopify.rb +6 -6
  11. data/bin/shopify +2 -2
  12. data/dev.yml +5 -2
  13. data/docs/_config.yml +1 -18
  14. data/docs/app/node/commands/index.md +2 -80
  15. data/docs/app/node/index.md +2 -33
  16. data/docs/app/rails/commands/index.md +2 -78
  17. data/docs/app/rails/index.md +2 -34
  18. data/docs/core/index.md +2 -84
  19. data/docs/getting-started/index.md +2 -25
  20. data/docs/getting-started/install/index.md +1 -118
  21. data/docs/getting-started/migrate/index.md +2 -94
  22. data/docs/getting-started/uninstall/index.md +2 -35
  23. data/docs/getting-started/upgrade/index.md +2 -39
  24. data/docs/help/start-app/index.md +2 -4
  25. data/docs/index.md +2 -24
  26. data/ext/shopify-cli/extconf.rb +7 -7
  27. data/install.sh +1 -1
  28. data/lib/docgen/markdown.rb +12 -12
  29. data/lib/graphql/extension_create.graphql +17 -2
  30. data/lib/graphql/fetch_specifications.graphql +14 -0
  31. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  32. data/lib/project_types/extension/cli.rb +56 -48
  33. data/lib/project_types/extension/commands/build.rb +3 -3
  34. data/lib/project_types/extension/commands/create.rb +17 -10
  35. data/lib/project_types/extension/commands/extension_command.rb +14 -7
  36. data/lib/project_types/extension/commands/push.rb +10 -10
  37. data/lib/project_types/extension/commands/register.rb +22 -32
  38. data/lib/project_types/extension/commands/serve.rb +1 -7
  39. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  40. data/lib/project_types/extension/extension_project.rb +22 -7
  41. data/lib/project_types/extension/extension_project_keys.rb +5 -4
  42. data/lib/project_types/extension/features/argo.rb +123 -0
  43. data/lib/project_types/extension/features/argo_config.rb +5 -5
  44. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  45. data/lib/project_types/extension/features/argo_renderer_package.rb +32 -0
  46. data/lib/project_types/extension/features/argo_serve.rb +69 -0
  47. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  48. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  49. data/lib/project_types/extension/forms/create.rb +28 -34
  50. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  51. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  52. data/lib/project_types/extension/forms/questions/ask_type.rb +47 -0
  53. data/lib/project_types/extension/messages/message_loading.rb +3 -1
  54. data/lib/project_types/extension/messages/messages.rb +55 -52
  55. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  56. data/lib/project_types/extension/models/registration.rb +1 -0
  57. data/lib/project_types/extension/models/specification.rb +39 -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 +75 -0
  60. data/lib/project_types/extension/models/specifications.rb +88 -0
  61. data/lib/project_types/extension/tasks/configure_features.rb +54 -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 +8 -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 +18 -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 -19
  73. data/lib/project_types/node/commands/connect.rb +3 -3
  74. data/lib/project_types/node/commands/create.rb +42 -38
  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 +3 -34
  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 +17 -8
  86. data/lib/project_types/node/messages/messages.rb +13 -47
  87. data/lib/project_types/rails/cli.rb +21 -21
  88. data/lib/project_types/rails/commands/connect.rb +3 -3
  89. data/lib/project_types/rails/commands/create.rb +56 -54
  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 +35 -25
  102. data/lib/project_types/rails/gem.rb +24 -24
  103. data/lib/project_types/rails/messages/messages.rb +6 -5
  104. data/lib/project_types/rails/ruby.rb +2 -2
  105. data/lib/project_types/script/cli.rb +38 -39
  106. data/lib/project_types/script/commands/create.rb +12 -14
  107. data/lib/project_types/script/commands/push.rb +10 -17
  108. data/lib/project_types/script/config/extension_points.yml +29 -10
  109. data/lib/project_types/script/errors.rb +1 -2
  110. data/lib/project_types/script/forms/create.rb +18 -5
  111. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +9 -1
  112. data/lib/project_types/script/graphql/script_service_proxy.graphql +1 -2
  113. data/lib/project_types/script/layers/application/build_script.rb +10 -7
  114. data/lib/project_types/script/layers/application/create_script.rb +37 -25
  115. data/lib/project_types/script/layers/application/extension_points.rb +25 -0
  116. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  117. data/lib/project_types/script/layers/application/push_script.rb +13 -18
  118. data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
  119. data/lib/project_types/script/layers/domain/errors.rb +20 -0
  120. data/lib/project_types/script/layers/domain/extension_point.rb +82 -11
  121. data/lib/project_types/script/layers/domain/metadata.rb +48 -0
  122. data/lib/project_types/script/layers/domain/push_package.rb +25 -6
  123. data/lib/project_types/script/layers/domain/script_project.rb +34 -0
  124. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +42 -13
  125. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +24 -49
  126. data/lib/project_types/script/layers/infrastructure/errors.rb +32 -19
  127. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
  128. data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
  129. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +22 -17
  130. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
  131. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
  132. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +145 -0
  133. data/lib/project_types/script/layers/infrastructure/script_service.rb +32 -75
  134. data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
  135. data/lib/project_types/script/messages/messages.rb +58 -59
  136. data/lib/project_types/script/ui/error_handler.rb +115 -72
  137. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  138. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  139. data/lib/project_types/theme/cli.rb +40 -0
  140. data/lib/project_types/theme/commands/connect.rb +54 -0
  141. data/lib/project_types/theme/commands/create.rb +48 -0
  142. data/lib/project_types/theme/commands/deploy.rb +38 -0
  143. data/lib/project_types/theme/commands/generate.rb +20 -0
  144. data/lib/project_types/theme/commands/generate/env.rb +79 -0
  145. data/lib/project_types/theme/commands/push.rb +55 -0
  146. data/lib/project_types/theme/commands/serve.rb +31 -0
  147. data/lib/project_types/theme/forms/connect.rb +34 -0
  148. data/lib/project_types/theme/forms/create.rb +22 -0
  149. data/lib/project_types/theme/messages/messages.rb +147 -0
  150. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
  151. data/lib/project_types/theme/themekit.rb +113 -0
  152. data/lib/rubygems_plugin.rb +3 -3
  153. data/lib/shopify-cli/admin_api.rb +52 -12
  154. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  155. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  156. data/lib/shopify-cli/api.rb +34 -31
  157. data/lib/shopify-cli/command.rb +1 -1
  158. data/lib/shopify-cli/commands.rb +9 -9
  159. data/lib/shopify-cli/commands/config.rb +28 -52
  160. data/lib/shopify-cli/commands/connect.rb +10 -10
  161. data/lib/shopify-cli/commands/create.rb +5 -5
  162. data/lib/shopify-cli/commands/help.rb +6 -6
  163. data/lib/shopify-cli/commands/logout.rb +3 -3
  164. data/lib/shopify-cli/commands/system.rb +33 -33
  165. data/lib/shopify-cli/commands/version.rb +2 -2
  166. data/lib/shopify-cli/context.rb +71 -22
  167. data/lib/shopify-cli/core.rb +4 -4
  168. data/lib/shopify-cli/core/entry_point.rb +5 -5
  169. data/lib/shopify-cli/core/executor.rb +1 -1
  170. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  171. data/lib/shopify-cli/core/monorail.rb +16 -16
  172. data/lib/shopify-cli/db.rb +2 -2
  173. data/lib/shopify-cli/feature.rb +1 -3
  174. data/lib/shopify-cli/form.rb +1 -1
  175. data/lib/shopify-cli/git.rb +17 -17
  176. data/lib/shopify-cli/helpers.rb +1 -1
  177. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  178. data/lib/shopify-cli/heroku.rb +28 -28
  179. data/lib/shopify-cli/http_request.rb +21 -9
  180. data/lib/shopify-cli/js_deps.rb +12 -12
  181. data/lib/shopify-cli/js_system.rb +5 -5
  182. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  183. data/lib/shopify-cli/messages/messages.rb +9 -16
  184. data/lib/shopify-cli/method_object.rb +104 -0
  185. data/lib/shopify-cli/oauth.rb +25 -25
  186. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  187. data/lib/shopify-cli/options.rb +3 -3
  188. data/lib/shopify-cli/packager.rb +24 -24
  189. data/lib/shopify-cli/partners_api.rb +24 -18
  190. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  191. data/lib/shopify-cli/process_supervision.rb +7 -7
  192. data/lib/shopify-cli/project.rb +16 -16
  193. data/lib/shopify-cli/project_type.rb +4 -4
  194. data/lib/shopify-cli/resolve_constant.rb +25 -0
  195. data/lib/shopify-cli/resources.rb +1 -1
  196. data/lib/shopify-cli/resources/env_file.rb +9 -9
  197. data/lib/shopify-cli/result.rb +432 -0
  198. data/lib/shopify-cli/shopifolk.rb +6 -8
  199. data/lib/shopify-cli/sub_command.rb +1 -1
  200. data/lib/shopify-cli/task.rb +3 -3
  201. data/lib/shopify-cli/tasks.rb +7 -7
  202. data/lib/shopify-cli/tasks/create_api_client.rb +5 -5
  203. data/lib/shopify-cli/tasks/ensure_dev_store.rb +12 -12
  204. data/lib/shopify-cli/tasks/ensure_env.rb +15 -15
  205. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  206. data/lib/shopify-cli/tasks/select_org_and_shop.rb +25 -24
  207. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  208. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  209. data/lib/shopify-cli/tunnel.rb +36 -30
  210. data/lib/shopify-cli/version.rb +1 -1
  211. data/lib/shopify_cli.rb +57 -52
  212. data/shopify-cli.gemspec +6 -6
  213. data/shopify.fish +1 -1
  214. data/shopify.sh +1 -1
  215. data/vendor/deps/cli-kit/REVISION +1 -1
  216. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
  217. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
  218. data/vendor/deps/cli-ui/REVISION +1 -1
  219. data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
  220. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
  221. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
  222. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
  223. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
  224. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
  225. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
  226. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
  227. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
  228. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
  229. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
  230. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  231. data/vendor/deps/webrick/.gitignore +9 -0
  232. data/vendor/deps/webrick/Gemfile +3 -0
  233. data/vendor/deps/webrick/LICENSE.txt +22 -0
  234. data/vendor/deps/webrick/README.md +61 -0
  235. data/vendor/deps/webrick/Rakefile +10 -0
  236. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  237. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  238. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  239. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  240. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  241. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  242. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  243. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  244. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  245. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  246. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  247. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  248. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  249. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  250. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  251. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  252. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  253. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  254. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  255. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  256. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  257. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  258. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  259. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  260. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  261. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  262. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  263. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  264. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  265. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  266. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  267. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  268. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  269. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  270. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  271. data/vendor/deps/webrick/webrick.gemspec +74 -0
  272. data/vendor/gen/template/bin/update-deps +9 -9
  273. metadata +83 -35
  274. data/docs/Gemfile +0 -5
  275. data/docs/Gemfile.lock +0 -258
  276. data/docs/_data/nav.yml +0 -35
  277. data/docs/_includes/footer.html +0 -15
  278. data/docs/_includes/head.html +0 -19
  279. data/docs/_includes/sidebar_nav.html +0 -22
  280. data/docs/_includes/toc.html +0 -112
  281. data/docs/_layouts/default.html +0 -79
  282. data/docs/css/docs.css +0 -157
  283. data/docs/images/header.png +0 -0
  284. data/docs/installing-ruby.md +0 -28
  285. data/lib/project_types/extension/features/argo/admin.rb +0 -20
  286. data/lib/project_types/extension/features/argo/base.rb +0 -129
  287. data/lib/project_types/extension/features/argo/checkout.rb +0 -20
  288. data/lib/project_types/extension/forms/register.rb +0 -47
  289. data/lib/project_types/extension/models/type.rb +0 -81
  290. data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
  291. data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
  292. data/lib/project_types/node/commands/generate/billing.rb +0 -39
  293. data/lib/project_types/node/commands/generate/page.rb +0 -59
  294. data/lib/project_types/node/commands/generate/webhook.rb +0 -37
  295. data/lib/project_types/script/commands/disable.rb +0 -25
  296. data/lib/project_types/script/commands/enable.rb +0 -78
  297. data/lib/project_types/script/graphql/shop_script_delete.graphql +0 -14
  298. data/lib/project_types/script/graphql/shop_script_update_or_create.graphql +0 -28
  299. data/lib/project_types/script/layers/application/disable_script.rb +0 -21
  300. data/lib/project_types/script/layers/application/enable_script.rb +0 -23
  301. data/lib/project_types/script/layers/domain/script.rb +0 -18
  302. data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -47
  303. data/lib/project_types/script/script_project.rb +0 -54
  304. data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
  305. data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
@@ -30,16 +30,16 @@ module Rails
30
30
  Usage: {{command:%s create rails}}
31
31
  Options:
32
32
  {{command:--name=NAME}} App name. Any string.
33
- {{command:--app_url=APPURL}} App URL. Must be a valid URL.
34
- {{command:--organization_id=ID}} Partner organization ID. Must be an existing organization.
35
- {{command:--shop_domain=MYSHOPIFYDOMAIN }} Development store URL. Must be an existing development store.
33
+ {{command:--app-url=APPURL}} App URL. Must be a valid URL.
34
+ {{command:--organization-id=ID}} Partner organization ID. Must be an existing organization.
35
+ {{command:--shop-domain=MYSHOPIFYDOMAIN }} Development store URL. Must be an existing development store.
36
36
  {{command:--db=DB}} Database type. Must be one of: mysql, postgresql, sqlite3, oracle, frontbase, ibm_db, sqlserver, jdbcmysql, jdbcsqlite3, jdbcpostgresql, jdbc.
37
- {{command:--rails_opts=RAILSOPTS}} Additional options. Must be string containing one or more valid Rails options, separated by spaces.
37
+ {{command:--rails-opts=RAILSOPTS}} Additional options. Must be string containing one or more valid Rails options, separated by spaces.
38
38
  HELP
39
39
 
40
40
  error: {
41
41
  invalid_ruby_version: <<~MSG,
42
- This project requires a ruby version ~> 2.5.
42
+ This project requires a Ruby version ~> 2.5 or Ruby 3.0
43
43
  See {{underline:https://github.com/Shopify/shopify-app-cli/blob/master/docs/installing-ruby.md}}
44
44
  for our recommended method of installing ruby.
45
45
  MSG
@@ -257,6 +257,7 @@ module Rails
257
257
  forms: {
258
258
  create: {
259
259
  error: {
260
+ invalid_app_name: "App name cannot contain 'Shopify'",
260
261
  invalid_app_type: "Invalid app type %s",
261
262
  invalid_db_type: "Invalid database type %s",
262
263
  },
@@ -8,8 +8,8 @@ module Rails
8
8
 
9
9
  class << self
10
10
  def version(ctx)
11
- require 'semantic/semantic'
12
- out, _ = ctx.capture2('ruby', '-v')
11
+ require "semantic/semantic"
12
+ out, _ = ctx.capture2("ruby", "-v")
13
13
  Semantic::Version.new(VERSION_STRING.match(out)[1])
14
14
  end
15
15
  end
@@ -3,74 +3,73 @@
3
3
  module Script
4
4
  class Project < ShopifyCli::ProjectType
5
5
  hidden_feature(feature_set: :script_project)
6
- title('Script')
7
- creator('Script::Commands::Create')
6
+ title("Script")
7
+ creator("Script::Commands::Create")
8
8
 
9
- register_command('Script::Commands::Push', 'push')
10
- register_command('Script::Commands::Disable', 'disable')
11
- register_command('Script::Commands::Enable', 'enable')
9
+ register_command("Script::Commands::Push", "push")
12
10
 
13
- require Project.project_filepath('messages/messages')
11
+ require Project.project_filepath("messages/messages")
14
12
  register_messages(Script::Messages::MESSAGES)
15
13
  end
16
14
 
17
15
  # define/autoload project specific Commands
18
16
  module Commands
19
- autoload :Create, Project.project_filepath('commands/create')
20
- autoload :Push, Project.project_filepath('commands/push')
21
- autoload :Disable, Project.project_filepath('commands/disable')
22
- autoload :Enable, Project.project_filepath('commands/enable')
17
+ autoload :Create, Project.project_filepath("commands/create")
18
+ autoload :Push, Project.project_filepath("commands/push")
23
19
  end
24
20
 
25
21
  # define/autoload project specific Forms
26
22
  module Forms
27
- autoload :Create, Project.project_filepath('forms/create')
28
- autoload :ScriptForm, Project.project_filepath('forms/script_form')
23
+ autoload :Create, Project.project_filepath("forms/create")
24
+ autoload :ScriptForm, Project.project_filepath("forms/script_form")
29
25
  end
30
26
 
31
27
  module Layers
32
28
  module Application
33
- autoload :BuildScript, Project.project_filepath('layers/application/build_script')
34
- autoload :CreateScript, Project.project_filepath('layers/application/create_script')
35
- autoload :PushScript, Project.project_filepath('layers/application/push_script')
36
- autoload :DisableScript, Project.project_filepath('layers/application/disable_script')
37
- autoload :EnableScript, Project.project_filepath('layers/application/enable_script')
38
- autoload :ExtensionPoints, Project.project_filepath('layers/application/extension_points')
39
- autoload :ProjectDependencies, Project.project_filepath('layers/application/project_dependencies')
29
+ autoload :BuildScript, Project.project_filepath("layers/application/build_script")
30
+ autoload :CreateScript, Project.project_filepath("layers/application/create_script")
31
+ autoload :PushScript, Project.project_filepath("layers/application/push_script")
32
+ autoload :ExtensionPoints, Project.project_filepath("layers/application/extension_points")
33
+ autoload :ProjectDependencies, Project.project_filepath("layers/application/project_dependencies")
40
34
  end
41
35
 
42
36
  module Domain
43
- autoload :Errors, Project.project_filepath('layers/domain/errors')
44
- autoload :PushPackage, Project.project_filepath('layers/domain/push_package')
45
- autoload :ExtensionPoint, Project.project_filepath('layers/domain/extension_point')
46
- autoload :Script, Project.project_filepath('layers/domain/script')
37
+ autoload :Errors, Project.project_filepath("layers/domain/errors")
38
+ autoload :ConfigUi, Project.project_filepath("layers/domain/config_ui")
39
+ autoload :PushPackage, Project.project_filepath("layers/domain/push_package")
40
+ autoload :Metadata, Project.project_filepath("layers/domain/metadata")
41
+ autoload :ExtensionPoint, Project.project_filepath("layers/domain/extension_point")
42
+ autoload :ScriptProject, Project.project_filepath("layers/domain/script_project")
47
43
  end
48
44
 
49
45
  module Infrastructure
50
- autoload :Errors, Project.project_filepath('layers/infrastructure/errors')
46
+ autoload :Errors, Project.project_filepath("layers/infrastructure/errors")
51
47
  autoload :AssemblyScriptDependencyManager,
52
- Project.project_filepath('layers/infrastructure/assemblyscript_dependency_manager')
48
+ Project.project_filepath("layers/infrastructure/assemblyscript_dependency_manager")
53
49
  autoload :AssemblyScriptProjectCreator,
54
- Project.project_filepath('layers/infrastructure/assemblyscript_project_creator')
55
- autoload :AssemblyScriptTaskRunner, Project.project_filepath('layers/infrastructure/assemblyscript_task_runner')
56
- autoload :AssemblyScriptTsConfig, Project.project_filepath('layers/infrastructure/assemblyscript_tsconfig')
57
- autoload :PushPackageRepository, Project.project_filepath('layers/infrastructure/push_package_repository')
58
- autoload :ExtensionPointRepository, Project.project_filepath('layers/infrastructure/extension_point_repository')
59
- autoload :ProjectCreator, Project.project_filepath('layers/infrastructure/project_creator')
60
- autoload :ScriptRepository, Project.project_filepath('layers/infrastructure/script_repository')
61
- autoload :ScriptService, Project.project_filepath('layers/infrastructure/script_service')
62
- autoload :TaskRunner, Project.project_filepath('layers/infrastructure/task_runner')
50
+ Project.project_filepath("layers/infrastructure/assemblyscript_project_creator")
51
+ autoload :AssemblyScriptTaskRunner, Project.project_filepath("layers/infrastructure/assemblyscript_task_runner")
52
+ autoload :AssemblyScriptTsConfig, Project.project_filepath("layers/infrastructure/assemblyscript_tsconfig")
53
+ autoload :RustProjectCreator,
54
+ Project.project_filepath("layers/infrastructure/rust_project_creator.rb")
55
+ autoload :RustTaskRunner, Project.project_filepath("layers/infrastructure/rust_task_runner")
56
+
57
+ autoload :PushPackageRepository, Project.project_filepath("layers/infrastructure/push_package_repository")
58
+ autoload :ExtensionPointRepository, Project.project_filepath("layers/infrastructure/extension_point_repository")
59
+ autoload :ProjectCreator, Project.project_filepath("layers/infrastructure/project_creator")
60
+ autoload :ScriptProjectRepository, Project.project_filepath("layers/infrastructure/script_project_repository")
61
+ autoload :ScriptService, Project.project_filepath("layers/infrastructure/script_service")
62
+ autoload :TaskRunner, Project.project_filepath("layers/infrastructure/task_runner")
63
63
  end
64
64
  end
65
65
 
66
66
  module UI
67
- autoload :ErrorHandler, Project.project_filepath('ui/error_handler')
68
- autoload :PrintingSpinner, Project.project_filepath('ui/printing_spinner')
69
- autoload :StrictSpinner, Project.project_filepath('ui/strict_spinner')
67
+ autoload :ErrorHandler, Project.project_filepath("ui/error_handler")
68
+ autoload :PrintingSpinner, Project.project_filepath("ui/printing_spinner")
69
+ autoload :StrictSpinner, Project.project_filepath("ui/strict_spinner")
70
70
  end
71
71
 
72
- autoload :ScriptProject, Project.project_filepath('script_project')
73
- autoload :Errors, Project.project_filepath('errors')
72
+ autoload :Errors, Project.project_filepath("errors")
74
73
 
75
74
  class ScriptProjectError < StandardError; end
76
75
  end
@@ -4,38 +4,36 @@ module Script
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('--extension_point=EP_NAME') { |ep_name| flags[:extension_point] = ep_name }
7
+ parser.on("--name=NAME") { |name| flags[:name] = name }
8
+ parser.on("--extension_point=EP_NAME") { |ep_name| flags[:extension_point] = ep_name }
9
+ parser.on("--extension-point=EP_NAME") { |ep_name| flags[:extension_point] = ep_name }
10
+ parser.on("--language=LANGUAGE") { |language| flags[:language] = language }
11
+ parser.on("--no-config-ui") { |no_config_ui| flags[:no_config_ui] = no_config_ui }
9
12
  end
10
13
 
11
14
  def call(args, _name)
12
- language = 'ts'
13
- cur_dir = @ctx.root
14
-
15
15
  form = Forms::Create.ask(@ctx, args, options.flags)
16
16
  return @ctx.puts(self.class.help) if form.nil?
17
17
 
18
- unless !form.name.empty? && form.extension_point && ScriptProject::SUPPORTED_LANGUAGES.include?(language)
18
+ unless !form.name.empty? && form.extension_point && form.language
19
19
  return @ctx.puts(self.class.help)
20
20
  end
21
21
 
22
22
  project = Layers::Application::CreateScript.call(
23
23
  ctx: @ctx,
24
- language: language,
24
+ language: form.language,
25
25
  script_name: form.name,
26
- extension_point_type: form.extension_point
26
+ extension_point_type: form.extension_point,
27
+ no_config_ui: options.flags.key?(:no_config_ui)
27
28
  )
28
- @ctx.puts(@ctx.message('script.create.change_directory_notice', project.script_name))
29
- rescue Script::Errors::ScriptProjectAlreadyExistsError => e
30
- UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.create.error.operation_failed'))
29
+ @ctx.puts(@ctx.message("script.create.change_directory_notice", project.script_name))
31
30
  rescue StandardError => e
32
- ScriptProject.cleanup(ctx: @ctx, script_name: form.name, root_dir: cur_dir) if form
33
- UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.create.error.operation_failed'))
31
+ UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message("script.create.error.operation_failed"))
34
32
  end
35
33
 
36
34
  def self.help
37
35
  allowed_values = Script::Layers::Application::ExtensionPoints.types.map { |type| "{{cyan:#{type}}}" }
38
- ShopifyCli::Context.message('script.create.help', ShopifyCli::TOOL_NAME, allowed_values.join(', '))
36
+ ShopifyCli::Context.message("script.create.help", ShopifyCli::TOOL_NAME, allowed_values.join(", "))
39
37
  end
40
38
  end
41
39
  end
@@ -4,31 +4,24 @@ module Script
4
4
  module Commands
5
5
  class Push < ShopifyCli::Command
6
6
  options do |parser, flags|
7
- parser.on('--force') { |t| flags[:force] = t }
7
+ parser.on("--force") { |t| flags[:force] = t }
8
8
  end
9
9
 
10
10
  def call(_args, _name)
11
11
  ShopifyCli::Tasks::EnsureEnv.call(@ctx, required: [:api_key, :secret, :shop])
12
- project = ScriptProject.current
13
- api_key = project.env[:api_key]
14
- return @ctx.puts(self.class.help) unless api_key &&
15
- ScriptProject::SUPPORTED_LANGUAGES.include?(project.language)
16
- Layers::Application::PushScript.call(
17
- ctx: @ctx,
18
- language: project.language,
19
- extension_point_type: project.extension_point_type,
20
- script_name: project.script_name,
21
- source_file: project.source_file,
22
- api_key: api_key,
23
- force: options.flags.key?(:force)
24
- )
25
- @ctx.puts(@ctx.message('script.push.script_pushed', api_key: api_key))
12
+
13
+ api_key = Layers::Infrastructure::ScriptProjectRepository.new(ctx: @ctx).get.api_key
14
+ return @ctx.puts(self.class.help) unless api_key
15
+
16
+ Layers::Application::PushScript.call(ctx: @ctx, force: options.flags.key?(:force))
17
+ @ctx.puts(@ctx.message("script.push.script_pushed", api_key: api_key))
26
18
  rescue StandardError => e
27
- UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.push.error.operation_failed'))
19
+ msg = @ctx.message("script.push.error.operation_failed", api_key: api_key)
20
+ UI::ErrorHandler.pretty_print_and_raise(e, failed_op: msg)
28
21
  end
29
22
 
30
23
  def self.help
31
- ShopifyCli::Context.message('script.push.help', ShopifyCli::TOOL_NAME)
24
+ ShopifyCli::Context.message("script.push.help", ShopifyCli::TOOL_NAME)
32
25
  end
33
26
  end
34
27
  end
@@ -1,25 +1,44 @@
1
1
  discount:
2
+ deprecated: true
2
3
  assemblyscript:
3
4
  package: "@shopify/extension-point-as-discount"
4
- sdk-version: "^7.0.0"
5
- toolchain-version: "^2.0.1"
5
+ sdk-version: "^9.0.0"
6
+ toolchain-version: "^5.0.0"
6
7
  unit_limit_per_order:
8
+ beta: true
7
9
  assemblyscript:
8
10
  package: "@shopify/extension-point-as-unit-limit-per-order"
9
- sdk-version: "^7.0.0"
10
- toolchain-version: "^2.0.1"
11
+ sdk-version: "^9.0.0"
12
+ toolchain-version: "^5.0.0"
11
13
  payment_filter:
12
14
  assemblyscript:
13
15
  package: "@shopify/extension-point-as-payment-filter"
14
- sdk-version: "^7.0.0"
15
- toolchain-version: "^2.0.1"
16
+ sdk-version: "^9.0.0"
17
+ toolchain-version: "^5.0.0"
18
+ rust:
19
+ beta: true
20
+ package: "https://github.com/Shopify/scripts-apis-rs"
16
21
  shipping_filter:
17
22
  assemblyscript:
18
23
  package: "@shopify/extension-point-as-shipping-filter"
19
- sdk-version: "^7.0.0"
20
- toolchain-version: "^2.0.1"
24
+ sdk-version: "^9.0.0"
25
+ toolchain-version: "^5.0.0"
21
26
  tax_filter:
27
+ beta: true
22
28
  assemblyscript:
23
29
  package: "@shopify/extension-point-as-tax-filter"
24
- sdk-version: "^7.0.0"
25
- toolchain-version: "^2.0.1"
30
+ sdk-version: "^9.0.0"
31
+ toolchain-version: "^5.0.0"
32
+ payment_methods:
33
+ domain: 'checkout'
34
+ assemblyscript:
35
+ package: "@shopify/scripts-checkout-apis"
36
+ toolchain-version: "^5.0.0"
37
+ sdk-version: "^9.0.0"
38
+ shipping_methods:
39
+ domain: 'checkout'
40
+ assemblyscript:
41
+ package: "@shopify/scripts-checkout-apis"
42
+ sdk-version: "^9.0.0"
43
+ toolchain-version: "^5.0.0"
44
+
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Script
4
4
  module Errors
5
- class InvalidContextError < ScriptProjectError; end
6
5
  class InvalidScriptNameError < ScriptProjectError; end
6
+
7
7
  class NoExistingAppsError < ScriptProjectError; end
8
8
  class NoExistingOrganizationsError < ScriptProjectError; end
9
9
 
@@ -15,7 +15,6 @@ module Script
15
15
  end
16
16
  end
17
17
 
18
- class ScriptProjectAlreadyExistsError < ScriptProjectError; end
19
18
  class InvalidConfigProps < ScriptProjectError; end
20
19
 
21
20
  class InvalidConfigYAMLError < ScriptProjectError
@@ -3,31 +3,44 @@
3
3
  module Script
4
4
  module Forms
5
5
  class Create < ShopifyCli::Form
6
- flag_arguments :extension_point, :name
6
+ flag_arguments :extension_point, :name, :language
7
7
 
8
8
  def ask
9
9
  self.name = valid_name
10
10
  self.extension_point ||= ask_extension_point
11
+ self.language = ask_language
11
12
  end
12
13
 
13
14
  private
14
15
 
15
16
  def ask_extension_point
16
17
  CLI::UI::Prompt.ask(
17
- @ctx.message('script.forms.create.select_extension_point'),
18
- options: Script::Layers::Application::ExtensionPoints.types
18
+ @ctx.message("script.forms.create.select_extension_point"),
19
+ options: Layers::Application::ExtensionPoints.available_types
19
20
  )
20
21
  end
21
22
 
22
23
  def ask_name
23
- CLI::UI::Prompt.ask(@ctx.message('script.forms.create.script_name'))
24
+ CLI::UI::Prompt.ask(@ctx.message("script.forms.create.script_name"))
24
25
  end
25
26
 
26
27
  def valid_name
27
- n = (name || ask_name).downcase.gsub(' ', '_')
28
+ n = (name || ask_name).downcase.gsub(" ", "_")
28
29
  return n if n.match?(/^[0-9A-Za-z_-]*$/)
29
30
  raise Errors::InvalidScriptNameError
30
31
  end
32
+
33
+ def ask_language
34
+ return language.downcase if language
35
+
36
+ all_languages = Layers::Application::ExtensionPoints.languages(type: extension_point)
37
+ return all_languages.first if all_languages.count == 1
38
+
39
+ CLI::UI::Prompt.ask(
40
+ ctx.message("script.forms.create.select_language"),
41
+ options: all_languages
42
+ )
43
+ end
31
44
  end
32
45
  end
33
46
  end
@@ -1,16 +1,24 @@
1
1
  mutation AppScriptUpdateOrCreate(
2
2
  $extensionPointName: ExtensionPointName!,
3
3
  $title: String,
4
+ $configUi: String,
4
5
  $sourceCode: String,
5
6
  $language: String,
6
- $force: Boolean
7
+ $force: Boolean,
8
+ $schemaMajorVersion: String,
9
+ $schemaMinorVersion: String,
10
+ $useMsgpack: Boolean
7
11
  ) {
8
12
  appScriptUpdateOrCreate(
9
13
  extensionPointName: $extensionPointName
10
14
  title: $title
15
+ configUi: $configUi
11
16
  sourceCode: $sourceCode
12
17
  language: $language
13
18
  force: $force
19
+ schemaMajorVersion: $schemaMajorVersion
20
+ schemaMinorVersion: $schemaMinorVersion
21
+ useMsgpack: $useMsgpack
14
22
  ) {
15
23
  userErrors {
16
24
  field
@@ -1,7 +1,6 @@
1
- query ProxyRequest($api_key: String, $shop_domain: String, $query: String!, $variables: String) {
1
+ query ProxyRequest($api_key: String, $query: String!, $variables: String) {
2
2
  scriptServiceProxy(
3
3
  apiKey: $api_key
4
- shopDomain: $shop_domain
5
4
  query: $query
6
5
  variables: $variables
7
6
  )
@@ -5,14 +5,17 @@ module Script
5
5
  module Application
6
6
  class BuildScript
7
7
  class << self
8
- def call(ctx:, task_runner:, script:)
9
- CLI::UI::Frame.open(ctx.message('script.application.building')) do
8
+ def call(ctx:, task_runner:, script_project:)
9
+ CLI::UI::Frame.open(ctx.message("script.application.building")) do
10
10
  begin
11
- UI::StrictSpinner.spin(ctx.message('script.application.building_script')) do |spinner|
12
- Infrastructure::PushPackageRepository
13
- .new(ctx: ctx)
14
- .create_push_package(script, task_runner.build, task_runner.compiled_type)
15
- spinner.update_title(ctx.message('script.application.built'))
11
+ UI::StrictSpinner.spin(ctx.message("script.application.building_script")) do |spinner|
12
+ Infrastructure::PushPackageRepository.new(ctx: ctx).create_push_package(
13
+ script_project: script_project,
14
+ script_content: task_runner.build,
15
+ compiled_type: task_runner.compiled_type,
16
+ metadata: task_runner.metadata,
17
+ )
18
+ spinner.update_title(ctx.message("script.application.built"))
16
19
  end
17
20
  rescue StandardError => e
18
21
  CLI::UI::Frame.with_frame_color_override(:red) do
@@ -7,40 +7,52 @@ module Script
7
7
  module Application
8
8
  class CreateScript
9
9
  class << self
10
- def call(ctx:, language:, script_name:, extension_point_type:)
11
- extension_point = ExtensionPoints.get(type: extension_point_type)
12
- project = setup_project(ctx, script_name, extension_point)
13
- project_creator = Infrastructure::ProjectCreator
14
- .for(ctx, language, extension_point, script_name, project.directory)
15
- install_dependencies(ctx, language, script_name, project.source_file, project_creator)
16
- bootstrap(ctx, project.source_path, project_creator)
17
- project
10
+ def call(ctx:, language:, script_name:, extension_point_type:, no_config_ui:)
11
+ raise Infrastructure::Errors::ScriptProjectAlreadyExistsError, script_name if ctx.dir_exist?(script_name)
12
+
13
+ in_new_directory_context(ctx, script_name) do
14
+ extension_point = ExtensionPoints.get(type: extension_point_type)
15
+ project = Infrastructure::ScriptProjectRepository.new(ctx: ctx).create(
16
+ script_name: script_name,
17
+ extension_point_type: extension_point_type,
18
+ language: language,
19
+ no_config_ui: no_config_ui
20
+ )
21
+ project_creator = Infrastructure::ProjectCreator
22
+ .for(ctx, language, extension_point, script_name, project.id)
23
+ install_dependencies(ctx, language, script_name, project_creator)
24
+ bootstrap(ctx, project_creator)
25
+ project
26
+ end
18
27
  end
19
28
 
20
29
  private
21
30
 
22
- def setup_project(ctx, script_name, extension_point)
23
- ScriptProject.create(ctx, script_name)
24
- ScriptProject.write(
25
- ctx,
26
- project_type: :script,
27
- organization_id: nil, # TODO: can you provide this at creation
28
- extension_point_type: extension_point.type,
29
- script_name: script_name
30
- )
31
- ScriptProject.current
32
- end
33
-
34
- def install_dependencies(ctx, language, script_name, source_file, project_creator)
35
- task_runner = Infrastructure::TaskRunner.for(ctx, language, script_name, source_file)
31
+ def install_dependencies(ctx, language, script_name, project_creator)
32
+ task_runner = Infrastructure::TaskRunner.for(ctx, language, script_name)
36
33
  project_creator.setup_dependencies
37
34
  ProjectDependencies.install(ctx: ctx, task_runner: task_runner)
38
35
  end
39
36
 
40
- def bootstrap(ctx, source_path, project_creator)
41
- UI::StrictSpinner.spin(ctx.message('script.create.creating')) do |spinner|
37
+ def bootstrap(ctx, project_creator)
38
+ UI::StrictSpinner.spin(ctx.message("script.create.creating")) do |spinner|
42
39
  project_creator.bootstrap
43
- spinner.update_title(ctx.message('script.create.created', source_path))
40
+ spinner.update_title(ctx.message("script.create.created"))
41
+ end
42
+ end
43
+
44
+ def in_new_directory_context(ctx, directory)
45
+ initial_directory = ctx.root
46
+ begin
47
+ ctx.mkdir_p(directory)
48
+ ctx.chdir(directory)
49
+ yield
50
+ rescue
51
+ ctx.chdir(initial_directory)
52
+ ctx.rm_r(directory)
53
+ raise
54
+ ensure
55
+ ctx.chdir(initial_directory)
44
56
  end
45
57
  end
46
58
  end