@@ -157,7 +157,7 @@ class Package {
157157 * src: {
158158 * type: 'url',
159159 * url: string,
160- * sha1 ?: string,
160+ * hash ?: string,
161161 * } | {
162162 * type: 'local',
163163 * },
@@ -200,25 +200,36 @@ class Package {
200200 */
201201 static create (
202202 pkgInfo ,
203- // @ts -ignore because there is no optionalDependencies in the type
204- { version, resolved, dependencies = { } , optionalDependencies = { } }
203+ // @ts -ignore because type lacks: integrity, optionalDependencies
204+ { version, integrity , resolved, dependencies = { } , optionalDependencies = { } }
205205 ) {
206206 const { scope = '' , name } = Id . parse ( pkgInfo . name ) ;
207207
208208 /** @type {Package['src'] } */
209209 let src ;
210210 if ( resolved && resolved . startsWith ( 'https' ) ) {
211211 const parsedUrl = new URL ( resolved ) ;
212+ let hash = integrity ;
213+ let sha1 ;
214+
212215 // prettier-ignore
213- if ( [ 'registry.yarnpkg.com' , 'registry.npmjs.org' ] . includes ( parsedUrl . host ) ) {
216+ if ( ! hash && [ 'registry.yarnpkg.com' , 'registry.npmjs.org' ] . includes ( parsedUrl . host ) ) {
217+ const urlSha1 = parsedUrl . hash . slice ( 1 ) ;
218+ if ( urlSha1 ) {
219+ sha1 = `sha1-${ urlSha1 } ` ;
220+ }
221+ }
222+
223+ if ( hash || sha1 ) {
214224 src = {
215- sha1 : parsedUrl . hash . slice ( 1 ) , // cut off the first ('#') character
225+ hash,
226+ sha1,
216227 url : parsedUrl . origin + parsedUrl . pathname ,
217228 type : 'url' ,
218229 } ;
219230 } else {
220231 src = {
221- sha1 : undefined , // We don't provide sha in order to force to override it manually
232+ hash : undefined , // We don't provide hash in order to force to override it manually
222233 url : parsedUrl . origin + parsedUrl . pathname ,
223234 type : 'url' ,
224235 } ;
@@ -306,7 +317,9 @@ class Package {
306317 renderSrc ( ) {
307318 switch ( this . src . type ) {
308319 case 'url' :
309- const { url, sha1 } = this . src ;
320+ const { url, hash } = this . src ;
321+ const hashKey = hash ? "hash" : "sha1" ;
322+ const hashValue = this . src [ hashKey ] ;
310323 // Some of the urls can look like "https://codeload.github.com/xolvio/cucumber-js/tar.gz/cf953cb5b5de30dbcc279f59e4ebff3aa040071c",
311324 // i.e. no extention given. That's why Nix unable to recognize the type of archive so we need to have
312325 // name specified explicitly to all Nix to infer the archive type.
@@ -339,13 +352,8 @@ class Package {
339352 : ''
340353 }
341354 url = "${ url } ";
342- ${
343- sha1
344- ? `sha1 = "${ sha1 } "`
345- : `sha256 = abort ''
346-
347-
348- Failed to infer \`sha256\` hash of the \`${ this . renderKey ( ) } \` package source from
355+ ${ hashKey } = ${ hashValue ? `"${ hashValue } "` : `abort ''
356+ Failed to infer hash of the \`${ this . renderKey ( ) } \` package source from
349357 \`${ url } \`.
350358
351359 Override \`"${ this . renderKey ( ) } ".src.sha256\` attribute in order to provide this missing piece to Nix.
0 commit comments