@shopify/cli-kit 3.39.0 → 3.40.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (767) hide show
  1. package/assets/cli-ruby/.devcontainer.json +5 -0
  2. package/assets/cli-ruby/.rubocop.yml +102 -0
  3. package/assets/cli-ruby/.rubocop_todo.yml +24 -0
  4. package/assets/cli-ruby/.ruby-version +1 -0
  5. package/assets/cli-ruby/CHANGELOG.md +634 -0
  6. package/assets/cli-ruby/CONTRIBUTING.md +3 -0
  7. package/assets/cli-ruby/Codespace.dockerfile +35 -0
  8. package/assets/cli-ruby/Gemfile +31 -0
  9. package/assets/cli-ruby/Gemfile.lock +190 -0
  10. package/{LICENSE → assets/cli-ruby/LICENSE} +2 -0
  11. package/assets/cli-ruby/README.md +30 -0
  12. package/assets/cli-ruby/RELEASING.md +72 -0
  13. package/assets/cli-ruby/Rakefile +243 -0
  14. package/assets/cli-ruby/SECURITY.md +59 -0
  15. package/assets/cli-ruby/Tests.dockerfile +35 -0
  16. package/assets/cli-ruby/assets/logo.png +0 -0
  17. package/assets/cli-ruby/bin/console +11 -0
  18. package/assets/cli-ruby/bin/load_shopify.rb +22 -0
  19. package/assets/cli-ruby/bin/shopify +60 -0
  20. package/assets/cli-ruby/bin/shopify.bat +3 -0
  21. package/assets/cli-ruby/dev.yml +29 -0
  22. package/assets/cli-ruby/docs/README.md +13 -0
  23. package/assets/cli-ruby/docs/contributors/testing.md +27 -0
  24. package/assets/cli-ruby/docs/users/installation.md +3 -0
  25. package/assets/cli-ruby/docs/users/migrate-from-themekit.md +18 -0
  26. package/assets/cli-ruby/ext/javy/hashes/javy-arm-macos-v0.1.0.gz.sha256 +1 -0
  27. package/assets/cli-ruby/ext/javy/hashes/javy-arm-macos-v0.2.0.gz.sha256 +1 -0
  28. package/assets/cli-ruby/ext/javy/hashes/javy-arm-macos-v0.2.1.gz.sha256 +1 -0
  29. package/assets/cli-ruby/ext/javy/hashes/javy-arm-macos-v0.3.0.gz.sha256 +1 -0
  30. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-linux-v0.1.0.gz.sha256 +1 -0
  31. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-linux-v0.2.0.gz.sha256 +1 -0
  32. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-linux-v0.2.1.gz.sha256 +1 -0
  33. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-linux-v0.3.0.gz.sha256 +1 -0
  34. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-macos-v0.1.0.gz.sha256 +1 -0
  35. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-macos-v0.2.0.gz.sha256 +1 -0
  36. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-macos-v0.2.1.gz.sha256 +1 -0
  37. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-macos-v0.3.0.gz.sha256 +1 -0
  38. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-windows-v0.1.0.gz.sha256 +1 -0
  39. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-windows-v0.2.0.gz.sha256 +1 -0
  40. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-windows-v0.2.1.gz.sha256 +1 -0
  41. package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-windows-v0.3.0.gz.sha256 +1 -0
  42. package/assets/cli-ruby/ext/javy/javy.rb +204 -0
  43. package/assets/cli-ruby/ext/javy/version +1 -0
  44. package/assets/cli-ruby/ext/shopify-extensions/extconf.rb +21 -0
  45. package/assets/cli-ruby/ext/shopify-extensions/shopify_extensions.rb +152 -0
  46. package/assets/cli-ruby/ext/shopify-extensions/version +1 -0
  47. package/assets/cli-ruby/features/support/assertions.rb +17 -0
  48. package/assets/cli-ruby/features/support/cli.rb +7 -0
  49. package/assets/cli-ruby/features/support/process.rb +27 -0
  50. package/assets/cli-ruby/features/support/requires.rb +3 -0
  51. package/assets/cli-ruby/lib/docgen/class_template.md.erb +81 -0
  52. package/assets/cli-ruby/lib/docgen/index_template.md.erb +5 -0
  53. package/assets/cli-ruby/lib/docgen/markdown.rb +101 -0
  54. package/assets/cli-ruby/lib/graphql/admin_introspection.graphql +87 -0
  55. package/assets/cli-ruby/lib/graphql/all_organizations.graphql +19 -0
  56. package/assets/cli-ruby/lib/graphql/all_orgs_with_apps.graphql +30 -0
  57. package/assets/cli-ruby/lib/graphql/api_versions.graphql +6 -0
  58. package/assets/cli-ruby/lib/graphql/convert_dev_to_test_store.graphql +10 -0
  59. package/assets/cli-ruby/lib/graphql/create_app.graphql +20 -0
  60. package/assets/cli-ruby/lib/graphql/create_customer.graphql +9 -0
  61. package/assets/cli-ruby/lib/graphql/create_draft_order.graphql +8 -0
  62. package/assets/cli-ruby/lib/graphql/create_product.graphql +9 -0
  63. package/assets/cli-ruby/lib/graphql/extension_create.graphql +36 -0
  64. package/assets/cli-ruby/lib/graphql/extension_update_draft.graphql +18 -0
  65. package/assets/cli-ruby/lib/graphql/fetch_specifications.graphql +14 -0
  66. package/assets/cli-ruby/lib/graphql/find_organization.graphql +18 -0
  67. package/assets/cli-ruby/lib/graphql/find_organization_with_apps.graphql +20 -0
  68. package/assets/cli-ruby/lib/graphql/get_app_by_api_key.graphql +9 -0
  69. package/assets/cli-ruby/lib/graphql/get_app_urls.graphql +6 -0
  70. package/assets/cli-ruby/lib/graphql/get_extension_registrations.graphql +27 -0
  71. package/assets/cli-ruby/lib/graphql/get_variant_id.graphql +16 -0
  72. package/assets/cli-ruby/lib/graphql/update_dashboard_urls.graphql +8 -0
  73. package/assets/cli-ruby/lib/project_types/extension/cli.rb +156 -0
  74. package/assets/cli-ruby/lib/project_types/extension/commands/build.rb +51 -0
  75. package/assets/cli-ruby/lib/project_types/extension/commands/check.rb +51 -0
  76. package/assets/cli-ruby/lib/project_types/extension/commands/connect.rb +35 -0
  77. package/assets/cli-ruby/lib/project_types/extension/commands/create.rb +100 -0
  78. package/assets/cli-ruby/lib/project_types/extension/commands/extension_command.rb +29 -0
  79. package/assets/cli-ruby/lib/project_types/extension/commands/info.rb +86 -0
  80. package/assets/cli-ruby/lib/project_types/extension/commands/push.rb +112 -0
  81. package/assets/cli-ruby/lib/project_types/extension/commands/register.rb +67 -0
  82. package/assets/cli-ruby/lib/project_types/extension/commands/serve.rb +150 -0
  83. package/assets/cli-ruby/lib/project_types/extension/commands/tunnel.rb +73 -0
  84. package/assets/cli-ruby/lib/project_types/extension/errors.rb +9 -0
  85. package/assets/cli-ruby/lib/project_types/extension/extension_project.rb +151 -0
  86. package/assets/cli-ruby/lib/project_types/extension/extension_project_keys.rb +12 -0
  87. package/assets/cli-ruby/lib/project_types/extension/features/argo.rb +50 -0
  88. package/assets/cli-ruby/lib/project_types/extension/features/argo_config.rb +59 -0
  89. package/assets/cli-ruby/lib/project_types/extension/features/argo_dependencies.rb +28 -0
  90. package/assets/cli-ruby/lib/project_types/extension/features/argo_runtime.rb +15 -0
  91. package/assets/cli-ruby/lib/project_types/extension/features/argo_serve.rb +115 -0
  92. package/assets/cli-ruby/lib/project_types/extension/features/argo_setup.rb +54 -0
  93. package/assets/cli-ruby/lib/project_types/extension/features/argo_setup_step.rb +31 -0
  94. package/assets/cli-ruby/lib/project_types/extension/features/argo_setup_steps.rb +51 -0
  95. package/assets/cli-ruby/lib/project_types/extension/features/runtimes/admin.rb +29 -0
  96. package/assets/cli-ruby/lib/project_types/extension/features/runtimes/base.rb +19 -0
  97. package/assets/cli-ruby/lib/project_types/extension/features/runtimes/checkout_post_purchase.rb +23 -0
  98. package/assets/cli-ruby/lib/project_types/extension/features/runtimes/checkout_ui_extension.rb +29 -0
  99. package/assets/cli-ruby/lib/project_types/extension/forms/connect.rb +42 -0
  100. package/assets/cli-ruby/lib/project_types/extension/forms/create.rb +49 -0
  101. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  102. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_name.rb +48 -0
  103. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_registration.rb +55 -0
  104. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_template.rb +37 -0
  105. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_type.rb +47 -0
  106. package/assets/cli-ruby/lib/project_types/extension/loaders/project.rb +50 -0
  107. package/assets/cli-ruby/lib/project_types/extension/loaders/specification_handler.rb +22 -0
  108. package/assets/cli-ruby/lib/project_types/extension/messages/message_loading.rb +34 -0
  109. package/assets/cli-ruby/lib/project_types/extension/messages/messages.rb +292 -0
  110. package/assets/cli-ruby/lib/project_types/extension/models/app.rb +14 -0
  111. package/assets/cli-ruby/lib/project_types/extension/models/development_server.rb +77 -0
  112. package/assets/cli-ruby/lib/project_types/extension/models/development_server_requirements.rb +56 -0
  113. package/assets/cli-ruby/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  114. package/assets/cli-ruby/lib/project_types/extension/models/npm_package.rb +44 -0
  115. package/assets/cli-ruby/lib/project_types/extension/models/product.rb +12 -0
  116. package/assets/cli-ruby/lib/project_types/extension/models/registration.rb +20 -0
  117. package/assets/cli-ruby/lib/project_types/extension/models/server_config/app.rb +13 -0
  118. package/assets/cli-ruby/lib/project_types/extension/models/server_config/base.rb +31 -0
  119. package/assets/cli-ruby/lib/project_types/extension/models/server_config/capabilities.rb +11 -0
  120. package/assets/cli-ruby/lib/project_types/extension/models/server_config/development.rb +33 -0
  121. package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_entries.rb +38 -0
  122. package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_renderer.rb +38 -0
  123. package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_resource.rb +13 -0
  124. package/assets/cli-ruby/lib/project_types/extension/models/server_config/extension.rb +46 -0
  125. package/assets/cli-ruby/lib/project_types/extension/models/server_config/root.rb +21 -0
  126. package/assets/cli-ruby/lib/project_types/extension/models/server_config/user.rb +10 -0
  127. package/assets/cli-ruby/lib/project_types/extension/models/specification.rb +41 -0
  128. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +29 -0
  129. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_ui_extension.rb +170 -0
  130. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/default.rb +145 -0
  131. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +122 -0
  132. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension.rb +58 -0
  133. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config.rb +33 -0
  134. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config_repository.rb +75 -0
  135. package/assets/cli-ruby/lib/project_types/extension/models/specifications.rb +89 -0
  136. package/assets/cli-ruby/lib/project_types/extension/models/validation_error.rb +17 -0
  137. package/assets/cli-ruby/lib/project_types/extension/models/version.rb +15 -0
  138. package/assets/cli-ruby/lib/project_types/extension/tasks/choose_next_available_port.rb +36 -0
  139. package/assets/cli-ruby/lib/project_types/extension/tasks/configure_features.rb +73 -0
  140. package/assets/cli-ruby/lib/project_types/extension/tasks/configure_options.rb +21 -0
  141. package/assets/cli-ruby/lib/project_types/extension/tasks/convert_server_config.rb +85 -0
  142. package/assets/cli-ruby/lib/project_types/extension/tasks/converters/app_converter.rb +27 -0
  143. package/assets/cli-ruby/lib/project_types/extension/tasks/converters/product_converter.rb +21 -0
  144. package/assets/cli-ruby/lib/project_types/extension/tasks/converters/registration_converter.rb +28 -0
  145. package/assets/cli-ruby/lib/project_types/extension/tasks/converters/validation_error_converter.rb +25 -0
  146. package/assets/cli-ruby/lib/project_types/extension/tasks/converters/version_converter.rb +28 -0
  147. package/assets/cli-ruby/lib/project_types/extension/tasks/create_extension.rb +31 -0
  148. package/assets/cli-ruby/lib/project_types/extension/tasks/ensure_resource_url.rb +39 -0
  149. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/base.rb +15 -0
  150. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/build.rb +30 -0
  151. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/create.rb +30 -0
  152. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/outdated_extension_detection.rb +57 -0
  153. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/serve.rb +36 -0
  154. package/assets/cli-ruby/lib/project_types/extension/tasks/fetch_specifications.rb +21 -0
  155. package/assets/cli-ruby/lib/project_types/extension/tasks/find_npm_packages.rb +106 -0
  156. package/assets/cli-ruby/lib/project_types/extension/tasks/find_package_from_json.rb +37 -0
  157. package/assets/cli-ruby/lib/project_types/extension/tasks/get_app.rb +22 -0
  158. package/assets/cli-ruby/lib/project_types/extension/tasks/get_apps.rb +26 -0
  159. package/assets/cli-ruby/lib/project_types/extension/tasks/get_extensions.rb +33 -0
  160. package/assets/cli-ruby/lib/project_types/extension/tasks/get_product.rb +22 -0
  161. package/assets/cli-ruby/lib/project_types/extension/tasks/merge_server_config.rb +47 -0
  162. package/assets/cli-ruby/lib/project_types/extension/tasks/update_draft.rb +29 -0
  163. package/assets/cli-ruby/lib/project_types/extension/tasks/user_errors.rb +45 -0
  164. package/assets/cli-ruby/lib/project_types/node/cli.rb +12 -0
  165. package/assets/cli-ruby/lib/project_types/node/forms/create.rb +45 -0
  166. package/assets/cli-ruby/lib/project_types/node/messages/messages.rb +33 -0
  167. package/assets/cli-ruby/lib/project_types/php/cli.rb +16 -0
  168. package/assets/cli-ruby/lib/project_types/php/forms/create.rb +44 -0
  169. package/assets/cli-ruby/lib/project_types/php/messages/messages.rb +29 -0
  170. package/assets/cli-ruby/lib/project_types/rails/cli.rb +15 -0
  171. package/assets/cli-ruby/lib/project_types/rails/forms/create.rb +75 -0
  172. package/assets/cli-ruby/lib/project_types/rails/gem.rb +110 -0
  173. package/assets/cli-ruby/lib/project_types/rails/messages/messages.rb +101 -0
  174. package/assets/cli-ruby/lib/project_types/script/cli.rb +27 -0
  175. package/assets/cli-ruby/lib/project_types/script/commands/connect.rb +16 -0
  176. package/assets/cli-ruby/lib/project_types/script/commands/create.rb +24 -0
  177. package/assets/cli-ruby/lib/project_types/script/commands/javy.rb +24 -0
  178. package/assets/cli-ruby/lib/project_types/script/commands/push.rb +26 -0
  179. package/assets/cli-ruby/lib/project_types/script/loaders/project.rb +46 -0
  180. package/assets/cli-ruby/lib/project_types/script/loaders/specification_handler.rb +22 -0
  181. package/assets/cli-ruby/lib/project_types/script/messages/messages.rb +11 -0
  182. package/assets/cli-ruby/lib/project_types/theme/cli.rb +33 -0
  183. package/assets/cli-ruby/lib/project_types/theme/commands/check.rb +38 -0
  184. package/assets/cli-ruby/lib/project_types/theme/commands/common/root_helper.rb +93 -0
  185. package/assets/cli-ruby/lib/project_types/theme/commands/common/shop_helper.rb +13 -0
  186. package/assets/cli-ruby/lib/project_types/theme/commands/delete.rb +70 -0
  187. package/assets/cli-ruby/lib/project_types/theme/commands/init.rb +46 -0
  188. package/assets/cli-ruby/lib/project_types/theme/commands/language_server.rb +18 -0
  189. package/assets/cli-ruby/lib/project_types/theme/commands/list.rb +33 -0
  190. package/assets/cli-ruby/lib/project_types/theme/commands/open.rb +73 -0
  191. package/assets/cli-ruby/lib/project_types/theme/commands/package.rb +73 -0
  192. package/assets/cli-ruby/lib/project_types/theme/commands/publish.rb +49 -0
  193. package/assets/cli-ruby/lib/project_types/theme/commands/pull.rb +112 -0
  194. package/assets/cli-ruby/lib/project_types/theme/commands/push.rb +153 -0
  195. package/assets/cli-ruby/lib/project_types/theme/commands/serve.rb +88 -0
  196. package/assets/cli-ruby/lib/project_types/theme/commands/share.rb +62 -0
  197. package/assets/cli-ruby/lib/project_types/theme/conversions/base_glob.rb +65 -0
  198. package/assets/cli-ruby/lib/project_types/theme/conversions/ignore_glob.rb +15 -0
  199. package/assets/cli-ruby/lib/project_types/theme/conversions/include_glob.rb +15 -0
  200. package/assets/cli-ruby/lib/project_types/theme/forms/confirm_store.rb +15 -0
  201. package/assets/cli-ruby/lib/project_types/theme/forms/select.rb +34 -0
  202. package/assets/cli-ruby/lib/project_types/theme/messages/messages.rb +424 -0
  203. package/assets/cli-ruby/lib/project_types/theme/models/specification_handlers/theme.rb +19 -0
  204. package/assets/cli-ruby/lib/project_types/theme/presenters/theme_presenter.rb +48 -0
  205. package/assets/cli-ruby/lib/project_types/theme/presenters/themes_presenter.rb +29 -0
  206. package/assets/cli-ruby/lib/project_types/theme/ui/sync_progress_bar.rb +20 -0
  207. package/assets/cli-ruby/lib/rubygems_plugin.rb +26 -0
  208. package/assets/cli-ruby/lib/shopify_cli/admin_api/populate_resource_command.rb +166 -0
  209. package/assets/cli-ruby/lib/shopify_cli/admin_api/schema.rb +35 -0
  210. package/assets/cli-ruby/lib/shopify_cli/admin_api.rb +163 -0
  211. package/assets/cli-ruby/lib/shopify_cli/api.rb +131 -0
  212. package/assets/cli-ruby/lib/shopify_cli/app_type_detector.rb +36 -0
  213. package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/index.html.erb +34 -0
  214. package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/style.css +58 -0
  215. package/assets/cli-ruby/lib/shopify_cli/changelog.rb +148 -0
  216. package/assets/cli-ruby/lib/shopify_cli/command/app_sub_command.rb +26 -0
  217. package/assets/cli-ruby/lib/shopify_cli/command/project_command.rb +31 -0
  218. package/assets/cli-ruby/lib/shopify_cli/command/sub_command.rb +21 -0
  219. package/assets/cli-ruby/lib/shopify_cli/command.rb +173 -0
  220. package/assets/cli-ruby/lib/shopify_cli/command_options/command_serve_options.rb +53 -0
  221. package/assets/cli-ruby/lib/shopify_cli/command_options.rb +7 -0
  222. package/assets/cli-ruby/lib/shopify_cli/commands/app/connect.rb +22 -0
  223. package/assets/cli-ruby/lib/shopify_cli/commands/app/create/node.rb +40 -0
  224. package/assets/cli-ruby/lib/shopify_cli/commands/app/create/php.rb +37 -0
  225. package/assets/cli-ruby/lib/shopify_cli/commands/app/create/rails.rb +42 -0
  226. package/assets/cli-ruby/lib/shopify_cli/commands/app/create.rb +28 -0
  227. package/assets/cli-ruby/lib/shopify_cli/commands/app/deploy.rb +51 -0
  228. package/assets/cli-ruby/lib/shopify_cli/commands/app/open.rb +19 -0
  229. package/assets/cli-ruby/lib/shopify_cli/commands/app/serve.rb +51 -0
  230. package/assets/cli-ruby/lib/shopify_cli/commands/app/tunnel.rb +43 -0
  231. package/assets/cli-ruby/lib/shopify_cli/commands/app.rb +29 -0
  232. package/assets/cli-ruby/lib/shopify_cli/commands/config.rb +76 -0
  233. package/assets/cli-ruby/lib/shopify_cli/commands/help.rb +52 -0
  234. package/assets/cli-ruby/lib/shopify_cli/commands/login.rb +98 -0
  235. package/assets/cli-ruby/lib/shopify_cli/commands/logout.rb +50 -0
  236. package/assets/cli-ruby/lib/shopify_cli/commands/populate/customer.rb +25 -0
  237. package/assets/cli-ruby/lib/shopify_cli/commands/populate/draft_order.rb +28 -0
  238. package/assets/cli-ruby/lib/shopify_cli/commands/populate/product.rb +24 -0
  239. package/assets/cli-ruby/lib/shopify_cli/commands/populate.rb +23 -0
  240. package/assets/cli-ruby/lib/shopify_cli/commands/reporting.rb +38 -0
  241. package/assets/cli-ruby/lib/shopify_cli/commands/store.rb +15 -0
  242. package/assets/cli-ruby/lib/shopify_cli/commands/switch.rb +39 -0
  243. package/assets/cli-ruby/lib/shopify_cli/commands/system.rb +165 -0
  244. package/assets/cli-ruby/lib/shopify_cli/commands/version.rb +15 -0
  245. package/assets/cli-ruby/lib/shopify_cli/commands/whoami.rb +28 -0
  246. package/assets/cli-ruby/lib/shopify_cli/commands.rb +36 -0
  247. package/assets/cli-ruby/lib/shopify_cli/connect.rb +32 -0
  248. package/assets/cli-ruby/lib/shopify_cli/constants.rb +91 -0
  249. package/assets/cli-ruby/lib/shopify_cli/context.rb +691 -0
  250. package/assets/cli-ruby/lib/shopify_cli/core/cli_version.rb +20 -0
  251. package/assets/cli-ruby/lib/shopify_cli/core/entry_point.rb +64 -0
  252. package/assets/cli-ruby/lib/shopify_cli/core/executor.rb +23 -0
  253. package/assets/cli-ruby/lib/shopify_cli/core/finalize.rb +13 -0
  254. package/assets/cli-ruby/lib/shopify_cli/core/help_resolver.rb +20 -0
  255. package/assets/cli-ruby/lib/shopify_cli/core/monorail.rb +122 -0
  256. package/assets/cli-ruby/lib/shopify_cli/core.rb +9 -0
  257. package/assets/cli-ruby/lib/shopify_cli/db.rb +114 -0
  258. package/assets/cli-ruby/lib/shopify_cli/environment.rb +198 -0
  259. package/assets/cli-ruby/lib/shopify_cli/exception_reporter.rb +79 -0
  260. package/assets/cli-ruby/lib/shopify_cli/feature.rb +95 -0
  261. package/assets/cli-ruby/lib/shopify_cli/file_system_listener.rb +30 -0
  262. package/assets/cli-ruby/lib/shopify_cli/form.rb +42 -0
  263. package/assets/cli-ruby/lib/shopify_cli/git.rb +320 -0
  264. package/assets/cli-ruby/lib/shopify_cli/github/issue_url_generator.rb +30 -0
  265. package/assets/cli-ruby/lib/shopify_cli/github.rb +5 -0
  266. package/assets/cli-ruby/lib/shopify_cli/helpers/haikunator.rb +92 -0
  267. package/assets/cli-ruby/lib/shopify_cli/helpers.rb +5 -0
  268. package/assets/cli-ruby/lib/shopify_cli/heroku.rb +140 -0
  269. package/assets/cli-ruby/lib/shopify_cli/http_request.rb +43 -0
  270. package/assets/cli-ruby/lib/shopify_cli/identity_auth/env_auth_token.rb +34 -0
  271. package/assets/cli-ruby/lib/shopify_cli/identity_auth/servlet.rb +44 -0
  272. package/assets/cli-ruby/lib/shopify_cli/identity_auth.rb +333 -0
  273. package/assets/cli-ruby/lib/shopify_cli/js_deps.rb +110 -0
  274. package/assets/cli-ruby/lib/shopify_cli/js_system.rb +115 -0
  275. package/assets/cli-ruby/lib/shopify_cli/lazy_delegator.rb +55 -0
  276. package/assets/cli-ruby/lib/shopify_cli/messages/messages.rb +863 -0
  277. package/assets/cli-ruby/lib/shopify_cli/method_object.rb +123 -0
  278. package/assets/cli-ruby/lib/shopify_cli/migrator/migration.rb +27 -0
  279. package/assets/cli-ruby/lib/shopify_cli/migrator/migrations/1631709766_noop.rb +13 -0
  280. package/assets/cli-ruby/lib/shopify_cli/migrator/migrations/1633691650_merge_reporting_configuration.rb +41 -0
  281. package/assets/cli-ruby/lib/shopify_cli/migrator.rb +46 -0
  282. package/assets/cli-ruby/lib/shopify_cli/options.rb +40 -0
  283. package/assets/cli-ruby/lib/shopify_cli/packager.rb +108 -0
  284. package/assets/cli-ruby/lib/shopify_cli/partners_api/app_extensions/job.rb +36 -0
  285. package/assets/cli-ruby/lib/shopify_cli/partners_api/app_extensions.rb +46 -0
  286. package/assets/cli-ruby/lib/shopify_cli/partners_api/organizations.rb +45 -0
  287. package/assets/cli-ruby/lib/shopify_cli/partners_api.rb +91 -0
  288. package/assets/cli-ruby/lib/shopify_cli/php_deps.rb +102 -0
  289. package/assets/cli-ruby/lib/shopify_cli/process_supervision.rb +228 -0
  290. package/assets/cli-ruby/lib/shopify_cli/project.rb +199 -0
  291. package/assets/cli-ruby/lib/shopify_cli/project_commands.rb +16 -0
  292. package/assets/cli-ruby/lib/shopify_cli/project_type.rb +66 -0
  293. package/assets/cli-ruby/lib/shopify_cli/release.rb +197 -0
  294. package/assets/cli-ruby/lib/shopify_cli/reporting_configuration_controller.rb +64 -0
  295. package/assets/cli-ruby/lib/shopify_cli/resolve_constant.rb +25 -0
  296. package/assets/cli-ruby/lib/shopify_cli/resources/env_file.rb +108 -0
  297. package/assets/cli-ruby/lib/shopify_cli/resources.rb +5 -0
  298. package/assets/cli-ruby/lib/shopify_cli/result.rb +448 -0
  299. package/assets/cli-ruby/lib/shopify_cli/sed.rb +19 -0
  300. package/assets/cli-ruby/lib/shopify_cli/services/app/connect_service.rb +25 -0
  301. package/assets/cli-ruby/lib/shopify_cli/services/app/create/node_service.rb +143 -0
  302. package/assets/cli-ruby/lib/shopify_cli/services/app/create/php_service.rb +147 -0
  303. package/assets/cli-ruby/lib/shopify_cli/services/app/create/rails_service.rb +239 -0
  304. package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/node_service.rb +101 -0
  305. package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/php_service.rb +135 -0
  306. package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/rails_service.rb +120 -0
  307. package/assets/cli-ruby/lib/shopify_cli/services/app/open_service.rb +19 -0
  308. package/assets/cli-ruby/lib/shopify_cli/services/app/serve/node_service.rb +19 -0
  309. package/assets/cli-ruby/lib/shopify_cli/services/app/serve/php_service.rb +23 -0
  310. package/assets/cli-ruby/lib/shopify_cli/services/app/serve/rails_service.rb +28 -0
  311. package/assets/cli-ruby/lib/shopify_cli/services/app/serve/serve_service.rb +57 -0
  312. package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/auth_service.rb +21 -0
  313. package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/start_service.rb +20 -0
  314. package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/stop_service.rb +20 -0
  315. package/assets/cli-ruby/lib/shopify_cli/services/base_service.rb +13 -0
  316. package/assets/cli-ruby/lib/shopify_cli/services/reporting_service.rb +16 -0
  317. package/assets/cli-ruby/lib/shopify_cli/services.rb +38 -0
  318. package/assets/cli-ruby/lib/shopify_cli/shopifolk.rb +81 -0
  319. package/assets/cli-ruby/lib/shopify_cli/task.rb +20 -0
  320. package/assets/cli-ruby/lib/shopify_cli/tasks/confirm_store.rb +18 -0
  321. package/assets/cli-ruby/lib/shopify_cli/tasks/create_api_client.rb +40 -0
  322. package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_authenticated.rb +19 -0
  323. package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_dev_store.rb +41 -0
  324. package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_env.rb +90 -0
  325. package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_git_dependency.rb +14 -0
  326. package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_loopback_url.rb +20 -0
  327. package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_project_type.rb +14 -0
  328. package/assets/cli-ruby/lib/shopify_cli/tasks/select_org_and_shop.rb +81 -0
  329. package/assets/cli-ruby/lib/shopify_cli/tasks/update_dashboard_urls.rb +57 -0
  330. package/assets/cli-ruby/lib/shopify_cli/tasks.rb +44 -0
  331. package/assets/cli-ruby/lib/shopify_cli/theme/backoff_helper.rb +47 -0
  332. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/cdn_fonts.rb +73 -0
  333. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/certificate_manager.rb +79 -0
  334. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/errors.rb +9 -0
  335. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/header_hash.rb +98 -0
  336. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hooks/file_change_hook.rb +77 -0
  337. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/remote_file_deleter.rb +62 -0
  338. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/remote_file_reloader.rb +63 -0
  339. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/hot-reload-no-script.html +27 -0
  340. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/hot_reload.js +48 -0
  341. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/sse_client.js +43 -0
  342. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/theme.js +114 -0
  343. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/theme_extension.js +121 -0
  344. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/script_injector.rb +57 -0
  345. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/sections_index.rb +50 -0
  346. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload.rb +68 -0
  347. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/local_assets.rb +87 -0
  348. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/proxy.rb +246 -0
  349. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/proxy_param_builder.rb +82 -0
  350. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/reload_mode.rb +34 -0
  351. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/remote_watcher/json_files_update_job.rb +35 -0
  352. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/remote_watcher.rb +44 -0
  353. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/sse.rb +75 -0
  354. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/watcher.rb +61 -0
  355. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/web_server.rb +140 -0
  356. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server.rb +320 -0
  357. package/assets/cli-ruby/lib/shopify_cli/theme/development_theme.rb +101 -0
  358. package/assets/cli-ruby/lib/shopify_cli/theme/extension/app_extension.rb +40 -0
  359. package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/hooks/file_change_hook.rb +68 -0
  360. package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/hot_reload/script_injector.rb +30 -0
  361. package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/hot_reload.rb +13 -0
  362. package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/local_assets.rb +30 -0
  363. package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/proxy_param_builder.rb +94 -0
  364. package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/watcher.rb +47 -0
  365. package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server.rb +150 -0
  366. package/assets/cli-ruby/lib/shopify_cli/theme/extension/host_theme.rb +104 -0
  367. package/assets/cli-ruby/lib/shopify_cli/theme/extension/syncer/extension_serve_job.rb +133 -0
  368. package/assets/cli-ruby/lib/shopify_cli/theme/extension/syncer/operation.rb +21 -0
  369. package/assets/cli-ruby/lib/shopify_cli/theme/extension/syncer.rb +81 -0
  370. package/assets/cli-ruby/lib/shopify_cli/theme/extension/ui/host_theme_progress_bar.rb +35 -0
  371. package/assets/cli-ruby/lib/shopify_cli/theme/file.rb +149 -0
  372. package/assets/cli-ruby/lib/shopify_cli/theme/filter/path_matcher.rb +38 -0
  373. package/assets/cli-ruby/lib/shopify_cli/theme/ignore_filter.rb +112 -0
  374. package/assets/cli-ruby/lib/shopify_cli/theme/ignore_helper.rb +37 -0
  375. package/assets/cli-ruby/lib/shopify_cli/theme/include_filter.rb +67 -0
  376. package/assets/cli-ruby/lib/shopify_cli/theme/mime_type.rb +34 -0
  377. package/assets/cli-ruby/lib/shopify_cli/theme/root.rb +62 -0
  378. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/checksums.rb +66 -0
  379. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/downloader.rb +63 -0
  380. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/error_reporter.rb +45 -0
  381. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/merger.rb +53 -0
  382. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/operation.rb +57 -0
  383. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/standard_reporter.rb +32 -0
  384. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/unsupported_script_warning.rb +90 -0
  385. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/bulk.rb +133 -0
  386. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/bulk_item.rb +64 -0
  387. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/bulk_job.rb +139 -0
  388. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/bulk_request.rb +30 -0
  389. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/apply_to_all.rb +41 -0
  390. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/apply_to_all_form.rb +37 -0
  391. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/base_strategy_form.rb +64 -0
  392. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/select_delete_strategy.rb +29 -0
  393. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/select_update_strategy.rb +30 -0
  394. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/json_delete_handler.rb +49 -0
  395. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/json_update_handler.rb +71 -0
  396. package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader.rb +231 -0
  397. package/assets/cli-ruby/lib/shopify_cli/theme/syncer.rb +386 -0
  398. package/assets/cli-ruby/lib/shopify_cli/theme/theme.rb +212 -0
  399. package/assets/cli-ruby/lib/shopify_cli/theme/theme_access_api.rb +89 -0
  400. package/assets/cli-ruby/lib/shopify_cli/theme/theme_admin_api.rb +101 -0
  401. package/assets/cli-ruby/lib/shopify_cli/thread_pool/job.rb +35 -0
  402. package/assets/cli-ruby/lib/shopify_cli/thread_pool.rb +49 -0
  403. package/assets/cli-ruby/lib/shopify_cli/transform_data_structure.rb +87 -0
  404. package/assets/cli-ruby/lib/shopify_cli/tunnel.rb +255 -0
  405. package/assets/cli-ruby/lib/shopify_cli/utilities.rb +21 -0
  406. package/assets/cli-ruby/lib/shopify_cli/version.rb +3 -0
  407. package/assets/cli-ruby/lib/shopify_cli.rb +191 -0
  408. package/assets/cli-ruby/shipit.rubygems.yml +3 -0
  409. package/assets/cli-ruby/shopify-cli.gemspec +54 -0
  410. package/assets/cli-ruby/shopify-dev +16 -0
  411. package/assets/cli-ruby/test/minitest_ext.rb +115 -0
  412. package/assets/cli-ruby/test/project_types/extension/extension_test_helpers.rb +70 -0
  413. package/assets/cli-ruby/test/shopify-cli/migrator/migrations/migration_helper.rb +20 -0
  414. package/assets/cli-ruby/test/test_helpers.rb +18 -0
  415. package/assets/cli-ruby/utilities/constants.rb +7 -0
  416. package/assets/cli-ruby/utilities/docker/container.rb +104 -0
  417. package/assets/cli-ruby/utilities/docker.rb +89 -0
  418. package/assets/cli-ruby/utilities/utilities.rb +6 -0
  419. package/assets/cli-ruby/vendor/deps/cli-kit/REVISION +1 -0
  420. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/autocall.rb +21 -0
  421. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/base_command.rb +49 -0
  422. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/command_registry.rb +94 -0
  423. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/config.rb +133 -0
  424. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +123 -0
  425. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/executor.rb +79 -0
  426. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/ini.rb +102 -0
  427. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/levenshtein.rb +82 -0
  428. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/logger.rb +82 -0
  429. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/resolver.rb +60 -0
  430. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/ruby_backports/enumerable.rb +6 -0
  431. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +244 -0
  432. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/support.rb +9 -0
  433. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/system.rb +243 -0
  434. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/util.rb +193 -0
  435. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/version.rb +5 -0
  436. package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit.rb +60 -0
  437. package/assets/cli-ruby/vendor/deps/cli-ui/REVISION +1 -0
  438. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +157 -0
  439. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/color.rb +84 -0
  440. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +192 -0
  441. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +98 -0
  442. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +166 -0
  443. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +139 -0
  444. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +120 -0
  445. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame.rb +269 -0
  446. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +84 -0
  447. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/os.rb +73 -0
  448. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/printer.rb +59 -0
  449. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/progress.rb +90 -0
  450. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +484 -0
  451. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +29 -0
  452. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +282 -0
  453. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/spinner/async.rb +40 -0
  454. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +263 -0
  455. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +66 -0
  456. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +232 -0
  457. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +46 -0
  458. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +102 -0
  459. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/version.rb +5 -0
  460. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/widgets/base.rb +27 -0
  461. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/widgets/status.rb +61 -0
  462. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +77 -0
  463. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  464. package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui.rb +233 -0
  465. package/assets/cli-ruby/vendor/deps/ruby2_keywords/LICENSE +22 -0
  466. package/assets/cli-ruby/vendor/deps/ruby2_keywords/README.md +67 -0
  467. package/assets/cli-ruby/vendor/deps/ruby2_keywords/Rakefile +54 -0
  468. package/assets/cli-ruby/vendor/deps/ruby2_keywords/lib/ruby2_keywords.rb +57 -0
  469. package/assets/cli-ruby/vendor/deps/ruby2_keywords/ruby2_keywords.gemspec +18 -0
  470. package/assets/cli-ruby/vendor/deps/ruby2_keywords/test/test_keyword.rb +41 -0
  471. package/assets/cli-ruby/vendor/deps/smart_properties/REVISION +1 -0
  472. package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/errors.rb +114 -0
  473. package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/property.rb +168 -0
  474. package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/property_collection.rb +83 -0
  475. package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/validations/ancestor.rb +27 -0
  476. package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/validations.rb +8 -0
  477. package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/version.rb +3 -0
  478. package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties.rb +174 -0
  479. package/assets/cli-ruby/vendor/deps/webrick/Gemfile +3 -0
  480. package/assets/cli-ruby/vendor/deps/webrick/LICENSE.txt +22 -0
  481. package/assets/cli-ruby/vendor/deps/webrick/README.md +61 -0
  482. package/assets/cli-ruby/vendor/deps/webrick/Rakefile +10 -0
  483. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  484. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  485. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  486. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  487. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  488. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  489. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  490. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  491. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  492. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  493. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  494. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  495. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  496. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  497. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  498. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  499. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  500. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  501. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  502. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  503. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  504. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  505. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  506. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  507. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  508. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  509. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  510. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  511. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  512. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  513. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  514. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  515. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  516. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  517. package/assets/cli-ruby/vendor/deps/webrick/lib/webrick.rb +232 -0
  518. package/assets/cli-ruby/vendor/deps/webrick/webrick.gemspec +74 -0
  519. package/assets/cli-ruby/vendor/gen/lib/gen/commands/help.rb +20 -0
  520. package/assets/cli-ruby/vendor/gen/lib/gen/commands/new.rb +21 -0
  521. package/assets/cli-ruby/vendor/gen/lib/gen/commands.rb +18 -0
  522. package/assets/cli-ruby/vendor/gen/lib/gen/entry_point.rb +10 -0
  523. package/assets/cli-ruby/vendor/gen/lib/gen/generator.rb +165 -0
  524. package/assets/cli-ruby/vendor/gen/lib/gen.rb +39 -0
  525. package/assets/cli-ruby/vendor/gen/template/Gemfile +10 -0
  526. package/assets/cli-ruby/vendor/gen/template/README.md +1 -0
  527. package/assets/cli-ruby/vendor/gen/template/bin/testunit +23 -0
  528. package/assets/cli-ruby/vendor/gen/template/bin/update-deps +97 -0
  529. package/assets/cli-ruby/vendor/gen/template/dev-gems.yml +3 -0
  530. package/assets/cli-ruby/vendor/gen/template/dev-vendor.yml +4 -0
  531. package/assets/cli-ruby/vendor/gen/template/exe/__app__-gems +17 -0
  532. package/assets/cli-ruby/vendor/gen/template/exe/__app__-vendor +18 -0
  533. package/assets/cli-ruby/vendor/gen/template/lib/__app__/commands/example.rb +19 -0
  534. package/assets/cli-ruby/vendor/gen/template/lib/__app__/commands/help.rb +21 -0
  535. package/assets/cli-ruby/vendor/gen/template/lib/__app__/commands.rb +18 -0
  536. package/assets/cli-ruby/vendor/gen/template/lib/__app__/entry_point.rb +10 -0
  537. package/assets/cli-ruby/vendor/gen/template/lib/__app__.rb +33 -0
  538. package/assets/cli-ruby/vendor/gen/template/test/example_test.rb +17 -0
  539. package/assets/cli-ruby/vendor/gen/template/test/test_helper.rb +22 -0
  540. package/assets/cli-ruby/vendor/lib/semantic/LICENSE +20 -0
  541. package/assets/cli-ruby/vendor/lib/semantic/semantic.rb +4 -0
  542. package/assets/cli-ruby/vendor/lib/semantic/version.rb +179 -0
  543. package/dist/private/node/analytics.js +1 -1
  544. package/dist/private/node/analytics.js.map +1 -1
  545. package/dist/private/node/api/headers.js +2 -2
  546. package/dist/private/node/api/headers.js.map +1 -1
  547. package/dist/private/node/constants.d.ts +1 -1
  548. package/dist/private/node/constants.js +1 -1
  549. package/dist/private/node/constants.js.map +1 -1
  550. package/dist/private/node/{environment → context}/service.d.ts +0 -0
  551. package/dist/private/node/{environment → context}/service.js +1 -1
  552. package/dist/private/node/context/service.js.map +1 -0
  553. package/dist/private/node/{environment → context}/spin-cache.d.ts +0 -0
  554. package/dist/private/node/{environment → context}/spin-cache.js +0 -0
  555. package/dist/private/node/context/spin-cache.js.map +1 -0
  556. package/dist/private/node/{environment → context}/utilities.d.ts +0 -0
  557. package/dist/private/node/{environment → context}/utilities.js +0 -0
  558. package/dist/private/node/context/utilities.js.map +1 -0
  559. package/dist/private/node/session/authorize.js +13 -3
  560. package/dist/private/node/session/authorize.js.map +1 -1
  561. package/dist/private/node/session/device-authorization.js +1 -1
  562. package/dist/private/node/session/device-authorization.js.map +1 -1
  563. package/dist/private/node/session/exchange.js +1 -1
  564. package/dist/private/node/session/exchange.js.map +1 -1
  565. package/dist/private/node/session/identity-token-validation.js +1 -1
  566. package/dist/private/node/session/identity-token-validation.js.map +1 -1
  567. package/dist/private/node/session/identity.js +1 -1
  568. package/dist/private/node/session/identity.js.map +1 -1
  569. package/dist/private/node/session/validate.js +1 -1
  570. package/dist/private/node/session/validate.js.map +1 -1
  571. package/dist/private/node/session.js +3 -3
  572. package/dist/private/node/session.js.map +1 -1
  573. package/dist/private/node/testing/ui.d.ts +31 -0
  574. package/dist/private/node/testing/ui.js +32 -1
  575. package/dist/private/node/testing/ui.js.map +1 -1
  576. package/dist/private/node/ui/components/Alert.d.ts +7 -7
  577. package/dist/private/node/ui/components/Alert.js +14 -13
  578. package/dist/private/node/ui/components/Alert.js.map +1 -1
  579. package/dist/private/node/ui/components/Alert.test.js +18 -4
  580. package/dist/private/node/ui/components/Alert.test.js.map +1 -1
  581. package/dist/private/node/ui/components/AutocompletePrompt.d.ts +5 -5
  582. package/dist/private/node/ui/components/AutocompletePrompt.js +10 -8
  583. package/dist/private/node/ui/components/AutocompletePrompt.js.map +1 -1
  584. package/dist/private/node/ui/components/AutocompletePrompt.test.js.map +1 -1
  585. package/dist/private/node/ui/components/Banner.d.ts +3 -3
  586. package/dist/private/node/ui/components/Banner.js.map +1 -1
  587. package/dist/private/node/ui/components/Command.d.ts +3 -3
  588. package/dist/private/node/ui/components/Command.js.map +1 -1
  589. package/dist/private/node/ui/components/ConcurrentOutput.d.ts +9 -3
  590. package/dist/private/node/ui/components/ConcurrentOutput.js +31 -16
  591. package/dist/private/node/ui/components/ConcurrentOutput.js.map +1 -1
  592. package/dist/private/node/ui/components/ConcurrentOutput.test.js +36 -12
  593. package/dist/private/node/ui/components/ConcurrentOutput.test.js.map +1 -1
  594. package/dist/private/node/ui/components/FatalError.d.ts +2 -2
  595. package/dist/private/node/ui/components/FatalError.js +10 -10
  596. package/dist/private/node/ui/components/FatalError.js.map +1 -1
  597. package/dist/private/node/ui/components/FilePath.d.ts +3 -3
  598. package/dist/private/node/ui/components/FilePath.js +1 -4
  599. package/dist/private/node/ui/components/FilePath.js.map +1 -1
  600. package/dist/private/node/ui/components/FilePath.test.js +1 -1
  601. package/dist/private/node/ui/components/FilePath.test.js.map +1 -1
  602. package/dist/private/node/ui/components/FullScreen.d.ts +3 -3
  603. package/dist/private/node/ui/components/FullScreen.js +1 -1
  604. package/dist/private/node/ui/components/FullScreen.js.map +1 -1
  605. package/dist/private/node/ui/components/Link.d.ts +3 -3
  606. package/dist/private/node/ui/components/Link.js.map +1 -1
  607. package/dist/private/node/ui/components/List.d.ts +6 -5
  608. package/dist/private/node/ui/components/List.js +4 -3
  609. package/dist/private/node/ui/components/List.js.map +1 -1
  610. package/dist/private/node/ui/components/Prompts/InfoTable.d.ts +6 -5
  611. package/dist/private/node/ui/components/Prompts/InfoTable.js +5 -5
  612. package/dist/private/node/ui/components/Prompts/InfoTable.js.map +1 -1
  613. package/dist/private/node/ui/components/Prompts/InfoTable.test.d.ts +1 -0
  614. package/dist/private/node/ui/components/Prompts/InfoTable.test.js +29 -0
  615. package/dist/private/node/ui/components/Prompts/InfoTable.test.js.map +1 -0
  616. package/dist/private/node/ui/components/SelectInput.d.ts +9 -3
  617. package/dist/private/node/ui/components/SelectInput.js +24 -17
  618. package/dist/private/node/ui/components/SelectInput.js.map +1 -1
  619. package/dist/private/node/ui/components/SelectInput.test.js +36 -8
  620. package/dist/private/node/ui/components/SelectInput.test.js.map +1 -1
  621. package/dist/private/node/ui/components/SelectPrompt.d.ts +8 -7
  622. package/dist/private/node/ui/components/SelectPrompt.js +22 -13
  623. package/dist/private/node/ui/components/SelectPrompt.js.map +1 -1
  624. package/dist/private/node/ui/components/SelectPrompt.test.js +27 -2
  625. package/dist/private/node/ui/components/SelectPrompt.test.js.map +1 -1
  626. package/dist/private/node/ui/components/Subdued.d.ts +3 -3
  627. package/dist/private/node/ui/components/Subdued.js.map +1 -1
  628. package/dist/private/node/ui/components/Table/Row.d.ts +2 -2
  629. package/dist/private/node/ui/components/Table/Row.js +3 -2
  630. package/dist/private/node/ui/components/Table/Row.js.map +1 -1
  631. package/dist/private/node/ui/components/Table/Table.d.ts +10 -7
  632. package/dist/private/node/ui/components/Table/Table.js +3 -1
  633. package/dist/private/node/ui/components/Table/Table.js.map +1 -1
  634. package/dist/private/node/ui/components/Table/Table.test.js +1 -1
  635. package/dist/private/node/ui/components/Table/Table.test.js.map +1 -1
  636. package/dist/private/node/ui/components/Tasks.d.ts +2 -2
  637. package/dist/private/node/ui/components/Tasks.js +2 -1
  638. package/dist/private/node/ui/components/Tasks.js.map +1 -1
  639. package/dist/private/node/ui/components/Tasks.test.js +1 -1
  640. package/dist/private/node/ui/components/Tasks.test.js.map +1 -1
  641. package/dist/private/node/ui/components/TextAnimation.d.ts +3 -3
  642. package/dist/private/node/ui/components/TextAnimation.js.map +1 -1
  643. package/dist/private/node/ui/components/TextInput.d.ts +3 -3
  644. package/dist/private/node/ui/components/TextInput.js +1 -2
  645. package/dist/private/node/ui/components/TextInput.js.map +1 -1
  646. package/dist/private/node/ui/components/TextInput.test.js +1 -1
  647. package/dist/private/node/ui/components/TextInput.test.js.map +1 -1
  648. package/dist/private/node/ui/components/TextPrompt.d.ts +3 -3
  649. package/dist/private/node/ui/components/TextPrompt.js +5 -4
  650. package/dist/private/node/ui/components/TextPrompt.js.map +1 -1
  651. package/dist/private/node/ui/components/TextPrompt.test.js +2 -2
  652. package/dist/private/node/ui/components/TextPrompt.test.js.map +1 -1
  653. package/dist/private/node/ui/components/TextWithBackground.d.ts +12 -0
  654. package/dist/private/node/ui/components/TextWithBackground.js +39 -0
  655. package/dist/private/node/ui/components/TextWithBackground.js.map +1 -0
  656. package/dist/private/node/ui/components/TokenizedText.d.ts +17 -13
  657. package/dist/private/node/ui/components/TokenizedText.js +24 -6
  658. package/dist/private/node/ui/components/TokenizedText.js.map +1 -1
  659. package/dist/private/node/ui/components/TokenizedText.test.js +7 -2
  660. package/dist/private/node/ui/components/TokenizedText.test.js.map +1 -1
  661. package/dist/private/node/ui/components/UserInput.d.ts +3 -3
  662. package/dist/private/node/ui/components/UserInput.js.map +1 -1
  663. package/dist/private/node/ui/hooks/use-async-and-unmount.d.ts +1 -1
  664. package/dist/private/node/ui/hooks/use-async-and-unmount.js +1 -1
  665. package/dist/private/node/ui/hooks/use-async-and-unmount.js.map +1 -1
  666. package/dist/private/node/ui/hooks/use-layout.d.ts +1 -0
  667. package/dist/private/node/ui/hooks/use-layout.js +1 -0
  668. package/dist/private/node/ui/hooks/use-layout.js.map +1 -1
  669. package/dist/private/node/ui/utilities.d.ts +1 -1
  670. package/dist/private/node/ui.js +3 -2
  671. package/dist/private/node/ui.js.map +1 -1
  672. package/dist/public/common/string.d.ts +2 -2
  673. package/dist/public/common/string.js.map +1 -1
  674. package/dist/public/common/version.d.ts +1 -1
  675. package/dist/public/common/version.js +1 -1
  676. package/dist/public/common/version.js.map +1 -1
  677. package/dist/public/node/analytics.js +1 -1
  678. package/dist/public/node/analytics.js.map +1 -1
  679. package/dist/public/node/api/partners.js +1 -1
  680. package/dist/public/node/api/partners.js.map +1 -1
  681. package/dist/public/node/base-command.d.ts +3 -3
  682. package/dist/public/node/base-command.js +33 -31
  683. package/dist/public/node/base-command.js.map +1 -1
  684. package/dist/public/node/cli.d.ts +1 -1
  685. package/dist/public/node/cli.js +6 -5
  686. package/dist/public/node/cli.js.map +1 -1
  687. package/dist/public/node/{environment → context}/fqdn.d.ts +0 -0
  688. package/dist/public/node/{environment → context}/fqdn.js +1 -1
  689. package/dist/public/node/context/fqdn.js.map +1 -0
  690. package/dist/public/node/{environment → context}/local.d.ts +3 -3
  691. package/dist/public/node/{environment → context}/local.js +6 -6
  692. package/dist/public/node/context/local.js.map +1 -0
  693. package/dist/public/node/{environment → context}/spin.d.ts +0 -0
  694. package/dist/public/node/{environment → context}/spin.js +3 -3
  695. package/dist/public/node/context/spin.js.map +1 -0
  696. package/dist/public/node/environments.d.ts +15 -0
  697. package/dist/public/node/environments.js +33 -0
  698. package/dist/public/node/environments.js.map +1 -0
  699. package/dist/public/node/error.d.ts +5 -5
  700. package/dist/public/node/error.js.map +1 -1
  701. package/dist/public/node/git.js +1 -1
  702. package/dist/public/node/git.js.map +1 -1
  703. package/dist/public/node/hooks/postrun.d.ts +1 -1
  704. package/dist/public/node/hooks/postrun.js +1 -1
  705. package/dist/public/node/hooks/postrun.js.map +1 -1
  706. package/dist/public/node/http.d.ts +1 -0
  707. package/dist/public/node/http.js +1 -0
  708. package/dist/public/node/http.js.map +1 -1
  709. package/dist/public/node/metadata.js +1 -1
  710. package/dist/public/node/metadata.js.map +1 -1
  711. package/dist/public/node/output.js +1 -1
  712. package/dist/public/node/output.js.map +1 -1
  713. package/dist/public/node/ruby.d.ts +1 -0
  714. package/dist/public/node/ruby.js +43 -20
  715. package/dist/public/node/ruby.js.map +1 -1
  716. package/dist/public/node/session.js +1 -1
  717. package/dist/public/node/session.js.map +1 -1
  718. package/dist/public/node/themes/generate-theme-name.d.ts +1 -0
  719. package/dist/public/node/themes/generate-theme-name.js +13 -0
  720. package/dist/public/node/themes/generate-theme-name.js.map +1 -0
  721. package/dist/public/node/themes/models/theme.d.ts +11 -0
  722. package/dist/public/node/themes/models/theme.js +29 -0
  723. package/dist/public/node/themes/models/theme.js.map +1 -0
  724. package/dist/public/node/themes/replace-invalid-characters.d.ts +1 -0
  725. package/dist/public/node/themes/replace-invalid-characters.js +6 -0
  726. package/dist/public/node/themes/replace-invalid-characters.js.map +1 -0
  727. package/dist/public/node/themes/theme-manager.d.ts +13 -0
  728. package/dist/public/node/themes/theme-manager.js +40 -0
  729. package/dist/public/node/themes/theme-manager.js.map +1 -0
  730. package/dist/public/node/themes/theme-urls.d.ts +5 -0
  731. package/dist/public/node/themes/theme-urls.js +16 -0
  732. package/dist/public/node/themes/theme-urls.js.map +1 -0
  733. package/dist/public/node/themes/themes-api/headers.d.ts +3 -0
  734. package/dist/public/node/themes/themes-api/headers.js +29 -0
  735. package/dist/public/node/themes/themes-api/headers.js.map +1 -0
  736. package/dist/public/node/themes/themes-api/retry.d.ts +1 -0
  737. package/dist/public/node/themes/themes-api/retry.js +6 -0
  738. package/dist/public/node/themes/themes-api/retry.js.map +1 -0
  739. package/dist/public/node/themes/themes-api/throttler.d.ts +2 -0
  740. package/dist/public/node/themes/themes-api/throttler.js +82 -0
  741. package/dist/public/node/themes/themes-api/throttler.js.map +1 -0
  742. package/dist/public/node/themes/themes-api.d.ts +9 -0
  743. package/dist/public/node/themes/themes-api.js +85 -0
  744. package/dist/public/node/themes/themes-api.js.map +1 -0
  745. package/dist/public/node/ui.d.ts +25 -26
  746. package/dist/public/node/ui.js +47 -5
  747. package/dist/public/node/ui.js.map +1 -1
  748. package/dist/tsconfig.tsbuildinfo +1 -1
  749. package/package.json +11 -5
  750. package/dist/index.d.ts +0 -1
  751. package/dist/index.js +0 -2
  752. package/dist/index.js.map +0 -1
  753. package/dist/private/node/environment/service.js.map +0 -1
  754. package/dist/private/node/environment/spin-cache.js.map +0 -1
  755. package/dist/private/node/environment/utilities.js.map +0 -1
  756. package/dist/public/node/environment/fqdn.js.map +0 -1
  757. package/dist/public/node/environment/local.js.map +0 -1
  758. package/dist/public/node/environment/spin.js.map +0 -1
  759. package/dist/public/node/presets.d.ts +0 -8
  760. package/dist/public/node/presets.js +0 -26
  761. package/dist/public/node/presets.js.map +0 -1
  762. package/dist/ui/executor.d.ts +0 -2
  763. package/dist/ui/executor.js +0 -56
  764. package/dist/ui/executor.js.map +0 -1
  765. package/dist/ui.d.ts +0 -40
  766. package/dist/ui.js +0 -91
  767. package/dist/ui.js.map +0 -1
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Extension
4
+ module Loaders
5
+ module Project
6
+ def self.load(context:, directory:, api_key:, registration_id:, api_secret:, env: {})
7
+ env_overrides = {
8
+ "SHOPIFY_API_KEY" => api_key,
9
+ "SHOPIFY_API_SECRET" => api_secret,
10
+ "EXTENSION_ID" => registration_id,
11
+ }.compact.merge(env)
12
+
13
+ env_file_present = env_file_exists?(directory)
14
+ env = if env_file_present
15
+ ShopifyCLI::Resources::EnvFile.read(directory, overrides: env_overrides)
16
+ else
17
+ ShopifyCLI::Resources::EnvFile.from_hash(env_overrides)
18
+ end
19
+ # This is a somewhat uncomfortable hack we use because `Project::at` is
20
+ # a global cache and we can't rely on this class loading the project
21
+ # first. Long-term we should move away from that global cache.
22
+ project = ExtensionProject.at(directory)
23
+ project.env = env
24
+ project
25
+ rescue SmartProperties::InitializationError, SmartProperties::MissingValueError => error
26
+ handle_error(error, context: context)
27
+ end
28
+
29
+ def self.handle_error(error, context:)
30
+ if ShopifyCLI::Environment.interactive?
31
+ properties_hash = { api_key: "SHOPIFY_API_KEY", secret: "SHOPIFY_API_SECRET" }
32
+ missing_env_variables = error.properties.map { |p| properties_hash[p.name] }.compact.join(", ")
33
+ message = context.message("errors.missing_env_file_variables", missing_env_variables)
34
+ message += context.message("errors.missing_env_file_variables_solution", ShopifyCLI::TOOL_NAME)
35
+ else
36
+ properties_hash = { api_key: "--api-key", secret: "--api-secret" }
37
+ missing_options = error.properties.map { |p| properties_hash[p.name] }.compact.join(", ")
38
+ message = context.message("errors.missing_push_options_ci", missing_options)
39
+ message += context.message("errors.missing_push_options_ci_solution", ShopifyCLI::TOOL_NAME)
40
+ end
41
+ raise ShopifyCLI::Abort,
42
+ message
43
+ end
44
+
45
+ def self.env_file_exists?(directory)
46
+ File.exist?(ShopifyCLI::Resources::EnvFile.path(directory))
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Extension
4
+ module Loaders
5
+ module SpecificationHandler
6
+ def self.load(project:, context:)
7
+ identifier = project.specification_identifier
8
+ Models::LazySpecificationHandler.new(identifier) do
9
+ specifications = Models::Specifications.new(
10
+ fetch_specifications: Tasks::FetchSpecifications.new(api_key: project.app.api_key, context: context)
11
+ )
12
+
13
+ unless specifications.valid?(identifier)
14
+ raise ShopifyCLI::Abort, context.message("errors.unknown_type", project.specification_identifier)
15
+ end
16
+
17
+ specifications[identifier]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Extension
4
+ module Messages
5
+ module MessageLoading
6
+ def self.load
7
+ type_specific_messages = load_current_type_messages
8
+ return Messages::MESSAGES if type_specific_messages.nil?
9
+
10
+ if type_specific_messages.key?(:overrides)
11
+ ShopifyCLI::Utilities.deep_merge(Messages::MESSAGES, type_specific_messages[:overrides])
12
+ else
13
+ Messages::MESSAGES
14
+ end
15
+ end
16
+
17
+ def self.load_current_type_messages
18
+ return unless ShopifyCLI::Project.has_current?
19
+ messages_for_type(
20
+ ShopifyCLI::Project.current.config[Extension::ExtensionProjectKeys::SPECIFICATION_IDENTIFIER_KEY]
21
+ )
22
+ end
23
+
24
+ def self.messages_for_type(type_identifier)
25
+ return if type_identifier.nil?
26
+
27
+ type_identifier_symbol = type_identifier.downcase.to_sym
28
+ return unless Messages::TYPES.key?(type_identifier_symbol)
29
+
30
+ TYPES[type_identifier_symbol]
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,292 @@
1
+ # frozen_string_literal: true
2
+ require "shopify_cli"
3
+
4
+ module Extension
5
+ module Messages
6
+ MESSAGES = {
7
+ extension: {
8
+ help: <<~HELP,
9
+ Suite of commands for developing app extensions. See {{command:%1$s extension <command> --help}} for usage of each command.
10
+ Usage: {{command:%1$s extension [ %2$s ]}}
11
+ HELP
12
+ },
13
+ create: {
14
+ help: <<~HELP,
15
+ Create a new app extension.
16
+ Usage: {{command:%s extension create <name>}}
17
+ Options:
18
+ {{command:--type=TYPE}} The type of extension you would like to create.
19
+ {{command:--name=NAME}} The name of your extension (50 characters).
20
+ {{command:--api-key=KEY}} The API key of your app.
21
+ HELP
22
+ ask_name: "Extension name",
23
+ invalid_name: "Extension name must be under %s characters",
24
+ ask_type: "What type of extension are you creating?",
25
+ invalid_type: "Extension type is invalid.",
26
+ setup_project_frame_title: "Initializing project",
27
+ ready_to_start: <<~MESSAGE,
28
+ {{v}} A new folder was generated at {{green:./%s}}.
29
+ {{*}} You’re ready to start building {{green:%s}}!
30
+ Navigate to the new folder, then run {{command:shopify extension serve}} to start a local server.
31
+ MESSAGE
32
+ learn_more: <<~MESSAGE,
33
+ {{*}} Once you're ready to version and publish your extension,
34
+ run {{command:shopify extension register}} to register this extension with one of your apps.
35
+ MESSAGE
36
+ try_again: "{{*}} Fix the errors and run {{command:shopify extension create}} again.",
37
+ errors: {
38
+ directory_exists: "Directory ‘%s’ already exists. Please remove it or choose a new name for your project.",
39
+ },
40
+ incomplete_configuration: "Cannot create extension due to missing configuration information",
41
+ invalid_api_key: "The API key %s does not match any of your apps.",
42
+ ask_app: "Which app would you like to register this extension with?",
43
+ no_apps: "{{x}} You don’t have any apps.",
44
+ learn_about_apps: "{{*}} Learn more about building apps at <https://shopify.dev/apps>, " \
45
+ "or try creating a new app using {{command:shopify [node|rails] create}}.",
46
+ loading_apps: "Loading your apps…",
47
+ no_available_extensions: "{{x}} There are no available extensions for this app.",
48
+ ask_template: "Select a template to use for your extension",
49
+ },
50
+ connect: {
51
+ connected: "Project now connected to {{green:%s: %s}}",
52
+ incomplete_configuration: "Cannot connect extension due to missing configuration information",
53
+ invalid_api_key: "The API key %s does not match any of your apps.",
54
+ ask_registration: "Which extension would you like to connect to?",
55
+ loading_extensions: "Loading your extensions…",
56
+ no_extensions: "{{x}} You don't have any extensions of type %s",
57
+ learn_about_extensions: "{{*}} Learn more about building extensions at <https://shopify.dev/concepts/apps>, " \
58
+ "or try creating a new extension using {{command:shopify extension create}}.",
59
+ help: <<~HELP,
60
+ {{command:%s extension connect}}: Connects an existing extension to Shopify CLI. Creates a config file.
61
+ Usage: {{command:%s extension connect}}
62
+ HELP
63
+ },
64
+ build: {
65
+ help: <<~HELP,
66
+ Build your extension to prepare for deployment.
67
+ Usage: {{command:%s extension build}}
68
+ HELP
69
+ frame_title: "Building extension with: %s…",
70
+ build_failure_message: "Failed to build extension code.",
71
+ },
72
+ register: {
73
+ help: <<~HELP,
74
+ Register your local extension to a Shopify app
75
+ Usage: {{command:%s extension register}}
76
+ HELP
77
+ frame_title: "Registering Extension",
78
+ waiting_text: "Registering with Shopify…",
79
+ already_registered: "Extension is already registered.",
80
+ confirm_info: "This will create a new extension registration for %s, which can’t be undone.",
81
+ confirm_question: "Would you like to register this extension? (y/n)",
82
+ confirm_abort: "Extension was not registered.",
83
+ success: "{{v}} Registered {{green:%s}}.",
84
+ success_info: "{{*}} Run {{command:shopify extension push}} to push your extension to Shopify.",
85
+ },
86
+ push: {
87
+ help: <<~HELP,
88
+ Push the current extension to Shopify.
89
+ Usage: {{command:%s extension push}}
90
+ Options:
91
+ {{command:--api-key=API_KEY}} Connect your extension and app by inserting your app's API key (which you can get from your app setup page on shopify.dev).
92
+ {{command:--extension-id=EXTENSION_ID}} The id of the extension's registration.
93
+ HELP
94
+ frame_title: "Pushing your extension to Shopify",
95
+ waiting_text: "Pushing code to Shopify…",
96
+ pushed_with_errors: "{{x}} Code pushed to Shopify with errors on %s.",
97
+ push_with_errors_info: "{{*}} Fix these errors and run {{command:shopify extension push}} to " \
98
+ "revalidate your extension.",
99
+ success_confirmation: "{{v}} Pushed {{green:%s}} to a draft on %s.",
100
+ success_info: "{{*}} Visit %s to version and publish your extension.",
101
+ },
102
+ serve: {
103
+ help: <<~HELP,
104
+ Serve your extension in a local simulator for development.
105
+ Usage: {{command:%s extension serve [ ROOT ]}}
106
+ Options:
107
+ {{command:-p, --port=PORT}} Local port of the development serve.
108
+ {{command:-T, --theme=NAME_OR_ID}} Theme ID or name of the host theme.
109
+ {{command:--tunnel=TUNNEL}} Establish an ngrok tunnel (default: false).
110
+ {{command:--api-key=API_KEY}} Connect your extension and app by inserting your app's API key (which you can get from your app setup page on shopify.dev).
111
+ {{command:--api-secret=API_SECRET}} The API secret of the app the script is registered with.
112
+ {{command:--extension-id=EXTENSION_ID}} The id of the extension's registration.
113
+ HELP
114
+ frame_title: "Viewing extension…",
115
+ no_available_ports_found: "No available ports found to run extension.",
116
+ serve_failure_message: "Failed to run extension code.",
117
+ serve_missing_information: "Missing shop or api_key.",
118
+ tunnel_already_running: "A tunnel running on another port has been detected. Close the tunnel and try again.",
119
+ preview_message: <<~PREVIEW_MESSAGE,
120
+ Enable your theme app extension:
121
+ {{green:%s}}
122
+
123
+ Setup your theme app extension in the host theme:
124
+ {{green:%s}}
125
+
126
+ Preview your theme app extension:
127
+ {{green:%s}}
128
+
129
+ (Use Ctrl-C to stop)
130
+ PREVIEW_MESSAGE
131
+ },
132
+ tunnel: {
133
+ duplicate_session: <<~MESSAGE,
134
+ Another ngrok tunnel is currently running with your auth token, possibly on another machine.
135
+
136
+ Terminate that tunnel before opening a new one.
137
+ MESSAGE
138
+ invalid_token: <<~MESSAGE,
139
+ The ngrok token currently configured is invalid.
140
+
141
+ After generating a new token, update your local ngrok configuration using {{command:shopify app tunnel auth <token>}}
142
+ MESSAGE
143
+ missing_token: "{{x}} {{red:auth requires a token argument}}. "\
144
+ "Find it on your ngrok dashboard: {{underline:https://dashboard.ngrok.com/auth/your-authtoken}}.",
145
+ invalid_port: "%s is not a valid port.",
146
+ no_tunnel_running: "No tunnel running.",
147
+ tunnel_running_at: "Tunnel running at: {{underline:%s}}",
148
+ help: <<~HELP,
149
+ Start or stop an http tunnel to your local development extension using ngrok.
150
+ Usage: {{command:%s extension tunnel [ auth | start | stop | status ]}}
151
+ HELP
152
+ extended_help: <<~HELP,
153
+ {{bold:Subcommands:}}
154
+
155
+ {{cyan:auth}}: Writes an ngrok auth token to ~/.ngrok2/ngrok.yml to connect with an ngrok account.
156
+ Visit https://dashboard.ngrok.com/signup to sign up.
157
+ Usage: {{command:%1$s extension tunnel auth <token>}}
158
+
159
+ {{cyan:start}}: Starts an ngrok tunnel, will print the URL for an existing tunnel if already running.
160
+ Usage: {{command:%1$s extension tunnel start}}
161
+ Options:
162
+ {{command:--port=PORT}} Forward the ngrok subdomain to local port PORT. Defaults to %2$s.
163
+
164
+ {{cyan:stop}}: Stops the ngrok tunnel.
165
+ Usage: {{command:%1$s extension tunnel stop}}
166
+
167
+ {{cyan:status}}: Output the current status of the ngrok tunnel.
168
+ Usage: {{command:%1$s extension tunnel status}}
169
+ HELP
170
+ },
171
+ check: {
172
+ help: "Check your extension for errors, suggestions, and best practices.",
173
+ unsupported: "{{red:%s projects are not supported for `extension check`}}",
174
+ },
175
+ features: {
176
+ argo: {
177
+ missing_file_error: "Could not find built extension file.",
178
+ script_prepare_error: "An error occurred while attempting to prepare your script.",
179
+ initialization_error: "{{x}} There was an error while initializing the project.",
180
+ dependencies: {
181
+ node: {
182
+ node_not_installed: "Node must be installed to create this extension.",
183
+ version_too_low: "Your node version %s does not meet the minimum required version %s",
184
+ },
185
+ argo_missing_renderer_package_error: "Extension template references invalid renderer package "\
186
+ "please contact Shopify for help.",
187
+ yarn_install_error: "Something went wrong while running 'yarn install'. %s.",
188
+ yarn_run_script_error: "Something went wrong while running script. %s.",
189
+ },
190
+ config: {
191
+ unpermitted_keys: "`%s` contains the following unpermitted keys: %s",
192
+ },
193
+ },
194
+ },
195
+ tasks: {
196
+ errors: {
197
+ parse_error: "Unable to parse response from Partners Dashboard.",
198
+ store_error: "There was an error getting store data. Try again later.",
199
+ },
200
+ },
201
+ errors: {
202
+ unknown_type: "Unknown extension type %s. Valid extension types include: CHECKOUT_POST_PURCHASE, " \
203
+ "THEME_APP_EXTENSION, and PRODUCT_SUBSCRIPTION.",
204
+ package_not_found: "`%s` package not found.",
205
+ missing_push_options_ci: "The following are missing: %s. ",
206
+ missing_push_options_ci_solution: "To add them to a CI environment:\n\t1. Run a connect command " \
207
+ "({{command:%1$s extension connect}})\n\t2. Navigate to the .env file at the root of your project\n\t" \
208
+ "3. Copy the missing values and pass them through as arguments in {{command:%1$s extension push}}",
209
+ missing_env_file_variables: "The following are missing in the .env file: %s. ",
210
+ missing_env_file_variables_solution: "To add it, connect your extension with " \
211
+ "{{command:%1$s extension connect}} " \
212
+ "or run {{command:%1$s extension register}} to register a new extension.",
213
+ module_not_found: "Unable to find module %s. Ensure your dependencies are up-to-date and try again.",
214
+ development_server_binary_not_found: {
215
+ title: "Development Server Binary Missing",
216
+ message: <<~ERROR,
217
+ The extension development server binary could not be found!
218
+
219
+ If you're running a development version of the CLI, please run `rake extensions:install` to install it.
220
+ Otherwise, please file a bug report via https://github.com/Shopify/shopify-cli/issues/new.
221
+ ERROR
222
+ },
223
+ outdated_extensions: {
224
+ unknown: <<~TEXT.strip,
225
+ Please refer to the documentation for more information on how to upgrade your extension:
226
+ https://shopify.dev/apps/app-extensions
227
+ TEXT
228
+ checkout_ui_extension: <<~TEXT.strip,
229
+ Please update your package.json as follows:
230
+ * Replace the development dependency @shopify/checkout-ui-extensions-run
231
+ with @shopify/shopify-cli-extensions
232
+ * Remove the start and server script
233
+ * Add a develop script: shopify-cli-extensions develop
234
+ * Change the build script to: shopify-cli-extensions build
235
+ TEXT
236
+ product_subscription: <<~TEXT.strip,
237
+ Please update your package.json as follows:
238
+ * Replace the development dependency @shopify/admin-ui-extensions-run
239
+ with @shopify/shopify-cli-extensions
240
+ * Remove the start and server script
241
+ * Add a develop script: shopify-cli-extensions develop
242
+ * Change the build script to: shopify-cli-extensions build
243
+ TEXT
244
+ checkout_post_purchase: <<~TEXT.strip,
245
+ Please update your package.json as follows:
246
+ * Replace the development dependency @shopify/checkout-ui-extensions-run
247
+ with @shopify/shopify-cli-extensions
248
+ * Remove the start and server script
249
+ * Add a develop script: shopify-cli-extensions develop
250
+ * Change the build script to: shopify-cli-extensions build
251
+ TEXT
252
+ },
253
+ },
254
+ warnings: {
255
+ resource_url_auto_generation_failed: "{{*}} {{yellow:Warning:}} Unable to auto generate " \
256
+ "the extension resource URL because %s does not have any products. " \
257
+ "Please run {{bold:shopify populate products}} to generate sample products.",
258
+ },
259
+ }
260
+
261
+ TYPES = {
262
+ product_subscription: {
263
+ name: "Product Subscription",
264
+ tagline: "(limit 1 per app)",
265
+ overrides: {
266
+ register: {
267
+ confirm_info: "You can only create one %s extension per app, which can’t be undone.",
268
+ },
269
+ },
270
+ },
271
+ checkout_post_purchase: {
272
+ name: "Checkout Post Purchase",
273
+ },
274
+ theme_app_extension: {
275
+ name: "Theme App Extension",
276
+ tagline: "(limit 1 per app)",
277
+ overrides: {
278
+ register: {
279
+ confirm_info: "You can only create one %s extension per app, which can’t be undone.",
280
+ },
281
+ create: {
282
+ ready_to_start: <<~MESSAGE,
283
+ {{v}} A new folder was generated at {{green:./%s}}.
284
+ {{*}} You’re ready to start building {{green:%s}}!
285
+ MESSAGE
286
+ },
287
+
288
+ },
289
+ },
290
+ }
291
+ end
292
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Extension
4
+ module Models
5
+ class App
6
+ include SmartProperties
7
+
8
+ property! :api_key, accepts: String
9
+ property :secret, accepts: String
10
+ property :title, accepts: String
11
+ property :business_name, accepts: String
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Extension
4
+ module Models
5
+ class DevelopmentServer
6
+ class DevelopmentServerError < StandardError; end
7
+
8
+ include SmartProperties
9
+
10
+ EXECUTABLE_DIRECTORY = File.join(ShopifyCLI::ROOT, "ext", "shopify-extensions")
11
+
12
+ property :executable, converts: :to_s
13
+
14
+ def executable
15
+ super || begin
16
+ case RbConfig::CONFIG.fetch("host_os")
17
+ when /(linux)|(darwin)/
18
+ File.join(EXECUTABLE_DIRECTORY, "shopify-extensions")
19
+ else
20
+ File.join(EXECUTABLE_DIRECTORY, "shopify-extensions.exe")
21
+ end
22
+ end
23
+ end
24
+
25
+ def executable_installed?
26
+ File.exist?(executable)
27
+ end
28
+
29
+ def create(server_config)
30
+ output, _ = CLI::Kit::System.capture2e(executable, "create", "-", stdin_data: server_config.to_yaml)
31
+ output
32
+ rescue StandardError => error
33
+ raise error
34
+ end
35
+
36
+ def build(server_config)
37
+ output, error, status = CLI::Kit::System.capture3(executable, "build", "-", stdin_data: server_config.to_yaml)
38
+ return output if status.success?
39
+ raise DevelopmentServerError, error
40
+ end
41
+
42
+ def serve(context, server_config)
43
+ CLI::Kit::System.popen3(executable, "serve", "-") do |input, out, err, status|
44
+ context.debug("Sending configuration data to extension development server …")
45
+ input << server_config.to_yaml
46
+ input.close
47
+
48
+ forward_output_to_user(out, err, context)
49
+
50
+ status.value
51
+ end
52
+ end
53
+
54
+ def version
55
+ raise NotImplementedError
56
+ end
57
+
58
+ private
59
+
60
+ def forward_output_to_user(out, err, ctx)
61
+ ctx.debug("Starting message processing threads to relay output produced by the extension development server …")
62
+
63
+ Thread.new do
64
+ while (line = out.gets)
65
+ ctx.puts(line)
66
+ end
67
+ end
68
+
69
+ Thread.new do
70
+ while (error = err.gets)
71
+ ctx.puts(error)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "shopify_cli"
4
+
5
+ module Extension
6
+ module Models
7
+ class DevelopmentServerRequirements
8
+ SUPPORTED_EXTENSION_TYPES = [
9
+ "checkout_ui_extension",
10
+ "checkout_post_purchase",
11
+ "product_subscription",
12
+ "web_pixel_extension",
13
+ "pos_ui_extension",
14
+ ]
15
+
16
+ class << self
17
+ def supported?(type)
18
+ if type_supported?(type) && beta_enabled?
19
+ return true if binary_installed?
20
+ warn_about_missing_binary
21
+ end
22
+
23
+ false
24
+ end
25
+
26
+ def beta_enabled?
27
+ ShopifyCLI::Feature.enabled?(:extension_server_beta)
28
+ end
29
+
30
+ def type_supported?(type)
31
+ SUPPORTED_EXTENSION_TYPES.include?(type.downcase)
32
+ end
33
+
34
+ private
35
+
36
+ def binary_installed?
37
+ Models::DevelopmentServer.new.executable_installed?
38
+ end
39
+
40
+ def warn_about_missing_binary
41
+ CLI::UI::Frame.open(message("errors.development_server_binary_not_found.title"), color: :yellow) do
42
+ context.puts(message("errors.development_server_binary_not_found.message"))
43
+ end
44
+ end
45
+
46
+ def message(key)
47
+ context.message(key)
48
+ end
49
+
50
+ def context
51
+ @context ||= ShopifyCLI::Context.new
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,12 @@
1
+ module Extension
2
+ module Models
3
+ class LazySpecificationHandler < ShopifyCLI::LazyDelegator
4
+ attr_reader :identifier
5
+
6
+ def initialize(identifier, &specification_handler_initializer)
7
+ super(&specification_handler_initializer)
8
+ @identifier = identifier
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,44 @@
1
+ require "semantic/semantic"
2
+
3
+ module Extension
4
+ module Models
5
+ class NpmPackage
6
+ include SmartProperties
7
+ include Comparable
8
+
9
+ property :name
10
+ property :version
11
+ property :scripts, accepts: Hash, default: -> { {} }
12
+ property :dependencies, accepts: Hash, default: -> { {} }
13
+ property :dev_dependencies, accepts: Hash, default: -> { {} }
14
+
15
+ def initialize(**config)
16
+ super(**config.select { |property_name, _| self.class.properties.key?(property_name) })
17
+ end
18
+
19
+ def self.parse(io)
20
+ ShopifyCLI::Result.call { JSON.parse(io.read) }
21
+ .then(&ShopifyCLI::TransformDataStructure.new(underscore_keys: true, symbolize_keys: true, shallow: true))
22
+ .then { |specification| new(**specification) }
23
+ .unwrap { |error| raise "Failed to parse NPM package specification: #{error}" }
24
+ end
25
+
26
+ def <=>(other)
27
+ return nil unless name == other.name
28
+ Semantic::Version.new(version) <=> Semantic::Version.new(other.version)
29
+ end
30
+
31
+ def script?(name)
32
+ scripts.key?(name)
33
+ end
34
+
35
+ def dependency?(name)
36
+ dependencies.key?(name)
37
+ end
38
+
39
+ def dev_dependency?(name)
40
+ dev_dependencies.key?(name)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Extension
4
+ module Models
5
+ class Product
6
+ include SmartProperties
7
+
8
+ property :variant_id, accepts: Integer, converts: :to_i
9
+ property :quantity, accepts: Integer, default: 1
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Extension
4
+ module Models
5
+ class Registration
6
+ MAX_TITLE_LENGTH = 50
7
+ include SmartProperties
8
+
9
+ property! :id, accepts: Integer
10
+ property! :uuid, accepts: String
11
+ property! :type, accepts: String
12
+ property! :title, accepts: String
13
+ property! :draft_version, accepts: Extension::Models::Version
14
+
15
+ def self.valid_title?(title)
16
+ !title.nil? && !title.strip.empty? && title.length <= MAX_TITLE_LENGTH
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Extension
4
+ module Models
5
+ module ServerConfig
6
+ class App < Base
7
+ include SmartProperties
8
+
9
+ property! :api_key, accepts: String
10
+ end
11
+ end
12
+ end
13
+ end