core: prevent UI imports compiling TSX source
This commit is contained in:
@@ -15,6 +15,7 @@
|
|||||||
"**/*.css"
|
"**/*.css"
|
||||||
],
|
],
|
||||||
"files": [
|
"files": [
|
||||||
|
"dist/**/*.d.ts",
|
||||||
"src/**/*.ts",
|
"src/**/*.ts",
|
||||||
"src/**/*.tsx",
|
"src/**/*.tsx",
|
||||||
"!src/**/*.test.ts",
|
"!src/**/*.test.ts",
|
||||||
@@ -55,6 +56,7 @@
|
|||||||
"./v2/styles/*": "./src/v2/styles/*"
|
"./v2/styles/*": "./src/v2/styles/*"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
||||||
"typecheck": "tsgo --noEmit",
|
"typecheck": "tsgo --noEmit",
|
||||||
"test": "bun test src --only-failures",
|
"test": "bun test src --only-failures",
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -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<string, string | { types: string; import: string }>
|
||||||
|
}
|
||||||
|
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())
|
||||||
@@ -4,6 +4,7 @@ import { Script } from "@opencode-ai/script"
|
|||||||
import { $ } from "bun"
|
import { $ } from "bun"
|
||||||
import { rm } from "node:fs/promises"
|
import { rm } from "node:fs/promises"
|
||||||
import { fileURLToPath } from "node:url"
|
import { fileURLToPath } from "node:url"
|
||||||
|
import { pack } from "./pack"
|
||||||
|
|
||||||
process.chdir(fileURLToPath(new URL("..", import.meta.url)))
|
process.chdir(fileURLToPath(new URL("..", import.meta.url)))
|
||||||
|
|
||||||
@@ -18,8 +19,7 @@ if ((await $`npm view ${pkg.name}@${pkg.version} version`.nothrow()).exitCode ==
|
|||||||
try {
|
try {
|
||||||
await $`bun run typecheck`
|
await $`bun run typecheck`
|
||||||
await $`bun run test`
|
await $`bun run test`
|
||||||
await rm(tarball, { force: true })
|
await pack()
|
||||||
await $`bun pm pack`
|
|
||||||
await $`npm publish ${tarball} --access public --tag ${Script.channel}`
|
await $`npm publish ${tarball} --access public --tag ${Script.channel}`
|
||||||
} finally {
|
} finally {
|
||||||
await rm(tarball, { force: true })
|
await rm(tarball, { force: true })
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user