|
|
@@ -0,0 +1,54 @@
|
|
|
+#!/usr/bin/env bun
|
|
|
+
|
|
|
+import fs from "fs"
|
|
|
+import path from "path"
|
|
|
+import { fileURLToPath } from "url"
|
|
|
+
|
|
|
+const __filename = fileURLToPath(import.meta.url)
|
|
|
+const __dirname = path.dirname(__filename)
|
|
|
+const dir = path.resolve(__dirname, "..")
|
|
|
+
|
|
|
+process.chdir(dir)
|
|
|
+
|
|
|
+// Load migrations from migration directories
|
|
|
+const migrationDirs = (
|
|
|
+ await fs.promises.readdir(path.join(dir, "migration"), {
|
|
|
+ withFileTypes: true,
|
|
|
+ })
|
|
|
+)
|
|
|
+ .filter((entry) => entry.isDirectory() && /^\d{4}\d{2}\d{2}\d{2}\d{2}\d{2}/.test(entry.name))
|
|
|
+ .map((entry) => entry.name)
|
|
|
+ .sort()
|
|
|
+
|
|
|
+const migrations = await Promise.all(
|
|
|
+ migrationDirs.map(async (name) => {
|
|
|
+ const file = path.join(dir, "migration", name, "migration.sql")
|
|
|
+ const sql = await Bun.file(file).text()
|
|
|
+ const match = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/.exec(name)
|
|
|
+ const timestamp = match
|
|
|
+ ? Date.UTC(
|
|
|
+ Number(match[1]),
|
|
|
+ Number(match[2]) - 1,
|
|
|
+ Number(match[3]),
|
|
|
+ Number(match[4]),
|
|
|
+ Number(match[5]),
|
|
|
+ Number(match[6]),
|
|
|
+ )
|
|
|
+ : 0
|
|
|
+ return { sql, timestamp, name }
|
|
|
+ }),
|
|
|
+)
|
|
|
+console.log(`Loaded ${migrations.length} migrations`)
|
|
|
+
|
|
|
+await Bun.build({
|
|
|
+ target: "node",
|
|
|
+ entrypoints: ["./src/node.ts"],
|
|
|
+ outdir: "./dist",
|
|
|
+ format: "esm",
|
|
|
+ external: ["jsonc-parser"],
|
|
|
+ define: {
|
|
|
+ OPENCODE_MIGRATIONS: JSON.stringify(migrations),
|
|
|
+ },
|
|
|
+})
|
|
|
+
|
|
|
+console.log("Build complete")
|