@@ -11,6 +11,8 @@ import { DatabaseConfig } from "./SyncConfig";
11
11
import { PropertiesParser } from "./PropertiesParser" ;
12
12
import { logger } from "./logger" ;
13
13
14
+ const debug = require ( "debug" ) ( "page" ) ;
15
+
14
16
const fs = fsc . promises ;
15
17
16
18
export class PageRenderer {
@@ -25,12 +27,19 @@ export class PageRenderer {
25
27
const props = this . propertiesParser . filter ( config , parsed ) ;
26
28
27
29
const name = props . values [ "name" ] ;
30
+ if ( ! name ) {
31
+ this . throwMissingRequiredProperty ( "name" , page ) ;
32
+ }
33
+
34
+ const category = props . values [ props . keys . get ( config . properties . category ) ! ! ] ;
35
+ if ( category ) {
36
+ this . throwMissingRequiredProperty ( config . properties . category , page ) ;
37
+ }
38
+
28
39
const nameSlug = slugify ( name ) ;
29
- const categorySlug =
30
- config . parentCategory + slugify ( props . values [ "category" ] ) ;
40
+ const categorySlug = config . pageCategoryValuePrefix + slugify ( category ) ;
31
41
32
- const dir = `docs/${ categorySlug } ` ;
33
- const file = `${ dir } /${ nameSlug } .md` ;
42
+ const file = `${ config . outDir } /${ nameSlug } .md` ;
34
43
35
44
// Design: all the rendering performance could be greatly enhanced writing directly to output streams instead
36
45
// of concatenating all in memory. OTOH naively concatenatic strings is straightforward, easier to debug and rendering
@@ -42,7 +51,7 @@ export class PageRenderer {
42
51
file,
43
52
properties : props ,
44
53
render : async ( ) => {
45
- const assetWriter = new AssetWriter ( dir ) ;
54
+ const assetWriter = new AssetWriter ( config . outDir ) ;
46
55
47
56
const frontmatter = this . frontmatterRenderer . renderFrontmatter (
48
57
props . values
@@ -53,11 +62,18 @@ export class PageRenderer {
53
62
assetWriter
54
63
) ;
55
64
56
- await fs . mkdir ( dir , { recursive : true } ) ;
65
+ await fs . mkdir ( config . outDir , { recursive : true } ) ;
57
66
await fs . writeFile ( file , frontmatter + body ) ;
58
67
59
68
logger . info ( "wrote: " + file ) ;
60
69
} ,
61
70
} ;
62
71
}
72
+
73
+ private throwMissingRequiredProperty ( propertyName : string , page : Page ) {
74
+ const msg = `Page ${ page . url } is missing required property ${ propertyName } ` ;
75
+ debug ( msg + "\n%O" , page ) ;
76
+
77
+ throw new Error ( msg ) ;
78
+ }
63
79
}
0 commit comments