sewing_kit 0.130.0 → 0.130.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.
- checksums.yaml +4 -4
- data/README.md +7 -1
- data/lib/generators/sewing_kit/install_generator.rb +8 -6
- data/lib/hacks/user_agent_parser.rb +3 -3
- data/lib/sewing_kit/configuration.rb +3 -2
- data/lib/sewing_kit/rails.rb +1 -0
- data/lib/sewing_kit/railtie.rb +9 -11
- data/lib/sewing_kit/version.rb +2 -1
- data/lib/sewing_kit/webpack/compiler.rb +23 -18
- data/lib/sewing_kit/webpack/dev.rb +20 -17
- data/lib/sewing_kit/webpack/helper.rb +13 -10
- data/lib/sewing_kit/webpack/manifest/base.rb +4 -3
- data/lib/sewing_kit/webpack/manifest/development.rb +10 -9
- data/lib/sewing_kit/webpack/manifest/production.rb +7 -6
- data/lib/sewing_kit/webpack/manifest/test_with_no_assets.rb +3 -2
- data/lib/sewing_kit/webpack/manifest.rb +17 -16
- data/lib/sewing_kit/webpack/server.rb +3 -3
- data/lib/sewing_kit/webpack/webpack.rb +6 -6
- data/lib/sewing_kit.rb +1 -0
- data/lib/tasks/sewing_kit.rake +4 -3
- metadata +7 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1b4be7e61c2aec2c6298fb59b10911c320a3bdcc8f1d39ba1f20dacb24aa18d6
|
|
4
|
+
data.tar.gz: 01f90b60a90bd2b07aae4c2cca9c530f2bd4b563b4903de0ff4ff622db925782
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 53875153c6a31908a6c49d1f5b666166537bf58d020fac0b405f6b98e22aa044df7f28bf6ac61add74837324bb6910a1d36d33fd6f4fe557d3906328347b8a94
|
|
7
|
+
data.tar.gz: f1bf2019f9d98b2d6630466995c06f9c0229eb17c10dda1c499e52dc75527ad4aec04839a881e0c69667e4b0a5c0fbd16a2b3952676bb2f8b06b415233a4173d
|
data/README.md
CHANGED
|
@@ -94,7 +94,13 @@ SewingKit.configure do |config|
|
|
|
94
94
|
# Note: you *must* have a separate `yarn sewing-kit type-check` CI step for this to be viable.
|
|
95
95
|
type_check: false,
|
|
96
96
|
# Increase heap to accommodate webpack's space for source map generation
|
|
97
|
-
heap: 2000
|
|
97
|
+
heap: 2000,
|
|
98
|
+
# Overrides ShopifyCloud's configuration for the assets directory.
|
|
99
|
+
# By default, when using the ShopifyCloud gem, assets are served from the CDN
|
|
100
|
+
# - when `asset_directory` is not specified, it defaults to: `ShopifyCloud::AssetUploader.asset_directory`
|
|
101
|
+
# - when specified, the asset path will be `https://cdn.shopify.com/shopifycloud/${assetDirectory}/bundles`
|
|
102
|
+
# - lastly, set it to `false` to disable serving assets from the CDN altogether
|
|
103
|
+
asset_directory: "foobar"
|
|
98
104
|
}
|
|
99
105
|
end
|
|
100
106
|
```
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module SewingKit
|
|
4
4
|
class InstallGenerator < Rails::Generators::Base
|
|
5
|
-
source_root File.expand_path(
|
|
5
|
+
source_root File.expand_path("templates", __dir__)
|
|
6
6
|
|
|
7
7
|
desc "Adds the configuration files for a sewing-kit powered front-end."
|
|
8
8
|
|
|
9
9
|
class_option :skip_yarn, type: :boolean, default: false
|
|
10
|
-
class_option :javascript_path, type: :string, default:
|
|
10
|
+
class_option :javascript_path, type: :string, default: "app/ui"
|
|
11
11
|
|
|
12
12
|
# We don't specify a default here because we want to fallback dynamically
|
|
13
13
|
class_option :uses_dev, type: :boolean
|
|
@@ -39,9 +39,11 @@ module SewingKit
|
|
|
39
39
|
|
|
40
40
|
def install_js_dependencies
|
|
41
41
|
return if options.skip_yarn?
|
|
42
|
+
|
|
42
43
|
say("Installing javascript dependencies")
|
|
43
|
-
|
|
44
|
-
system("yarn add typescript")
|
|
44
|
+
# rubocop:disable Layout/LineLength
|
|
45
|
+
system("yarn add @shopify/sewing-kit @shopify/eslint-plugin @shopify/stylelint-plugin @shopify/prettier-config @shopify/typescript-configs typescript")
|
|
46
|
+
# rubocop:enable Layout/LineLength
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
class Project
|
|
@@ -50,11 +52,11 @@ module SewingKit
|
|
|
50
52
|
end
|
|
51
53
|
|
|
52
54
|
def self.uses_dev?
|
|
53
|
-
File.exist?(
|
|
55
|
+
File.exist?("dev.yml")
|
|
54
56
|
end
|
|
55
57
|
|
|
56
58
|
def self.uses_webpacker?
|
|
57
|
-
File.exist?(
|
|
59
|
+
File.exist?("config/webpacker.yml")
|
|
58
60
|
end
|
|
59
61
|
end
|
|
60
62
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "yaml"
|
|
4
4
|
|
|
5
5
|
# 🐵 patches eager-loading and cacheing of the default user_agent patterns
|
|
6
6
|
# PR to add the functionality for reals: https://github.com/ua-parser/uap-ruby/pull/56
|
|
@@ -25,11 +25,11 @@ module UserAgentParser
|
|
|
25
25
|
# Parse all the regexs
|
|
26
26
|
yml.each_pair do |_type, patterns|
|
|
27
27
|
patterns.each do |pattern|
|
|
28
|
-
pattern[:regex] = Regexp.new(pattern[
|
|
28
|
+
pattern[:regex] = Regexp.new(pattern["regex"], pattern["regex_flag"] == "i")
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
[yml[
|
|
32
|
+
[yml["user_agent_parsers"], yml["os_parsers"], yml["device_parsers"]]
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module SewingKit
|
|
3
4
|
class Configuration
|
|
4
5
|
attr_accessor :development_options, :build_options, :dev_server_sewing_kit_bin, :manifest_name,
|
|
@@ -25,9 +26,9 @@ module SewingKit
|
|
|
25
26
|
def initialize
|
|
26
27
|
@build_options = nil
|
|
27
28
|
@development_options = {}
|
|
28
|
-
@manifest_name =
|
|
29
|
+
@manifest_name = "sewing-kit-manifest.json"
|
|
29
30
|
@manifest_path = nil
|
|
30
|
-
@dev_server_sewing_kit_bin =
|
|
31
|
+
@dev_server_sewing_kit_bin = "node_modules/.bin/sewing-kit"
|
|
31
32
|
@log_level = :inherit
|
|
32
33
|
self.test_manifest_mode = :return_no_assets
|
|
33
34
|
end
|
data/lib/sewing_kit/rails.rb
CHANGED
data/lib/sewing_kit/railtie.rb
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
require 'rails'
|
|
3
|
-
require 'rails/railtie'
|
|
4
2
|
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
|
|
8
|
-
require
|
|
3
|
+
require "rails"
|
|
4
|
+
require "rails/railtie"
|
|
5
|
+
|
|
6
|
+
require "sewing_kit/webpack/compiler"
|
|
7
|
+
require "sewing_kit/webpack/helper"
|
|
8
|
+
require "sewing_kit/webpack/dev"
|
|
9
|
+
require "sewing_kit/webpack/server"
|
|
9
10
|
|
|
10
11
|
module SewingKit
|
|
11
12
|
class Railtie < ::Rails::Railtie
|
|
12
|
-
# rubocop:disable Metrics/BlockLength
|
|
13
13
|
config.after_initialize do
|
|
14
|
-
is_development = Rails.env.development? && ENV[
|
|
15
|
-
if is_development && (Rails.const_defined?(:Server) || ENV[
|
|
14
|
+
is_development = Rails.env.development? && ENV["SK_SIMULATE_PRODUCTION"] != "1"
|
|
15
|
+
if is_development && (Rails.const_defined?(:Server) || ENV["SK_FORCE_DEV_SERVER"])
|
|
16
16
|
webpack_dev = SewingKit::Webpack::Dev.new
|
|
17
17
|
webpack_dev.start
|
|
18
18
|
end
|
|
@@ -25,8 +25,6 @@ module SewingKit
|
|
|
25
25
|
include SewingKit::Webpack::Helper
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
|
-
# rubocop:enable Metrics/BlockLength
|
|
29
|
-
|
|
30
28
|
rake_tasks do
|
|
31
29
|
load "tasks/sewing_kit.rake"
|
|
32
30
|
end
|
data/lib/sewing_kit/version.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
require "sewing_kit/webpack/webpack"
|
|
3
4
|
|
|
4
5
|
module SewingKit
|
|
5
6
|
module Webpack
|
|
@@ -19,7 +20,7 @@ module SewingKit
|
|
|
19
20
|
|
|
20
21
|
def compile
|
|
21
22
|
raise NodeNotInstalled unless node_installed?
|
|
22
|
-
raise NodeSewingKitNotRunnable, node_env unless File.exist?(
|
|
23
|
+
raise NodeSewingKitNotRunnable, node_env unless File.exist?("node_modules/.bin/sewing-kit")
|
|
23
24
|
|
|
24
25
|
result = Kernel.system(
|
|
25
26
|
environment,
|
|
@@ -40,38 +41,42 @@ module SewingKit
|
|
|
40
41
|
|
|
41
42
|
def command
|
|
42
43
|
[
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
"node_modules/.bin/sewing-kit",
|
|
45
|
+
"build",
|
|
46
|
+
"--mode",
|
|
46
47
|
node_env,
|
|
47
48
|
].concat(options).reject(&:empty?)
|
|
48
49
|
end
|
|
49
50
|
|
|
50
51
|
def environment
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if defined?(ShopifyCloud)
|
|
56
|
-
environment['SK_ASSET_DIR'] = ShopifyCloud::AssetUploader.asset_directory
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
environment
|
|
52
|
+
{
|
|
53
|
+
"NODE_ENV" => node_env,
|
|
54
|
+
"SK_ASSET_DIR" => asset_dir,
|
|
55
|
+
}.filter { |_, v| v }
|
|
60
56
|
end
|
|
61
57
|
|
|
62
58
|
def node_env
|
|
63
|
-
ENV[
|
|
59
|
+
ENV["NODE_ENV"] || Rails.env.to_s
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def asset_dir
|
|
63
|
+
directory = SewingKit.configuration.build_options&.dig(:asset_directory)
|
|
64
|
+
|
|
65
|
+
return nil if directory == false
|
|
66
|
+
return ShopifyCloud::AssetUploader.asset_directory if directory.nil? && defined?(ShopifyCloud)
|
|
67
|
+
|
|
68
|
+
directory
|
|
64
69
|
end
|
|
65
70
|
|
|
66
71
|
def options
|
|
67
|
-
build_options = SewingKit.configuration.build_options
|
|
72
|
+
build_options = SewingKit.configuration.build_options&.except(:asset_directory)
|
|
68
73
|
return [] unless build_options
|
|
69
74
|
|
|
70
|
-
build_options.map { |key, value| ["--#{key.to_s.tr(
|
|
75
|
+
build_options.map { |key, value| ["--#{key.to_s.tr("_", "-")}", value.to_s] }.flatten
|
|
71
76
|
end
|
|
72
77
|
|
|
73
78
|
def node_installed?
|
|
74
|
-
Kernel.system(
|
|
79
|
+
Kernel.system("node --version")
|
|
75
80
|
end
|
|
76
81
|
end
|
|
77
82
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
require "English"
|
|
3
4
|
|
|
4
5
|
module SewingKit
|
|
5
6
|
module Webpack
|
|
@@ -8,7 +9,7 @@ module SewingKit
|
|
|
8
9
|
def initialize
|
|
9
10
|
super(
|
|
10
11
|
"sewing-kit is not installed. " \
|
|
11
|
-
|
|
12
|
+
"Try `yarn add @shopify/sewing-kit`"
|
|
12
13
|
)
|
|
13
14
|
end
|
|
14
15
|
end
|
|
@@ -26,10 +27,10 @@ module SewingKit
|
|
|
26
27
|
def spawn
|
|
27
28
|
Kernel.spawn(
|
|
28
29
|
{
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
"NODE_ENV" => "development",
|
|
31
|
+
"BLUEBIRD_DEBUG" => "0",
|
|
32
|
+
"BLUEBIRD_LONG_STACK_TRACES" => "0",
|
|
33
|
+
"FORCE_COLOR" => "true",
|
|
33
34
|
},
|
|
34
35
|
command,
|
|
35
36
|
chdir: Rails.root.to_s,
|
|
@@ -40,7 +41,8 @@ module SewingKit
|
|
|
40
41
|
|
|
41
42
|
def handle_exit
|
|
42
43
|
return if $ERROR_INFO.nil?
|
|
43
|
-
|
|
44
|
+
|
|
45
|
+
Process.kill("SIGTERM", pid)
|
|
44
46
|
rescue Errno::ESRCH
|
|
45
47
|
nil
|
|
46
48
|
end
|
|
@@ -51,19 +53,19 @@ module SewingKit
|
|
|
51
53
|
|
|
52
54
|
def command
|
|
53
55
|
command_list = [
|
|
54
|
-
|
|
56
|
+
"node",
|
|
55
57
|
heap_config,
|
|
56
58
|
sewing_kit_bin,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
"dev",
|
|
60
|
+
"--log-level",
|
|
59
61
|
log_level,
|
|
60
62
|
].compact.concat(options)
|
|
61
63
|
|
|
62
64
|
if debug_mode?
|
|
63
|
-
command_list.push([
|
|
65
|
+
command_list.push(["--debug"])
|
|
64
66
|
end
|
|
65
67
|
|
|
66
|
-
command_list.join(
|
|
68
|
+
command_list.join(" ")
|
|
67
69
|
end
|
|
68
70
|
|
|
69
71
|
def heap_config
|
|
@@ -74,6 +76,7 @@ module SewingKit
|
|
|
74
76
|
def sewing_kit_bin
|
|
75
77
|
bin = SewingKit.configuration.dev_server_sewing_kit_bin
|
|
76
78
|
raise NodeSewingKitNotInstalled unless File.exist?(bin)
|
|
79
|
+
|
|
77
80
|
bin
|
|
78
81
|
end
|
|
79
82
|
|
|
@@ -91,7 +94,7 @@ module SewingKit
|
|
|
91
94
|
|
|
92
95
|
development_options
|
|
93
96
|
.reject { |key| key == :heap }
|
|
94
|
-
.map { |key, value| ["--#{key.to_s.tr(
|
|
97
|
+
.map { |key, value| ["--#{key.to_s.tr("_", "-")}", value.to_s] }.flatten + focus.flatten
|
|
95
98
|
end
|
|
96
99
|
|
|
97
100
|
def log_level_from_rails
|
|
@@ -108,14 +111,14 @@ module SewingKit
|
|
|
108
111
|
end
|
|
109
112
|
|
|
110
113
|
def debug_mode?
|
|
111
|
-
!ENV[
|
|
114
|
+
!ENV["SK_DEBUG"].nil?
|
|
112
115
|
end
|
|
113
116
|
|
|
114
117
|
def focus_sections
|
|
115
|
-
return [] if ENV[
|
|
118
|
+
return [] if ENV["SK_FOCUS"].nil?
|
|
116
119
|
|
|
117
|
-
ENV[
|
|
118
|
-
.split(
|
|
120
|
+
ENV["SK_FOCUS"]
|
|
121
|
+
.split(",")
|
|
119
122
|
.map { |section| ["--focus", section] }
|
|
120
123
|
end
|
|
121
124
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require
|
|
2
|
+
|
|
3
|
+
require "base64"
|
|
4
|
+
require "sewing_kit/webpack/manifest"
|
|
4
5
|
|
|
5
6
|
module SewingKit
|
|
6
7
|
module Webpack
|
|
@@ -10,8 +11,8 @@ module SewingKit
|
|
|
10
11
|
|
|
11
12
|
Asset = Struct.new(:path, :integrity)
|
|
12
13
|
|
|
13
|
-
def sewing_kit_assets(entrypoint_name, extension:
|
|
14
|
-
return
|
|
14
|
+
def sewing_kit_assets(entrypoint_name, extension: "js")
|
|
15
|
+
return "" unless entrypoint_name.present?
|
|
15
16
|
|
|
16
17
|
assets = SewingKit::Webpack::Manifest.asset_dependencies(entrypoint_name, request.user_agent)
|
|
17
18
|
|
|
@@ -20,7 +21,7 @@ module SewingKit
|
|
|
20
21
|
|
|
21
22
|
dependencies = assets[extension]
|
|
22
23
|
dependencies.map do |raw_asset|
|
|
23
|
-
Asset.new(raw_asset[
|
|
24
|
+
Asset.new(raw_asset["path"], raw_asset["integrity"])
|
|
24
25
|
end
|
|
25
26
|
end
|
|
26
27
|
|
|
@@ -28,7 +29,8 @@ module SewingKit
|
|
|
28
29
|
options = assets.extract_options!
|
|
29
30
|
|
|
30
31
|
tags = assets.uniq.map do |asset|
|
|
31
|
-
next
|
|
32
|
+
next "" if asset.path == ""
|
|
33
|
+
|
|
32
34
|
create_asset_tag(:link, asset, options)
|
|
33
35
|
end
|
|
34
36
|
|
|
@@ -38,7 +40,7 @@ module SewingKit
|
|
|
38
40
|
def sewing_kit_script_tag(*assets)
|
|
39
41
|
options = assets.extract_options!
|
|
40
42
|
tags = assets.map do |asset|
|
|
41
|
-
next
|
|
43
|
+
next "" if asset.path == ""
|
|
42
44
|
|
|
43
45
|
create_asset_tag(:script, asset, options)
|
|
44
46
|
end
|
|
@@ -65,14 +67,15 @@ module SewingKit
|
|
|
65
67
|
|
|
66
68
|
case tag_type
|
|
67
69
|
when :script
|
|
68
|
-
content_tag(:script,
|
|
70
|
+
content_tag(:script, "", options.reverse_merge(src: asset.path))
|
|
69
71
|
when :link
|
|
70
|
-
tag(:link, options.reverse_merge(href: asset.path, rel:
|
|
72
|
+
tag(:link, options.reverse_merge(href: asset.path, rel: "stylesheet"))
|
|
71
73
|
end
|
|
72
74
|
end
|
|
73
75
|
|
|
74
76
|
def serve_development_assets?
|
|
75
|
-
return false if ENV[
|
|
77
|
+
return false if ENV["SK_SIMULATE_PRODUCTION"] == "1"
|
|
78
|
+
|
|
76
79
|
Rails.env.development?
|
|
77
80
|
end
|
|
78
81
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
require "sewing_kit/webpack/webpack"
|
|
3
4
|
|
|
4
5
|
module SewingKit
|
|
5
6
|
module Webpack
|
|
@@ -18,7 +19,7 @@ module SewingKit
|
|
|
18
19
|
|
|
19
20
|
if current_metadata.is_a?(Array)
|
|
20
21
|
all_assets = current_metadata.flat_map do |data|
|
|
21
|
-
data[
|
|
22
|
+
data["assets"]["all"].values
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
# sewing-kit asset manifests return a numerically indexed hash, not a true array,
|
|
@@ -31,7 +32,7 @@ module SewingKit
|
|
|
31
32
|
"all" => asset_hash,
|
|
32
33
|
}
|
|
33
34
|
else
|
|
34
|
-
current_metadata[
|
|
35
|
+
current_metadata["assets"]
|
|
35
36
|
end
|
|
36
37
|
end
|
|
37
38
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
require "sewing_kit/webpack/manifest/base"
|
|
3
4
|
|
|
4
5
|
module SewingKit
|
|
5
6
|
module Webpack
|
|
@@ -11,15 +12,15 @@ module SewingKit
|
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def asset_bundle_name(_user_agent)
|
|
14
|
-
|
|
15
|
+
"dev"
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def asset_dependencies(entrypoint_name, _user_agent)
|
|
18
19
|
current_metadata = metadata
|
|
19
|
-
if current_metadata.key?(
|
|
20
|
-
current_metadata[
|
|
20
|
+
if current_metadata.key?("development")
|
|
21
|
+
current_metadata["development"]["hangTight"]
|
|
21
22
|
else
|
|
22
|
-
current_metadata[
|
|
23
|
+
current_metadata["entrypoints"][entrypoint_name]
|
|
23
24
|
end
|
|
24
25
|
end
|
|
25
26
|
|
|
@@ -52,7 +53,7 @@ module SewingKit
|
|
|
52
53
|
result = load_metadata_from_node
|
|
53
54
|
|
|
54
55
|
metadata = normalize_metadata(result)
|
|
55
|
-
@metadata_path = metadata && metadata[
|
|
56
|
+
@metadata_path = metadata && metadata["path"]
|
|
56
57
|
metadata
|
|
57
58
|
end
|
|
58
59
|
|
|
@@ -69,10 +70,10 @@ module SewingKit
|
|
|
69
70
|
def load_metadata_from_node
|
|
70
71
|
begin
|
|
71
72
|
stdout, stderr, status = Open3.capture3(
|
|
72
|
-
|
|
73
|
+
"node_modules/.bin/sewing-kit", "manifest", "--mode=development"
|
|
73
74
|
)
|
|
74
75
|
rescue => e
|
|
75
|
-
raise NodeSewingKitNotRunnable.new(
|
|
76
|
+
raise NodeSewingKitNotRunnable.new("development", e)
|
|
76
77
|
end
|
|
77
78
|
|
|
78
79
|
raise NodeSewingKitManifestMissing, stderr unless status.success?
|
|
@@ -84,7 +85,7 @@ module SewingKit
|
|
|
84
85
|
class OnlyUseInProductionError < StandardError
|
|
85
86
|
def initialize
|
|
86
87
|
super("The SewingKit::Webpack::Manifest#manifest is intended "\
|
|
87
|
-
|
|
88
|
+
"for deploying assets to a CDN. Do not use it in development.")
|
|
88
89
|
end
|
|
89
90
|
end
|
|
90
91
|
end
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require
|
|
4
|
-
require
|
|
2
|
+
|
|
3
|
+
require "sewing_kit/webpack/manifest/base"
|
|
4
|
+
require "benchmark"
|
|
5
|
+
require "browserslist_useragent"
|
|
5
6
|
|
|
6
7
|
module SewingKit
|
|
7
8
|
module Webpack
|
|
@@ -15,12 +16,12 @@ module SewingKit
|
|
|
15
16
|
|
|
16
17
|
def asset_bundle_name(user_agent)
|
|
17
18
|
manifest = metadata_for(user_agent)
|
|
18
|
-
manifest[
|
|
19
|
+
manifest["identifier"] && manifest["identifier"]["target"] || manifest["name"]
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
# :nodoc:
|
|
22
23
|
def asset_dependencies(entrypoint_name, user_agent)
|
|
23
|
-
metadata_for(user_agent)[
|
|
24
|
+
metadata_for(user_agent)["entrypoints"][entrypoint_name]
|
|
24
25
|
end
|
|
25
26
|
|
|
26
27
|
def metadata
|
|
@@ -75,7 +76,7 @@ module SewingKit
|
|
|
75
76
|
def path
|
|
76
77
|
return SewingKit.configuration.manifest_path unless SewingKit.configuration.manifest_path.nil?
|
|
77
78
|
|
|
78
|
-
File.join(Rails.root,
|
|
79
|
+
File.join(Rails.root, "public", "bundles", SewingKit.configuration.manifest_name)
|
|
79
80
|
end
|
|
80
81
|
end
|
|
81
82
|
end
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
require "sewing_kit/webpack/manifest/base"
|
|
3
4
|
|
|
4
5
|
module SewingKit
|
|
5
6
|
module Webpack
|
|
6
7
|
class Manifest
|
|
7
8
|
class TestWithNoAssets < Base
|
|
8
9
|
def asset_bundle_name(_user_agent)
|
|
9
|
-
|
|
10
|
+
"test"
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def asset_dependencies(_entrypoint_name, _user_agent)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require
|
|
2
|
+
|
|
3
|
+
require "open3"
|
|
4
|
+
require "uri"
|
|
4
5
|
|
|
5
6
|
module SewingKit
|
|
6
7
|
module Webpack
|
|
@@ -10,13 +11,13 @@ module SewingKit
|
|
|
10
11
|
def initialize(node_error_message)
|
|
11
12
|
super(
|
|
12
13
|
"Could not fetch the sewing-kit manifest 🙀 \n" \
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
"Possible next steps:\n" \
|
|
15
|
+
" - If the server is still starting up, wait for a " \
|
|
16
|
+
"'Compiled with latest changes' message then refresh your browser\n" \
|
|
17
|
+
" - Check the development console for compilation errors\n" \
|
|
18
|
+
" - Restart your development server\n" \
|
|
19
|
+
"\n" \
|
|
20
|
+
"Original error #{node_error_message}"
|
|
20
21
|
)
|
|
21
22
|
end
|
|
22
23
|
end
|
|
@@ -56,7 +57,7 @@ module SewingKit
|
|
|
56
57
|
def instance
|
|
57
58
|
return Production.new if simulate_production?
|
|
58
59
|
|
|
59
|
-
@instance ||= if mode ==
|
|
60
|
+
@instance ||= if mode == "development"
|
|
60
61
|
Development.new
|
|
61
62
|
elsif skip_assets?
|
|
62
63
|
TestWithNoAssets.new
|
|
@@ -68,21 +69,21 @@ module SewingKit
|
|
|
68
69
|
private
|
|
69
70
|
|
|
70
71
|
def mode
|
|
71
|
-
ENV[
|
|
72
|
+
ENV["NODE_ENV"] || Rails.env.to_s
|
|
72
73
|
end
|
|
73
74
|
|
|
74
75
|
def skip_assets?
|
|
75
|
-
mode ==
|
|
76
|
+
mode == "test" && SewingKit.configuration.test_manifest_mode == :return_no_assets
|
|
76
77
|
end
|
|
77
78
|
|
|
78
79
|
def simulate_production?
|
|
79
|
-
ENV[
|
|
80
|
+
ENV["SK_SIMULATE_PRODUCTION"] == "1" || ENV["SK_SIMULATE_PRODUCTION"] == "true"
|
|
80
81
|
end
|
|
81
82
|
end
|
|
82
83
|
end
|
|
83
84
|
end
|
|
84
85
|
end
|
|
85
86
|
|
|
86
|
-
require
|
|
87
|
-
require
|
|
88
|
-
require
|
|
87
|
+
require "sewing_kit/webpack/manifest/development"
|
|
88
|
+
require "sewing_kit/webpack/manifest/production"
|
|
89
|
+
require "sewing_kit/webpack/manifest/test_with_no_assets"
|
|
@@ -34,15 +34,15 @@ module SewingKit
|
|
|
34
34
|
|
|
35
35
|
def command
|
|
36
36
|
command_list = [
|
|
37
|
-
|
|
37
|
+
"node",
|
|
38
38
|
default_entrypoint,
|
|
39
39
|
].compact
|
|
40
40
|
|
|
41
|
-
command_list.join(
|
|
41
|
+
command_list.join(" ")
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def default_entrypoint
|
|
45
|
-
|
|
45
|
+
"build/server/main.js"
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
end
|
|
@@ -5,19 +5,19 @@ module SewingKit
|
|
|
5
5
|
# Raised if the node sewing-kit isn't installed/runnable.
|
|
6
6
|
class NodeSewingKitNotRunnable < StandardError
|
|
7
7
|
def initialize(mode, cause = nil)
|
|
8
|
-
env_message = if
|
|
8
|
+
env_message = if "development" == mode
|
|
9
9
|
"Try `yarn add @shopify/sewing-kit`"
|
|
10
10
|
else
|
|
11
11
|
"\nIf this is a container build, try:\n" \
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
" - Adding #{highlight("https://github.com/heroku/heroku-buildpack-nodejs")} to your " \
|
|
13
|
+
"#{highlight(".buildpacks")} file\n" \
|
|
14
|
+
" - Adding #{highlight("YARN_PRODUCTION=false")} to your pipeline's environment variables\n" \
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
super(
|
|
18
18
|
"sewing-kit is not runnable.\n" \
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
"#{env_message}\n" +
|
|
20
|
+
(cause ? "Original error #{cause}" : "")
|
|
21
21
|
)
|
|
22
22
|
end
|
|
23
23
|
|
data/lib/sewing_kit.rb
CHANGED
data/lib/tasks/sewing_kit.rake
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
TEMPLATE_PATH = File.expand_path("../install/template.rb", File.dirname(__FILE__))
|
|
3
4
|
|
|
4
5
|
namespace :sewing_kit do
|
|
@@ -24,13 +25,13 @@ end
|
|
|
24
25
|
|
|
25
26
|
if Rake::Task.task_defined?("assets:precompile")
|
|
26
27
|
Rake::Task["assets:precompile"].enhance do
|
|
27
|
-
Rake::Task[
|
|
28
|
+
Rake::Task["sewing_kit:build"].invoke
|
|
28
29
|
end
|
|
29
30
|
else
|
|
30
|
-
Rake::Task.define_task("assets:precompile" =>
|
|
31
|
+
Rake::Task.define_task("assets:precompile" => ["sewing_kit:build"])
|
|
31
32
|
end
|
|
32
33
|
|
|
33
|
-
unless Rake::Task.task_defined?(
|
|
34
|
+
unless Rake::Task.task_defined?("assets:clean")
|
|
34
35
|
namespace :assets do
|
|
35
36
|
task :clean do
|
|
36
37
|
# This empty task is to offer the same interface than sprockets and webpacker
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sewing_kit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.130.
|
|
4
|
+
version: 0.130.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Sauve
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-04-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: railties
|
|
@@ -72,14 +72,14 @@ dependencies:
|
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: '1.28'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
82
|
+
version: '1.28'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: rubocop-git
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -100,14 +100,14 @@ dependencies:
|
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
103
|
+
version: '2.5'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
110
|
+
version: '2.5'
|
|
111
111
|
description:
|
|
112
112
|
email:
|
|
113
113
|
- chris.sauve@shopify.com
|
|
@@ -162,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
162
162
|
- !ruby/object:Gem::Version
|
|
163
163
|
version: '0'
|
|
164
164
|
requirements: []
|
|
165
|
-
rubygems_version: 3.
|
|
165
|
+
rubygems_version: 3.4.10
|
|
166
166
|
signing_key:
|
|
167
167
|
specification_version: 4
|
|
168
168
|
summary: Shopify's modern front-end tooling, nicely packaged for Rails
|