| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/usr/bin/env bun
- import path from "node:path"
- const raw = process.argv[2]
- if (!raw) {
- console.error("Usage: bun run script/upgrade-opentui.ts <version>")
- process.exit(1)
- }
- const ver = raw.replace(/^v/, "")
- const root = path.resolve(import.meta.dir, "..")
- const skip = new Set([".git", ".opencode", ".turbo", "dist", "node_modules"])
- const keys = ["@opentui/core", "@opentui/keymap", "@opentui/solid"] as const
- const files = (await Array.fromAsync(new Bun.Glob("**/package.json").scan({ cwd: root }))).filter(
- (file) => !file.split("/").some((part) => skip.has(part)),
- )
- const setVersion = (cur: string) => {
- if (cur === "catalog:" || cur.startsWith("workspace:")) return cur
- if (cur.startsWith(">=")) return `>=${ver}`
- if (cur.startsWith("^")) return `^${ver}`
- if (cur.startsWith("~")) return `~${ver}`
- return ver
- }
- const editDeps = (obj: unknown) => {
- if (!obj || typeof obj !== "object") return false
- const map = obj as Record<string, unknown>
- return keys
- .map((key) => {
- const cur = map[key]
- if (typeof cur !== "string") return false
- const next = setVersion(cur)
- if (next === cur) return false
- map[key] = next
- return true
- })
- .some(Boolean)
- }
- const editCatalog = (obj: unknown) => {
- if (!obj || typeof obj !== "object") return false
- const map = obj as Record<string, unknown>
- return keys
- .map((key) => {
- const cur = map[key]
- if (typeof cur !== "string" || cur === ver) return false
- map[key] = ver
- return true
- })
- .some(Boolean)
- }
- const out = (
- await Promise.all(
- files.map(async (rel) => {
- const file = path.join(root, rel)
- const txt = await Bun.file(file).text()
- const json = JSON.parse(txt)
- const hit = [
- editCatalog(json.workspaces?.catalog),
- editDeps(json.dependencies),
- editDeps(json.devDependencies),
- editDeps(json.peerDependencies),
- ].some(Boolean)
- if (!hit) return null
- await Bun.write(file, `${JSON.stringify(json, null, 2)}\n`)
- return rel
- }),
- )
- ).filter((item): item is string => item !== null)
- if (out.length === 0) {
- console.log("No opentui deps found")
- process.exit(0)
- }
- console.log(`Updated opentui to ${ver} in:`)
- for (const file of out) {
- console.log(`- ${file}`)
- }
|