@@ -2,42 +2,50 @@ const path = require('path')
22const walk = require ( 'walk-sync' ) . entries
33const Page = require ( './page' )
44const languages = require ( './languages' )
5- const fs = require ( 'fs' )
5+ const { mapLimit, filterLimit } = require ( 'async' )
6+ const FILE_READ_LIMIT = 500
67
78async function loadPageList ( ) {
89 const pageList = [ ]
910
1011 // load english pages
1112 const englishPath = path . join ( __dirname , '..' , languages . en . dir , 'content' )
12- const englishPages = walk ( englishPath )
13- . filter ( ( { relativePath } ) => {
14- return relativePath . endsWith ( '.md' ) &&
15- ! relativePath . includes ( 'README' )
16- } )
17- . map ( fileData => new Page ( { ...fileData , languageCode : languages . en . code } ) )
18-
13+ const englishPaths = walk ( englishPath )
14+ . filter ( ( { relativePath } ) =>
15+ relativePath . endsWith ( '.md' ) && ! relativePath . includes ( 'README' )
16+ )
17+ const englishPages = await mapLimit (
18+ englishPaths ,
19+ FILE_READ_LIMIT ,
20+ async fileData => await Page . init ( { ...fileData , languageCode : languages . en . code } )
21+ )
1922 pageList . push ( ...englishPages )
2023
2124 // load matching pages in other languages
22- for ( const page of englishPages ) {
23- for ( const language of Object . values ( languages ) ) {
24- if ( language . code === 'en' ) continue
25-
25+ let localizedPaths = Object . values ( languages )
26+ . filter ( ( { code } ) => code !== 'en' )
27+ . map ( language => {
2628 const basePath = path . join ( __dirname , '..' , language . dir , 'content' )
27- const localizedPath = path . join ( basePath , page . relativePath )
28- try {
29- fs . statSync ( localizedPath )
30- } catch ( _ ) {
31- continue
32- }
33-
34- pageList . push ( new Page ( {
35- relativePath : page . relativePath ,
29+ return englishPages . map ( page => ( {
3630 basePath,
31+ relativePath : page . relativePath ,
32+ localizedPath : path . join ( basePath , page . relativePath ) ,
3733 languageCode : language . code
3834 } ) )
39- }
40- }
35+ } )
36+ . flat ( )
37+ localizedPaths = await filterLimit (
38+ localizedPaths ,
39+ FILE_READ_LIMIT ,
40+ async ( { localizedPath } ) => Page . exists ( localizedPath )
41+ )
42+ const localizedPages = await mapLimit (
43+ localizedPaths ,
44+ FILE_READ_LIMIT ,
45+ async ( { basePath, relativePath, languageCode } ) =>
46+ await Page . init ( { basePath, relativePath, languageCode } )
47+ )
48+ pageList . push ( ...localizedPages )
4149
4250 return pageList
4351}
0 commit comments