1
- import axios from 'axios' ;
2
1
import * as emoji from 'node-emoji'
3
2
import { JekyllMarkdownParser } from './jekyll-markdown-parser' ;
4
3
import { readdir , readFile } from 'fs/promises' ;
@@ -7,21 +6,9 @@ import { BlogEntry } from './types';
7
6
8
7
export class BlogService {
9
8
10
- private blogListFetched = this . getBlogListFromAPI ( ) ;
9
+ constructor ( private markdownBaseUrl : string ) { }
11
10
12
- constructor ( private settings : {
13
- headers : {
14
- 'User-Agent' : string ,
15
- 'Authorization' : string
16
- } ,
17
- contentsRepo : string ,
18
- branch : string ,
19
- markdownBaseUrl : string
20
- } ) { }
21
11
22
- getBlogList ( ) {
23
- return this . blogListFetched ;
24
- }
25
12
26
13
async getBlogEntry ( slug : string ) : Promise < BlogEntry > {
27
14
const blogList = await this . getBlogList ( ) ;
@@ -53,29 +40,26 @@ export class BlogService {
53
40
return readFile ( path , 'utf8' ) ;
54
41
}
55
42
56
- private async getBlogListFromAPI ( ) {
43
+ async getBlogList ( ) {
57
44
const blogDirs = await this . readBlogFolders ( ) ;
58
45
const blogEntries : BlogEntry [ ] = [ ] ;
59
46
60
47
for ( const blogDir of blogDirs ) {
61
-
62
48
try {
63
49
const readme = await this . readBlogFileFromFolder ( blogDir ) ;
64
50
const blogEntry = this . readmeToBlogEntry ( readme , blogDir ) ;
65
51
blogEntries . push ( blogEntry ) ;
66
52
67
53
} catch ( e : any ) {
68
54
const errorBlogEntry = {
69
- slug : this . slugifyPath ( blogDir ) ,
70
- html_url : '' ,
55
+ slug : blogDir ,
71
56
error : e . message || 'Error' ,
72
57
meta : {
73
58
title : 'A minor error occurred while reading: ' + blogDir ,
74
59
hidden : true
75
60
}
76
61
} as BlogEntry ;
77
62
blogEntries . push ( errorBlogEntry ) ;
78
-
79
63
}
80
64
}
81
65
@@ -84,36 +68,23 @@ export class BlogService {
84
68
85
69
86
70
private readmeToBlogEntry ( readme : string , folder : string ) {
87
- const parser = new JekyllMarkdownParser ( this . settings . markdownBaseUrl + folder ) ;
71
+ const parser = new JekyllMarkdownParser ( this . markdownBaseUrl + folder ) ;
88
72
const parsedJekyllMarkdown = parser . parse ( readme ) ;
89
73
90
74
const meta = parsedJekyllMarkdown . parsedYaml || { } ;
91
75
92
76
if ( meta . thumbnail &&
93
77
! meta . thumbnail . startsWith ( 'http' ) &&
94
78
! meta . thumbnail . startsWith ( '//' ) ) {
95
- meta . thumbnail
96
- = this . settings . markdownBaseUrl + folder + meta . thumbnail ;
79
+ meta . thumbnail = this . markdownBaseUrl + folder + '/' + meta . thumbnail ;
97
80
}
98
81
99
82
return {
100
- slug : this . slugifyPath ( folder ) ,
83
+ slug : folder ,
101
84
html : emoji . emojify ( parsedJekyllMarkdown . html ) ,
102
85
meta : meta
103
86
} as BlogEntry ;
104
87
}
105
-
106
- private slugifyPath ( path : string ) : string {
107
- if ( ! path ) {
108
- return 'error - no path??' ;
109
- }
110
-
111
- return path
112
- . replace ( / R E A D M E \. m d $ / , '' )
113
- . replace ( 'blog/' , '' )
114
- . replace ( / \/ $ / , '' )
115
- . replace ( '/' , '|' ) ;
116
- }
117
88
}
118
89
119
90
0 commit comments