1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- const browserify = require('browserify')
- const watchify = require('watchify')
- const { createWriteStream } = require('fs')
- const { readFile } = require('fs').promises
- const bundleResourceToFile = (inPath, outPath) => {
- return new Promise((resolve, reject) => {
- browserify(inPath).bundle()
- .once('error', (e) => reject(e))
- .pipe(createWriteStream(outPath))
- .once('finish', () => resolve())
- })
- }
- const bundleResource = (inPath) => {
- return new Promise((resolve, reject) => {
- browserify(inPath).bundle((err, buffer) => {
- if (err != null) {
- reject(err)
- return
- }
- resolve(buffer)
- })
- })
- }
- const watchResourceToFile = (inPath, outPath) => {
- const b = browserify({
- entries: [inPath],
- cache: {},
- packageCache: {},
- plugin: [watchify]
- })
- const bundle = () => {
- b.bundle()
- .once('error', (e) => {
- console.error(`Failed to bundle ${inPath} into ${outPath}.`)
- console.error(e)
- })
- .pipe(createWriteStream(outPath))
- .once('finish', () => console.log(`Bundled ${inPath} into ${outPath}.`))
- }
- b.on('update', bundle)
- bundle()
- }
- const main = async () => {
- if (process.argv[2] === 'build') {
- await bundleResourceToFile('client/main.js', 'static/karma.js')
- await bundleResourceToFile('context/main.js', 'static/context.js')
- } else if (process.argv[2] === 'check') {
- const expectedClient = await bundleResource('client/main.js')
- const expectedContext = await bundleResource('context/main.js')
- const actualClient = await readFile('static/karma.js')
- const actualContext = await readFile('static/context.js')
- if (Buffer.compare(expectedClient, actualClient) !== 0 || Buffer.compare(expectedContext, actualContext) !== 0) {
- // eslint-disable-next-line no-throw-literal
- throw 'Bundled client assets are outdated. Forgot to run "npm run build"?'
- }
- } else if (process.argv[2] === 'watch') {
- watchResourceToFile('client/main.js', 'static/karma.js')
- watchResourceToFile('context/main.js', 'static/context.js')
- } else {
- // eslint-disable-next-line no-throw-literal
- throw `Unknown command: ${process.argv[2]}`
- }
- }
- main().catch((err) => {
- console.error(err)
- process.exit(1)
- })
|