sewing_kit 0.8.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +2 -2
 - data/lib/sewing_kit/version.rb +1 -1
 - data/lib/sewing_kit/webpack/helper.rb +31 -41
 - data/lib/sewing_kit/webpack/manifest.rb +5 -3
 - data/lib/sewing_kit/webpack/manifest/base.rb +4 -4
 - data/lib/sewing_kit/webpack/manifest/development.rb +6 -0
 - data/lib/sewing_kit/webpack/manifest/production.rb +1 -1
 - metadata +1 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 767dcb5c1f9643937e519b07940c286ef42c1c6a
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 3744a04508c81a91b90bdf72d5d0f43eb5ee17e8
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: deaefac1ed2b3d39f233bdfbaa6d23c7fa32f8a8d827878d1b416e26782f5f5d42fde18487a733653d570d4f293a3747230a90c28601f9c2602e0a43c0885534
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: c1b7e41ef24ba24aff7d0812b3da10b879c4618e991266d8c58674ec67cf039058339f9dc0a2149a89f7f9d2d74d011fb57eb5f76db19c642775f5ee0dc9c832
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -28,8 +28,8 @@ sewing_kit looks for JavaScript in `app/ui/index.js`.  The code in `index.js` (a 
     | 
|
| 
       28 
28 
     | 
    
         
             
            The `main` bundle is imported into `erb` files using Rails helpers:
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
            ```erb
         
     | 
| 
       31 
     | 
    
         
            -
            <%= sewing_kit_link_tag * 
     | 
| 
       32 
     | 
    
         
            -
            <%= sewing_kit_script_tag * 
     | 
| 
      
 31 
     | 
    
         
            +
            <%= sewing_kit_link_tag *sewing_kit_assets('main') %>
         
     | 
| 
      
 32 
     | 
    
         
            +
            <%= sewing_kit_script_tag *sewing_kit_assets('main') %>
         
     | 
| 
       33 
33 
     | 
    
         
             
            ```
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
            **Note:** CSS `<link>` tags appear only in production; in development, CSS is embedded within the `main.js` bundle.
         
     | 
    
        data/lib/sewing_kit/version.rb
    CHANGED
    
    
| 
         @@ -11,35 +11,38 @@ module SewingKit 
     | 
|
| 
       11 
11 
     | 
    
         
             
                  class UnknownJavaScriptAssetError < StandardError
         
     | 
| 
       12 
12 
     | 
    
         
             
                  end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
                   
     | 
| 
      
 14 
     | 
    
         
            +
                  Asset = Struct.new(:path, :integrity)
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def sewing_kit_assets(entrypoint_name, extension: 'js')
         
     | 
| 
       15 
17 
     | 
    
         
             
                    return '' unless entrypoint_name.present?
         
     | 
| 
       16 
18 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
                     
     | 
| 
       18 
     | 
    
         
            -
                    return  
     | 
| 
      
 19 
     | 
    
         
            +
                    assets = SewingKit::Webpack::Manifest.asset_dependencies(entrypoint_name)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    return [] unless assets && assets[extension]
         
     | 
| 
       19 
21 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                     
     | 
| 
       21 
     | 
    
         
            -
                     
     | 
| 
       22 
     | 
    
         
            -
                     
     | 
| 
      
 22 
     | 
    
         
            +
                    dependencies = assets[extension]
         
     | 
| 
      
 23 
     | 
    
         
            +
                    dependencies.unshift(dll_asset) if serve_development_assets? && extension == 'js'
         
     | 
| 
      
 24 
     | 
    
         
            +
                    dependencies.map do |raw_asset|
         
     | 
| 
      
 25 
     | 
    
         
            +
                      Asset.new(raw_asset['path'], raw_asset['integrity'])
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
       23 
27 
     | 
    
         
             
                  end
         
     | 
| 
       24 
28 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                  def sewing_kit_link_tag(* 
     | 
| 
       26 
     | 
    
         
            -
                    options =  
     | 
| 
      
 29 
     | 
    
         
            +
                  def sewing_kit_link_tag(*assets)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    options = assets.extract_options!
         
     | 
| 
       27 
31 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                    tags =  
     | 
| 
       29 
     | 
    
         
            -
                      next '' if path == ''
         
     | 
| 
       30 
     | 
    
         
            -
                      create_asset_tag(:link,  
     | 
| 
      
 32 
     | 
    
         
            +
                    tags = assets.uniq.map do |asset|
         
     | 
| 
      
 33 
     | 
    
         
            +
                      next '' if asset.path == ''
         
     | 
| 
      
 34 
     | 
    
         
            +
                      create_asset_tag(:link, asset, options)
         
     | 
| 
       31 
35 
     | 
    
         
             
                    end
         
     | 
| 
       32 
36 
     | 
    
         | 
| 
       33 
37 
     | 
    
         
             
                    safe_join(tags, "\n")
         
     | 
| 
       34 
38 
     | 
    
         
             
                  end
         
     | 
| 
       35 
39 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                  def sewing_kit_script_tag(* 
     | 
| 
       37 
     | 
    
         
            -
                    options =  
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                      next '' if path == ''
         
     | 
| 
      
 40 
     | 
    
         
            +
                  def sewing_kit_script_tag(*assets)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    options = assets.extract_options!
         
     | 
| 
      
 42 
     | 
    
         
            +
                    tags = assets.map do |asset|
         
     | 
| 
      
 43 
     | 
    
         
            +
                      next '' if asset.path == ''
         
     | 
| 
       41 
44 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                      create_asset_tag(:script,  
     | 
| 
      
 45 
     | 
    
         
            +
                      create_asset_tag(:script, asset, options)
         
     | 
| 
       43 
46 
     | 
    
         
             
                    end
         
     | 
| 
       44 
47 
     | 
    
         | 
| 
       45 
48 
     | 
    
         
             
                    safe_join(tags, "\n")
         
     | 
| 
         @@ -47,46 +50,33 @@ module SewingKit 
     | 
|
| 
       47 
50 
     | 
    
         | 
| 
       48 
51 
     | 
    
         
             
                  private
         
     | 
| 
       49 
52 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                  def create_asset_tag(tag_type,  
     | 
| 
      
 53 
     | 
    
         
            +
                  def create_asset_tag(tag_type, asset, tag_options)
         
     | 
| 
       51 
54 
     | 
    
         
             
                    raise ArgumentError, "Invalid tag type: #{tag_type}" unless [:script, :link].include? tag_type
         
     | 
| 
       52 
55 
     | 
    
         | 
| 
       53 
56 
     | 
    
         
             
                    options = tag_options.clone
         
     | 
| 
       54 
57 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
                    if tag_options[:integrity]
         
     | 
| 
       56 
     | 
    
         
            -
                       
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
      
 58 
     | 
    
         
            +
                    if tag_options[:integrity] && asset.integrity
         
     | 
| 
      
 59 
     | 
    
         
            +
                      options[:integrity] = asset.integrity
         
     | 
| 
      
 60 
     | 
    
         
            +
                    else
         
     | 
| 
      
 61 
     | 
    
         
            +
                      options.delete(:integrity)
         
     | 
| 
       58 
62 
     | 
    
         
             
                    end
         
     | 
| 
       59 
63 
     | 
    
         | 
| 
       60 
64 
     | 
    
         
             
                    case tag_type
         
     | 
| 
       61 
65 
     | 
    
         
             
                    when :script
         
     | 
| 
       62 
     | 
    
         
            -
                      content_tag(:script, '', options.reverse_merge(src: path))
         
     | 
| 
      
 66 
     | 
    
         
            +
                      content_tag(:script, '', options.reverse_merge(src: asset.path))
         
     | 
| 
       63 
67 
     | 
    
         
             
                    when :link
         
     | 
| 
       64 
     | 
    
         
            -
                      tag(:link, options.reverse_merge(href: path, rel: 'stylesheet'))
         
     | 
| 
      
 68 
     | 
    
         
            +
                      tag(:link, options.reverse_merge(href: asset.path, rel: 'stylesheet'))
         
     | 
| 
       65 
69 
     | 
    
         
             
                    end
         
     | 
| 
       66 
70 
     | 
    
         
             
                  end
         
     | 
| 
       67 
71 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
                  def maybe_integrity(file_hash)
         
     | 
| 
       69 
     | 
    
         
            -
                    return nil unless file_hash
         
     | 
| 
       70 
     | 
    
         
            -
                    encode_hash(file_hash)
         
     | 
| 
       71 
     | 
    
         
            -
                  end
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
                  def encode_hash(hash)
         
     | 
| 
       74 
     | 
    
         
            -
                    # sewing-kit's default config places a sha256 hash in the filename. Browsers expect integrity
         
     | 
| 
       75 
     | 
    
         
            -
                    # to be the Base64 encoded version of the binary hash prefixed with the hashing algorithm
         
     | 
| 
       76 
     | 
    
         
            -
                    binary_hash = Array(hash).pack('H*')
         
     | 
| 
       77 
     | 
    
         
            -
                    "sha256-#{Base64.strict_encode64(binary_hash)}"
         
     | 
| 
       78 
     | 
    
         
            -
                  end
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                  def extract_hash(path)
         
     | 
| 
       81 
     | 
    
         
            -
                    # Consumes sewing-kit's [name]-[chunkhash].[ext] format
         
     | 
| 
       82 
     | 
    
         
            -
                    return unless path =~ /.*-[A-Za-z0-9]{64}\.(js|css)/
         
     | 
| 
       83 
     | 
    
         
            -
                    path.rpartition('-').last.split('.').first
         
     | 
| 
       84 
     | 
    
         
            -
                  end
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
72 
     | 
    
         
             
                  def serve_development_assets?
         
     | 
| 
       87 
73 
     | 
    
         
             
                    return false if ENV['SK_SIMULATE_PRODUCTION'] == '1'
         
     | 
| 
       88 
74 
     | 
    
         
             
                    Rails.env.development?
         
     | 
| 
       89 
75 
     | 
    
         
             
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  def dll_asset
         
     | 
| 
      
 78 
     | 
    
         
            +
                    Asset.new('/webpack/assets/dll/vendor.js')
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
       90 
80 
     | 
    
         
             
                end
         
     | 
| 
       91 
81 
     | 
    
         
             
              end
         
     | 
| 
       92 
82 
     | 
    
         
             
            end
         
     | 
| 
         @@ -47,8 +47,8 @@ module SewingKit 
     | 
|
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
                  class << self
         
     | 
| 
       49 
49 
     | 
    
         
             
                    # :nodoc:
         
     | 
| 
       50 
     | 
    
         
            -
                    def  
     | 
| 
       51 
     | 
    
         
            -
                      instance. 
     | 
| 
      
 50 
     | 
    
         
            +
                    def asset_dependencies(entrypoint_name)
         
     | 
| 
      
 51 
     | 
    
         
            +
                      instance.asset_dependencies(entrypoint_name)
         
     | 
| 
       52 
52 
     | 
    
         
             
                    end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
                    def clear_cache!
         
     | 
| 
         @@ -61,7 +61,9 @@ module SewingKit 
     | 
|
| 
       61 
61 
     | 
    
         | 
| 
       62 
62 
     | 
    
         
             
                    def instance
         
     | 
| 
       63 
63 
     | 
    
         
             
                      return @instance if @instance
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                      mode = ENV['NODE_ENV'] || Rails.env.to_s
         
     | 
| 
      
 66 
     | 
    
         
            +
                      @instance = if mode == 'development' && ENV['SK_SIMULATE_PRODUCTION'] != '1'
         
     | 
| 
       65 
67 
     | 
    
         
             
                        Development.new
         
     | 
| 
       66 
68 
     | 
    
         
             
                      else
         
     | 
| 
       67 
69 
     | 
    
         
             
                        Production.new
         
     | 
| 
         @@ -8,7 +8,7 @@ module SewingKit 
     | 
|
| 
       8 
8 
     | 
    
         
             
                    end
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                    # :nodoc:
         
     | 
| 
       11 
     | 
    
         
            -
                    def  
     | 
| 
      
 11 
     | 
    
         
            +
                    def asset_dependencies(entrypoint_name)
         
     | 
| 
       12 
12 
     | 
    
         
             
                      metadata['entrypoints'][entrypoint_name]
         
     | 
| 
       13 
13 
     | 
    
         
             
                    end
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
         @@ -22,7 +22,7 @@ module SewingKit 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                    def load_metadata_from_node
         
     | 
| 
       24 
24 
     | 
    
         
             
                      begin
         
     | 
| 
       25 
     | 
    
         
            -
                        stdout, * = Open3.capture3('node_modules/.bin/sewing-kit', 'manifest', "-- 
     | 
| 
      
 25 
     | 
    
         
            +
                        stdout, * = Open3.capture3('node_modules/.bin/sewing-kit', 'manifest', "--mode=#{mode}")
         
     | 
| 
       26 
26 
     | 
    
         
             
                      rescue => e
         
     | 
| 
       27 
27 
     | 
    
         
             
                        raise NodeSewingKitNotRunnable.new(mode, e)
         
     | 
| 
       28 
28 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -34,10 +34,10 @@ module SewingKit 
     | 
|
| 
       34 
34 
     | 
    
         
             
                      end
         
     | 
| 
       35 
35 
     | 
    
         
             
                    end
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                     
     | 
| 
      
 37 
     | 
    
         
            +
                    protected
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
39 
     | 
    
         
             
                    def mode
         
     | 
| 
       40 
     | 
    
         
            -
                      Rails.env.to_s || 'production'
         
     | 
| 
      
 40 
     | 
    
         
            +
                      ENV['NODE_ENV'] || Rails.env.to_s || 'production'
         
     | 
| 
       41 
41 
     | 
    
         
             
                    end
         
     | 
| 
       42 
42 
     | 
    
         
             
                  end
         
     | 
| 
       43 
43 
     | 
    
         
             
                end
         
     |