11import fs from 'fs-extra'
22import shell from 'shelljs'
3- import { dirname , basename , extname } from 'path'
3+ import { relative , dirname , basename , extname } from 'path'
44import fetch from 'node-fetch'
55import { extension } from 'mime-types'
6+ import { glob } from 'glob'
67
78shell . config . fatal = true
89
@@ -129,7 +130,7 @@ function downloadFile(sourceFileUrl, targetFilePath) {
129130 } )
130131}
131132
132- function downloadImages ( body , folder , filename ) {
133+ function downloadImages ( body , folder , filename , baseImagePath = './images' ) {
133134 return new Promise ( async ( resolve , reject ) => {
134135 try {
135136 const images = body ?. match ( / [ " ( ] h t t p s : \/ \/ g i t h u b \. c o m \/ ( .+ ) \/ a s s e t s \/ ( .+ ) [ ) " ] / g) || [ ]
@@ -139,8 +140,8 @@ function downloadImages(body, folder, filename) {
139140 const sourceUrl = images [ n ] . replace ( / ^ [ " ( ] ( .+ ) [ ) " ] $ / , '$1' )
140141 fs . ensureDirSync ( folder )
141142 const realTargetFilename = basename ( await downloadFile ( sourceUrl , targetPath ) )
142- body = body . replace ( `"${ sourceUrl } "` , '"./images/' + realTargetFilename + '"' )
143- body = body . replace ( `(${ sourceUrl } )` , '(./images/' + realTargetFilename + ')' )
143+ body = body . replace ( `"${ sourceUrl } "` , `" ${ baseImagePath } / ${ realTargetFilename } "` )
144+ body = body . replace ( `(${ sourceUrl } )` , `( ${ baseImagePath } / ${ realTargetFilename } )` )
144145 }
145146 return resolve ( body )
146147 } catch ( err ) {
@@ -237,6 +238,30 @@ async function backup() {
237238 // Clone repository
238239 shell . exec ( `git clone https://${ TOKEN } @github.com/${ USERNAME } /${ repository . name } .git ${ folder } /repositories/${ repository . name } /repository` )
239240
241+ // Get markdown files
242+ const repoFolder = `${ folder } /repositories/${ repository . name } /repository/`
243+ const imageFolder = `${ folder } /repositories/${ repository . name } /images/`
244+ const markdownFiles = await glob ( `${ repoFolder } **/*.{md,MD}` )
245+
246+ // Loop markdown files
247+ for ( const markdownFile of markdownFiles ) {
248+
249+ // Download markdown images
250+ const baseImagePath = relative ( dirname ( markdownFile ) , imageFolder )
251+ const imageFileBasename = markdownFile . replace ( repoFolder , '' ) . replace ( / \/ / g, '_' ) . replace ( / \. m d $ / i, '' )
252+ let markdownFileContent = fs . readFileSync ( markdownFile , { encoding : 'utf8' } )
253+ markdownFileContent = await downloadImages (
254+ markdownFileContent ,
255+ imageFolder ,
256+ `markdown_${ imageFileBasename } _{id}` ,
257+ baseImagePath
258+ )
259+
260+ // Update markdown file
261+ fs . writeFileSync ( markdownFile , markdownFileContent )
262+
263+ }
264+
240265 }
241266
242267 // Get user details
0 commit comments