-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.ts
More file actions
105 lines (92 loc) · 2.83 KB
/
Copy pathbuild.ts
File metadata and controls
105 lines (92 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env bun
/**
* Self-contained build script for ElizaOS projects
*/
import { existsSync } from 'node:fs';
import { rm } from 'node:fs/promises';
import { $ } from 'bun';
async function cleanBuild(outdir = 'dist') {
if (existsSync(outdir)) {
await rm(outdir, { recursive: true, force: true });
console.log(`✓ Cleaned ${outdir} directory`);
}
}
async function build() {
const start = performance.now();
console.log('🚀 Building project...');
try {
// Clean previous build
await cleanBuild('dist');
// Run JavaScript build and TypeScript declarations in parallel
console.log('Starting build tasks...');
const [buildResult, tscResult] = await Promise.all([
// Task 1: Build with Bun
(async () => {
console.log('📦 Bundling with Bun...');
const result = await Bun.build({
entrypoints: ['./src/index.ts'],
outdir: './dist',
target: 'node',
format: 'esm',
sourcemap: true,
minify: false,
external: [
'dotenv',
'fs',
'path',
'https',
'node:*',
'@elizaos/core',
'@elizaos/plugin-bootstrap',
'@elizaos/plugin-sql',
'@elizaos/cli',
],
naming: {
entry: '[dir]/[name].[ext]',
},
});
if (!result.success) {
console.error('✗ Build failed:', result.logs);
return { success: false, outputs: [] };
}
const totalSize = result.outputs.reduce((sum, output) => sum + output.size, 0);
const sizeMB = (totalSize / 1024 / 1024).toFixed(2);
console.log(`✓ Built ${result.outputs.length} file(s) - ${sizeMB}MB`);
return result;
})(),
// Task 2: Generate TypeScript declarations
(async () => {
console.log('📝 Generating TypeScript declarations...');
try {
await $`tsc --emitDeclarationOnly --incremental --project ./tsconfig.build.json`.quiet();
console.log('✓ TypeScript declarations generated');
return { success: true };
} catch (error) {
console.warn('⚠ Failed to generate TypeScript declarations');
console.warn(' This is usually due to test files or type errors.');
return { success: false };
}
})(),
]);
if (!buildResult.success) {
return false;
}
const elapsed = ((performance.now() - start) / 1000).toFixed(2);
console.log(`✅ Build complete! (${elapsed}s)`);
return true;
} catch (error) {
console.error('Build error:', error);
return false;
}
}
// Execute the build
build()
.then((success) => {
if (!success) {
process.exit(1);
}
})
.catch((error) => {
console.error('Build script error:', error);
process.exit(1);
});