mirror of
https://github.com/eduardolat/pgbackweb.git
synced 2026-01-26 14:39:24 -06:00
108 lines
2.8 KiB
JavaScript
108 lines
2.8 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* This script is responsible for creating the final build of all the project's
|
|
* JavaScript.
|
|
*
|
|
* 1. Creates a prebuild of internal/view/static/js/app.js
|
|
* 2. Creates a prebuild of all *.inc.js files in internal/view/web
|
|
* 3. Combines the two prebuilds into a final build, minifies it, and stores
|
|
* it in internal/view/static/build/app.min.js
|
|
*
|
|
* This script generates temporal files in the tmp directory.
|
|
*/
|
|
|
|
import path from 'path'
|
|
import fse from 'fs-extra'
|
|
import * as esbuild from 'esbuild'
|
|
import { fileURLToPath } from 'url'
|
|
import { glob } from 'glob'
|
|
|
|
// Obtains the project's root directory
|
|
const __filename = fileURLToPath(import.meta.url)
|
|
const __dirname = path.dirname(__filename)
|
|
const rootDir = path.join(__dirname, '..')
|
|
|
|
async function prebuildApp () {
|
|
const entryFile = path.join(rootDir, './internal/view/static/js/app.js')
|
|
const outFile = path.join(rootDir, './tmp/prebuild-app.js')
|
|
|
|
try {
|
|
await esbuild.build({
|
|
entryPoints: [entryFile],
|
|
bundle: true,
|
|
minify: false,
|
|
outfile: outFile,
|
|
format: 'iife'
|
|
})
|
|
} catch (error) {
|
|
console.error('Error prebuilding app.js:', error)
|
|
}
|
|
}
|
|
|
|
async function prebuildIncludedFiles () {
|
|
const alpineGlob = path.join(rootDir, './internal/view/web/**/*.inc.js')
|
|
const tempFile = path.join(rootDir, './tmp/prebuild-incs.js')
|
|
|
|
try {
|
|
const alpineFiles = await glob(alpineGlob)
|
|
|
|
let outFileContent = `// This file is auto-generated by ${__filename}. DO NOT EDIT.\n\n`
|
|
|
|
for (const file of alpineFiles) {
|
|
const content = await fse.readFile(file, 'utf-8')
|
|
outFileContent += content + '\n'
|
|
}
|
|
|
|
await fse.outputFile(tempFile, outFileContent)
|
|
} catch (error) {
|
|
console.error('Error prebuilding *.inc.js files:', error)
|
|
}
|
|
}
|
|
|
|
async function mergePrebuilds () {
|
|
const prebuilds = [
|
|
path.join(rootDir, './tmp/prebuild-app.js'),
|
|
path.join(rootDir, './tmp/prebuild-incs.js')
|
|
]
|
|
|
|
const outFile = path.join(rootDir, './tmp/prebuild.js')
|
|
|
|
try {
|
|
let outFileContent = ''
|
|
|
|
for (const file of prebuilds) {
|
|
const content = await fse.readFile(file, 'utf-8')
|
|
outFileContent += content + '\n\n'
|
|
}
|
|
|
|
await fse.outputFile(outFile, outFileContent)
|
|
} catch (error) {
|
|
console.error('Error combining prebuilds:', error)
|
|
}
|
|
}
|
|
|
|
async function build () {
|
|
const entryFile = path.join(rootDir, './tmp/prebuild.js')
|
|
const outFile = path.join(rootDir, './internal/view/static/build/app.min.js')
|
|
|
|
try {
|
|
await esbuild.build({
|
|
entryPoints: [entryFile],
|
|
bundle: true,
|
|
minify: true,
|
|
outfile: outFile,
|
|
format: 'iife'
|
|
})
|
|
|
|
console.log('JavaScript builded successfully')
|
|
} catch (error) {
|
|
console.error('Error creating JavaScript build:', error)
|
|
}
|
|
}
|
|
|
|
await prebuildApp()
|
|
await prebuildIncludedFiles()
|
|
await mergePrebuilds()
|
|
await build()
|