-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild.ts
More file actions
107 lines (94 loc) · 2.82 KB
/
build.ts
File metadata and controls
107 lines (94 loc) · 2.82 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
106
107
#!/usr/bin/env bun
/**
* Self-contained build script for ElizaOS quick plugins
*/
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 plugin...\n");
try {
// Clean previous build
await cleanBuild("dist");
// Run JavaScript build and TypeScript declarations in parallel
console.log("Starting parallel 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/cli",
"zod",
],
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(`\n✅ Build complete! (${elapsed}s)\n`);
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);
});