@@ -38,7 +38,12 @@ var topicPipeline = promisify(trough().use(searchTopic).run)
38
38
var orgPipeline = promisify ( trough ( ) . use ( searchOrg ) . run )
39
39
var repoPipeline = promisify ( trough ( ) . use ( crawlRepo ) . run )
40
40
var pkgPipeline = promisify (
41
- trough ( ) . use ( getManifest ) . use ( getPackage ) . use ( getDownloads ) . use ( getSize ) . run
41
+ trough ( )
42
+ . use ( getManifest )
43
+ . use ( getPackage )
44
+ . use ( getReadme )
45
+ . use ( getDownloads )
46
+ . use ( getSize ) . run
42
47
)
43
48
44
49
var main = promisify (
@@ -104,7 +109,7 @@ async function findRepositories(ctx) {
104
109
concurrency
105
110
)
106
111
107
- return { ...ctx , projects : results . map ( ( d ) => d . project ) }
112
+ return { ...ctx , repos , projects : results . map ( ( d ) => d . project ) }
108
113
}
109
114
110
115
async function findPackages ( ctx ) {
@@ -442,7 +447,6 @@ async function getPackage(ctx) {
442
447
var keywords = body . collected . metadata . keywords || [ ]
443
448
var license = body . collected . metadata . license || null
444
449
var deprecated = body . collected . metadata . deprecated
445
- var readme = body . collected . metadata . readme || ''
446
450
var latest = body . collected . metadata . version || null
447
451
var repos = body . collected . metadata . repository
448
452
var url = ( repos && repos . url ) || ''
@@ -460,12 +464,6 @@ async function getPackage(ctx) {
460
464
return
461
465
}
462
466
463
- if ( ! readme || readme . length < 20 ) {
464
- console . warn ( '%s#%s: ignoring package without readme' , repo , manifest )
465
- ctx . proper = false
466
- return
467
- }
468
-
469
467
if ( ! url ) {
470
468
console . warn ( '%s#%s: ignoring unknown repo' , repo , manifest )
471
469
ctx . proper = false
@@ -498,7 +496,6 @@ async function getPackage(ctx) {
498
496
499
497
return {
500
498
...ctx ,
501
- readme,
502
499
packageDist : {
503
500
name,
504
501
manifestBase,
@@ -512,6 +509,82 @@ async function getPackage(ctx) {
512
509
}
513
510
}
514
511
512
+ async function getReadme ( ctx ) {
513
+ var { proper, manifestBase, project} = ctx
514
+ var { repo} = project
515
+ var [ owner , name ] = repo . split ( '/' )
516
+ var base = ( project . default || 'master' ) + ':'
517
+ var response
518
+
519
+ if ( ! proper ) {
520
+ return
521
+ }
522
+
523
+ if ( manifestBase ) base += manifestBase + '/'
524
+
525
+ // Instead of going through the folder and looking for the first that matches
526
+ // `/^readme(?=\.|$)/i`, we throw the frequently used ones at GH.
527
+ try {
528
+ response = await fetch ( ghEndpoint , {
529
+ method : 'POST' ,
530
+ body : JSON . stringify ( {
531
+ query : `
532
+ query($owner: String!, $name: String!, $umd: String!, $u: String!, $cmd: String!, $c: String!, $lmd: String!, $l: String!) {
533
+ repository(owner: $owner, name: $name) {
534
+ umd: object(expression: $umd) { ... on Blob { text } }
535
+ u: object(expression: $u) { ... on Blob { text } }
536
+ cmd: object(expression: $cmd) { ... on Blob { text } }
537
+ c: object(expression: $c) { ... on Blob { text } }
538
+ lmd: object(expression: $lmd) { ... on Blob { text } }
539
+ l: object(expression: $l) { ... on Blob { text } }
540
+ }
541
+ }
542
+ ` ,
543
+ variables : {
544
+ owner,
545
+ name,
546
+ umd : base + 'README.md' ,
547
+ u : base + 'README' ,
548
+ cmd : base + 'Readme.md' ,
549
+ c : base + 'Readme' ,
550
+ lmd : base + 'readme.md' ,
551
+ l : base + 'readme'
552
+ }
553
+ } ) ,
554
+ headers : {
555
+ 'Content-Type' : 'application/json' ,
556
+ Authorization : 'bearer ' + ghToken
557
+ }
558
+ } ) . then ( ( x ) => x . json ( ) )
559
+ } catch ( error ) {
560
+ console . warn ( 'Could not fetch `readme.md`:' , error )
561
+ }
562
+
563
+ var repository = ( response . data || { } ) . repository || { }
564
+ var object =
565
+ repository . umd ||
566
+ repository . u ||
567
+ repository . cmd ||
568
+ repository . c ||
569
+ repository . lmd ||
570
+ repository . l
571
+ var readme = ( object || { } ) . text || ''
572
+
573
+ if ( ! object ) {
574
+ console . warn ( '%s#%s: could not find readme' , repo , base )
575
+ ctx . proper = false
576
+ return
577
+ }
578
+
579
+ if ( readme . length < 20 ) {
580
+ console . warn ( '%s#%s: ignoring package without readme' , repo , base )
581
+ ctx . proper = false
582
+ return
583
+ }
584
+
585
+ ctx . readme = readme
586
+ }
587
+
515
588
async function getDownloads ( ctx ) {
516
589
var { proper, packageDist} = ctx
517
590
// See below: `npmToken = ctx.npmToken`.
0 commit comments