shopify-cli 1.3.1 → 1.7.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 (301) 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/.gitignore +0 -1
  8. data/.rubocop.yml +61 -8
  9. data/.rubocop_todo.yml +11 -0
  10. data/.travis.yml +1 -0
  11. data/CHANGELOG.md +30 -0
  12. data/Gemfile +12 -11
  13. data/Gemfile.lock +39 -37
  14. data/README.md +39 -7
  15. data/RELEASING.md +19 -29
  16. data/Rakefile +32 -28
  17. data/bin/load_shopify.rb +6 -6
  18. data/bin/shopify +2 -2
  19. data/dev.yml +2 -2
  20. data/docs/_config.yml +1 -18
  21. data/docs/app/node/commands/index.md +2 -80
  22. data/docs/app/node/index.md +2 -33
  23. data/docs/app/rails/commands/index.md +2 -78
  24. data/docs/app/rails/index.md +2 -34
  25. data/docs/core/index.md +2 -84
  26. data/docs/getting-started/index.md +2 -25
  27. data/docs/getting-started/install/index.md +1 -118
  28. data/docs/getting-started/migrate/index.md +2 -94
  29. data/docs/getting-started/uninstall/index.md +2 -35
  30. data/docs/getting-started/upgrade/index.md +2 -39
  31. data/docs/help/start-app/index.md +2 -4
  32. data/docs/index.md +2 -24
  33. data/ext/shopify-cli/extconf.rb +7 -7
  34. data/install.sh +1 -1
  35. data/lib/docgen/markdown.rb +11 -11
  36. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  37. data/lib/project_types/extension/cli.rb +64 -47
  38. data/lib/project_types/extension/commands/build.rb +3 -3
  39. data/lib/project_types/extension/commands/create.rb +16 -9
  40. data/lib/project_types/extension/commands/extension_command.rb +8 -5
  41. data/lib/project_types/extension/commands/push.rb +8 -8
  42. data/lib/project_types/extension/commands/register.rb +19 -30
  43. data/lib/project_types/extension/commands/serve.rb +2 -2
  44. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  45. data/lib/project_types/extension/extension_project.rb +4 -4
  46. data/lib/project_types/extension/extension_project_keys.rb +4 -4
  47. data/lib/project_types/extension/features/argo.rb +117 -0
  48. data/lib/project_types/extension/features/argo_config.rb +5 -5
  49. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  50. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  51. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  52. data/lib/project_types/extension/forms/create.rb +28 -34
  53. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  54. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  55. data/lib/project_types/extension/forms/questions/ask_type.rb +36 -0
  56. data/lib/project_types/extension/messages/messages.rb +53 -52
  57. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  58. data/lib/project_types/extension/models/specification.rb +35 -0
  59. data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
  60. data/lib/project_types/extension/models/specification_handlers/default.rb +67 -0
  61. data/lib/project_types/extension/models/specifications.rb +77 -0
  62. data/lib/project_types/extension/tasks/configure_features.rb +52 -0
  63. data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
  64. data/lib/project_types/extension/tasks/converters/registration_converter.rb +6 -6
  65. data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
  66. data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
  67. data/lib/project_types/extension/tasks/create_extension.rb +4 -4
  68. data/lib/project_types/extension/tasks/fetch_specifications.rb +38 -0
  69. data/lib/project_types/extension/tasks/get_app.rb +4 -4
  70. data/lib/project_types/extension/tasks/get_apps.rb +3 -3
  71. data/lib/project_types/extension/tasks/update_draft.rb +4 -4
  72. data/lib/project_types/extension/tasks/user_errors.rb +4 -4
  73. data/lib/project_types/node/cli.rb +19 -16
  74. data/lib/project_types/node/commands/connect.rb +15 -0
  75. data/lib/project_types/node/commands/create.rb +46 -38
  76. data/lib/project_types/node/commands/deploy.rb +4 -4
  77. data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
  78. data/lib/project_types/node/commands/generate.rb +9 -18
  79. data/lib/project_types/node/commands/open.rb +2 -2
  80. data/lib/project_types/node/commands/populate.rb +6 -6
  81. data/lib/project_types/node/commands/populate/customer.rb +5 -5
  82. data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
  83. data/lib/project_types/node/commands/populate/product.rb +5 -5
  84. data/lib/project_types/node/commands/serve.rb +9 -9
  85. data/lib/project_types/node/commands/tunnel.rb +7 -7
  86. data/lib/project_types/node/forms/create.rb +7 -7
  87. data/lib/project_types/node/messages/messages.rb +19 -53
  88. data/lib/project_types/rails/cli.rb +21 -18
  89. data/lib/project_types/rails/commands/connect.rb +15 -0
  90. data/lib/project_types/rails/commands/create.rb +60 -54
  91. data/lib/project_types/rails/commands/deploy.rb +4 -4
  92. data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
  93. data/lib/project_types/rails/commands/generate.rb +7 -7
  94. data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
  95. data/lib/project_types/rails/commands/open.rb +2 -2
  96. data/lib/project_types/rails/commands/populate.rb +6 -6
  97. data/lib/project_types/rails/commands/populate/customer.rb +5 -5
  98. data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
  99. data/lib/project_types/rails/commands/populate/product.rb +5 -5
  100. data/lib/project_types/rails/commands/serve.rb +11 -11
  101. data/lib/project_types/rails/commands/tunnel.rb +7 -7
  102. data/lib/project_types/rails/forms/create.rb +24 -24
  103. data/lib/project_types/rails/gem.rb +24 -24
  104. data/lib/project_types/rails/messages/messages.rb +12 -9
  105. data/lib/project_types/rails/ruby.rb +2 -2
  106. data/lib/project_types/script/cli.rb +42 -38
  107. data/lib/project_types/script/commands/create.rb +13 -10
  108. data/lib/project_types/script/commands/disable.rb +3 -3
  109. data/lib/project_types/script/commands/enable.rb +19 -9
  110. data/lib/project_types/script/commands/push.rb +10 -17
  111. data/lib/project_types/script/config/extension_points.yml +17 -12
  112. data/lib/project_types/script/errors.rb +38 -0
  113. data/lib/project_types/script/forms/create.rb +29 -5
  114. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +12 -1
  115. data/lib/project_types/script/layers/application/build_script.rb +18 -19
  116. data/lib/project_types/script/layers/application/create_script.rb +13 -11
  117. data/lib/project_types/script/layers/application/disable_script.rb +2 -2
  118. data/lib/project_types/script/layers/application/enable_script.rb +2 -2
  119. data/lib/project_types/script/layers/application/extension_points.rb +24 -0
  120. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  121. data/lib/project_types/script/layers/application/push_script.rb +12 -18
  122. data/lib/project_types/script/layers/domain/errors.rb +7 -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 -54
  127. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +49 -18
  128. data/lib/project_types/script/layers/infrastructure/errors.rb +17 -1
  129. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
  130. data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
  131. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +20 -13
  132. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
  133. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
  134. data/lib/project_types/script/layers/infrastructure/script_service.rb +26 -16
  135. data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
  136. data/lib/project_types/script/messages/messages.rb +67 -10
  137. data/lib/project_types/script/script_project.rb +47 -16
  138. data/lib/project_types/script/ui/error_handler.rb +115 -45
  139. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  140. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  141. data/lib/project_types/theme/cli.rb +40 -0
  142. data/lib/project_types/theme/commands/connect.rb +54 -0
  143. data/lib/project_types/theme/commands/create.rb +48 -0
  144. data/lib/project_types/theme/commands/deploy.rb +38 -0
  145. data/lib/project_types/theme/commands/generate.rb +20 -0
  146. data/lib/project_types/theme/commands/generate/env.rb +79 -0
  147. data/lib/project_types/theme/commands/push.rb +55 -0
  148. data/lib/project_types/theme/commands/serve.rb +31 -0
  149. data/lib/project_types/theme/forms/connect.rb +34 -0
  150. data/lib/project_types/theme/forms/create.rb +22 -0
  151. data/lib/project_types/theme/messages/messages.rb +147 -0
  152. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
  153. data/lib/project_types/theme/themekit.rb +113 -0
  154. data/lib/rubygems_plugin.rb +3 -3
  155. data/lib/shopify-cli/admin_api.rb +52 -12
  156. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  157. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  158. data/lib/shopify-cli/api.rb +38 -37
  159. data/lib/shopify-cli/command.rb +1 -1
  160. data/lib/shopify-cli/commands.rb +9 -9
  161. data/lib/shopify-cli/commands/config.rb +28 -28
  162. data/lib/shopify-cli/commands/connect.rb +35 -18
  163. data/lib/shopify-cli/commands/create.rb +5 -5
  164. data/lib/shopify-cli/commands/help.rb +6 -6
  165. data/lib/shopify-cli/commands/logout.rb +3 -3
  166. data/lib/shopify-cli/commands/system.rb +40 -31
  167. data/lib/shopify-cli/commands/version.rb +2 -2
  168. data/lib/shopify-cli/context.rb +43 -22
  169. data/lib/shopify-cli/core.rb +4 -4
  170. data/lib/shopify-cli/core/entry_point.rb +6 -6
  171. data/lib/shopify-cli/core/executor.rb +1 -1
  172. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  173. data/lib/shopify-cli/core/monorail.rb +21 -19
  174. data/lib/shopify-cli/db.rb +2 -2
  175. data/lib/shopify-cli/feature.rb +1 -3
  176. data/lib/shopify-cli/form.rb +1 -1
  177. data/lib/shopify-cli/git.rb +17 -17
  178. data/lib/shopify-cli/helpers.rb +1 -1
  179. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  180. data/lib/shopify-cli/heroku.rb +28 -28
  181. data/lib/shopify-cli/http_request.rb +27 -0
  182. data/lib/shopify-cli/js_deps.rb +13 -13
  183. data/lib/shopify-cli/js_system.rb +5 -5
  184. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  185. data/lib/shopify-cli/messages/messages.rb +24 -10
  186. data/lib/shopify-cli/method_object.rb +104 -0
  187. data/lib/shopify-cli/oauth.rb +25 -25
  188. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  189. data/lib/shopify-cli/options.rb +3 -3
  190. data/lib/shopify-cli/packager.rb +24 -24
  191. data/lib/shopify-cli/partners_api.rb +38 -16
  192. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  193. data/lib/shopify-cli/process_supervision.rb +8 -8
  194. data/lib/shopify-cli/project.rb +27 -23
  195. data/lib/shopify-cli/project_type.rb +21 -5
  196. data/lib/shopify-cli/resolve_constant.rb +25 -0
  197. data/lib/shopify-cli/resources.rb +1 -1
  198. data/lib/shopify-cli/resources/env_file.rb +9 -9
  199. data/lib/shopify-cli/result.rb +432 -0
  200. data/lib/shopify-cli/shopifolk.rb +84 -0
  201. data/lib/shopify-cli/sub_command.rb +1 -1
  202. data/lib/shopify-cli/task.rb +9 -1
  203. data/lib/shopify-cli/tasks.rb +7 -7
  204. data/lib/shopify-cli/tasks/create_api_client.rb +17 -6
  205. data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
  206. data/lib/shopify-cli/tasks/ensure_env.rb +18 -15
  207. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  208. data/lib/shopify-cli/tasks/select_org_and_shop.rb +29 -24
  209. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  210. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  211. data/lib/shopify-cli/tunnel.rb +36 -30
  212. data/lib/shopify-cli/version.rb +1 -1
  213. data/lib/shopify_cli.rb +57 -51
  214. data/shopify-cli.gemspec +6 -6
  215. data/shopify.fish +1 -1
  216. data/shopify.sh +1 -1
  217. data/vendor/deps/cli-kit/REVISION +1 -1
  218. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
  219. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
  220. data/vendor/deps/cli-ui/REVISION +1 -1
  221. data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
  222. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
  223. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
  224. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
  225. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
  226. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
  227. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
  228. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
  229. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
  230. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
  231. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
  232. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  233. data/vendor/deps/webrick/.gitignore +9 -0
  234. data/vendor/deps/webrick/Gemfile +3 -0
  235. data/vendor/deps/webrick/LICENSE.txt +22 -0
  236. data/vendor/deps/webrick/README.md +61 -0
  237. data/vendor/deps/webrick/Rakefile +10 -0
  238. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  239. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  240. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  241. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  242. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  243. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  244. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  245. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  246. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  247. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  248. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  249. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  250. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  251. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  252. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  253. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  254. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  255. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  256. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  257. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  258. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  259. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  260. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  261. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  262. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  263. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  264. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  265. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  266. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  267. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  268. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  269. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  270. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  271. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  272. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  273. data/vendor/deps/webrick/webrick.gemspec +74 -0
  274. data/vendor/gen/template/bin/update-deps +9 -9
  275. metadata +84 -29
  276. data/docs/Gemfile +0 -5
  277. data/docs/Gemfile.lock +0 -258
  278. data/docs/_data/nav.yml +0 -35
  279. data/docs/_includes/footer.html +0 -15
  280. data/docs/_includes/head.html +0 -19
  281. data/docs/_includes/sidebar_nav.html +0 -22
  282. data/docs/_includes/toc.html +0 -112
  283. data/docs/_layouts/default.html +0 -79
  284. data/docs/css/docs.css +0 -157
  285. data/docs/images/header.png +0 -0
  286. data/docs/installing-ruby.md +0 -28
  287. data/lib/project_types/extension/features/argo/admin.rb +0 -20
  288. data/lib/project_types/extension/features/argo/base.rb +0 -129
  289. data/lib/project_types/extension/features/argo/checkout.rb +0 -20
  290. data/lib/project_types/extension/forms/register.rb +0 -47
  291. data/lib/project_types/extension/models/type.rb +0 -81
  292. data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
  293. data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
  294. data/lib/project_types/node/commands/generate/billing.rb +0 -39
  295. data/lib/project_types/node/commands/generate/page.rb +0 -59
  296. data/lib/project_types/node/commands/generate/webhook.rb +0 -37
  297. data/lib/project_types/script/layers/domain/script.rb +0 -18
  298. data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
  299. data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
  300. data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
  301. data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
@@ -17,22 +17,29 @@ module Rails
17
17
  setting_gem_path: "GEM_PATH being set to %s",
18
18
  },
19
19
 
20
+ connect: {
21
+ connected: "Project now connected to {{green:%s}}",
22
+ production_warning: <<~MESSAGE,
23
+ {{yellow:! Warning: if you have connected to an {{bold:app in production}}, running {{command:serve}} may update the app URL and cause an outage.
24
+ MESSAGE
25
+ },
26
+
20
27
  create: {
21
28
  help: <<~HELP,
22
29
  {{command:%s create rails}}: Creates a ruby on rails app.
23
30
  Usage: {{command:%s create rails}}
24
31
  Options:
25
32
  {{command:--name=NAME}} App name. Any string.
26
- {{command:--app_url=APPURL}} App URL. Must be a valid URL.
27
- {{command:--organization_id=ID}} Partner organization ID. Must be an existing organization.
28
- {{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.
29
36
  {{command:--db=DB}} Database type. Must be one of: mysql, postgresql, sqlite3, oracle, frontbase, ibm_db, sqlserver, jdbcmysql, jdbcsqlite3, jdbcpostgresql, jdbc.
30
- {{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.
31
38
  HELP
32
39
 
33
40
  error: {
34
41
  invalid_ruby_version: <<~MSG,
35
- This project requires a ruby version ~> 2.5.
42
+ This project requires a Ruby version ~> 2.5 or Ruby 3.0
36
43
  See {{underline:https://github.com/Shopify/shopify-app-cli/blob/master/docs/installing-ruby.md}}
37
44
  for our recommended method of installing ruby.
38
45
  MSG
@@ -48,10 +55,6 @@ module Rails
48
55
  },
49
56
 
50
57
  info: {
51
- created: "{{v}} {{green:%s}} was created in your Partner Dashboard {{underline:%s}}",
52
- serve: "{{*}} Change directories to your new project folder {{green:%s}} and run {{command:%s serve}} " \
53
- "to start a local server",
54
- install: "{{*}} Then, visit {{underline:%s/test}} to install {{green:%s}} on your Dev Store",
55
58
  open_new_shell: "{{*}} {{yellow:After installing %s, please open a new Command Prompt or PowerShell " \
56
59
  "window to continue.}}",
57
60
  },
@@ -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,73 +3,77 @@
3
3
  module Script
4
4
  class Project < ShopifyCli::ProjectType
5
5
  hidden_feature(feature_set: :script_project)
6
- creator 'Script', 'Script::Commands::Create'
6
+ title("Script")
7
+ creator("Script::Commands::Create")
7
8
 
8
- register_command('Script::Commands::Push', 'push')
9
- register_command('Script::Commands::Disable', 'disable')
10
- register_command('Script::Commands::Enable', 'enable')
9
+ register_command("Script::Commands::Push", "push")
10
+ register_command("Script::Commands::Disable", "disable")
11
+ register_command("Script::Commands::Enable", "enable")
11
12
 
12
- require Project.project_filepath('messages/messages')
13
+ require Project.project_filepath("messages/messages")
13
14
  register_messages(Script::Messages::MESSAGES)
14
15
  end
15
16
 
16
17
  # define/autoload project specific Commands
17
18
  module Commands
18
- autoload :Create, Project.project_filepath('commands/create')
19
- autoload :Push, Project.project_filepath('commands/push')
20
- autoload :Disable, Project.project_filepath('commands/disable')
21
- autoload :Enable, Project.project_filepath('commands/enable')
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")
22
23
  end
23
24
 
24
25
  # define/autoload project specific Forms
25
26
  module Forms
26
- autoload :Create, Project.project_filepath('forms/create')
27
- autoload :ScriptForm, Project.project_filepath('forms/script_form')
27
+ autoload :Create, Project.project_filepath("forms/create")
28
+ autoload :ScriptForm, Project.project_filepath("forms/script_form")
28
29
  end
29
30
 
30
31
  module Layers
31
32
  module Application
32
- autoload :BuildScript, Project.project_filepath('layers/application/build_script')
33
- autoload :CreateScript, Project.project_filepath('layers/application/create_script')
34
- autoload :PushScript, Project.project_filepath('layers/application/push_script')
35
- autoload :DisableScript, Project.project_filepath('layers/application/disable_script')
36
- autoload :EnableScript, Project.project_filepath('layers/application/enable_script')
37
- autoload :ExtensionPoints, Project.project_filepath('layers/application/extension_points')
38
- autoload :ProjectDependencies, Project.project_filepath('layers/application/project_dependencies')
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")
39
40
  end
40
41
 
41
42
  module Domain
42
- autoload :Errors, Project.project_filepath('layers/domain/errors')
43
- autoload :PushPackage, Project.project_filepath('layers/domain/push_package')
44
- autoload :ExtensionPoint, Project.project_filepath('layers/domain/extension_point')
45
- autoload :Script, Project.project_filepath('layers/domain/script')
43
+ autoload :Errors, Project.project_filepath("layers/domain/errors")
44
+ autoload :PushPackage, Project.project_filepath("layers/domain/push_package")
45
+ autoload :Metadata, Project.project_filepath("layers/domain/metadata")
46
+ autoload :ExtensionPoint, Project.project_filepath("layers/domain/extension_point")
46
47
  end
47
48
 
48
49
  module Infrastructure
49
- autoload :Errors, Project.project_filepath('layers/infrastructure/errors')
50
+ autoload :Errors, Project.project_filepath("layers/infrastructure/errors")
50
51
  autoload :AssemblyScriptDependencyManager,
51
- Project.project_filepath('layers/infrastructure/assemblyscript_dependency_manager')
52
+ Project.project_filepath("layers/infrastructure/assemblyscript_dependency_manager")
52
53
  autoload :AssemblyScriptProjectCreator,
53
- Project.project_filepath('layers/infrastructure/assemblyscript_project_creator')
54
- autoload :AssemblyScriptTaskRunner, Project.project_filepath('layers/infrastructure/assemblyscript_task_runner')
55
- autoload :AssemblyScriptTsConfig, Project.project_filepath('layers/infrastructure/assemblyscript_tsconfig')
56
- autoload :PushPackageRepository, Project.project_filepath('layers/infrastructure/push_package_repository')
57
- autoload :ExtensionPointRepository, Project.project_filepath('layers/infrastructure/extension_point_repository')
58
- autoload :ProjectCreator, Project.project_filepath('layers/infrastructure/project_creator')
59
- autoload :ScriptRepository, Project.project_filepath('layers/infrastructure/script_repository')
60
- autoload :ScriptService, Project.project_filepath('layers/infrastructure/script_service')
61
- autoload :TaskRunner, Project.project_filepath('layers/infrastructure/task_runner')
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 :RustProjectCreator,
58
+ Project.project_filepath("layers/infrastructure/rust_project_creator.rb")
59
+ autoload :RustTaskRunner, Project.project_filepath("layers/infrastructure/rust_task_runner")
60
+
61
+ autoload :PushPackageRepository, Project.project_filepath("layers/infrastructure/push_package_repository")
62
+ autoload :ExtensionPointRepository, Project.project_filepath("layers/infrastructure/extension_point_repository")
63
+ autoload :ProjectCreator, Project.project_filepath("layers/infrastructure/project_creator")
64
+ autoload :ScriptService, Project.project_filepath("layers/infrastructure/script_service")
65
+ autoload :TaskRunner, Project.project_filepath("layers/infrastructure/task_runner")
62
66
  end
63
67
  end
64
68
 
65
69
  module UI
66
- autoload :ErrorHandler, Project.project_filepath('ui/error_handler')
67
- autoload :PrintingSpinner, Project.project_filepath('ui/printing_spinner')
68
- autoload :StrictSpinner, Project.project_filepath('ui/strict_spinner')
70
+ autoload :ErrorHandler, Project.project_filepath("ui/error_handler")
71
+ autoload :PrintingSpinner, Project.project_filepath("ui/printing_spinner")
72
+ autoload :StrictSpinner, Project.project_filepath("ui/strict_spinner")
69
73
  end
70
74
 
71
- autoload :ScriptProject, Project.project_filepath('script_project')
72
- autoload :Errors, Project.project_filepath('errors')
75
+ autoload :ScriptProject, Project.project_filepath("script_project")
76
+ autoload :Errors, Project.project_filepath("errors")
73
77
 
74
78
  class ScriptProjectError < StandardError; end
75
79
  end
@@ -4,38 +4,41 @@ 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("--description=DESCRIPTION") { |description| flags[:description] = description }
9
+ parser.on("--extension_point=EP_NAME") { |ep_name| flags[:extension_point] = ep_name }
10
+ parser.on("--extension-point=EP_NAME") { |ep_name| flags[:extension_point] = ep_name }
11
+ parser.on("--language=LANGUAGE") { |language| flags[:language] = language }
9
12
  end
10
13
 
11
14
  def call(args, _name)
12
- language = 'ts'
13
15
  cur_dir = @ctx.root
14
16
 
15
17
  form = Forms::Create.ask(@ctx, args, options.flags)
16
18
  return @ctx.puts(self.class.help) if form.nil?
17
19
 
18
- unless !form.name.empty? && form.extension_point && ScriptProject::SUPPORTED_LANGUAGES.include?(language)
20
+ unless !form.name.empty? && form.extension_point && form.language
19
21
  return @ctx.puts(self.class.help)
20
22
  end
21
23
 
22
24
  project = Layers::Application::CreateScript.call(
23
25
  ctx: @ctx,
24
- language: language,
26
+ language: form.language,
25
27
  script_name: form.name,
26
- extension_point_type: form.extension_point
28
+ extension_point_type: form.extension_point,
29
+ description: form.description
27
30
  )
28
- @ctx.puts(@ctx.message('script.create.change_directory_notice', project.script_name))
31
+ @ctx.puts(@ctx.message("script.create.change_directory_notice", project.script_name))
29
32
  rescue Script::Errors::ScriptProjectAlreadyExistsError => e
30
- UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.create.error.operation_failed'))
33
+ UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message("script.create.error.operation_failed"))
31
34
  rescue StandardError => e
32
35
  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'))
36
+ UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message("script.create.error.operation_failed"))
34
37
  end
35
38
 
36
39
  def self.help
37
40
  allowed_values = Script::Layers::Application::ExtensionPoints.types.map { |type| "{{cyan:#{type}}}" }
38
- ShopifyCli::Context.message('script.create.help', ShopifyCli::TOOL_NAME, allowed_values.join(', '))
41
+ ShopifyCli::Context.message("script.create.help", ShopifyCli::TOOL_NAME, allowed_values.join(", "))
39
42
  end
40
43
  end
41
44
  end
@@ -12,13 +12,13 @@ module Script
12
12
  shop_domain: project.env[:shop],
13
13
  extension_point_type: project.extension_point_type
14
14
  )
15
- @ctx.puts(@ctx.message('script.disable.script_disabled'))
15
+ @ctx.puts(@ctx.message("script.disable.script_disabled"))
16
16
  rescue StandardError => e
17
- UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.disable.error.operation_failed'))
17
+ UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message("script.disable.error.operation_failed"))
18
18
  end
19
19
 
20
20
  def self.help
21
- ShopifyCli::Context.message('script.disable.help', ShopifyCli::TOOL_NAME)
21
+ ShopifyCli::Context.message("script.disable.help", ShopifyCli::TOOL_NAME)
22
22
  end
23
23
  end
24
24
  end
@@ -4,10 +4,10 @@ module Script
4
4
  module Commands
5
5
  class Enable < ShopifyCli::Command
6
6
  options do |parser, flags|
7
- parser.on('--config_props=KEYVALUEPAIRS', Array) do |t|
8
- flags[:config_props] = Hash[t.map { |s| s.split(':') }]
9
- end
10
- parser.on('--config_file=CONFIGFILEPATH') { |t| flags[:config_file] = t }
7
+ parser.on("--config_props=KEYVALUEPAIRS", Array) { |t| flags[:config_props] = t }
8
+ parser.on("--config-props=KEYVALUEPAIRS", Array) { |t| flags[:config_props] = t }
9
+ parser.on("--config_file=CONFIGFILEPATH") { |t| flags[:config_file] = t }
10
+ parser.on("--config-file=CONFIGFILEPATH") { |t| flags[:config_file] = t }
11
11
  end
12
12
 
13
13
  def call(_args, _name)
@@ -25,21 +25,21 @@ module Script
25
25
  title: project.script_name
26
26
  )
27
27
  @ctx.puts(@ctx.message(
28
- 'script.enable.script_enabled',
28
+ "script.enable.script_enabled",
29
29
  api_key: api_key,
30
30
  shop_domain: shop_domain,
31
31
  type: project.extension_point_type.capitalize,
32
32
  title: project.script_name
33
33
  ))
34
- @ctx.puts(@ctx.message('script.enable.info'))
34
+ @ctx.puts(@ctx.message("script.enable.info"))
35
35
  rescue Errors::InvalidConfigYAMLError => e
36
36
  UI::ErrorHandler.pretty_print_and_raise(e)
37
37
  rescue StandardError => e
38
- UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.enable.error.operation_failed'))
38
+ UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message("script.enable.error.operation_failed"))
39
39
  end
40
40
 
41
41
  def self.help
42
- ShopifyCli::Context.message('script.enable.help', ShopifyCli::TOOL_NAME)
42
+ ShopifyCli::Context.message("script.enable.help", ShopifyCli::TOOL_NAME)
43
43
  end
44
44
 
45
45
  private
@@ -47,7 +47,7 @@ module Script
47
47
  def acquire_configuration(config_file: nil, config_props: nil)
48
48
  properties = {}
49
49
  properties = YAML.load(File.read(config_file)) unless config_file.nil?
50
- properties = properties.merge(config_props) unless config_props.nil?
50
+ properties = properties.merge(parse_config_props(config_props)) unless config_props.nil?
51
51
 
52
52
  configuration = { entries: [] }
53
53
  properties.each do |key, value|
@@ -61,6 +61,16 @@ module Script
61
61
  raise Errors::InvalidConfigYAMLError, options.flags[:config_file]
62
62
  end
63
63
 
64
+ def parse_config_props(config_props)
65
+ Hash[
66
+ config_props.map do |s|
67
+ args = s.split(":").map(&:strip)
68
+ raise Errors::InvalidConfigProps unless args.size == 2
69
+ args
70
+ end
71
+ ]
72
+ end
73
+
64
74
  # No slice pre Ruby 2.5 so roll our own
65
75
  def slice(hash, *keys)
66
76
  Hash[hash.to_a - hash.select { |key, _value| !keys.include?(key) }.to_a]
@@ -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 = ScriptProject.current.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: ShopifyCli::Project.current.env.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,24 +1,29 @@
1
1
  discount:
2
+ deprecated: true
2
3
  assemblyscript:
3
4
  package: "@shopify/extension-point-as-discount"
4
- version: "^0.2.10"
5
- sdk-version: "^6.0.0"
6
- toolchain-version: "^1.1.0"
5
+ sdk-version: "^7.0.0"
6
+ toolchain-version: "^4.0.0"
7
7
  unit_limit_per_order:
8
8
  assemblyscript:
9
9
  package: "@shopify/extension-point-as-unit-limit-per-order"
10
- version: "^0.1.12"
11
- sdk-version: "^6.0.0"
12
- toolchain-version: "^1.1.0"
10
+ sdk-version: "^7.0.0"
11
+ toolchain-version: "^4.0.0"
13
12
  payment_filter:
14
13
  assemblyscript:
15
14
  package: "@shopify/extension-point-as-payment-filter"
16
- version: "^0.2.8"
17
- sdk-version: "^6.0.0"
18
- toolchain-version: "^1.1.0"
15
+ sdk-version: "^7.0.0"
16
+ toolchain-version: "^4.0.0"
17
+ rust:
18
+ beta: true
19
+ package: "https://github.com/Shopify/scripts-apis-rs"
19
20
  shipping_filter:
20
21
  assemblyscript:
21
22
  package: "@shopify/extension-point-as-shipping-filter"
22
- version: "^0.2.10"
23
- sdk-version: "^6.0.0"
24
- toolchain-version: "^1.1.0"
23
+ sdk-version: "^7.0.0"
24
+ toolchain-version: "^4.0.0"
25
+ tax_filter:
26
+ assemblyscript:
27
+ package: "@shopify/extension-point-as-tax-filter"
28
+ sdk-version: "^7.0.0"
29
+ toolchain-version: "^4.0.0"
@@ -4,8 +4,26 @@ module Script
4
4
  module Errors
5
5
  class InvalidContextError < ScriptProjectError; end
6
6
  class InvalidScriptNameError < ScriptProjectError; end
7
+
8
+ class InvalidConfigUiDefinitionError < ScriptProjectError
9
+ attr_reader :filename
10
+ def initialize(filename)
11
+ super()
12
+ @filename = filename
13
+ end
14
+ end
15
+
16
+ class MissingSpecifiedConfigUiDefinitionError < ScriptProjectError
17
+ attr_reader :filename
18
+ def initialize(filename)
19
+ super()
20
+ @filename = filename
21
+ end
22
+ end
23
+
7
24
  class NoExistingAppsError < ScriptProjectError; end
8
25
  class NoExistingOrganizationsError < ScriptProjectError; end
26
+
9
27
  class NoExistingStoresError < ScriptProjectError
10
28
  attr_reader :organization_id
11
29
  def initialize(organization_id)
@@ -13,7 +31,10 @@ module Script
13
31
  @organization_id = organization_id
14
32
  end
15
33
  end
34
+
16
35
  class ScriptProjectAlreadyExistsError < ScriptProjectError; end
36
+ class InvalidConfigProps < ScriptProjectError; end
37
+
17
38
  class InvalidConfigYAMLError < ScriptProjectError
18
39
  attr_reader :config_file
19
40
  def initialize(config_file)
@@ -21,5 +42,22 @@ module Script
21
42
  @config_file = config_file
22
43
  end
23
44
  end
45
+
46
+ class InvalidLanguageError < ScriptProjectError
47
+ attr_reader :language, :extension_point_type
48
+ def initialize(language, extension_point_type)
49
+ super()
50
+ @language = language
51
+ @extension_point_type = extension_point_type
52
+ end
53
+ end
54
+
55
+ class DeprecatedEPError < ScriptProjectError
56
+ attr_reader :ep
57
+ def initialize(ep)
58
+ super()
59
+ @ep = ep
60
+ end
61
+ end
24
62
  end
25
63
  end