pakyow-assets 0.1.2 → 1.0.0.rc1
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 +5 -5
- data/LICENSE +3 -19
- data/lib/pakyow/assets.rb +19 -0
- data/lib/pakyow/assets/actions/process.rb +63 -0
- data/lib/pakyow/assets/actions/public.rb +75 -0
- data/lib/pakyow/assets/asset.rb +238 -0
- data/lib/pakyow/assets/babel.rb +34 -0
- data/lib/pakyow/assets/behavior/assets.rb +45 -0
- data/lib/pakyow/assets/behavior/config.rb +137 -0
- data/lib/pakyow/assets/behavior/externals.rb +58 -0
- data/lib/pakyow/assets/behavior/packs.rb +162 -0
- data/lib/pakyow/assets/behavior/prelaunching.rb +19 -0
- data/lib/pakyow/assets/behavior/processing.rb +27 -0
- data/lib/pakyow/assets/behavior/rendering/install_assets.rb +39 -0
- data/lib/pakyow/assets/behavior/silencing.rb +35 -0
- data/lib/pakyow/assets/behavior/watching.rb +25 -0
- data/lib/pakyow/assets/errors.rb +16 -0
- data/lib/pakyow/assets/external.rb +103 -0
- data/lib/pakyow/assets/framework.rb +52 -0
- data/lib/pakyow/assets/pack.rb +171 -0
- data/lib/pakyow/assets/precompiler.rb +63 -0
- data/lib/pakyow/assets/source_map.rb +99 -0
- data/lib/pakyow/assets/tasks/precompile.rake +9 -0
- data/lib/pakyow/assets/tasks/update.rake +20 -0
- data/lib/pakyow/assets/types/css.rb +45 -0
- data/lib/pakyow/assets/types/js.rb +98 -0
- data/lib/pakyow/assets/types/sass.rb +69 -0
- data/lib/pakyow/assets/types/scss.rb +14 -0
- data/src/@babel/standalone@7.3.1/babel.min.js +165 -0
- data/src/@babel/standalone@7.4.5/babel.min.js +92359 -0
- metadata +146 -46
- data/CHANGELOG.md +0 -18
- data/README.md +0 -58
- data/lib/assets.rb +0 -221
- data/lib/config.rb +0 -37
- data/lib/middleware.rb +0 -42
- data/lib/pakyow-assets.rb +0 -31
- data/lib/preprocessors/css-preprocessor.rb +0 -16
- data/lib/preprocessors/image-preprocessor.rb +0 -1
- data/lib/preprocessors/javascript-preprocessor.rb +0 -16
- data/lib/preprocessors/sass-preprocessor.rb +0 -23
- data/lib/version.rb +0 -5
- data/pakyow-assets.gemspec +0 -21
metadata
CHANGED
@@ -1,107 +1,207 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pakyow-assets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Powell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pakyow-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.0.0.rc1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.0.rc1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pakyow-presenter
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.0.rc1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.0.rc1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pakyow-routing
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.0.0.rc1
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.0.rc1
|
13
55
|
- !ruby/object:Gem::Dependency
|
14
56
|
name: pakyow-support
|
15
57
|
requirement: !ruby/object:Gem::Requirement
|
16
58
|
requirements:
|
17
|
-
- -
|
59
|
+
- - '='
|
18
60
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
61
|
+
version: 1.0.0.rc1
|
20
62
|
type: :runtime
|
21
63
|
prerelease: false
|
22
64
|
version_requirements: !ruby/object:Gem::Requirement
|
23
65
|
requirements:
|
24
|
-
- -
|
66
|
+
- - '='
|
25
67
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
68
|
+
version: 1.0.0.rc1
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
70
|
+
name: execjs
|
29
71
|
requirement: !ruby/object:Gem::Requirement
|
30
72
|
requirements:
|
31
|
-
- - ~>
|
73
|
+
- - "~>"
|
32
74
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
75
|
+
version: '2.7'
|
34
76
|
type: :runtime
|
35
77
|
prerelease: false
|
36
78
|
version_requirements: !ruby/object:Gem::Requirement
|
37
79
|
requirements:
|
38
|
-
- - ~>
|
80
|
+
- - "~>"
|
39
81
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
82
|
+
version: '2.7'
|
41
83
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
84
|
+
name: http
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '4.1'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '4.1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mini_mime
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: mini_racer
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.2.6
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.2.6
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: sassc
|
43
127
|
requirement: !ruby/object:Gem::Requirement
|
44
128
|
requirements:
|
45
|
-
- - ~>
|
129
|
+
- - "~>"
|
46
130
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
131
|
+
version: '2.0'
|
48
132
|
type: :runtime
|
49
133
|
prerelease: false
|
50
134
|
version_requirements: !ruby/object:Gem::Requirement
|
51
135
|
requirements:
|
52
|
-
- - ~>
|
136
|
+
- - "~>"
|
53
137
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
138
|
+
version: '2.0'
|
55
139
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
140
|
+
name: source_map
|
57
141
|
requirement: !ruby/object:Gem::Requirement
|
58
142
|
requirements:
|
59
|
-
- - ~>
|
143
|
+
- - "~>"
|
60
144
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
145
|
+
version: '3.0'
|
62
146
|
type: :runtime
|
63
147
|
prerelease: false
|
64
148
|
version_requirements: !ruby/object:Gem::Requirement
|
65
149
|
requirements:
|
66
|
-
- - ~>
|
150
|
+
- - "~>"
|
67
151
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
152
|
+
version: '3.0'
|
69
153
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
154
|
+
name: uglifier
|
71
155
|
requirement: !ruby/object:Gem::Requirement
|
72
156
|
requirements:
|
73
|
-
- - ~>
|
157
|
+
- - "~>"
|
74
158
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
159
|
+
version: '4.1'
|
76
160
|
type: :runtime
|
77
161
|
prerelease: false
|
78
162
|
version_requirements: !ruby/object:Gem::Requirement
|
79
163
|
requirements:
|
80
|
-
- - ~>
|
164
|
+
- - "~>"
|
81
165
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
83
|
-
description: Asset
|
166
|
+
version: '4.1'
|
167
|
+
description: Asset pipeline for Pakyow
|
84
168
|
email: bryan@metabahn.com
|
85
169
|
executables: []
|
86
170
|
extensions: []
|
87
171
|
extra_rdoc_files: []
|
88
172
|
files:
|
89
|
-
- CHANGELOG.md
|
90
173
|
- LICENSE
|
91
|
-
-
|
92
|
-
- lib/assets.rb
|
93
|
-
- lib/
|
94
|
-
- lib/
|
95
|
-
- lib/pakyow
|
96
|
-
- lib/
|
97
|
-
- lib/
|
98
|
-
- lib/
|
99
|
-
- lib/
|
100
|
-
- lib/
|
101
|
-
- pakyow
|
102
|
-
|
174
|
+
- lib/pakyow/assets.rb
|
175
|
+
- lib/pakyow/assets/actions/process.rb
|
176
|
+
- lib/pakyow/assets/actions/public.rb
|
177
|
+
- lib/pakyow/assets/asset.rb
|
178
|
+
- lib/pakyow/assets/babel.rb
|
179
|
+
- lib/pakyow/assets/behavior/assets.rb
|
180
|
+
- lib/pakyow/assets/behavior/config.rb
|
181
|
+
- lib/pakyow/assets/behavior/externals.rb
|
182
|
+
- lib/pakyow/assets/behavior/packs.rb
|
183
|
+
- lib/pakyow/assets/behavior/prelaunching.rb
|
184
|
+
- lib/pakyow/assets/behavior/processing.rb
|
185
|
+
- lib/pakyow/assets/behavior/rendering/install_assets.rb
|
186
|
+
- lib/pakyow/assets/behavior/silencing.rb
|
187
|
+
- lib/pakyow/assets/behavior/watching.rb
|
188
|
+
- lib/pakyow/assets/errors.rb
|
189
|
+
- lib/pakyow/assets/external.rb
|
190
|
+
- lib/pakyow/assets/framework.rb
|
191
|
+
- lib/pakyow/assets/pack.rb
|
192
|
+
- lib/pakyow/assets/precompiler.rb
|
193
|
+
- lib/pakyow/assets/source_map.rb
|
194
|
+
- lib/pakyow/assets/tasks/precompile.rake
|
195
|
+
- lib/pakyow/assets/tasks/update.rake
|
196
|
+
- lib/pakyow/assets/types/css.rb
|
197
|
+
- lib/pakyow/assets/types/js.rb
|
198
|
+
- lib/pakyow/assets/types/sass.rb
|
199
|
+
- lib/pakyow/assets/types/scss.rb
|
200
|
+
- src/@babel/standalone@7.3.1/babel.min.js
|
201
|
+
- src/@babel/standalone@7.4.5/babel.min.js
|
202
|
+
homepage: https://pakyow.org
|
103
203
|
licenses:
|
104
|
-
-
|
204
|
+
- LGPL-3.0
|
105
205
|
metadata: {}
|
106
206
|
post_install_message:
|
107
207
|
rdoc_options: []
|
@@ -109,17 +209,17 @@ require_paths:
|
|
109
209
|
- lib
|
110
210
|
required_ruby_version: !ruby/object:Gem::Requirement
|
111
211
|
requirements:
|
112
|
-
- -
|
212
|
+
- - ">="
|
113
213
|
- !ruby/object:Gem::Version
|
114
|
-
version:
|
214
|
+
version: 2.5.0
|
115
215
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
216
|
requirements:
|
117
|
-
- -
|
217
|
+
- - ">"
|
118
218
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
219
|
+
version: 1.3.1
|
120
220
|
requirements: []
|
121
221
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.
|
222
|
+
rubygems_version: 2.7.6
|
123
223
|
signing_key:
|
124
224
|
specification_version: 4
|
125
225
|
summary: Pakyow Assets
|
data/CHANGELOG.md
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# 0.1.2 / 2015-11-30
|
2
|
-
|
3
|
-
* Fix bug causing html processor being registered too late, thus not mixing in
|
4
|
-
the fingerprinted asset names into the html
|
5
|
-
* Fingerprint contents after all assets are fingerprinted, not before
|
6
|
-
* Add option to not fingerprint assets
|
7
|
-
* Add Vary and Last-Modified cache headers
|
8
|
-
* Handle unknown asset types by copying them over during compilation
|
9
|
-
|
10
|
-
# 0.1.1 / 2015-11-29
|
11
|
-
|
12
|
-
* Take dependent assets into account when building the hash
|
13
|
-
* Use sass gem rather than sassc; choosing reliability over speed
|
14
|
-
* Make sure assets middleware executes first
|
15
|
-
|
16
|
-
# 0.1.0 / 2015-11-26
|
17
|
-
|
18
|
-
* Initial gem release
|
data/README.md
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# pakyow-assets
|
2
|
-
|
3
|
-
Asset handling for [Pakyow](http://pakyow.com). It's intended to be lightweight
|
4
|
-
and fast in development while providing powerful fingerprinting and caching
|
5
|
-
support for production environments.
|
6
|
-
|
7
|
-
In development, assets are compiled on demand rather than up-front. They'll only
|
8
|
-
be recompiled again when the source changes.
|
9
|
-
|
10
|
-
When starting up in production, Pakyow will compile, minify, and fingerprint
|
11
|
-
every asset file. Fingerprinted filenames are automatically handled.
|
12
|
-
|
13
|
-
Bundled preprocessors include: js, css, png, gif, jpg, favicon, and sass.
|
14
|
-
|
15
|
-
# Installation
|
16
|
-
|
17
|
-
Place inside your Gemfile
|
18
|
-
|
19
|
-
gem 'pakyow-assets'
|
20
|
-
|
21
|
-
Run `bundle install` and restart your app server.
|
22
|
-
|
23
|
-
# Usage
|
24
|
-
|
25
|
-
Place all assets in a `app/assets` directory. When compiled, assets will mimic
|
26
|
-
the directory structure. During development, all assets will be compiled to a
|
27
|
-
`.assets` directory by default. Pakyow will serve requests to all assets when
|
28
|
-
running in a development environment. The idea in production is for all assets
|
29
|
-
to be in a non-minified state, making debugging easy.
|
30
|
-
|
31
|
-
*Note that all compiled assets should be excluded from version control as they
|
32
|
-
will be compiled and fingerprinted when deployed to a production environment.*
|
33
|
-
|
34
|
-
In production, assets will automatically be minified and fingerprinted. As a
|
35
|
-
developer you don't have to worry about caching or fingerprints; Pakyow takes
|
36
|
-
care of all of that for you.
|
37
|
-
|
38
|
-
## Configuration
|
39
|
-
|
40
|
-
There are many configuration options available. Take a look at `lib/config.rb`
|
41
|
-
for all the available options.
|
42
|
-
|
43
|
-
## Custom Preprocessor
|
44
|
-
|
45
|
-
Pakyow Assets can easily be extended. Take a look at the existing preprocessors
|
46
|
-
in `lib/preprocessors` for examples.
|
47
|
-
|
48
|
-
## External Asset Store
|
49
|
-
|
50
|
-
Any number of asset stores can be registered:
|
51
|
-
|
52
|
-
```ruby
|
53
|
-
Pakyow::Config.assets.stores[:store_name] = 'absolute_path_to_store'
|
54
|
-
```
|
55
|
-
|
56
|
-
# License
|
57
|
-
|
58
|
-
pakyow-assets is released under the [MIT License](http://opensource.org/licenses/MIT).
|
data/lib/assets.rb
DELETED
@@ -1,221 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
module Pakyow
|
4
|
-
module Assets
|
5
|
-
def self.register_path_with_name(path, name)
|
6
|
-
stores[name] = {
|
7
|
-
path: path,
|
8
|
-
assets: assets_at_path(path)
|
9
|
-
}
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.assets_at_path(path)
|
13
|
-
Dir.glob(File.join(path, '**/[!_]*.[a-z]*')).map { |asset|
|
14
|
-
String.normalize_path(asset[path.length..-1])
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.stores
|
19
|
-
@stores ||= {}
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.preprocessors
|
23
|
-
@preprocessors ||= {}
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.dependents
|
27
|
-
@dependents ||= {}
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.compiled_asset_path_for_request_path(path)
|
31
|
-
path = String.normalize_path(path)
|
32
|
-
ext = File.extname(path)
|
33
|
-
|
34
|
-
return unless path =~ /\.(.*)$/
|
35
|
-
return unless preprocessor?(ext)
|
36
|
-
|
37
|
-
path_regex = /#{path.gsub(ext, '')}\.(#{alias_exts(ext).map(&:to_s).join('|')})/
|
38
|
-
|
39
|
-
@stores.each_pair do |name, info|
|
40
|
-
if asset = info[:assets].find { |asset| asset =~ path_regex }
|
41
|
-
return compile_asset_at_path(asset, info[:path])
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
nil
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.normalize_ext(ext)
|
49
|
-
ext.gsub(/[^a-z]/, '').to_sym
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.alias_exts(ext)
|
53
|
-
preprocessors.select { |_, info|
|
54
|
-
info[:output_ext] == normalize_ext(ext)
|
55
|
-
}.keys
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.output_ext(ext)
|
59
|
-
".#{preprocessor_for_ext(ext)[:output_ext]}"
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.preprocessor?(ext)
|
63
|
-
preprocessors.values.map { |info| info[:output_ext] }.flatten.include?(normalize_ext(ext))
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.preprocessor_for_ext(ext)
|
67
|
-
ext = normalize_ext(ext)
|
68
|
-
|
69
|
-
preprocessors[ext] || {
|
70
|
-
block: nil,
|
71
|
-
output_ext: ext,
|
72
|
-
fingerprint_contents: false,
|
73
|
-
finterprint: false
|
74
|
-
}
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.compile_asset_at_path(asset, path)
|
78
|
-
absolute_path = File.join(path, asset)
|
79
|
-
|
80
|
-
asset_dir = File.dirname(asset)
|
81
|
-
asset_ext = output_ext(File.extname(asset))
|
82
|
-
asset_file = File.basename(asset, '.*')
|
83
|
-
|
84
|
-
if fingerprinted?(asset_ext)
|
85
|
-
compiled_asset = "#{asset_file + '-' + asset_hash(absolute_path) + asset_ext}"
|
86
|
-
else
|
87
|
-
compiled_asset = "#{asset_file + asset_ext}"
|
88
|
-
end
|
89
|
-
|
90
|
-
compiled_path = File.join(
|
91
|
-
Pakyow::Config.app.root,
|
92
|
-
Pakyow::Config.assets.compiled_asset_path,
|
93
|
-
asset_dir,
|
94
|
-
compiled_asset
|
95
|
-
)
|
96
|
-
|
97
|
-
unless File.exists?(compiled_path)
|
98
|
-
FileUtils.mkdir_p(File.dirname(compiled_path))
|
99
|
-
|
100
|
-
if fingerprinted?(asset_ext)
|
101
|
-
glob_path = File.join(Pakyow::Config.app.root, Pakyow::Config.assets.compiled_asset_path, asset_dir, "#{asset_file}-*#{asset_ext}")
|
102
|
-
else
|
103
|
-
glob_path = File.join(Pakyow::Config.app.root, Pakyow::Config.assets.compiled_asset_path, asset_dir, asset_file + asset_ext)
|
104
|
-
end
|
105
|
-
|
106
|
-
FileUtils.rm(Dir.glob(glob_path))
|
107
|
-
File.open(compiled_path, 'wb+') { |fp| fp.write(preprocess(absolute_path)) }
|
108
|
-
end
|
109
|
-
|
110
|
-
compiled_path
|
111
|
-
end
|
112
|
-
|
113
|
-
def self.preprocessor(*exts, output: nil, fingerprint: false, fingerprint_contents: false, &block)
|
114
|
-
exts.each do |ext|
|
115
|
-
preprocessors[ext] = {
|
116
|
-
block: block,
|
117
|
-
output_ext: output || ext,
|
118
|
-
fingerprint_contents: fingerprint_contents,
|
119
|
-
fingerprint: fingerprint
|
120
|
-
}
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def self.dependencies(*exts, &block)
|
125
|
-
exts.each do |ext|
|
126
|
-
dependents[ext] = block
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
def self.preprocess(path)
|
131
|
-
preprocessor = preprocessor_for_ext(File.extname(path))
|
132
|
-
block = preprocessor[:block]
|
133
|
-
|
134
|
-
block.nil? ? File.read(path) : block.call(path)
|
135
|
-
end
|
136
|
-
|
137
|
-
def self.precompile
|
138
|
-
if File.exists?(Pakyow::Config.assets.compiled_asset_path)
|
139
|
-
FileUtils.rm_r(Pakyow::Config.assets.compiled_asset_path)
|
140
|
-
end
|
141
|
-
|
142
|
-
stores.each do |_, info|
|
143
|
-
info[:assets].each do |asset|
|
144
|
-
compile_asset_at_path(asset, info[:path])
|
145
|
-
absolute_path = File.join(info[:path], asset)
|
146
|
-
|
147
|
-
fingerprint = asset_hash(absolute_path)
|
148
|
-
|
149
|
-
if fingerprinted?(File.extname(asset))
|
150
|
-
fingerprinted_asset = File.join(
|
151
|
-
File.dirname(asset),
|
152
|
-
"#{File.basename(asset, '.*')}-#{fingerprint + output_ext(File.extname(asset))}",
|
153
|
-
)
|
154
|
-
else
|
155
|
-
fingerprinted_asset = File.join(
|
156
|
-
File.dirname(asset),
|
157
|
-
File.basename(asset, '.*') + output_ext(File.extname(asset)),
|
158
|
-
)
|
159
|
-
end
|
160
|
-
|
161
|
-
replaceable_asset = File.join(
|
162
|
-
File.dirname(asset),
|
163
|
-
File.basename(asset, '.*') + output_ext(File.extname(asset)),
|
164
|
-
)
|
165
|
-
|
166
|
-
manifest[replaceable_asset] = {
|
167
|
-
original_ext: File.extname(asset),
|
168
|
-
fingerprinted_asset: fingerprinted_asset
|
169
|
-
}
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
base = File.join(Pakyow::Config.app.root, Pakyow::Config.assets.compiled_asset_path)
|
174
|
-
|
175
|
-
manifest.each do |replaceable_asset, info|
|
176
|
-
next unless fingerprint_contents?(info[:original_ext])
|
177
|
-
|
178
|
-
path = File.join(base, info[:fingerprinted_asset])
|
179
|
-
|
180
|
-
content = File.read(path)
|
181
|
-
File.open(path, 'wb') { |file|
|
182
|
-
file.write(mixin_fingerprints(content))
|
183
|
-
}
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
def self.manifest
|
188
|
-
@manifest ||= {}
|
189
|
-
end
|
190
|
-
|
191
|
-
def self.mixin_fingerprints(content)
|
192
|
-
return content if content.nil? || content.empty?
|
193
|
-
|
194
|
-
manifest.each do |asset, info|
|
195
|
-
content = content.gsub(asset, info[:fingerprinted_asset])
|
196
|
-
end
|
197
|
-
|
198
|
-
content
|
199
|
-
end
|
200
|
-
|
201
|
-
def self.asset_hash(absolute_path)
|
202
|
-
Digest::MD5.hexdigest(dependencies_for(absolute_path).concat([absolute_path]).map { |filename|
|
203
|
-
Digest::MD5.file(filename).hexdigest
|
204
|
-
}.flatten.join)
|
205
|
-
end
|
206
|
-
|
207
|
-
def self.dependencies_for(absolute_path)
|
208
|
-
block = dependents[normalize_ext(File.extname(absolute_path))]
|
209
|
-
return [] if block.nil?
|
210
|
-
block.call(absolute_path)
|
211
|
-
end
|
212
|
-
|
213
|
-
def self.fingerprinted?(ext)
|
214
|
-
preprocessor_for_ext(ext)[:fingerprint]
|
215
|
-
end
|
216
|
-
|
217
|
-
def self.fingerprint_contents?(ext)
|
218
|
-
preprocessor_for_ext(ext)[:fingerprint_contents]
|
219
|
-
end
|
220
|
-
end
|
221
|
-
end
|