mirror of
https://github.com/LalleSX/4chan-XZ.git
synced 2025-10-07 07:22:37 +02:00
117 lines
3.0 KiB
JavaScript
117 lines
3.0 KiB
JavaScript
import { rollup } from 'rollup'
|
|
import typescript from '@rollup/plugin-typescript'
|
|
import setupFileInliner from './rollup-plugin-inline-file.js'
|
|
import { dirname, resolve } from 'path'
|
|
import { fileURLToPath } from 'url'
|
|
import generateMetadata from '../src/meta/metadata.js'
|
|
import { copyFile, readFile, writeFile } from 'fs/promises'
|
|
import importBase64 from './rollup-plugin-base64.js'
|
|
import generateManifestJson from '../src/meta/manifestJson.js'
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
|
|
const buildDir = resolve(__dirname, '../dist/')
|
|
|
|
let channel = ''
|
|
|
|
if (process.argv.includes('-beta')) {
|
|
channel = '-beta'
|
|
} else if (process.argv.includes('-noupdate')) {
|
|
channel = '-noupdate'
|
|
}
|
|
|
|
;(async () => {
|
|
const packageJson = JSON.parse(
|
|
await readFile(resolve(__dirname, '../package.json'), 'utf-8')
|
|
)
|
|
|
|
const metadata = await generateMetadata(packageJson, channel)
|
|
|
|
const license = await readFile(resolve(__dirname, '../LICENSE'), 'utf8')
|
|
|
|
const version = JSON.parse(
|
|
await readFile(resolve(__dirname, '../version.json'), 'utf-8')
|
|
)
|
|
|
|
const inlineFile = await setupFileInliner(packageJson)
|
|
|
|
const bundle = await rollup({
|
|
input: resolve(__dirname, '../src/main/Main.js'),
|
|
plugins: [
|
|
typescript(),
|
|
inlineFile({
|
|
include: ['**/*.html', '**/*.css'],
|
|
}),
|
|
importBase64({
|
|
include: [
|
|
'**/*.png',
|
|
'**/*.gif',
|
|
'**/*.wav',
|
|
'**/*.woff',
|
|
'**/*.woff2',
|
|
],
|
|
}),
|
|
inlineFile({
|
|
include: '**/package.json',
|
|
wrap: false,
|
|
transformer(input) {
|
|
const data = JSON.parse(input)
|
|
return `export default ${JSON.stringify(data.meta, undefined, 1)};`
|
|
},
|
|
}),
|
|
inlineFile({
|
|
include: '**/*.json',
|
|
exclude: '**/package.json',
|
|
wrap: false,
|
|
transformer(input) {
|
|
return `export default ${input};`
|
|
},
|
|
}),
|
|
],
|
|
})
|
|
|
|
/** @type {import('rollup').OutputOptions} */
|
|
const sharedBundleOpts = {
|
|
format: 'iife',
|
|
generatedCode: {
|
|
// needed for possible circular dependencies
|
|
constBindings: false,
|
|
},
|
|
// Can't be none as long as the root file defined exports
|
|
// exports: 'none',
|
|
}
|
|
|
|
// user script
|
|
await bundle.write({
|
|
...sharedBundleOpts,
|
|
banner: metadata + license,
|
|
// file: '../builds/test/rollupOutput.js',
|
|
file: resolve(buildDir, `${packageJson.meta.path}${channel}.user.js`),
|
|
})
|
|
|
|
// chrome extension
|
|
const crxDir = resolve(buildDir, 'crx')
|
|
await bundle.write({
|
|
...sharedBundleOpts,
|
|
banner: license,
|
|
file: resolve(crxDir, 'script.js'),
|
|
})
|
|
|
|
await copyFile(
|
|
resolve(__dirname, '../src/meta/eventPage.js'),
|
|
resolve(crxDir, 'eventPage.js')
|
|
)
|
|
|
|
writeFile(
|
|
resolve(crxDir, 'manifest.json'),
|
|
generateManifestJson(packageJson, version, channel)
|
|
)
|
|
|
|
for (const file of ['icon16.png', 'icon48.png', 'icon128.png']) {
|
|
await copyFile(
|
|
resolve(__dirname, '../src/meta/', file),
|
|
resolve(crxDir, file)
|
|
)
|
|
}
|
|
})()
|