File size: 1,134 Bytes
eb1202c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/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())