diff --git a/packages/ui/package.json b/packages/ui/package.json index 8d0cede64c..991ec8232e 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -15,6 +15,7 @@ "**/*.css" ], "files": [ + "dist/**/*.d.ts", "src/**/*.ts", "src/**/*.tsx", "!src/**/*.test.ts", @@ -55,6 +56,7 @@ "./v2/styles/*": "./src/v2/styles/*" }, "scripts": { + "build": "rm -rf dist && tsc -p tsconfig.build.json", "typecheck": "tsgo --noEmit", "test": "bun test src --only-failures", "dev": "vite", diff --git a/packages/ui/script/pack.ts b/packages/ui/script/pack.ts new file mode 100644 index 0000000000..078fb6d774 --- /dev/null +++ b/packages/ui/script/pack.ts @@ -0,0 +1,40 @@ +#!/usr/bin/env bun + +import { $ } from "bun" +import { rm } from "node:fs/promises" +import path from "node:path" + +export async function pack() { + const original = await Bun.file("package.json").text() + const pkg = JSON.parse(original) as { + name: string + version: string + exports: Record + } + const tarball = path.resolve(`${pkg.name.replace("@", "").replace("/", "-")}-${pkg.version}.tgz`) + + await $`bun run build` + pkg.exports = Object.fromEntries( + Object.entries(pkg.exports).map(([key, value]) => { + if (typeof value !== "string" || (!value.endsWith(".ts") && !value.endsWith(".tsx"))) return [key, value] + return [ + key, + { + types: value.replace("./src/", "./dist/").replace(/\.tsx?$/, ".d.ts"), + import: value, + }, + ] + }), + ) + + await rm(tarball, { force: true }) + await Bun.write("package.json", JSON.stringify(pkg, null, 2) + "\n") + try { + await $`bun pm pack` + return tarball + } finally { + await Bun.write("package.json", original) + } +} + +if (import.meta.main) console.log(await pack()) diff --git a/packages/ui/script/publish.ts b/packages/ui/script/publish.ts index 19b6f19c5d..ba81ab7dfe 100644 --- a/packages/ui/script/publish.ts +++ b/packages/ui/script/publish.ts @@ -4,6 +4,7 @@ import { Script } from "@opencode-ai/script" import { $ } from "bun" import { rm } from "node:fs/promises" import { fileURLToPath } from "node:url" +import { pack } from "./pack" process.chdir(fileURLToPath(new URL("..", import.meta.url))) @@ -18,8 +19,7 @@ if ((await $`npm view ${pkg.name}@${pkg.version} version`.nothrow()).exitCode == try { await $`bun run typecheck` await $`bun run test` - await rm(tarball, { force: true }) - await $`bun pm pack` + await pack() await $`npm publish ${tarball} --access public --tag ${Script.channel}` } finally { await rm(tarball, { force: true }) diff --git a/packages/ui/tsconfig.build.json b/packages/ui/tsconfig.build.json new file mode 100644 index 0000000000..dec30faf19 --- /dev/null +++ b/packages/ui/tsconfig.build.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "noEmit": false, + // Publish declarations so consumer compiler options do not typecheck our TSX implementation. + "declaration": true, + "emitDeclarationOnly": true + }, + "include": ["src"], + "exclude": ["**/*.stories.*", "**/*.test.*", "**/*.mdx"] +}