-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathindex.js
58 lines (49 loc) · 1.53 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
const util = require('util')
const fs = require('fs')
const path = require('path')
const { inlineSource } = require('inline-source')
const readdirp = require('readdirp')
const writeFile = util.promisify(fs.writeFile)
const getHtmlFiles = async (directory) => {
const files = await readdirp.promise(directory, {
fileFilter: '*.html',
directoryFilter: ['!node_modules']
})
return files.map((file) => file.fullPath)
}
const getHtmlWithInlinedSources = async ({
htmlFiles,
inputs,
constants,
utils
}) => {
try {
const inlineSourcePromises = htmlFiles.map((file) =>
inlineSource(file, { ...inputs, rootpath: constants.PUBLISH_DIR })
)
const htmlWithInlinedSources = await Promise.all(inlineSourcePromises)
return htmlWithInlinedSources
} catch (error) {
return utils.build.failBuild('Inlining sources failed.', { error })
}
}
const overwriteHtmlFiles = async ({ htmlFiles, htmlWithInlinedSources }) => {
const overwriteFilePromises = htmlFiles.map((filePath, index) => {
const content = htmlWithInlinedSources[index]
return writeFile(filePath, content)
})
await Promise.all(overwriteFilePromises)
}
module.exports = {
onPostBuild: async ({ inputs, constants, utils }) => {
const htmlFiles = await getHtmlFiles(constants.PUBLISH_DIR)
const htmlWithInlinedSources = await getHtmlWithInlinedSources({
htmlFiles,
inputs,
constants,
utils
})
await overwriteHtmlFiles({ htmlFiles, htmlWithInlinedSources })
console.log('Sources successfully inlined!')
}
}