shopify-cli 0.9.1 → 1.0.2

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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +3 -0
  3. data/CHANGELOG.md +24 -2
  4. data/RELEASING.md +4 -4
  5. data/docs/_config.yml +3 -0
  6. data/docs/_data/nav.yml +9 -0
  7. data/docs/getting-started/index.md +5 -40
  8. data/docs/getting-started/install/index.md +75 -0
  9. data/docs/getting-started/migrate/index.md +96 -0
  10. data/docs/getting-started/uninstall/index.md +37 -0
  11. data/docs/getting-started/upgrade/index.md +37 -0
  12. data/docs/index.md +5 -6
  13. data/lib/project_types/extension/cli.rb +2 -1
  14. data/lib/project_types/extension/commands/tunnel.rb +1 -1
  15. data/lib/project_types/extension/forms/register.rb +2 -3
  16. data/lib/project_types/extension/graphql/get_app_by_api_key.graphql +9 -0
  17. data/lib/project_types/extension/tasks/converters/app_converter.rb +27 -0
  18. data/lib/project_types/extension/tasks/get_app.rb +22 -0
  19. data/lib/project_types/extension/tasks/get_apps.rb +1 -6
  20. data/lib/project_types/node/forms/create.rb +3 -54
  21. data/lib/project_types/node/messages/messages.rb +3 -14
  22. data/lib/project_types/rails/forms/create.rb +3 -52
  23. data/lib/project_types/rails/messages/messages.rb +2 -13
  24. data/lib/project_types/script/cli.rb +5 -5
  25. data/lib/project_types/script/commands/create.rb +5 -4
  26. data/lib/project_types/script/commands/push.rb +1 -0
  27. data/lib/project_types/script/config/extension_points.yml +3 -3
  28. data/lib/project_types/script/errors.rb +1 -0
  29. data/lib/project_types/script/forms/create.rb +8 -4
  30. data/lib/project_types/script/layers/application/build_script.rb +7 -10
  31. data/lib/project_types/script/layers/application/create_script.rb +16 -14
  32. data/lib/project_types/script/layers/application/project_dependencies.rb +3 -9
  33. data/lib/project_types/script/layers/application/push_script.rb +13 -11
  34. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +106 -0
  35. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +64 -0
  36. data/lib/project_types/script/layers/infrastructure/errors.rb +2 -2
  37. data/lib/project_types/script/layers/infrastructure/project_creator.rb +23 -0
  38. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +6 -3
  39. data/lib/project_types/script/layers/infrastructure/script_repository.rb +8 -38
  40. data/lib/project_types/script/layers/infrastructure/task_runner.rb +18 -0
  41. data/lib/project_types/script/messages/messages.rb +5 -6
  42. data/lib/project_types/script/script_project.rb +22 -9
  43. data/lib/project_types/script/templates/ts/as-pect.d.ts +1 -0
  44. data/lib/project_types/script/ui/error_handler.rb +5 -0
  45. data/lib/shopify-cli/admin_api.rb +1 -2
  46. data/lib/shopify-cli/admin_api/populate_resource_command.rb +10 -1
  47. data/lib/shopify-cli/admin_api/schema.rb +11 -1
  48. data/lib/shopify-cli/api.rb +2 -0
  49. data/lib/shopify-cli/context.rb +60 -0
  50. data/lib/shopify-cli/core/entry_point.rb +6 -0
  51. data/lib/shopify-cli/core/finalize.rb +13 -0
  52. data/lib/shopify-cli/git.rb +14 -10
  53. data/lib/shopify-cli/messages/messages.rb +22 -2
  54. data/lib/shopify-cli/tasks.rb +1 -0
  55. data/lib/shopify-cli/tasks/select_org_and_shop.rb +77 -0
  56. data/lib/shopify-cli/tunnel.rb +33 -1
  57. data/lib/shopify-cli/version.rb +1 -1
  58. data/vendor/deps/cli-ui/REVISION +1 -1
  59. data/vendor/deps/cli-ui/lib/cli/ui.rb +52 -11
  60. data/vendor/deps/cli-ui/lib/cli/ui/color.rb +11 -7
  61. data/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +34 -21
  62. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +107 -149
  63. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +99 -0
  64. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +119 -0
  65. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +158 -0
  66. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +112 -0
  67. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +9 -15
  68. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +47 -0
  69. data/vendor/deps/cli-ui/lib/cli/ui/progress.rb +9 -7
  70. data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +39 -14
  71. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +62 -44
  72. data/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +7 -2
  73. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +23 -3
  74. data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +34 -10
  75. data/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +12 -7
  76. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +26 -16
  77. data/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +3 -3
  78. data/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +75 -0
  79. data/vendor/deps/cli-ui/lib/cli/ui/widgets/base.rb +27 -0
  80. data/vendor/deps/cli-ui/lib/cli/ui/widgets/status.rb +61 -0
  81. metadata +24 -9
  82. data/lib/project_types/extension/features/tunnel_url.rb +0 -20
  83. data/lib/project_types/script/layers/infrastructure/assemblyscript_dependency_manager.rb +0 -73
  84. data/lib/project_types/script/layers/infrastructure/assemblyscript_wasm_builder.rb +0 -39
  85. data/lib/project_types/script/layers/infrastructure/dependency_manager.rb +0 -36
  86. data/lib/project_types/script/layers/infrastructure/script_builder.rb +0 -34
  87. data/lib/project_types/script/layers/infrastructure/test_suite_repository.rb +0 -59
  88. data/vendor/deps/cli-ui/lib/cli/ui/box.rb +0 -15
@@ -9,15 +9,17 @@ module Script
9
9
  class << self
10
10
  def call(ctx:, language:, script_name:, extension_point_type:)
11
11
  extension_point = ExtensionPoints.get(type: extension_point_type)
12
- create_project(ctx, language, script_name, extension_point)
13
- create_definition(ctx, language, extension_point, script_name)
12
+ project = setup_project(ctx, script_name, extension_point)
13
+ project_creator = Infrastructure::ProjectCreator
14
+ .for(ctx, language, extension_point, script_name, project.directory)
15
+ install_dependencies(ctx, language, script_name, project, project_creator)
16
+ bootstrap(ctx, project_creator)
14
17
  end
15
18
 
16
19
  private
17
20
 
18
- def create_project(ctx, language, script_name, extension_point)
19
- ScriptProject.create(script_name)
20
- ctx.root = File.join(ctx.root, script_name)
21
+ def setup_project(ctx, script_name, extension_point)
22
+ ScriptProject.create(ctx, script_name)
21
23
  ScriptProject.write(
22
24
  ctx,
23
25
  project_type: :script,
@@ -25,20 +27,20 @@ module Script
25
27
  extension_point_type: extension_point.type,
26
28
  script_name: script_name
27
29
  )
28
- ProjectDependencies
29
- .bootstrap(ctx: ctx, language: language, extension_point: extension_point, script_name: script_name)
30
- ProjectDependencies
31
- .install(ctx: ctx, language: language, extension_point: extension_point, script_name: script_name)
30
+ ScriptProject.current
32
31
  end
33
32
 
34
- def create_definition(ctx, language, extension_point, script_name)
35
- script = nil
33
+ def install_dependencies(ctx, language, script_name, project, project_creator)
34
+ task_runner = Infrastructure::TaskRunner.for(ctx, language, script_name, project.source_file)
35
+ project_creator.setup_dependencies
36
+ ProjectDependencies.install(ctx: ctx, task_runner: task_runner)
37
+ end
38
+
39
+ def bootstrap(ctx, project_creator)
36
40
  UI::StrictSpinner.spin(ctx.message('script.create.creating')) do |spinner|
37
- script = Infrastructure::ScriptRepository.new.create_script(language, extension_point, script_name)
38
- Infrastructure::TestSuiteRepository.new.create_test_suite(script)
41
+ project_creator.bootstrap
39
42
  spinner.update_title(ctx.message('script.create.created'))
40
43
  end
41
- script
42
44
  end
43
45
  end
44
46
  end
@@ -2,20 +2,14 @@ module Script
2
2
  module Layers
3
3
  module Application
4
4
  class ProjectDependencies
5
- def self.bootstrap(ctx:, language:, extension_point:, script_name:)
6
- dep_manager = Infrastructure::DependencyManager.for(ctx, language, extension_point, script_name)
7
- dep_manager.bootstrap
8
- end
9
-
10
- def self.install(ctx:, language:, extension_point:, script_name:)
11
- dep_manager = Infrastructure::DependencyManager.for(ctx, language, extension_point, script_name)
5
+ def self.install(ctx:, task_runner:)
12
6
  CLI::UI::Frame.open(ctx.message('script.project_deps.checking_with_npm')) do
13
7
  begin
14
- if dep_manager.installed?
8
+ if task_runner.dependencies_installed?
15
9
  ctx.puts(ctx.message('script.project_deps.none_required'))
16
10
  else
17
11
  UI::StrictSpinner.spin(ctx.message('script.project_deps.installing')) do |spinner|
18
- dep_manager.install
12
+ task_runner.install_dependencies
19
13
  spinner.update_title(ctx.message('script.project_deps.installed'))
20
14
  end
21
15
  end
@@ -5,21 +5,23 @@ module Script
5
5
  module Application
6
6
  class PushScript
7
7
  class << self
8
- def call(ctx:, language:, extension_point_type:, script_name:, api_key:, force:)
9
- extension_point = ExtensionPoints.get(type: extension_point_type)
10
- script = Infrastructure::ScriptRepository.new.get_script(language, extension_point_type, script_name)
11
- ProjectDependencies
12
- .install(ctx: ctx, language: language, extension_point: extension_point, script_name: script_name)
13
- BuildScript.call(ctx: ctx, script: script)
14
- push_script(ctx, script, api_key, force)
8
+ def call(ctx:, language:, extension_point_type:, script_name:, source_file:, api_key:, force:)
9
+ script = Infrastructure::ScriptRepository.new(ctx: ctx).get_script(
10
+ language,
11
+ extension_point_type,
12
+ script_name
13
+ )
14
+ task_runner = Infrastructure::TaskRunner.for(ctx, language, script_name, source_file)
15
+ ProjectDependencies.install(ctx: ctx, task_runner: task_runner)
16
+ BuildScript.call(ctx: ctx, task_runner: task_runner, script: script)
17
+ push_script(ctx, task_runner, script, api_key, force)
15
18
  end
16
19
 
17
20
  private
18
21
 
19
- def push_script(ctx, script, api_key, force)
20
- compiled_type = Infrastructure::ScriptBuilder.for(script).compiled_type
21
- Infrastructure::PushPackageRepository.new
22
- .get_push_package(script, compiled_type)
22
+ def push_script(ctx, task_runner, script, api_key, force)
23
+ Infrastructure::PushPackageRepository.new(ctx: ctx)
24
+ .get_push_package(script, task_runner.compiled_type)
23
25
  .push(Infrastructure::ScriptService.new(ctx: ctx), api_key, force)
24
26
  ctx.puts(ctx.message('script.application.pushed'))
25
27
  end
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Script
4
+ module Layers
5
+ module Infrastructure
6
+ class AssemblyScriptProjectCreator
7
+ include SmartProperties
8
+ property! :ctx, accepts: ShopifyCli::Context
9
+ property! :extension_point, accepts: Domain::ExtensionPoint
10
+ property! :script_name, accepts: String
11
+ property! :path_to_project, accepts: String
12
+
13
+ BOOTSTRAP_SRC = "npx --no-install shopify-scripts-bootstrap src %{src_base}"
14
+ BOOTSTRAP_TEST = "npx --no-install shopify-scripts-bootstrap test %{test_base}"
15
+ SOURCE_DIR = "src"
16
+ TEST_DIR = "test"
17
+ LANGUAGE = "ts"
18
+
19
+ def setup_dependencies
20
+ write_npmrc
21
+ write_package_json
22
+ end
23
+
24
+ def bootstrap
25
+ create_src_folder
26
+ create_test_folder
27
+ end
28
+
29
+ private
30
+
31
+ def create_src_folder
32
+ ctx.mkdir_p(src_base)
33
+ out, status = ctx.capture2e(format(BOOTSTRAP_SRC, src_base: src_base))
34
+ raise Domain::Errors::ServiceFailureError, out unless status.success?
35
+
36
+ write_tsconfig_file(SOURCE_DIR, ".")
37
+ end
38
+
39
+ def create_test_folder
40
+ ctx.mkdir_p(test_base)
41
+ out, status = ctx.capture2e(format(BOOTSTRAP_TEST, test_base: test_base))
42
+ raise Domain::Errors::ServiceFailureError, out unless status.success?
43
+
44
+ copy_template_file(test_base, 'as-pect.config.js')
45
+ copy_template_file(test_base, 'as-pect.d.ts')
46
+ write_tsconfig_file(TEST_DIR, "../#{SOURCE_DIR}")
47
+ end
48
+
49
+ def test_base
50
+ "#{path_to_project}/#{TEST_DIR}"
51
+ end
52
+
53
+ def src_base
54
+ "#{path_to_project}/#{SOURCE_DIR}"
55
+ end
56
+
57
+ def copy_template_file(destination, name)
58
+ template_file = Project.project_filepath("templates/#{LANGUAGE}/#{name}")
59
+ ctx.cp(template_file, "#{destination}/#{name}")
60
+ end
61
+
62
+ def write_npmrc
63
+ ctx.system(
64
+ 'npm', '--userconfig', './.npmrc', 'config', 'set', '@shopify:registry', 'https://registry.npmjs.com'
65
+ )
66
+ ctx.system(
67
+ 'npm', '--userconfig', './.npmrc', 'config', 'set', 'engine-strict', 'true'
68
+ )
69
+ end
70
+
71
+ def write_tsconfig_file(dir, path_to_source)
72
+ AssemblyScriptTsConfig
73
+ .new(dir_to_write_in: dir)
74
+ .with_extends_assemblyscript_config(relative_path_to_node_modules: ".")
75
+ .with_module_resolution_paths(paths: { "*": ["#{path_to_source}/*.ts"] })
76
+ .write
77
+ end
78
+
79
+ def write_package_json
80
+ package_json = <<~HERE
81
+ {
82
+ "name": "#{script_name}",
83
+ "version": "1.0.0",
84
+ "devDependencies": {
85
+ "@shopify/scripts-sdk-as": "#{extension_point.sdks[:ts].sdk_version}",
86
+ "@shopify/scripts-toolchain-as": "#{extension_point.sdks[:ts].toolchain_version}",
87
+ "#{extension_point.sdks[:ts].package}": "#{extension_point.sdks[:ts].version}",
88
+ "@as-pect/cli": "4.0.0",
89
+ "as-wasi": "^0.0.1",
90
+ "assemblyscript": "^0.12.0"
91
+ },
92
+ "scripts": {
93
+ "test": "asp --config test/as-pect.config.js --summary --verbose"
94
+ },
95
+ "engines": {
96
+ "node": ">=12.16"
97
+ }
98
+ }
99
+ HERE
100
+
101
+ ctx.write("package.json", package_json)
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Script
4
+ module Layers
5
+ module Infrastructure
6
+ class AssemblyScriptTaskRunner
7
+ BYTECODE_FILE = "%{name}.wasm"
8
+ SCRIPT_SDK_BUILD = "npx --no-install shopify-scripts-build --src=../%{source} --binary=#{BYTECODE_FILE} "\
9
+ "-- --lib=../node_modules --validate --optimize"
10
+
11
+ attr_reader :ctx, :script_name, :script_source_file
12
+
13
+ def initialize(ctx, script_name, script_source_file)
14
+ @ctx = ctx
15
+ @script_name = script_name
16
+ @script_source_file = script_source_file
17
+ end
18
+
19
+ def build
20
+ compile
21
+ bytecode
22
+ end
23
+
24
+ def compiled_type
25
+ "wasm"
26
+ end
27
+
28
+ def install_dependencies
29
+ check_node_version!
30
+
31
+ output, status = ctx.capture2e("npm", "install", "--no-audit", "--no-optional", "--loglevel error")
32
+ raise Errors::DependencyInstallError, output unless status.success?
33
+ end
34
+
35
+ def dependencies_installed?
36
+ # Assuming if node_modules folder exist at root of script folder, all deps are installed
37
+ ctx.dir_exist?("node_modules")
38
+ end
39
+
40
+ private
41
+
42
+ def check_node_version!
43
+ output, status = @ctx.capture2e("node", "--version")
44
+ raise Errors::DependencyInstallError, output unless status.success?
45
+
46
+ require 'semantic/semantic'
47
+ version = ::Semantic::Version.new(output[1..-1])
48
+ unless version >= ::Semantic::Version.new("12.16.0")
49
+ raise Errors::DependencyInstallError, "Node version must be >= v12.16.0. Current version: #{output.strip}."
50
+ end
51
+ end
52
+
53
+ def compile
54
+ out, status = ctx.capture2e(format(SCRIPT_SDK_BUILD, source: script_source_file, name: script_name))
55
+ raise Domain::Errors::ServiceFailureError, out unless status.success?
56
+ end
57
+
58
+ def bytecode
59
+ File.read(format(BYTECODE_FILE, name: script_name))
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -6,9 +6,7 @@ module Script
6
6
  module Errors
7
7
  class AppNotInstalledError < ScriptProjectError; end
8
8
  class AppScriptUndefinedError < ScriptProjectError; end
9
- class BuilderNotFoundError < ScriptProjectError; end
10
9
  class BuildError < ScriptProjectError; end
11
- class DependencyError < ScriptProjectError; end
12
10
  class DependencyInstallError < ScriptProjectError; end
13
11
  class ForbiddenError < ScriptProjectError; end
14
12
  class GraphqlError < ScriptProjectError
@@ -18,6 +16,7 @@ module Script
18
16
  super("GraphQL failed with errors: #{errors}")
19
17
  end
20
18
  end
19
+ class ProjectCreatorNotFoundError < ScriptProjectError; end
21
20
  class ScriptRepushError < ScriptProjectError
22
21
  attr_reader :api_key
23
22
  def initialize(api_key)
@@ -32,6 +31,7 @@ module Script
32
31
  class ShopAuthenticationError < ScriptProjectError; end
33
32
  class ShopScriptConflictError < ScriptProjectError; end
34
33
  class ShopScriptUndefinedError < ScriptProjectError; end
34
+ class TaskRunnerNotFoundError < ScriptProjectError; end
35
35
  end
36
36
  end
37
37
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Script
4
+ module Layers
5
+ module Infrastructure
6
+ class ProjectCreator
7
+ PROJECT_CREATORS = {
8
+ "ts" => Infrastructure::AssemblyScriptProjectCreator,
9
+ }
10
+
11
+ def self.for(ctx, language, extension_point, script_name, path_to_project)
12
+ raise Errors::ProjectCreatorNotFoundError unless PROJECT_CREATORS[language]
13
+ PROJECT_CREATORS[language].new(
14
+ ctx: ctx,
15
+ extension_point: extension_point,
16
+ script_name: script_name,
17
+ path_to_project: path_to_project
18
+ )
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -4,6 +4,9 @@ module Script
4
4
  module Layers
5
5
  module Infrastructure
6
6
  class PushPackageRepository
7
+ include SmartProperties
8
+ property! :ctx, accepts: ShopifyCli::Context
9
+
7
10
  def create_push_package(script, script_content, compiled_type)
8
11
  build_file_path = file_path(script.name, compiled_type)
9
12
  write_to_path(build_file_path, script_content)
@@ -19,7 +22,7 @@ module Script
19
22
  def get_push_package(script, compiled_type)
20
23
  build_file_path = file_path(script.name, compiled_type)
21
24
 
22
- raise Domain::PushPackageNotFoundError unless File.exist?(build_file_path)
25
+ raise Domain::PushPackageNotFoundError unless ctx.file_exist?(build_file_path)
23
26
 
24
27
  script_content = File.read(build_file_path)
25
28
 
@@ -34,8 +37,8 @@ module Script
34
37
  private
35
38
 
36
39
  def write_to_path(path, content)
37
- FileUtils.mkdir_p(File.dirname(path))
38
- File.write(path, content)
40
+ ctx.mkdir_p(File.dirname(path))
41
+ ctx.write(path, content)
39
42
  end
40
43
 
41
44
  def file_path(script_name, compiled_type)
@@ -4,26 +4,12 @@ module Script
4
4
  module Layers
5
5
  module Infrastructure
6
6
  class ScriptRepository
7
- BOOTSTRAP_SRC = "npx --no-install shopify-scripts-bootstrap src %{src_base}"
8
-
9
- def create_script(language, extension_point, script_name)
10
- FileUtils.mkdir_p(src_base)
11
- out, status = CLI::Kit::System.capture2e(format(BOOTSTRAP_SRC, src_base: src_base))
12
- raise Domain::Errors::ServiceFailureError, out unless status.success?
13
-
14
- write_tsconfig if language == "ts"
15
-
16
- Domain::Script.new(
17
- script_id(language),
18
- script_name,
19
- extension_point.type,
20
- language
21
- )
22
- end
7
+ include SmartProperties
8
+ property! :ctx, accepts: ShopifyCli::Context
23
9
 
24
10
  def get_script(language, extension_point_type, script_name)
25
11
  source_file_path = src_code_file(language)
26
- unless File.exist?(source_file_path)
12
+ unless ctx.file_exist?(source_file_path)
27
13
  raise Domain::Errors::ScriptNotFoundError.new(extension_point_type, source_file_path)
28
14
  end
29
15
 
@@ -33,13 +19,13 @@ module Script
33
19
  def with_temp_build_context
34
20
  prev_dir = Dir.pwd
35
21
  temp_dir = "#{project_base}/temp"
36
- FileUtils.mkdir_p(temp_dir)
37
- Dir.chdir(temp_dir)
38
- FileUtils.cp_r("#{src_base}/.", ".")
22
+ ctx.mkdir_p(temp_dir)
23
+ ctx.chdir(temp_dir)
24
+ ctx.cp_r("#{src_base}/.", ".")
39
25
  yield
40
26
  ensure
41
- Dir.chdir(prev_dir)
42
- FileUtils.rm_rf(temp_dir)
27
+ ctx.chdir(prev_dir)
28
+ ctx.rm_rf(temp_dir)
43
29
  end
44
30
 
45
31
  def relative_path_to_src
@@ -48,18 +34,6 @@ module Script
48
34
 
49
35
  private
50
36
 
51
- def write_sdk(extension_point_type, language, sdk_types)
52
- return unless language == "ts"
53
- File.write(sdk_types_file(extension_point_type, language), sdk_types)
54
- end
55
-
56
- def write_tsconfig
57
- AssemblyScriptTsConfig
58
- .new(dir_to_write_in: relative_path_to_src)
59
- .with_extends_assemblyscript_config(relative_path_to_node_modules: ".")
60
- .write
61
- end
62
-
63
37
  def project_base
64
38
  ScriptProject.current.directory
65
39
  end
@@ -79,10 +53,6 @@ module Script
79
53
  def file_name(language)
80
54
  "script.#{language}"
81
55
  end
82
-
83
- def sdk_types_file(extension_point_type, language)
84
- "#{src_base}/#{extension_point_type}.#{language}"
85
- end
86
56
  end
87
57
  end
88
58
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Script
4
+ module Layers
5
+ module Infrastructure
6
+ class TaskRunner
7
+ TASK_RUNNERS = {
8
+ "ts" => Infrastructure::AssemblyScriptTaskRunner,
9
+ }
10
+
11
+ def self.for(ctx, language, script_name, script_source_file)
12
+ raise Errors::TaskRunnerNotFoundError unless TASK_RUNNERS[language]
13
+ TASK_RUNNERS[language].new(ctx, script_name, script_source_file)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end