asset_mapper 0.0.1 → 1.0.0

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: 17c6f6cc96968980eed2e68d911811f865b5934f09e97bc34cc90cef9065feca
4
- data.tar.gz: f0958e155e9a4aa41f81b1151299f33ebe7d56955678808a4d2de3a4f777d41a
3
+ metadata.gz: 70001032fe042a996e8cd5be6001be5c578328b9284b299e86d6ba1514e1a068
4
+ data.tar.gz: d81ac7eb6cdb92334b11e8033304d1404919ce7c460e4d27e2c05c460dc3f439
5
5
  SHA512:
6
- metadata.gz: e8b3b2fcb513edc9431b250ce4551895e54e4b0bf80f5fd189e87a57ed2bb22b544ac2f3a7d77c7549bce8910b0e3812b427d94e2ce28bd91bba0e7e6bb873cf
7
- data.tar.gz: 87cef292a5174b1eb7854bda3691f75568e6d175c81a67c08d0d49b61ca6bbd66152c2900ce39333d9cf105a128d9e05fd435ba5d6f399866eca8c42b8a85ea6
6
+ metadata.gz: 79c421afd329f21c8eb68636fd4379eee07d0c80b162308dca9171b3cb53de135909937d1278758ff4eee94178408b924814667ccedd17cab9429a55cf8aaa49
7
+ data.tar.gz: 8cd97df7a9501aa77a12c29e9f01037e198550416d6b0416d04bbccb6176182f105a9aece09f98566d0e5f2b56a89934e5da36c9b849f85bf43b860d13afc572
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- asset_mapper (0.0.1)
5
- dry-configurable (~> 0.13.0)
6
- dry-files (~> 0.1.0)
4
+ asset_mapper (1.0.0)
5
+ dry-configurable (~> 1.0)
6
+ dry-files (~> 1.0)
7
7
  dry-initializer (~> 3.0)
8
8
  dry-types (~> 1.5)
9
9
  rake (>= 10)
@@ -13,58 +13,63 @@ GEM
13
13
  remote: https://rubygems.org/
14
14
  specs:
15
15
  ast (2.4.2)
16
- concurrent-ruby (1.1.9)
17
- dry-configurable (0.13.0)
16
+ concurrent-ruby (1.1.10)
17
+ dry-configurable (1.0.1)
18
+ dry-core (~> 1.0, < 2)
19
+ zeitwerk (~> 2.6)
20
+ dry-core (1.0.0)
18
21
  concurrent-ruby (~> 1.0)
19
- dry-core (~> 0.6)
20
- dry-container (0.9.0)
22
+ zeitwerk (~> 2.6)
23
+ dry-files (1.0.1)
24
+ dry-inflector (1.0.0)
25
+ dry-initializer (3.1.1)
26
+ dry-logic (1.5.0)
21
27
  concurrent-ruby (~> 1.0)
22
- dry-configurable (~> 0.13, >= 0.13.0)
23
- dry-core (0.7.1)
28
+ dry-core (~> 1.0, < 2)
29
+ zeitwerk (~> 2.6)
30
+ dry-types (1.7.0)
24
31
  concurrent-ruby (~> 1.0)
25
- dry-files (0.1.0)
26
- dry-inflector (0.2.1)
27
- dry-initializer (3.0.4)
28
- dry-logic (1.2.0)
29
- concurrent-ruby (~> 1.0)
30
- dry-core (~> 0.5, >= 0.5)
31
- dry-types (1.5.1)
32
- concurrent-ruby (~> 1.0)
33
- dry-container (~> 0.3)
34
- dry-core (~> 0.5, >= 0.5)
35
- dry-inflector (~> 0.1, >= 0.1.2)
36
- dry-logic (~> 1.0, >= 1.0.2)
37
- minitest (5.14.4)
38
- parallel (1.21.0)
39
- parser (3.0.2.0)
32
+ dry-core (~> 1.0, < 2)
33
+ dry-inflector (~> 1.0, < 2)
34
+ dry-logic (>= 1.4, < 2)
35
+ zeitwerk (~> 2.6)
36
+ json (2.6.3)
37
+ language_server-protocol (3.17.0.2)
38
+ minitest (5.16.3)
39
+ parallel (1.22.1)
40
+ parser (3.1.3.0)
40
41
  ast (~> 2.4.1)
41
- rainbow (3.0.0)
42
+ rainbow (3.1.1)
42
43
  rake (13.0.6)
43
- regexp_parser (2.1.1)
44
+ regexp_parser (2.6.1)
44
45
  rexml (3.2.5)
45
- rubocop (1.22.3)
46
+ rubocop (1.39.0)
47
+ json (~> 2.3)
46
48
  parallel (~> 1.10)
47
- parser (>= 3.0.0.0)
49
+ parser (>= 3.1.2.1)
48
50
  rainbow (>= 2.2.2, < 4.0)
49
51
  regexp_parser (>= 1.8, < 3.0)
50
- rexml
51
- rubocop-ast (>= 1.12.0, < 2.0)
52
+ rexml (>= 3.2.5, < 4.0)
53
+ rubocop-ast (>= 1.23.0, < 2.0)
52
54
  ruby-progressbar (~> 1.7)
53
55
  unicode-display_width (>= 1.4.0, < 3.0)
54
- rubocop-ast (1.13.0)
55
- parser (>= 3.0.1.1)
56
- rubocop-performance (1.11.5)
56
+ rubocop-ast (1.24.0)
57
+ parser (>= 3.1.1.0)
58
+ rubocop-performance (1.15.1)
57
59
  rubocop (>= 1.7.0, < 2.0)
58
60
  rubocop-ast (>= 0.4.0)
59
61
  ruby-progressbar (1.11.0)
60
- standard (1.4.0)
61
- rubocop (= 1.22.3)
62
- rubocop-performance (= 1.11.5)
63
- unicode-display_width (2.1.0)
64
- zeitwerk (2.5.1)
62
+ standard (1.19.1)
63
+ language_server-protocol (~> 3.17.0.2)
64
+ rubocop (= 1.39.0)
65
+ rubocop-performance (= 1.15.1)
66
+ unicode-display_width (2.3.0)
67
+ zeitwerk (2.6.6)
65
68
 
66
69
  PLATFORMS
70
+ arm64-darwin-21
67
71
  x86_64-darwin-20
72
+ x86_64-linux
68
73
 
69
74
  DEPENDENCIES
70
75
  asset_mapper!
@@ -73,4 +78,4 @@ DEPENDENCIES
73
78
  standard (~> 1.3)
74
79
 
75
80
  BUNDLED WITH
76
- 2.2.31
81
+ 2.3.5
data/README.md CHANGED
@@ -20,7 +20,7 @@ bridge between frontend and backend.
20
20
 
21
21
  ## How does AssetMapper work?
22
22
 
23
- AssetMapper expects to be given a path to a JSON file that
23
+ AssetMapper expects to be given a path to a JSON file(s) that
24
24
  is in a specific schema. To generate these schemas,
25
25
  generally a plugin needs to be made for your bundler of
26
26
  choice that complies with the AssetMapper schema. Then, for
@@ -39,49 +39,200 @@ more than I would like it to. It does things like:
39
39
 
40
40
  ## Roadmap
41
41
 
42
- - [ ] - Create a pluggable DevServer thats Rack compatible
43
- that can be injected as middleware.
44
- - [ ] - Create a gem and plugin for Parcel 2.
45
- - [ ] - Create a gem and plugin for Vite.
46
- - [ ] - Create a gem and plugin for ESBuild.
42
+ - [ ] - Create a file hasher for bundle-less setups.
43
+ - [ ] - Create a file watcher for development to auto-update the manifest.
44
+ - [x] - Create a plugin for ESBuild.
45
+ - [ ] - Create a plugin for Parcel 2.
46
+ - [ ] - Create a plugin for Vite.
47
+ - [ ] - Create a pluggable DevServer thats Rack compatible that can be injected as middleware.
48
+ - [ ] - Create Rails view helpers.
47
49
 
48
50
  ## For Developers
49
51
 
50
52
  If you're interested in making a plugin for a bundler that is AssetMapper compatible
51
53
  here is the JSON schema expected:
52
54
 
55
+ ### Schema
56
+
53
57
  ```json
54
58
  {
55
- "entrypoints": {
56
- "path/before/transform.js": "path/after/transform.js"
57
- },
58
- "path/before/transform.js": "path/after/transform.js"
59
+ "<unhashed-path>": {
60
+ "asset_path": "<shortened-hashed-path>"
61
+ "file_path": "<full-hashed-path>"
62
+ }
59
63
  }
60
64
  ```
61
65
 
62
66
  ## Programmatic Usage
63
67
 
64
68
  ```rb
65
- AssetMapper.configure do |config|
66
- config.manifest_path = "public/asset_manifest.json"
67
- config.assets_path = "public/assets"
68
- config.entrypoints_path = "#{config.asset_path}/entrypoints"
69
+ # Create an AssetMapper::Configuration instance
70
+ asset_mapper = AssetMapper.new.configure do |config|
71
+ # Where the manifest files can be found on the host machine
72
+ config.manifest_files = ["public/builds/asset-mapper-manifest.json"]
73
+
74
+ # The URL or path prefix for the files.
75
+ config.asset_host = "/builds"
76
+
77
+ # Do not cache the manifest in testing or in development.
78
+ config.cache_manifest = !(Rails.env.development? || Rails.env.testing?)
69
79
  end
70
80
 
71
- manifest = AssetMapper.manifest
81
+ manifest = asset_mapper.manifest
72
82
  # =>
73
83
  # {
74
- # "entrypoints" => {
75
- # "public/assets/entrypoints/application.js" => "public/assets/entrypoints/application.123.js"
76
- # },
77
- # "public/assets/icon.svg" => "public/assets/icon.123.svg"
84
+ # "files": {
85
+ # "entrypoints/application.js" => {
86
+ # "asset_path" => "entrypoints/application-[hash].js",
87
+ # "file_path" => "public/assets/entrypoints/application-[hash].js",
88
+ # }
89
+ # }
78
90
  # }
79
91
 
80
- manifest.find_entrypoint("application.js")
81
- # => "public/assets/entrypoints/application.123.js"
92
+ manifest.find("entrypoints/application.js")
93
+ # => "/builds/entrypoints/application-[hash].js"
94
+
95
+ manifest.find("assets/icon.svg")
96
+ # => "/builds/assets/icon-[hash].svg"
97
+ ```
98
+
99
+ ## Supported bundlers
100
+
101
+ - [x] [ESBuild](/docs/esbuild)
102
+ - [ ] [Parcel 2](/docs/parcel2)
103
+ - [ ] [Rollup](/docs/rollup)
104
+ - [ ] [Vite](/docs/vite/)
105
+
106
+ ## Rails usage
107
+
108
+ Create an initializer to initialize AssetMapper at `config/initializers/asset_mapper.rb`.
109
+
110
+ ```rb
111
+ # config/initializers/asset_mapper.rb
112
+
113
+ asset_mapper = AssetMapper.new.configure do |config|
114
+ # Where the manifest files can be found on the host machine
115
+ config.manifest_files = ["public/esbuild-builds/asset-mapper-manifest.json"]
116
+
117
+ # prepends "/builds" to all URLs
118
+ config.asset_host = "/builds"
119
+
120
+ # Do not cache the manifest in testing or in development.
121
+ config.cache_manifest = !(Rails.env.development? || Rails.env.testing?)
122
+ end
123
+
124
+ Rails.application.config.asset_mapper = asset_mapper
125
+ ```
126
+
127
+ AssetMapper is now available under: `Rails.application.config.asset_mapper`. This is pretty
128
+ verbose to use in your views you can create a helper for it.
129
+
130
+ ### Usage in Rails views
131
+
132
+ ```rb
133
+ # app/helpers/application_helper.rb
134
+ module ApplicationHelper
135
+ def asset_mapper
136
+ Rails.application.config.asset_mapper
137
+ end
138
+ end
139
+ ```
140
+
141
+ ## Hanami setup
142
+
143
+ The first step is to create a "provider" for asset_mapper.
144
+
145
+ ```rb
146
+ # config/providers/asset_mapper.rb
147
+
148
+ Hanami.app.register_provider(:asset_mapper) do
149
+ prepare do
150
+ require "asset_mapper"
151
+ end
152
+
153
+ start do
154
+ files = Dry::Files.new
155
+ asset_mapper = AssetMapper.new.configure do |config|
156
+ # The URL or path prefix for the files.
157
+ config.asset_host = "/assets"
158
+
159
+ # Do not cache the manifest in testing or in development, only production.
160
+ config.cache_manifest = Hanami.env?(:production)
161
+
162
+ # Files to watch
163
+ config.asset_files = ["app/assets/media/**/*.*"]
164
+
165
+ # Where to dump the assets
166
+ config.assets_output_path = files.join("public/assets")
167
+
168
+ # Where to write the manifest to.
169
+ config.manifest_output_path = files.join(config.assets_output_path, "asset-mapper-manifest.json")
170
+
171
+ # top level directory of assets. Used for relative short paths.
172
+ config.assets_root = files.join("app/assets")
173
+
174
+ # Where the manifest files can be found on the host machine
175
+ config.manifest_files = [
176
+ "public/assets/esbuild-manifest.json",
177
+ config.manifest_output_path
178
+ ]
179
+ end
180
+
181
+ register "asset_mapper", asset_mapper
182
+ end
183
+ end
184
+
185
+ ```
186
+
187
+ ### Add a static rack server
188
+
189
+ Next, we need to add a setting to `./config.ru` for when we write to the `public/` folder.
190
+
191
+ ```rb
192
+ # config.ru
193
+
194
+ require "hanami/boot"
195
+
196
+ run Hanami.app
197
+
198
+ #### Everything above here is provided by default
199
+
200
+ #### Add the below call
201
+ use Rack::Static, :urls => [""], :root => "public", cascade: true
202
+ ```
203
+
204
+ Finally, to use in your views, do the following:
205
+
206
+ ```rb
207
+ # app/context.rb
208
+ module Main # <- Replace this with your slice or application name
209
+ class Context < Hanami::View::Context
210
+ include Deps["asset_mapper"]
211
+
212
+ def asset_path(asset_name)
213
+ asset_mapper.find(asset_name)
214
+ end
215
+ end
216
+ end
217
+
218
+ # app/view.rb
219
+ module Main # <- Replace this with your slice or application name
220
+ class View < Hanami::View
221
+ config.default_context = Context.new
222
+ end
223
+ end
82
224
 
83
- manifest.find("icon.svg")
84
- # => "public/assets/icon.123.svg"
225
+ ```erb
226
+ # app/views/application.erb
227
+ <html>
228
+ <head>
229
+ <title>Bookshelf</title>
230
+ <script src="<%= asset_path("javascript/entrypoints/application.js") %>" type="module">
231
+ </head>
232
+ <body>
233
+ <%= yield %>
234
+ </body>
235
+ </html>
85
236
  ```
86
237
 
87
238
  ## Development
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require "rake/testtask"
6
6
  Rake::TestTask.new(:test) do |t|
7
7
  t.libs << "test"
8
8
  t.libs << "lib"
9
- t.test_files = FileList["test/**/*_test.rb"]
9
+ t.test_files = FileList["test/*_test.rb"]
10
10
  end
11
11
 
12
12
  require "standard/rake"
data/asset_mapper.gemspec CHANGED
@@ -5,19 +5,19 @@ require_relative "lib/asset_mapper/version"
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "asset_mapper"
7
7
  spec.version = AssetMapper::VERSION
8
- spec.authors = ["ParamagicDev"]
8
+ spec.authors = ["KonnorRogers"]
9
9
  spec.email = ["konnor5456@gmail.com"]
10
10
 
11
11
  spec.summary = "A tightly scoped directory parser and json file generator. "
12
- spec.homepage = "https://github.com/ParamagicDev/asset_mapper"
12
+ spec.homepage = "https://github.com/KonnorRogers/asset_mapper"
13
13
  spec.license = "MIT"
14
14
  spec.required_ruby_version = ">= 2.6.0"
15
15
 
16
16
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
17
17
 
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
- spec.metadata["source_code_uri"] = "https://github.com/ParamagicDev/asset_mapper"
20
- spec.metadata["changelog_uri"] = "https://github.com/ParamagicDev/asset_mapper/blob/main/CHANGELOG.md"
19
+ spec.metadata["source_code_uri"] = "https://github.com/KonnorRogers/asset_mapper"
20
+ spec.metadata["changelog_uri"] = "https://github.com/KonnorRogers/asset_mapper/blob/main/CHANGELOG.md"
21
21
 
22
22
  # Specify which files should be added to the gem when it is released.
23
23
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -32,8 +32,8 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  spec.add_runtime_dependency "rake", ">= 10"
34
34
  spec.add_runtime_dependency "zeitwerk", "~> 2.5"
35
- spec.add_runtime_dependency "dry-configurable", "~> 0.13.0"
36
- spec.add_runtime_dependency "dry-files", "~> 0.1.0"
35
+ spec.add_runtime_dependency "dry-configurable", "~> 1.0"
36
+ spec.add_runtime_dependency "dry-files", "~> 1.0"
37
37
  spec.add_runtime_dependency "dry-initializer", "~> 3.0"
38
38
  spec.add_runtime_dependency "dry-types", "~> 1.5"
39
39
  end
data/bin/setup CHANGED
@@ -6,3 +6,28 @@ set -vx
6
6
  bundle install
7
7
 
8
8
  # Do any other automated setup that you need to do here
9
+
10
+ # ESbuild plugin setup
11
+ cd packages/asset-mapper-esbuild
12
+ npx pnpm install
13
+ npx pnpm build
14
+
15
+ cd -
16
+
17
+ # Rails setup
18
+ cd test/rails/asset-mapper-app
19
+ bundle install
20
+ yarn install
21
+ yarn run build
22
+
23
+ cd -
24
+
25
+ # Hanami setup
26
+ cd test/hanami
27
+ bundle install
28
+ yarn install
29
+ yarn run build
30
+
31
+ cd -
32
+
33
+ echo "Setup complete. Checkout 'test/rails/asset-mapper-app' or 'test/hanami for more!'"
data/docs/parcel2.md ADDED
@@ -0,0 +1,137 @@
1
+ # Parcel 2
2
+
3
+ To get started with Parcel 2, if you haven't already, create a `package.json`.
4
+
5
+ ```bash
6
+ yarn init
7
+ ```
8
+
9
+ In our `package.json`, lets add a `build` command as well
10
+ as specify our `"sources"`.
11
+
12
+ ```json
13
+ // package.json
14
+ {
15
+ "targets": {
16
+ "default": {
17
+ "source": "app/javascript/entrypoints",
18
+ "isLibrary": false,
19
+ "distDir": "./public/parcels"
20
+ }
21
+ },
22
+ "scripts": {
23
+ "watch": "parcel watch",
24
+ "build": "parcel build"
25
+ }
26
+ }
27
+ ```
28
+
29
+ This means all of our "entrypoints" should be located under
30
+ `app/javascript/entrypoints`
31
+
32
+ For example, you may have a
33
+ `app/javascript/entrypoints/application.js`
34
+
35
+ This file will be the file that is referenced when using a
36
+ `<script>` tag.
37
+
38
+ Next, we need to install the proper node dependencies.
39
+
40
+ ```bash
41
+ yarn add -D parcel @parcel/config-default parcel-reporter-bundle-manifest
42
+ ```
43
+
44
+ Then, create a `.parcelrc` file in the root of your
45
+ project.
46
+
47
+ ```bash
48
+ touch .parcelrc
49
+ ```
50
+
51
+ And then add the following contents:
52
+
53
+ ```json
54
+ {
55
+ "extends": "@parcel/config-default",
56
+ "reporters": ["...", "parcel-reporter-bundle-manifest"]
57
+ }
58
+ ```
59
+
60
+ ## Setting up the server.
61
+
62
+ If you're using Rails, create a file called `asset_mapper.rb` in
63
+ your `config/initializers` folder. If you're not using
64
+ Rails, in whatever file initializes your app, add the
65
+ following code:
66
+
67
+ ```rb
68
+ // config/initializers/asset_mapper.rb
69
+
70
+ AssetMapper.configure do |config|
71
+ # Prefix before all file paths
72
+ config.asset_host = "/"
73
+
74
+ # Where to find your manifest files. (Most people have only 1)
75
+ config.manifest_files = %w[public/parcels/parcel-manifest.json]
76
+ end
77
+ ```
78
+
79
+ ## Adding to our HTML
80
+
81
+ To add your script and stylesheet tags to your build, you
82
+ can do the following:
83
+
84
+ ```erb
85
+ <link href="<%= AssetMapper.find('entrypoints/application.css') %>" rel="stylesheet">
86
+ <script src="<%= AssetMapper.find('entrypoints/application.js') %>" type="module">
87
+ ```
88
+
89
+ ## Additional Optimizations
90
+
91
+ ### Compression
92
+
93
+ First, install the compression plugins:
94
+
95
+ ```bash
96
+ yarn add -D @parcel/compressor-gzip @parcel/compressor-brotli
97
+ ```
98
+
99
+ If you would like to add gzipping / brotli compression,
100
+ make your `.parcelrc` look like the following:
101
+
102
+ ```json
103
+ {
104
+ "extends": "@parcel/config-default",
105
+ "reporters": ["...", "parcel-reporter-bundle-manifest"]
106
+ "compressors": {
107
+ "*.{html,css,js,svg,map}": [
108
+ "...",
109
+ "@parcel/compressor-gzip",
110
+ "@parcel/compressor-brotli"
111
+ ]
112
+ }
113
+ }
114
+ ```
115
+
116
+ This will gzip / brotli compress any .html, .css, .js, .svg,
117
+ and .map files so that your web server doesn't have to.
118
+
119
+ ### Specifying a build target
120
+
121
+ Build targets are a way of specifying "what version of
122
+ javascript to ship", IE: ES6, ES2018, ESNext, etc.
123
+
124
+ Parcel has a whole section dedicated to [specifying targets]()
125
+
126
+ The easiest to set in your `package.json` is the following:
127
+
128
+ ```json
129
+ // package.json
130
+ {
131
+ "browserslist": "> 0.5%, last 2 versions, not dead"
132
+ }
133
+ ```
134
+
135
+ ### Usage with static files
136
+
137
+ https://www.npmjs.com/package/parcel-reporter-multiple-static-file-copier
@@ -0,0 +1,67 @@
1
+ require "dry/configurable"
2
+ require "forwardable"
3
+ require "digest"
4
+
5
+ module AssetMapper
6
+ # Configuration object for asset mapper. This is the top level API.
7
+ class Configuration
8
+ extend ::Forwardable
9
+ include ::Dry::Configurable
10
+
11
+ # Where to find the json mapping of your asset files.
12
+ # @return [String[]]
13
+ setting :manifest_files, default: []
14
+
15
+ # In case you server off of a CDN, you may want to prepend urls.
16
+ setting :asset_host, default: "/"
17
+
18
+ # Whether or not to cache the manifest.
19
+ # @return [Boolean]
20
+ setting :cache_manifest, constructor: lambda { |value| !!value }
21
+
22
+ # Raise an error if the file can't be found. Useful in development.
23
+ # @return [Boolean]
24
+ setting :raise_on_missing_file, default: false
25
+
26
+ # Raise an error if the same key is found twice across the same or multiple manifests.
27
+ # @return [Boolean]
28
+ setting :raise_on_duplicate_key, default: false
29
+
30
+ # Files for AssetMapper to watch for changes and generate hashes for.
31
+ # Accepts glob patterns like Dir["*"].
32
+ # @return [Array<String>]
33
+ setting :asset_files, default: []
34
+
35
+ # Override the default file watcher.
36
+ setting :file_watcher
37
+
38
+ # Append hashes to the end of files.
39
+ setting :fingerprint, default: true
40
+
41
+ # Use MD5 hashes. They're fast, and don't need to be secure.
42
+ setting :fingerprint_method, default: lambda { |str| Digest::MD5.hexdigest(str) }
43
+
44
+ # root of your assets, used for short paths.
45
+ setting :assets_root
46
+
47
+ # Where to dump the assets
48
+ setting :assets_output_path
49
+
50
+ # Where to write the manifest to.
51
+ setting :manifest_output_path
52
+
53
+ def_delegators :manifest, :find
54
+
55
+ # Returns an instance of the manifest.
56
+ # @return [AssetMapper::Manifest]
57
+ def manifest
58
+ @manifest ||= Manifest.new(config)
59
+ end
60
+
61
+ # Returns an instance of a manifest generator. This is for files that are watched by asset_mapper.
62
+ # @return [AssetMapper::ManifestGenerator]
63
+ def manifest_generator
64
+ @manifest_generator ||= ManifestGenerator.new(config)
65
+ end
66
+ end
67
+ end