@snailicid3/build-config
v0.0.4
Published
Shared tsdown, vite, vitest and typedoc build tool configs
Maintainers
Readme
@snailicid3/build-config 🐌
Provides reusable build configurations and adapters for tsdown, vite, vitest, and typedoc.
Repository
- Github:
@snailicid3/build-config•snailicid3 - Documentation: ARCHITECTURE.md
Author
👤 Gillian Tunney
Recommended package manager is pnpm
@snailicid3/build-config 🐌
This package provides a tool-agnostic build planning system with adapter implementations for tsdown,
vite, esbuild, rollup, and tsc. It defines a BuildPlan abstraction so package build identity
(runtime, product, build strategy) is declared once in package.json and consumed by all build
configs.
See ARCHITECTURE.md for the full design specification.
@snailicid3/build-config contains:
Build Adapters
- tsdown • Primary bundler for TypeScript libraries (ESM + CJS)
- vite • Web app and browser library bundler
- esbuild • Single-file script bundler
- rollup • Available as an adapter for multi-format builds
- tsc • Transpile-only adapter
Vitest Configuration
- vitest • Shared vitest configuration with coverage
TypeDoc Configuration
- typedoc • Documentation generator for TypeScript
- typedoc-plugin-markdown • Generate docs as markdown
- typedoc-material-theme • Material theme for TypeDoc
Installation
#pnpm
$ pnpm add @snailicid3/build-config -D
#yarn
$ yarn add @snailicid3/build-config -D
#npm
$ npm install @snailicid3/build-config --save-devExamples
tsdown Config
/* @file tsdown.config.ts */
import {
defineEntry,
definePlan,
identityFromPackage,
toTsdownConfig,
} from '@snailicid3/build-config'
import { defineConfig } from 'tsdown'
import pkg from './package.json' with { type: 'json' }
const identity = identityFromPackage(pkg)
const plan = definePlan(identity, './src', './dist', [
defineEntry('.', ['esm', 'cjs'], {
banner: true,
dts: true,
sourcemap: true,
}),
])
export default defineConfig(toTsdownConfig(plan))Vitest Config
/* @file vitest.config.ts */
import { vitest } from '@snailicid3/build-config'
export default vitest.config()TypeDoc Config
/* @file typedoc.config.ts */
import { typedoc } from '@snailicid3/build-config'
import url from 'node:url'
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
export default typedoc.configMaterialTheme(__dirname, {})Deriving package.json exports from a build plan
import {
defineEntry,
definePlan,
identityFromPackage,
toPackageExports,
} from '@snailicid3/build-config'
import pkg from './package.json' with { type: 'json' }
const plan = definePlan(identityFromPackage(pkg), './src', './dist', [
defineEntry('.', ['esm', 'cjs'], { dts: true }),
])
console.log(toPackageExports(plan))
// {
// '.': {
// types: './dist/index.d.ts',
// import: './dist/index.js',
// require: './dist/index.cjs',
// default: './dist/index.js'
// }
// }