55class Propshaft ::Compiler ::CssAssetUrls < Propshaft ::Compiler
66 ASSET_URL_PATTERN = /url\( \s *["']?(?!(?:\# |%23|data|http|\/ \/ ))([^"'\s ?#)]+)([#?][^"')]+)?\s *["']?\) /
77
8- def compile ( logical_path , input )
9- input . gsub ( ASSET_URL_PATTERN ) { asset_url resolve_path ( logical_path . dirname , $1) , logical_path , $2, $1 }
8+ def compile ( asset , input )
9+ input . gsub ( ASSET_URL_PATTERN ) { asset_url resolve_path ( asset . logical_path . dirname , $1) , asset . logical_path , $2, $1 }
10+ end
11+
12+ def referenced_by ( asset , references : Set . new )
13+ asset . content . scan ( ASSET_URL_PATTERN ) . each do |referenced_asset_url , _ |
14+ referenced_asset = load_path . find ( resolve_path ( asset . logical_path . dirname , referenced_asset_url ) )
15+
16+ if referenced_asset && references . exclude? ( referenced_asset )
17+ references << referenced_asset
18+ references . merge referenced_by ( referenced_asset , references : references )
19+ end
20+ end
21+
22+ references
1023 end
1124
1225 private
@@ -21,7 +34,7 @@ def resolve_path(directory, filename)
2134 end
2235
2336 def asset_url ( resolved_path , logical_path , fingerprint , pattern )
24- if asset = assembly . load_path . find ( resolved_path )
37+ if asset = load_path . find ( resolved_path )
2538 %[url("#{ url_prefix } /#{ asset . digested_path } #{ fingerprint } ")]
2639 else
2740 Propshaft . logger . warn "Unable to resolve '#{ pattern } ' for missing asset '#{ resolved_path } ' in #{ logical_path } "
0 commit comments