@@ -32,18 +32,23 @@ def import(*packages, env: "production", from: "jspm")
3232 end
3333 end
3434
35- def pin_for ( package , url )
36- %(pin "#{ package } ", to: "#{ url } ")
35+ def pin_for ( package , url , integrity : false )
36+ if integrity
37+ %(pin "#{ package } ", to: "#{ url } ", integrity: "#{ integrity } ")
38+ else
39+ %(pin "#{ package } ", to: "#{ url } ")
40+ end
3741 end
3842
39- def vendored_pin_for ( package , url )
43+ def vendored_pin_for ( package , url , integrity : false )
4044 filename = package_filename ( package )
4145 version = extract_package_version_from ( url )
46+ integrity_suffix = %(, integrity: "#{ integrity } ") if integrity
4247
4348 if "#{ package } .js" == filename
44- %(pin "#{ package } " # #{ version } )
49+ %(pin "#{ package } "#{ integrity_suffix } # #{ version } )
4550 else
46- %(pin "#{ package } ", to: "#{ filename } " # #{ version } )
51+ %(pin "#{ package } ", to: "#{ filename } "#{ integrity_suffix } # #{ version } )
4752 end
4853 end
4954
@@ -62,6 +67,13 @@ def remove(package)
6267 remove_package_from_importmap ( package )
6368 end
6469
70+ def calculate_integrity ( package : nil , url : nil )
71+ contents = File . read ( vendored_package_path ( package ) ) if package
72+ contents = Net ::HTTP . get_response ( URI ( url ) ) . body if url
73+ integrity = Digest ::SHA384 . base64digest ( contents )
74+ "sha384-#{ integrity } "
75+ end
76+
6577 private
6678 def post_json ( body )
6779 Net ::HTTP . post ( self . class . endpoint , body . to_json , "Content-Type" => "application/json" )
0 commit comments