From a7476ca7badba2b5e4074942e172e75b40b29142 Mon Sep 17 00:00:00 2001 From: David Blass Date: Tue, 25 Jul 2023 19:11:09 -0400 Subject: [PATCH] ci: fix cjs+esm build outputs --- dev/scripts/build.ts | 96 +++++++++++++++++++++++++++++-------------- dev/scripts/common.ts | 8 +++- 2 files changed, 72 insertions(+), 32 deletions(-) diff --git a/dev/scripts/build.ts b/dev/scripts/build.ts index dc74562ed1..95b65e8f9a 100644 --- a/dev/scripts/build.ts +++ b/dev/scripts/build.ts @@ -1,37 +1,71 @@ -import { cpSync, rmSync } from "node:fs" +import { renameSync, rmSync } from "node:fs" import { join } from "node:path" -import { readJson, shell, writeJson } from "../attest/src/main.js" +import * as process from "node:process" +import { + getSourceFilePaths, + readJson, + shell, + writeJson +} from "../attest/src/main.js" import { repoDirs } from "./common.js" -const packageRoot = process.cwd() -const outRoot = join(packageRoot, "dist") -const packageJson = readJson(join(packageRoot, "package.json")) - -console.log(`🔨 Building ${packageJson.name}...`) -rmSync(outRoot, { recursive: true, force: true }) -const tsConfigData = readJson(join(repoDirs.configs, "tsconfig.json")) -const tempTsConfig = join(packageRoot, "tsconfig.temp.json") -writeJson(tempTsConfig, { - ...tsConfigData, - include: ["src"], - compilerOptions: { - ...tsConfigData.compilerOptions, - noEmit: false, - module: "commonjs", - outDir: "dist" +const isTestBuild = process.argv.includes("--test") + +const isProd = () => process.argv.includes("--prod") || !!process.env.CI + +const inFiles = getSourceFilePaths( + isTestBuild ? repoDirs.root : repoDirs.srcRoot +) + +const successMessage = `📦 Successfully built arktype!` + +const arktypeTsc = () => { + console.log(`🔨 Building arktype...`) + rmSync(repoDirs.outRoot, { recursive: true, force: true }) + if (!isTestBuild) { + buildTypes() + } + transpile() + console.log(successMessage) +} + +const buildTypes = () => { + process.stdout.write("⏳ Building types...".padEnd(successMessage.length)) + const tsConfigData = readJson(join(repoDirs.root, "tsconfig.json")) + const tempTsConfig = join(repoDirs.root, "tsconfig.temp.json") + try { + writeJson(tempTsConfig, { ...tsConfigData, include: ["src"] }) + shell( + `pnpm tsc --project ${tempTsConfig} --outDir ${repoDirs.outRoot} --noEmit false --emitDeclarationOnly` + ) + renameSync(join(repoDirs.outRoot, "src"), repoDirs.typesOut) + } finally { + rmSync(tempTsConfig, { force: true }) } -}) -try { - shell(`pnpm tsc --project ${tempTsConfig}`) - const outSrc = join(outRoot, "src") - // not sure which setting to change to get it to compile here in the first place - cpSync(outSrc, outRoot, { - recursive: true, - force: true + process.stdout.write(`✅\n`) +} + +const transpile = () => { + process.stdout.write(`⌛ Transpiling...`.padEnd(successMessage.length)) + swc("mjs") + swc("cjs") + process.stdout.write("✅\n") +} + +const swc = (kind: "mjs" | "cjs") => { + const kindOutDir = join(repoDirs.outRoot, kind) + let cmd = `pnpm swc -d ${kindOutDir} -C jsc.target=es2020 -q ` + if (kind === "cjs") { + cmd += `-C module.type=commonjs ` + } + if (!isProd()) { + cmd += `--source-maps inline ` + } + cmd += inFiles.join(" ") + shell(cmd) + writeJson(join(kindOutDir, "package.json"), { + type: kind === "cjs" ? "commonjs" : "module" }) - rmSync(outSrc, { recursive: true, force: true }) - writeJson(join(outRoot, "package.json"), { type: "commonjs" }) -} finally { - rmSync(tempTsConfig, { force: true }) } -console.log(`📦 Successfully built ${packageJson.name}!`) + +arktypeTsc() diff --git a/dev/scripts/common.ts b/dev/scripts/common.ts index 51c80ea4b1..e4ac8623d8 100644 --- a/dev/scripts/common.ts +++ b/dev/scripts/common.ts @@ -9,6 +9,9 @@ const arktypeIo = join(dev, "arktype.io") const docsDir = join(arktypeIo, "docs") const srcRoot = join(root, "src") const outRoot = join(root, "dist") +const typesOut = join(outRoot, "types") +const mjsOut = join(outRoot, "mjs") +const cjsOut = join(outRoot, "cjs") export const repoDirs = { root, @@ -18,5 +21,8 @@ export const repoDirs = { arktypeIo, docsDir, srcRoot, - outRoot + outRoot, + typesOut, + mjsOut, + cjsOut }