@@ -157,7 +157,7 @@ class Package {
157
157
* src: {
158
158
* type: 'url',
159
159
* url: string,
160
- * sha1 ?: string,
160
+ * hash ?: string,
161
161
* } | {
162
162
* type: 'local',
163
163
* },
@@ -200,25 +200,36 @@ class Package {
200
200
*/
201
201
static create (
202
202
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 = { } }
205
205
) {
206
206
const { scope = '' , name } = Id . parse ( pkgInfo . name ) ;
207
207
208
208
/** @type {Package['src'] } */
209
209
let src ;
210
210
if ( resolved && resolved . startsWith ( 'https' ) ) {
211
211
const parsedUrl = new URL ( resolved ) ;
212
+ let hash = integrity ;
213
+
212
214
// prettier-ignore
213
- if ( [ 'registry.yarnpkg.com' , 'registry.npmjs.org' ] . includes ( parsedUrl . host ) ) {
215
+ if ( ! hash ) {
216
+ let urlSha1 ;
217
+ if ( [ 'registry.yarnpkg.com' , 'registry.npmjs.org' ] . includes ( parsedUrl . host ) ) {
218
+ urlSha1 = parsedUrl . hash . slice ( 1 ) ;
219
+ if ( urlSha1 ) { urlSha1 = `sha1-${ urlSha1 } ` }
220
+ }
221
+ hash = urlSha1 ;
222
+ }
223
+
224
+ if ( hash ) {
214
225
src = {
215
- sha1 : parsedUrl . hash . slice ( 1 ) , // cut off the first ('#') character
226
+ hash,
216
227
url : parsedUrl . origin + parsedUrl . pathname ,
217
228
type : 'url' ,
218
229
} ;
219
230
} else {
220
231
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
222
233
url : parsedUrl . origin + parsedUrl . pathname ,
223
234
type : 'url' ,
224
235
} ;
@@ -306,7 +317,7 @@ class Package {
306
317
renderSrc ( ) {
307
318
switch ( this . src . type ) {
308
319
case 'url' :
309
- const { url, sha1 } = this . src ;
320
+ const { url, hash } = this . src ;
310
321
// Some of the urls can look like "https://codeload.github.com/xolvio/cucumber-js/tar.gz/cf953cb5b5de30dbcc279f59e4ebff3aa040071c",
311
322
// i.e. no extention given. That's why Nix unable to recognize the type of archive so we need to have
312
323
// name specified explicitly to all Nix to infer the archive type.
@@ -339,13 +350,8 @@ class Package {
339
350
: ''
340
351
}
341
352
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
353
+ hash = ${ hash ? `"${ hash } "` : `abort ''
354
+ Failed to infer hash of the \`${ this . renderKey ( ) } \` package source from
349
355
\`${ url } \`.
350
356
351
357
Override \`"${ this . renderKey ( ) } ".src.sha256\` attribute in order to provide this missing piece to Nix.
0 commit comments