p3x-redis-ui-server
Version:
🏍️ P3X Redis UI server — Socket.IO backend for the dual Angular + React frontend with AI queries, 54 languages, and auto data decompression
81 lines (67 loc) • 2.39 kB
JavaScript
import fs from 'fs/promises'
import path from 'path'
import { fileURLToPath } from 'url'
import { minify } from 'terser'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const rootDir = path.resolve(__dirname, '..')
const srcDir = path.join(rootDir, 'src')
const distDir = path.join(rootDir, 'dist')
const walkFiles = async (dir) => {
const entries = await fs.readdir(dir, { withFileTypes: true })
const files = []
for (const entry of entries) {
const fullPath = path.join(dir, entry.name)
if (entry.isDirectory()) {
files.push(...await walkFiles(fullPath))
} else if (entry.isFile()) {
files.push(fullPath)
}
}
return files
}
const minifyJavaScript = async (sourceCode, relativePath) => {
const result = await minify(sourceCode, {
module: true,
compress: {
passes: 2,
keep_infinity: true,
unsafe_arrows: true,
},
mangle: true,
format: {
ascii_only: true,
comments: false,
},
})
if (!result || typeof result.code !== 'string' || result.code.length === 0) {
throw new Error(`minify-empty-output: ${relativePath}`)
}
return `${result.code}\n`
}
const buildCompressed = async () => {
console.log('build-compressed: started')
await fs.rm(distDir, { recursive: true, force: true })
const sourceFiles = await walkFiles(srcDir)
let minifiedCount = 0
let copiedCount = 0
for (const sourceFile of sourceFiles) {
const relativePath = path.relative(srcDir, sourceFile)
const outputFile = path.join(distDir, relativePath)
await fs.mkdir(path.dirname(outputFile), { recursive: true })
if (path.extname(sourceFile) === '.mjs') {
const sourceCode = await fs.readFile(sourceFile, 'utf8')
const minifiedCode = await minifyJavaScript(sourceCode, relativePath)
await fs.writeFile(outputFile, minifiedCode, 'utf8')
minifiedCount++
continue
}
await fs.copyFile(sourceFile, outputFile)
copiedCount++
}
console.log(`build-compressed: done (minified=${minifiedCount}, copied=${copiedCount})`)
}
buildCompressed().catch((error) => {
console.error('build-compressed: failed', error)
process.exit(1)
})