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.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +3 -0
- data/CHANGELOG.md +24 -2
- data/RELEASING.md +4 -4
- data/docs/_config.yml +3 -0
- data/docs/_data/nav.yml +9 -0
- data/docs/getting-started/index.md +5 -40
- data/docs/getting-started/install/index.md +75 -0
- data/docs/getting-started/migrate/index.md +96 -0
- data/docs/getting-started/uninstall/index.md +37 -0
- data/docs/getting-started/upgrade/index.md +37 -0
- data/docs/index.md +5 -6
- data/lib/project_types/extension/cli.rb +2 -1
- data/lib/project_types/extension/commands/tunnel.rb +1 -1
- data/lib/project_types/extension/forms/register.rb +2 -3
- data/lib/project_types/extension/graphql/get_app_by_api_key.graphql +9 -0
- data/lib/project_types/extension/tasks/converters/app_converter.rb +27 -0
- data/lib/project_types/extension/tasks/get_app.rb +22 -0
- data/lib/project_types/extension/tasks/get_apps.rb +1 -6
- data/lib/project_types/node/forms/create.rb +3 -54
- data/lib/project_types/node/messages/messages.rb +3 -14
- data/lib/project_types/rails/forms/create.rb +3 -52
- data/lib/project_types/rails/messages/messages.rb +2 -13
- data/lib/project_types/script/cli.rb +5 -5
- data/lib/project_types/script/commands/create.rb +5 -4
- data/lib/project_types/script/commands/push.rb +1 -0
- data/lib/project_types/script/config/extension_points.yml +3 -3
- data/lib/project_types/script/errors.rb +1 -0
- data/lib/project_types/script/forms/create.rb +8 -4
- data/lib/project_types/script/layers/application/build_script.rb +7 -10
- data/lib/project_types/script/layers/application/create_script.rb +16 -14
- data/lib/project_types/script/layers/application/project_dependencies.rb +3 -9
- data/lib/project_types/script/layers/application/push_script.rb +13 -11
- data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +106 -0
- data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +64 -0
- data/lib/project_types/script/layers/infrastructure/errors.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/project_creator.rb +23 -0
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +6 -3
- data/lib/project_types/script/layers/infrastructure/script_repository.rb +8 -38
- data/lib/project_types/script/layers/infrastructure/task_runner.rb +18 -0
- data/lib/project_types/script/messages/messages.rb +5 -6
- data/lib/project_types/script/script_project.rb +22 -9
- data/lib/project_types/script/templates/ts/as-pect.d.ts +1 -0
- data/lib/project_types/script/ui/error_handler.rb +5 -0
- data/lib/shopify-cli/admin_api.rb +1 -2
- data/lib/shopify-cli/admin_api/populate_resource_command.rb +10 -1
- data/lib/shopify-cli/admin_api/schema.rb +11 -1
- data/lib/shopify-cli/api.rb +2 -0
- data/lib/shopify-cli/context.rb +60 -0
- data/lib/shopify-cli/core/entry_point.rb +6 -0
- data/lib/shopify-cli/core/finalize.rb +13 -0
- data/lib/shopify-cli/git.rb +14 -10
- data/lib/shopify-cli/messages/messages.rb +22 -2
- data/lib/shopify-cli/tasks.rb +1 -0
- data/lib/shopify-cli/tasks/select_org_and_shop.rb +77 -0
- data/lib/shopify-cli/tunnel.rb +33 -1
- data/lib/shopify-cli/version.rb +1 -1
- data/vendor/deps/cli-ui/REVISION +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui.rb +52 -11
- data/vendor/deps/cli-ui/lib/cli/ui/color.rb +11 -7
- data/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +34 -21
- data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +107 -149
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +99 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +119 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +158 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +112 -0
- data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +9 -15
- data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +47 -0
- data/vendor/deps/cli-ui/lib/cli/ui/progress.rb +9 -7
- data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +39 -14
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +62 -44
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +7 -2
- data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +23 -3
- data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +34 -10
- data/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +12 -7
- data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +26 -16
- data/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +3 -3
- data/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +75 -0
- data/vendor/deps/cli-ui/lib/cli/ui/widgets/base.rb +27 -0
- data/vendor/deps/cli-ui/lib/cli/ui/widgets/status.rb +61 -0
- metadata +24 -9
- data/lib/project_types/extension/features/tunnel_url.rb +0 -20
- data/lib/project_types/script/layers/infrastructure/assemblyscript_dependency_manager.rb +0 -73
- data/lib/project_types/script/layers/infrastructure/assemblyscript_wasm_builder.rb +0 -39
- data/lib/project_types/script/layers/infrastructure/dependency_manager.rb +0 -36
- data/lib/project_types/script/layers/infrastructure/script_builder.rb +0 -34
- data/lib/project_types/script/layers/infrastructure/test_suite_repository.rb +0 -59
- 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
|
-
|
|
13
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
35
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
21
|
-
|
|
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
|
|
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
|
-
|
|
38
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
22
|
+
ctx.mkdir_p(temp_dir)
|
|
23
|
+
ctx.chdir(temp_dir)
|
|
24
|
+
ctx.cp_r("#{src_base}/.", ".")
|
|
39
25
|
yield
|
|
40
26
|
ensure
|
|
41
|
-
|
|
42
|
-
|
|
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
|