|
1 | 1 | #!/usr/bin/env node |
2 | 2 |
|
3 | 3 | import ts from "typescript"; |
4 | | -import { build, BuildOptions as EsBuildOptions } from "esbuild"; |
5 | | -import cpy from "cpy"; |
| 4 | +import { build } from "esbuild"; |
6 | 5 | import path from "path"; |
7 | | -import rimraf from "rimraf"; |
8 | 6 | import yargs from "yargs/yargs"; |
9 | 7 | import { hideBin } from "yargs/helpers"; |
10 | 8 | import { Config, readUserConfig } from "./config.js"; |
@@ -56,82 +54,52 @@ function esBuildSourceMapOptions(tsConfig: TSConfig) { |
56 | 54 | return sourceMap; |
57 | 55 | } |
58 | 56 |
|
59 | | -function getBuildMetadata(userConfig: Config) { |
| 57 | +function getEsbuildMetadata(userConfig: Config) { |
60 | 58 | const { tsConfig, tsConfigFile } = getTSConfig(userConfig.tsConfigFile); |
61 | 59 | const esbuildConfig = userConfig.esbuild || {}; |
62 | 60 |
|
63 | | - const outDir = |
64 | | - userConfig.outDir || |
65 | | - tsConfig.options.outDir || |
66 | | - esbuildConfig.outdir || |
67 | | - "dist"; |
68 | | - |
| 61 | + const outdir = tsConfig.options.outDir || esbuildConfig.outdir || "dist"; |
69 | 62 | const srcFiles = [ |
70 | 63 | ...tsConfig.fileNames, |
71 | 64 | ...((esbuildConfig.entryPoints as string[]) ?? []), |
72 | 65 | ]; |
73 | 66 | const sourcemap = |
74 | 67 | esBuildSourceMapOptions(tsConfig) || userConfig.esbuild?.sourcemap; |
75 | | - const target = |
| 68 | + const target: string = |
76 | 69 | tsConfig?.raw?.compilerOptions?.target || esbuildConfig?.target || "es2015"; |
77 | | - const format = esbuildConfig?.format || "cjs"; |
78 | 70 |
|
79 | | - const esbuildOptions: EsBuildOptions = { |
| 71 | + const esbuildOptions = { |
80 | 72 | ...userConfig.esbuild, |
81 | | - outdir: outDir, |
| 73 | + outdir, |
82 | 74 | entryPoints: srcFiles, |
83 | 75 | sourcemap, |
84 | | - target, |
| 76 | + target: target.toLowerCase(), |
85 | 77 | tsconfig: tsConfigFile, |
86 | | - format, |
87 | 78 | }; |
88 | 79 |
|
89 | | - const assetPatterns = userConfig.assets?.filePatterns || ["**"]; |
| 80 | + return { esbuildOptions }; |
| 81 | +} |
90 | 82 |
|
91 | | - const assetsOptions = { |
92 | | - baseDir: userConfig.assets?.baseDir || "src", |
93 | | - outDir: userConfig.assets?.outDir || outDir, |
94 | | - patterns: [...assetPatterns, "!**/*.{ts,js,tsx,jsx}"], |
95 | | - }; |
| 83 | +async function main() { |
| 84 | + const configFilename = <string>(await argv)?.config || "etsc.config.js"; |
| 85 | + const config = await readUserConfig(path.resolve(cwd, configFilename)); |
96 | 86 |
|
97 | | - return { outDir, esbuildOptions, assetsOptions }; |
98 | | -} |
| 87 | + const { esbuildOptions } = getEsbuildMetadata(config); |
99 | 88 |
|
100 | | -async function buildSourceFiles(esbuildOptions: EsBuildOptions) { |
101 | | - return await build({ |
| 89 | + if (config.prebuild) { |
| 90 | + await config.prebuild(); |
| 91 | + } |
| 92 | + |
| 93 | + await build({ |
102 | 94 | bundle: false, |
103 | 95 | format: "cjs", |
104 | 96 | platform: "node", |
105 | 97 | ...esbuildOptions, |
106 | 98 | }); |
107 | | -} |
108 | 99 |
|
109 | | -type AssetsOptions = { baseDir: string; outDir: string; patterns: string[] }; |
110 | | - |
111 | | -async function copyNonSourceFiles({ |
112 | | - baseDir, |
113 | | - outDir, |
114 | | - patterns, |
115 | | -}: AssetsOptions) { |
116 | | - const relativeOutDir = path.relative(baseDir, outDir); |
117 | | - return await cpy(patterns, relativeOutDir, { cwd: baseDir }); |
118 | | -} |
119 | | - |
120 | | -async function main() { |
121 | | - const configFilename = <string>(await argv)?.config || "etsc.config.js"; |
122 | | - const clean = (await argv)?.clean; |
123 | | - const config = await readUserConfig(path.resolve(cwd, configFilename)); |
124 | | - |
125 | | - const { outDir, esbuildOptions, assetsOptions } = getBuildMetadata(config); |
126 | | - |
127 | | - if (clean) { |
128 | | - rimraf.sync(outDir); |
| 100 | + if (config.postbuild) { |
| 101 | + await config.postbuild(); |
129 | 102 | } |
130 | | - |
131 | | - await Promise.all([ |
132 | | - buildSourceFiles(esbuildOptions), |
133 | | - copyNonSourceFiles(assetsOptions), |
134 | | - ]); |
135 | 103 | } |
136 | 104 |
|
137 | 105 | console.time("Built in"); |
|
0 commit comments