1
1
import fs from 'fs-extra'
2
2
import glob from 'glob'
3
- import path from 'path'
4
- import RSVP from 'rsvp'
5
3
import { dasherize } from 'inflected'
4
+ import { get as deepGet } from 'lodash'
5
+ import { getLatestPatchVersions } from './get-latest-patch-versions'
6
6
7
7
export default function readDocs (
8
8
projects ,
9
9
specificVersion = '' ,
10
10
ignorePreviouslyIndexedDoc = false ,
11
11
runClean = false
12
12
) {
13
- console . log ( 'Reading project files' )
13
+ return projects . reduce ( async ( prevPromise , projectName ) => {
14
+ let prevValue = await prevPromise
15
+ let prevIndexedVersions = [ ]
14
16
15
- let docs = { }
16
- projects . forEach ( projectName => {
17
- let fileName = `${ dasherize ( projectName ) } -docs.json`
18
- let folders = glob . sync ( `tmp/s3-docs/v${ specificVersion } */${ fileName } ` )
19
17
let projectFile = `tmp/json-docs/${ projectName } /projects/${ projectName } .json`
20
- let prevIndexedVersions = [ ]
21
- if ( fs . existsSync ( projectFile ) ) {
22
- projectFile = JSON . parse ( fs . readFileSync ( projectFile ) )
23
- projectFile . data . relationships [ 'project-versions' ] . data . forEach ( ( { id } ) => {
24
- let version = id . replace ( `${ projectName } -` , '' )
25
- prevIndexedVersions . push ( `tmp/s3-docs/v${ version } /${ projectName } -docs.json` )
26
- } )
18
+
19
+ console . log ( projectFile , await fs . pathExists ( projectFile ) )
20
+
21
+ if ( await fs . pathExists ( projectFile ) ) {
22
+ projectFile = await fs . readJson ( projectFile )
23
+
24
+ prevIndexedVersions = deepGet ( projectFile , 'data.relationships.project-versions.data' ) . map (
25
+ ( { id } ) => id . replace ( `${ projectName } -` , '' )
26
+ )
27
27
}
28
28
29
+ let folders = glob . sync ( `tmp/s3-docs/v${ specificVersion } */${ dasherize ( projectName ) } -docs.json` )
30
+
31
+ let availableSourceVersions = folders . map ( x =>
32
+ x . replace ( 'tmp/s3-docs/v' , '' ) . replace ( `/${ projectName } -docs.json` , '' )
33
+ )
34
+
29
35
if ( ! runClean ) {
36
+ availableSourceVersions = availableSourceVersions . filter (
37
+ version => ! prevIndexedVersions . includes ( version )
38
+ )
39
+
30
40
folders = folders . filter ( f => {
31
41
if ( ! prevIndexedVersions . includes ( f ) || ignorePreviouslyIndexedDoc ) {
32
42
return f
@@ -37,25 +47,23 @@ export default function readDocs(
37
47
} )
38
48
}
39
49
40
- docs [ projectName ] = folders . map ( docs => {
41
- let version = path . basename ( path . dirname ( docs ) ) . replace ( 'v' , '' )
42
- let data
43
-
44
- try {
45
- data = JSON . parse ( fs . readFileSync ( docs , { encoding : 'utf8' } ) )
46
- } catch ( e ) {
47
- console . error ( docs )
48
- console . error ( e . stack )
49
- process . exit ( 1 )
50
- }
51
- console . log ( 'returning from readDocs' )
52
- return {
53
- project : projectName ,
54
- version,
55
- data,
56
- }
57
- } )
58
- } )
59
-
60
- return RSVP . resolve ( docs )
50
+ availableSourceVersions = getLatestPatchVersions ( availableSourceVersions )
51
+
52
+ let docs = await Promise . all (
53
+ availableSourceVersions . map ( async version => {
54
+ let data
55
+
56
+ try {
57
+ data = await fs . readJSON ( `tmp/s3-docs/v${ version } /${ projectName } -docs.json` )
58
+ return { project : projectName , version, data }
59
+ } catch ( e ) {
60
+ console . error ( version )
61
+ console . error ( e . stack )
62
+ process . exit ( 1 )
63
+ }
64
+ } )
65
+ )
66
+
67
+ return { ...prevValue , [ projectName ] : docs }
68
+ } , Promise . resolve ( { } ) )
61
69
}
0 commit comments