2018-09-23 19:26:01 +00:00
|
|
|
import crypto from 'crypto'
|
|
|
|
import fs from 'fs'
|
2019-01-19 23:06:25 +00:00
|
|
|
import { promisify } from 'util'
|
2018-09-23 19:26:01 +00:00
|
|
|
import path from 'path'
|
2018-12-08 19:21:54 +00:00
|
|
|
import { rollup } from 'rollup'
|
|
|
|
import { terser } from 'rollup-plugin-terser'
|
|
|
|
import replace from 'rollup-plugin-replace'
|
|
|
|
import fromPairs from 'lodash-es/fromPairs'
|
2019-09-21 06:17:52 +00:00
|
|
|
import babel from 'rollup-plugin-babel'
|
2018-12-11 15:31:48 +00:00
|
|
|
import { themes } from '../src/routes/_static/themes'
|
2019-10-25 02:03:10 +00:00
|
|
|
import terserOptions from './terserOptions'
|
2018-09-23 19:26:01 +00:00
|
|
|
|
2019-01-19 23:06:25 +00:00
|
|
|
const writeFile = promisify(fs.writeFile)
|
2018-04-14 22:50:16 +00:00
|
|
|
|
2018-12-08 19:21:54 +00:00
|
|
|
const themeColors = fromPairs(themes.map(_ => ([_.name, _.color])))
|
|
|
|
|
2018-12-18 01:21:29 +00:00
|
|
|
export async function buildInlineScript () {
|
2019-08-03 20:49:37 +00:00
|
|
|
const inlineScriptPath = path.join(__dirname, '../src/inline-script/inline-script.js')
|
2018-04-14 22:50:16 +00:00
|
|
|
|
2019-08-03 20:49:37 +00:00
|
|
|
const bundle = await rollup({
|
2018-12-08 19:21:54 +00:00
|
|
|
input: inlineScriptPath,
|
|
|
|
plugins: [
|
|
|
|
replace({
|
|
|
|
'process.browser': true,
|
2019-09-21 20:44:32 +00:00
|
|
|
'process.env.LEGACY': JSON.stringify(process.env.LEGACY),
|
2018-12-08 19:21:54 +00:00
|
|
|
'process.env.THEME_COLORS': JSON.stringify(themeColors)
|
|
|
|
}),
|
2019-09-21 06:17:52 +00:00
|
|
|
process.env.LEGACY && babel({
|
|
|
|
runtimeHelpers: true,
|
|
|
|
presets: ['@babel/preset-env']
|
|
|
|
}),
|
2019-10-25 02:03:10 +00:00
|
|
|
!process.env.DEBUG && terser(terserOptions)
|
2018-12-08 19:21:54 +00:00
|
|
|
]
|
|
|
|
})
|
2019-08-03 20:49:37 +00:00
|
|
|
const { output } = await bundle.generate({
|
2018-12-08 19:21:54 +00:00
|
|
|
format: 'iife',
|
|
|
|
sourcemap: true
|
|
|
|
})
|
|
|
|
|
2019-08-03 20:49:37 +00:00
|
|
|
const { code, map } = output[0]
|
2019-01-01 18:42:50 +00:00
|
|
|
|
2019-08-03 20:49:37 +00:00
|
|
|
const fullCode = `${code}//# sourceMappingURL=/inline-script.js.map`
|
|
|
|
const checksum = crypto.createHash('sha256').update(fullCode).digest('base64')
|
2018-04-14 22:50:16 +00:00
|
|
|
|
2019-01-26 18:14:15 +00:00
|
|
|
await writeFile(path.resolve(__dirname, '../src/inline-script/checksum.js'),
|
|
|
|
`module.exports = ${JSON.stringify(checksum)}`, 'utf8')
|
2018-12-18 01:21:29 +00:00
|
|
|
await writeFile(path.resolve(__dirname, '../static/inline-script.js.map'),
|
|
|
|
map.toString(), 'utf8')
|
2018-12-08 19:21:54 +00:00
|
|
|
|
2018-12-18 01:21:29 +00:00
|
|
|
return '<script>' + fullCode + '</script>'
|
2018-04-14 22:50:16 +00:00
|
|
|
}
|