minipack 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8949f9e9776f0a6e534121def90526240429d8d12f3609459b48b8ed630182ff
4
- data.tar.gz: e8ac86674922149eb2f98208ea514d579bfd7147afad838641d8eeeda7c190dd
3
+ metadata.gz: bc8eca1d1f23c89720efbc82ceaa6afe4b914295e42be8edd661a22bdedafe43
4
+ data.tar.gz: b8fa5684228e7d29882f98c1cff298414f48cb8df94929ee215560b081e355a3
5
5
  SHA512:
6
- metadata.gz: 10380141c2cfb30be94fb8e4daa3221696080f103526b4a54496fff0c87c53a8d2f47f2a93b306b169a08ba0bcecb3067b6c8debb84dc8a104bef38c32af0210
7
- data.tar.gz: 7fd05ca76d124c9fc52ef3a2f79a16470b47444d17621ab0f20ddcbde08bd0231669c318336d6ec26fdd346989590e6e79fc006ef643813528af6d79e98da2dd
6
+ metadata.gz: ccd21785cac03e000600d35917f51f5a263b01c356ad07cb74ed6c26a9fc8fdee2620856416769405560308c3b8a5f4d501827399ebde570b0444c71868fe642
7
+ data.tar.gz: 90f9e18cdf3b56ce4d102ad7603579799398cbd44496e673950a717c7af5d7fa5db0211df571bb09edf44da3dbfe4d4fa13db6ba0a3b9ce203e1fe67aebf282a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ # 0.3.3 / 2019-09-12
2
+
3
+ ## Enhancements:
4
+
5
+ * Support manifest files that have integrity hashes in them (#24) by @HellRok
6
+
7
+ ## Breaking changes(internal apis only)
8
+
9
+ * Return value of `Minipack::Manifest#lookup!` and `Minipack::Manifest#find`, now changed from String to `Minipack::Manifest::Entry`.
10
+
1
11
  # 0.3.2 / 2019-07-22
2
12
 
3
13
  ## Enhancements:
@@ -9,7 +9,7 @@ module Minipack::Helper
9
9
  # <%= asset_bundle_path 'icon/favicon.ico' %> # => "/assets/web/pack/icon/favicon-1016838bab065ae1e122.ico"
10
10
  def asset_bundle_path(name, manifest: nil, **options)
11
11
  manifest = get_manifest_by_key(manifest)
12
- asset_path(manifest.lookup!(name.to_s), **options)
12
+ asset_path(manifest.lookup!(name.to_s).path, **options)
13
13
  end
14
14
 
15
15
  # Example:
@@ -20,7 +20,9 @@ module Minipack::Helper
20
20
  # <%= javascript_bundle_tag 'orders/app' %> # =>
21
21
  # <script src="/assets/web/pack/orders/app-1016838bab065ae1e314.js"></script>
22
22
  def javascript_bundle_tag(*names, manifest: nil, **options)
23
- javascript_include_tag(*sources_from_manifest(names, 'js', key: manifest), **options)
23
+ entries_from_manifest(names, 'js', key: manifest).map { |entry|
24
+ javascript_include_tag(entry.path, **options_for(entry, options))
25
+ }.join("\n").html_safe
24
26
  end
25
27
 
26
28
  # Creates script tags that references the js chunks from entrypoints when using split chunks API.
@@ -53,7 +55,9 @@ module Minipack::Helper
53
55
  # href="/assets/web/pack/orders/style-1016838bab065ae1e122.css" />
54
56
  def stylesheet_bundle_tag(*names, manifest: nil, **options)
55
57
  if Minipack.configuration.extract_css?
56
- stylesheet_link_tag(*sources_from_manifest(names, 'css', key: manifest), **options)
58
+ entries_from_manifest(names, 'css', key: manifest).map { |entry|
59
+ stylesheet_link_tag(entry.path, **options_for(entry, options))
60
+ }.join("\n").html_safe
57
61
  end
58
62
  end
59
63
 
@@ -85,23 +89,30 @@ module Minipack::Helper
85
89
  # <img src="/assets/pack/icon-1016838bab065ae1e314.png" width="16" height="10" alt="Edit Entry" />
86
90
  def image_bundle_tag(name, manifest: nil, **options)
87
91
  manifest = get_manifest_by_key(manifest)
88
- image_tag(manifest.lookup!(name.to_s), **options)
92
+ image_tag(manifest.lookup!(name.to_s).path, **options)
89
93
  end
90
94
 
91
95
  private
92
96
 
93
- def sources_from_manifest(names, ext, key: nil)
97
+ def entries_from_manifest(names, ext, key: nil)
94
98
  manifest = get_manifest_by_key(key)
95
99
  names.map { |name| manifest.lookup!(name.to_s + '.' + ext) }
96
100
  end
97
101
 
98
102
  def sources_from_manifest_entrypoints(names, type, key: nil)
99
103
  manifest = get_manifest_by_key(key)
100
- names.map { |name| manifest.lookup_pack_with_chunks!(name, type: type) }.flatten.uniq
104
+ names.map { |name| manifest.lookup_pack_with_chunks!(name, type: type).entries.map(&:path) }.flatten.uniq
101
105
  end
102
106
 
103
107
  def get_manifest_by_key(key = nil)
104
108
  repository = Minipack.configuration.manifests
105
109
  key.nil? ? repository.default : repository.get(key)
106
110
  end
111
+
112
+ # @param [Minipack::Manifest::Entry] entry
113
+ # @param [Hash] options
114
+ def options_for(entry, options)
115
+ return options unless entry.integrity
116
+ options.merge(integrity: entry.integrity)
117
+ end
107
118
  end
@@ -6,6 +6,36 @@ require 'uri'
6
6
 
7
7
  module Minipack
8
8
  class Manifest
9
+ # A class that represents a single entry in a manifest
10
+ class Entry
11
+ attr_reader :path, :integrity
12
+
13
+ # @param [String] path single path of a single entry
14
+ # @param [String,nil] integrity optional value for subresource integrity of script tags
15
+ def initialize(path, integrity: nil)
16
+ @path = path
17
+ @integrity = integrity
18
+ end
19
+
20
+ def ==(other)
21
+ @path == other.path && @integrity == other.integrity
22
+ end
23
+ end
24
+
25
+ # A class that represents a group of chunked entries in a manifest
26
+ class ChunkGroup
27
+ attr_reader :entries
28
+
29
+ # @param [Array<Minipack::Manifest::Entry>] entries paths of chunked group
30
+ def initialize(entries)
31
+ @entries = Array(entries).map { |entry| entry.is_a?(String) ? Entry.new(entry) : entry }
32
+ end
33
+
34
+ def ==(other)
35
+ @entries == other.entries
36
+ end
37
+ end
38
+
9
39
  class MissingEntryError < StandardError; end
10
40
  class FileNotFoundError < StandardError; end
11
41
 
@@ -20,15 +50,25 @@ module Minipack
20
50
  def lookup_pack_with_chunks!(name, type: nil)
21
51
  manifest_pack_type = manifest_type(name, type)
22
52
  manifest_pack_name = manifest_name(name, manifest_pack_type)
23
- find('entrypoints')&.dig(manifest_pack_name, manifest_pack_type) || handle_missing_entry(name)
53
+ paths = data['entrypoints']&.dig(manifest_pack_name, manifest_pack_type) || handle_missing_entry(name)
54
+ ChunkGroup.new(paths)
24
55
  end
25
56
 
26
57
  def lookup!(name)
27
58
  find(name) || handle_missing_entry(name)
28
59
  end
29
60
 
61
+ # Find an entry by it's name
62
+ #
63
+ # @param [Symbol] name entry name
64
+ # @return [Minipack::Entry]
30
65
  def find(name)
31
- data[name.to_s]
66
+ path = data[name.to_s] || return
67
+ if path.is_a? Hash
68
+ integrity = path['integrity']
69
+ path = path['src']
70
+ end
71
+ Entry.new(path, integrity: integrity)
32
72
  end
33
73
 
34
74
  def assets
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minipack
4
- VERSION = "0.3.2"
4
+ VERSION = "0.3.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minipack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nobuhiro Nikushi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-22 00:00:00.000000000 Z
11
+ date: 2019-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview