mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-12-19 10:42:29 +03:00
- Updated esbuild system to be module, and fixed build command. - Reverted module use in package.json by default as this impacted test runs/files. - Updated mention user select: - To look better in dark mode. - To not remove text after on select. - To properly revert/restore focus on enter or cancel.
88 lines
2.5 KiB
JavaScript
88 lines
2.5 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import * as esbuild from 'esbuild';
|
|
import * as path from 'node:path';
|
|
import * as fs from 'node:fs';
|
|
import * as process from "node:process";
|
|
|
|
// Check if we're building for production
|
|
// (Set via passing `production` as first argument)
|
|
const mode = process.argv[2];
|
|
const isProd = mode === 'production';
|
|
const __dirname = import.meta.dirname;
|
|
|
|
// Gather our input files
|
|
const entryPoints = {
|
|
app: path.join(__dirname, '../../resources/js/app.ts'),
|
|
code: path.join(__dirname, '../../resources/js/code/index.mjs'),
|
|
'legacy-modes': path.join(__dirname, '../../resources/js/code/legacy-modes.mjs'),
|
|
markdown: path.join(__dirname, '../../resources/js/markdown/index.mts'),
|
|
wysiwyg: path.join(__dirname, '../../resources/js/wysiwyg/index.ts'),
|
|
};
|
|
|
|
// Watch styles so we can reload on change
|
|
if (mode === 'watch') {
|
|
entryPoints['styles-dummy'] = path.join(__dirname, '../../public/dist/styles.css');
|
|
}
|
|
|
|
// Locate our output directory
|
|
const outdir = path.join(__dirname, '../../public/dist');
|
|
|
|
// Define the options for esbuild
|
|
const options = {
|
|
bundle: true,
|
|
metafile: true,
|
|
entryPoints,
|
|
outdir,
|
|
sourcemap: true,
|
|
target: 'es2021',
|
|
mainFields: ['module', 'main'],
|
|
format: 'esm',
|
|
minify: isProd,
|
|
logLevel: 'info',
|
|
loader: {
|
|
'.html': 'copy',
|
|
'.svg': 'text',
|
|
},
|
|
absWorkingDir: path.join(__dirname, '../..'),
|
|
alias: {
|
|
'@icons': './resources/icons',
|
|
lexical: './resources/js/wysiwyg/lexical/core',
|
|
'@lexical': './resources/js/wysiwyg/lexical',
|
|
},
|
|
banner: {
|
|
js: '// See the "/licenses" URI for full package license details',
|
|
css: '/* See the "/licenses" URI for full package license details */',
|
|
},
|
|
};
|
|
|
|
if (mode === 'watch') {
|
|
options.inject = [
|
|
path.join(__dirname, './livereload.js'),
|
|
];
|
|
}
|
|
|
|
const ctx = await esbuild.context(options);
|
|
|
|
if (mode === 'watch') {
|
|
// Watch for changes and rebuild on change
|
|
ctx.watch({});
|
|
let {hosts, port} = await ctx.serve({
|
|
servedir: path.join(__dirname, '../../public'),
|
|
cors: {
|
|
origin: '*',
|
|
}
|
|
});
|
|
} else {
|
|
// Build with meta output for analysis
|
|
const result = await ctx.rebuild();
|
|
const outputs = result.metafile.outputs;
|
|
const files = Object.keys(outputs);
|
|
for (const file of files) {
|
|
const output = outputs[file];
|
|
console.log(`Written: ${file} @ ${Math.round(output.bytes / 1000)}kB`);
|
|
}
|
|
fs.writeFileSync('esbuild-meta.json', JSON.stringify(result.metafile));
|
|
process.exit(0);
|
|
}
|