mirror of
https://github.com/glittercowboy/get-shit-done
synced 2026-04-25 17:25:23 +02:00
fix: update build script to use gsd-statusline.js
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
95
scripts/build-hooks.js
Normal file
95
scripts/build-hooks.js
Normal file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Bundle GSD hooks with dependencies for zero-config installation.
|
||||
*
|
||||
* sql.js includes a WASM binary that must be inlined for portability.
|
||||
* This script bundles hooks into self-contained files that work from any cwd.
|
||||
*/
|
||||
|
||||
const esbuild = require('esbuild');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const HOOKS_DIR = path.join(__dirname, '..', 'hooks');
|
||||
const DIST_DIR = path.join(HOOKS_DIR, 'dist');
|
||||
|
||||
// Hooks that need bundling (have npm dependencies)
|
||||
const HOOKS_TO_BUNDLE = [
|
||||
'gsd-intel-index.js'
|
||||
];
|
||||
|
||||
// Hooks that are pure Node.js (just copy)
|
||||
const HOOKS_TO_COPY = [
|
||||
'gsd-intel-session.js',
|
||||
'gsd-intel-prune.js',
|
||||
'gsd-check-update.js',
|
||||
'gsd-statusline.js'
|
||||
];
|
||||
|
||||
async function build() {
|
||||
// Ensure dist directory exists
|
||||
if (!fs.existsSync(DIST_DIR)) {
|
||||
fs.mkdirSync(DIST_DIR, { recursive: true });
|
||||
}
|
||||
|
||||
// Bundle hooks with dependencies
|
||||
for (const hook of HOOKS_TO_BUNDLE) {
|
||||
const entryPoint = path.join(HOOKS_DIR, hook);
|
||||
const outfile = path.join(DIST_DIR, hook);
|
||||
|
||||
if (!fs.existsSync(entryPoint)) {
|
||||
console.warn(`Warning: ${hook} not found, skipping`);
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(`Bundling ${hook}...`);
|
||||
|
||||
await esbuild.build({
|
||||
entryPoints: [entryPoint],
|
||||
bundle: true,
|
||||
platform: 'node',
|
||||
target: 'node18',
|
||||
outfile,
|
||||
format: 'cjs',
|
||||
// Inline WASM as base64 for sql.js
|
||||
loader: {
|
||||
'.wasm': 'binary'
|
||||
},
|
||||
// Don't externalize anything - bundle it all
|
||||
external: [],
|
||||
// Minify for smaller package size
|
||||
minify: true,
|
||||
// Keep function names for debugging
|
||||
keepNames: true,
|
||||
// Handle sql.js WASM loading
|
||||
define: {
|
||||
'process.env.NODE_ENV': '"production"'
|
||||
}
|
||||
// Note: shebang preserved from source file by esbuild
|
||||
});
|
||||
|
||||
console.log(` → ${outfile}`);
|
||||
}
|
||||
|
||||
// Copy pure Node.js hooks (no bundling needed)
|
||||
for (const hook of HOOKS_TO_COPY) {
|
||||
const src = path.join(HOOKS_DIR, hook);
|
||||
const dest = path.join(DIST_DIR, hook);
|
||||
|
||||
if (!fs.existsSync(src)) {
|
||||
console.warn(`Warning: ${hook} not found, skipping`);
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(`Copying ${hook}...`);
|
||||
fs.copyFileSync(src, dest);
|
||||
console.log(` → ${dest}`);
|
||||
}
|
||||
|
||||
console.log('\nBuild complete.');
|
||||
}
|
||||
|
||||
build().catch(err => {
|
||||
console.error('Build failed:', err);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user