diff --git a/packages/shared/package.json b/packages/shared/package.json index 4d1ee667..56b87ce9 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -2,7 +2,7 @@ "name": "@truth-cli/shared", "version": "0.1.1", "type": "module", - "main": "dist/index.js", + "main": "index.ts", "lint-staged": { "!(*d).{js,ts}": [ "eslint" diff --git a/scripts/build.ts b/scripts/build.ts index 65a69997..338255eb 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -1,66 +1,13 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' import process from 'node:process' -import fs from 'node:fs/promises' import { build } from 'vite' -import type { ModuleFormat } from 'rollup' -import typescript from '@rollup/plugin-typescript' -import commonjs from '@rollup/plugin-commonjs' -import terser from '@rollup/plugin-terser' -import { nodeResolve } from '@rollup/plugin-node-resolve' import { rollup } from 'rollup' import minimist from 'minimist' +import { buildOptions } from './utils.js' const argv = minimist(process.argv.slice(2)) const __dirname = fileURLToPath(new URL('.', import.meta.url)) -const packagesDir = path.resolve(__dirname, '../packages/') - -async function buildOptions() { - const dirs = await fs.readdir(packagesDir) - const plugins = [ - nodeResolve({ - preferBuiltins: true, - exportConditions: ['node'], - }), - typescript({ - exclude: ['packages/web/**/*.ts', '**/__test__/**', 'node_modules/**'], - }), - commonjs(), - terser(), - ] - const opts: any = {} - for (let i = 0; i < dirs.length; i++) { - if (dirs[i] !== 'web') { - opts[dirs[i]] = { - input: { - input: path.resolve(__dirname, `../packages/${dirs[i]}/index.ts`), - plugins, - }, - output: { - dir: path.resolve(__dirname, `../packages/${dirs[i]}/dist`), - format: 'es' as ModuleFormat, - }, - } - } - } - return opts -} - -async function buildCli() { - const { cli } = await buildOptions() - const outputOptions = { - ...cli.output, - banner: '#! /usr/bin/env node', - } - const bundle = await rollup(cli.input) - await bundle.write(outputOptions) -} - -async function buildShared() { - const { shared } = await buildOptions() - const bundle = await rollup(shared.input) - await bundle.write(shared.output) -} async function buildWeb(isDeploy?: boolean) { const webBuildPath = isDeploy ? '../packages/web/dist' : '../packages/cli/dist' @@ -79,16 +26,25 @@ async function buildWeb(isDeploy?: boolean) { } async function resolveBuild() { + const opts = await buildOptions() if (argv.cli) { - await buildCli() + const [input, output] = opts.get('cli') + output.banner = '#! /usr/bin/env node' + const bundle = await rollup(input) + await bundle.write(output) } else if (argv.web) { await buildWeb(argv.deploy) } else { - await buildShared() await buildWeb(argv.deploy) - await buildCli() + for (const val of opts.values()) { + const [input, output] = val + if (val === 'cli') + output.banner = '#! /usr/bin/env node' + const bundle = await rollup(input) + await bundle.write(output) + } } } diff --git a/scripts/utils.ts b/scripts/utils.ts new file mode 100644 index 00000000..ed406d0e --- /dev/null +++ b/scripts/utils.ts @@ -0,0 +1,42 @@ +import path from 'node:path' +import fs from 'node:fs/promises' +import { fileURLToPath } from 'node:url' +import type { ModuleFormat } from 'rollup' +import typescript from '@rollup/plugin-typescript' +import commonjs from '@rollup/plugin-commonjs' +import terser from '@rollup/plugin-terser' +import { nodeResolve } from '@rollup/plugin-node-resolve' + +const __dirname = fileURLToPath(new URL('.', import.meta.url)) +const packagesDir = path.resolve(__dirname, '../packages/') + +export async function buildOptions() { + const dirs = await fs.readdir(packagesDir) + const plugins = [ + nodeResolve({ + preferBuiltins: true, + exportConditions: ['node'], + }), + typescript({ + exclude: ['packages/web/**/*.ts', '**/__test__/**', 'node_modules/**'], + }), + commonjs(), + terser(), + ] + const opts = new Map() + for (let i = 0; i < dirs.length; i++) { + if (dirs[i] !== 'web') { + opts.set(dirs[i], [ + { + input: path.resolve(__dirname, `../packages/${dirs[i]}/index.ts`), + plugins, + }, + { + dir: path.resolve(__dirname, `../packages/${dirs[i]}/dist`), + format: 'es' as ModuleFormat, + }, + ]) + } + } + return opts +}