@stacksjs/stx
Version:
A performant UI Framework. Powered by Bun.
199 lines • 5.29 kB
TypeScript
/**
* Create and run a production build
*/
export declare function build(config: ProductionBuildConfig): Promise<BuildResult>;
/**
* Create a production build instance
*/
export declare function createProductionBuild(config: ProductionBuildConfig): ProductionBuild;
/**
* Default production config
*/
export declare function defineConfig(config: ProductionBuildConfig): ProductionBuildConfig;
/**
* Production build configuration
*/
export declare interface ProductionBuildConfig {
entry: string | string[] | Record<string, string>
outDir: string
publicPath?: string
sourcemaps?: boolean | 'inline' | 'external' | 'hidden'
minify?: boolean | MinifyOptions
splitting?: boolean | SplittingOptions
css?: CssOptions
assets?: AssetOptions
compression?: CompressionOptions
analyze?: boolean | AnalyzeOptions
target?: string | string[]
define?: Record<string, string>
external?: string[]
plugins?: BuildPlugin[]
}
/**
* Minification options
*/
export declare interface MinifyOptions {
js?: boolean
css?: boolean
html?: boolean
dropConsole?: boolean
dropDebugger?: boolean
mangle?: boolean
}
/**
* Code splitting options
*/
export declare interface SplittingOptions {
vendor?: boolean
minSize?: number
maxSize?: number
chunkNames?: 'hash' | 'named' | 'deterministic'
manualChunks?: Record<string, string[]>
}
/**
* CSS options
*/
export declare interface CssOptions {
extract?: boolean
modules?: boolean | CssModulesOptions
postcss?: boolean | object
minify?: boolean
filename?: string
}
/**
* CSS modules options
*/
export declare interface CssModulesOptions {
pattern?: string
sourcemap?: boolean
}
/**
* Asset options
*/
export declare interface AssetOptions {
inlineLimit?: number
filename?: string
hash?: boolean
hashLength?: number
include?: string[]
exclude?: string[]
}
/**
* Compression options
*/
export declare interface CompressionOptions {
gzip?: boolean
brotli?: boolean
threshold?: number
deleteOriginal?: boolean
}
/**
* Bundle analysis options
*/
export declare interface AnalyzeOptions {
format?: 'html' | 'json' | 'text'
filename?: string
open?: boolean
gzipSize?: boolean
brotliSize?: boolean
}
/**
* Build plugin interface
*/
export declare interface BuildPlugin {
name: string
setup?: (build: ProductionBuild) => void | Promise<void>
buildStart?: () => void | Promise<void>
transform?: (code: string, id: string) => string | Promise<string> | null
buildEnd?: (result: BuildResult) => void | Promise<void>
}
/**
* Build result
*/
export declare interface BuildResult {
outputs: OutputFile[]
duration: number
totalSize: number
gzipSize: number
chunks: ChunkInfo[]
assets: AssetInfo[]
warnings: string[]
errors: string[]
}
/**
* Output file info
*/
export declare interface OutputFile {
path: string
type: 'js' | 'css' | 'html' | 'asset' | 'map'
size: number
gzipSize?: number
hash?: string
sources?: string[]
isEntry?: boolean
}
/**
* Chunk info
*/
export declare interface ChunkInfo {
name: string
file: string
size: number
modules: string[]
isVendor?: boolean
imports: string[]
dynamicImports: string[]
}
/**
* Asset info
*/
export declare interface AssetInfo {
name: string
file: string
size: number
source: string
mimeType?: string
}
/**
* Production Build orchestrator
*/
export declare class ProductionBuild {
private config: ProductionBuildConfig;
private startTime: number;
private outputs: OutputFile[];
private chunks: ChunkInfo[];
private assets: AssetInfo[];
private warnings: string[];
private errors: string[];
private moduleGraph: Map<string, Set<string>>;
private assetHashes: Map<string, string>;
constructor(config: ProductionBuildConfig);
build(): Promise<BuildResult>;
private collectEntries(): Map<string, string>;
private buildEntry(name: string, entryPath: string): Promise<void>;
private resolveRelativePath(from: string, to: string): string;
private processTemplate(content: string, filePath: string): Promise<string>;
private processCss(content: string, filePath: string): Promise<string>;
private processScript(content: string, filePath: string): Promise<string>;
private extractCss(): Promise<void>;
private processAssets(): Promise<void>;
private performCodeSplitting(): Promise<void>;
private minifyOutputs(): Promise<void>;
private minifyJs(code: string): string;
private minifyCss(css: string): string;
private minifyHtml(html: string): string;
private generateSourceMaps(): Promise<void>;
private fingerprintAssets(): Promise<void>;
private compressOutputs(): Promise<void>;
private analyzeBundle(): Promise<void>;
private generateAnalysisHtml(analysis: any): string;
private generateAnalysisText(analysis: any): string;
private runPluginHook(hook: string, arg?: any): Promise<void>;
private runPluginTransform(code: string, id: string): Promise<string>;
private generateHash(content: string | Buffer): string;
private getOutputName(name: string, type: OutputFile['type'], hash: string): string;
private formatSize(bytes: number): string;
private ensureDir(dir: string): void;
private walkDir(dir: string, callback: (path: string) => void): void;
private getResult(): BuildResult;
}