4
4
const baseDir = "json/" , outDir = "../out/" ;
5
5
var lang = /** @type {keyof (typeof conf)["langs"] } */ ( "" ) ;
6
6
var curVer = "" , curDoc = "" , curSubf = "" , pattern = "" ;
7
- var warnEnbl = false , dbg = false , clean = false , force = false , updateVer = false ;
7
+ var warnEnbl = false , dbg = false , clear = false , force = false , updateVer = false ;
8
8
var regGen = RegExp ( "" ) , regHide = RegExp ( "" ) , regControl , progress = 0 ;
9
+
9
10
/** @type {DSConfig } */ var conf ;
10
11
/** @type {DSBase|null } */ var base ;
11
12
/** @type {DSNavs } */ var navs ;
@@ -47,9 +48,9 @@ function Generate(patFunc, patScope, patLang) {
47
48
pattern = patFunc ;
48
49
49
50
if ( patLang && ! conf . langs [ patLang ] )
50
- Throw ( new Error ( `language ${ patLang } not specified in conf.json` ) ) ;
51
+ Throw ( Error ( `language ${ patLang } not specified in conf.json` ) ) ;
51
52
if ( patScope && ! conf . scopes [ patScope ] )
52
- Throw ( new Error ( `scope ${ patScope } not specified in conf.json` ) ) ;
53
+ Throw ( Error ( `scope ${ patScope } not specified in conf.json` ) ) ;
53
54
54
55
const dstDir = getDstDir ( D_BASE ) ;
55
56
if ( ! app . FolderExists ( dstDir ) ) app . MakeFolder ( dstDir ) ;
@@ -63,6 +64,7 @@ function Generate(patFunc, patScope, patLang) {
63
64
// 404 page
64
65
app . CopyFolder ( '404.html' , dstDir + '404.html' ) ;
65
66
67
+ // update forward.js version map
66
68
/** @type {Obj<string> } */
67
69
const latest = { } ;
68
70
const forwardjs = app . ReadFile ( 'docs-base/js/forward.js' ) ;
@@ -73,12 +75,8 @@ function Generate(patFunc, patScope, patLang) {
73
75
} ) ;
74
76
app . WriteFile ( 'docs-base/js/forward.js' , forwardjs . replace ( / ( v e r s i o n s = ) .* ; / , `$1${ JSON . stringify ( latest ) } ;` ) ) ;
75
77
76
- keys ( conf . langs ) . filter ( l => l . match ( patLang ) != null ) . forEach ( l => {
77
- // delete old generated files
78
- if ( patScope + patFunc == "" )
79
- if ( clean ) app . DeleteFolder ( "docs" + getl ( ) ) ;
80
- generateLang ( l ) ;
81
- } ) ;
78
+ // generate all languages
79
+ keys ( conf . langs ) . filter ( l => l . match ( patLang ) != null ) . forEach ( l => generateLang ( l ) ) ;
82
80
}
83
81
84
82
/** @param {LangKeys } l */
@@ -89,13 +87,20 @@ function generateLang(l) {
89
87
scope = { } ;
90
88
base = { } ;
91
89
90
+ // clear lang folder
92
91
if ( ! app . FolderExists ( langDir ) ) Throw ( Error ( `Language '${ lang } ' doesn't exist.` ) ) ;
93
- if ( ! app . FolderExists ( dstDir ) ) app . MakeFolder ( dstDir ) ;
94
- if ( clean || ! app . FolderExists ( dstDir + "font-awesome" ) ) app . CopyFolder ( "font-awesome" , dstDir + "font-awesome" ) ;
95
- if ( clean || ! app . FileExists ( dstDir + "app.js" ) ) app . CopyFolder ( "app.js" , dstDir + "app.js" ) ;
96
- if ( clean || ! app . FolderExists ( dstDir + "css" ) ) app . CopyFolder ( "docs-base/css" , dstDir + "css" ) ;
97
- if ( clean || ! app . FolderExists ( dstDir + "js" ) ) app . CopyFolder ( "docs-base/js" , dstDir + "js" ) ;
98
- if ( clean || ! app . FileExists ( dstDir + "index.html" ) ) app . CopyFolder ( "docs-base/Index.htm" , dstDir + "index.html" ) ;
92
+ if ( app . FolderExists ( dstDir ) && clear ) {
93
+ console . log ( "deleting " + lang ) ;
94
+ app . DeleteFolder ( dstDir ) ;
95
+ } else console . log ( "overwriting " + lang ) ;
96
+
97
+ // update base files
98
+ if ( clear || ! app . FolderExists ( dstDir ) ) app . MakeFolder ( dstDir ) ;
99
+ app . CopyFolder ( "font-awesome" , dstDir + "font-awesome" ) ;
100
+ app . CopyFolder ( "app.js" , dstDir + "app.js" ) ;
101
+ app . CopyFolder ( "docs-base/css" , dstDir + "css" ) ;
102
+ app . CopyFolder ( "docs-base/js" , dstDir + "js" ) ;
103
+ app . CopyFolder ( "docs-base/Index.htm" , dstDir + "index.html" ) ;
99
104
const versions = app . ListFolder ( langDir ) . sort ( ) ;
100
105
101
106
// version index page
@@ -104,17 +109,17 @@ function generateLang(l) {
104
109
. replace ( / ( h r e f | s r c ) = " (? ! h t t p | \/ ) ( \. \. \/ ) ? / g, '$1="../docs/' ) ;
105
110
app . WriteFile ( dstDir + "Docs.htm" , index ) ;
106
111
112
+ // generate all versions
107
113
for ( const v of versions ) generateVersion ( v ) ;
108
114
}
109
115
110
116
/** @param {string } ver */
111
117
function generateVersion ( ver ) {
112
118
curVer = ver ;
113
119
const curDir = getDstDir ( D_VER ) ;
120
+ app . CopyFolder ( "docs-base" , curDir ) ;
114
121
115
- if ( clean || ! app . FolderExists ( curDir ) )
116
- app . CopyFolder ( "docs-base" , curDir ) ;
117
-
122
+ // generate all scopes
118
123
keys ( conf . scopes )
119
124
. filter ( s => s . match ( patScope ) != null )
120
125
. forEach ( scope => {
@@ -145,36 +150,34 @@ function generateScope(name) {
145
150
if ( ! app . FolderExists ( scopeDir + "samples" ) ) app . MakeFolder ( scopeDir + "samples" ) ;
146
151
147
152
// check file dates for update
148
- if ( ! force && ! clean && newestFileDate ( dstDir ) > newestFileDate ( scopeDir , "generate.js" ) )
153
+ if ( ! force && ! clear && newestFileDate ( dstDir ) > newestFileDate ( scopeDir , "generate.js" ) )
149
154
return console . log ( `Skipped ${ lang } .${ curVer } .${ name } .${ pattern || '*' } ` ) ;
150
155
151
156
app . ShowProgressBar ( `Generating ${ lang } .${ curVer } .${ name } .${ pattern || '*' } ` ) ;
152
157
parseInput ( ) ;
153
158
154
- if ( ! clean ) {
159
+ // clear nav & scope folder for generating
160
+ if ( ! clear ) {
155
161
const verDir = getDstDir ( D_VER ) ;
156
- // delete navs
157
- if ( "navs" . match ( regGen ) )
158
- app . ListFolder ( verDir ) . map ( ( f ) =>
159
- f . startsWith ( name + "_" ) && app . DeleteFile ( verDir + f ) ) ;
160
- // delete docs
161
- else app . DeleteFolder ( dstDir ) ;
162
+ if ( ! "navs" . match ( regGen ) ) app . DeleteFolder ( dstDir ) ;
163
+ for ( const f of app . ListFolder ( verDir ) )
164
+ f . startsWith ( name + "_" ) && app . DeleteFile ( verDir + f ) ;
162
165
}
163
-
164
166
if ( ! app . FolderExists ( dstDir ) ) app . MakeFolder ( dstDir ) ;
165
167
166
- // start generating
168
+ // generate nav pages
167
169
if ( "navs" . match ( regGen ) ) {
168
170
generateNavigators ( navs , conf . scopes [ curScope ] || curScope ) ;
169
171
var missNavs = Object . entries ( scope ) . filter ( m => ! m [ 1 ] . hasNav ) . map ( m => m [ 1 ] . name || m [ 0 ] ) . filter ( nothidden ) ;
170
172
if ( base && missNavs . length > 0 ) console . log ( `missing navigators in ${ curScope } : ${ missNavs . join ( ", " ) } \n` ) ;
171
173
}
172
174
175
+ // generate doc pages
173
176
generateDocs ( scope ) ;
174
-
175
177
app . HideProgressBar ( ) ;
176
178
}
177
179
180
+ // read all input json files
178
181
function parseInput ( ) {
179
182
var newScope = scope , newBase = base ;
180
183
@@ -290,7 +293,6 @@ function generateNavigators(navs, name, pfx) {
290
293
app . WriteFile ( curDoc , htmlNavi ( name , addcontent , nav , ! nofilter ) ) ;
291
294
}
292
295
293
- //generates doc files
294
296
/** @param {DSScope } scope */
295
297
function generateDocs ( scope ) {
296
298
curDoc = getSrcDir ( D_SCOPE ) ;
@@ -1369,9 +1371,10 @@ OPTIONS:
1369
1371
adds a language to conf.json
1370
1372
-as --addscope=<SCOPE-ABBREV>=<SCOPE-NAME>
1371
1373
adds a scope to conf.json
1372
- -c --clean regenerate the docs completely
1374
+ -c --clear regenerate the docs completely
1373
1375
-u --update update the docs version number
1374
1376
-f --force force generation of otherwise skipped
1377
+ -C --clean delete temp files (out/ files/json/*/)
1375
1378
-n --nogen don't generate
1376
1379
-s --server start webserver after generating
1377
1380
-v --verbose print more debug logs
@@ -1429,7 +1432,7 @@ if (typeof app == "undefined") {
1429
1432
var patLang = "" , patScope = "" , patFunc = "" ;
1430
1433
/** @type {{add: boolean, langs: Obj<string>, scopes: Obj<string>} } */
1431
1434
var addcfg = { add : false , langs : { } , scopes : { } } ;
1432
- var nogen = false , startServer = false ;
1435
+ var nogen = false , startServer = false , clean = false ;
1433
1436
1434
1437
for ( var spat of process . argv . slice ( 2 ) ) {
1435
1438
if ( spat . startsWith ( "-" ) ) {
@@ -1438,7 +1441,8 @@ if (typeof app == "undefined") {
1438
1441
case "-l" : case "--lang" : lang = /** @type {LangKeys } */ ( pat [ 1 ] ) ; break ;
1439
1442
case "-n" : case "--nogen" : nogen = true ; break ;
1440
1443
case "-v" : case "--verbose" : dbg = true ; break ;
1441
- case "-c" : case "--clean" : clean = true ; break ;
1444
+ case "-c" : case "--clear" : clear = true ; break ;
1445
+ case "-C" : case "--clean" : clean = true ; break ;
1442
1446
case "-u" : case "--update" : updateVer = true ; break ;
1443
1447
case "-f" : case "--force" : force = true ; break ;
1444
1448
case "-h" : case "--help" : app . Alert ( help ) ; process . exit ( 0 ) ; case "-s" : startServer = true ; break ;
@@ -1464,6 +1468,18 @@ if (typeof app == "undefined") {
1464
1468
}
1465
1469
}
1466
1470
1471
+ if ( clean ) {
1472
+ const glob = require ( 'glob' ) . sync ;
1473
+ for ( const dir of glob ( baseDir + '*/' ) ) {
1474
+ console . log ( `Deleting ${ l } ...` ) ;
1475
+ app . DeleteFolder ( dir ) ;
1476
+ }
1477
+ console . log ( `Deleting ${ outDir } ...` ) ;
1478
+ app . DeleteFolder ( outDir ) ;
1479
+ console . log ( "done." ) ;
1480
+ process . exit ( ) ;
1481
+ }
1482
+
1467
1483
if ( addcfg . add ) {
1468
1484
var conf = /** @type {DSConfig } */ ( JSON . parse ( app . ReadFile ( "conf.json" ) ) ) ;
1469
1485
if ( ! conf ) Throw ( Error ( "conf.json not readable." ) ) ;
0 commit comments