diff --git a/changelog.md b/changelog.md index 8147bc0..b43c1c0 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,13 @@ # Changelog +## 2026-02-24 - 3.2.0 - feat(bundle) +add configurable bundle output modes and bundler options (support base64ts, production builds, includeFiles, maxLineLength) and route non-default outputs to a CustomBundleHandler + +- Added new ITswatchConfig fields: outputMode, bundler, production, includeFiles, maxLineLength +- tswatch now creates a CustomBundleHandler and uses it when outputMode is not 'bundle' (e.g. base64ts) +- Default bundling path now reads bundler and production from bundleConfig (defaults to 'esbuild' and false) +- Bumped dependency @git.zone/tsbundle to ^2.9.0 + ## 2026-02-05 - 3.1.0 - feat(dev-server) add no-cache headers to built-in development server; update docs and bump dependencies diff --git a/package.json b/package.json index 72ec637..7d65d61 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "dependencies": { "@api.global/typedserver": "^8.3.0", - "@git.zone/tsbundle": "^2.8.3", + "@git.zone/tsbundle": "^2.9.0", "@git.zone/tsrun": "^2.0.1", "@push.rocks/early": "^4.0.4", "@push.rocks/lik": "^6.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f7abf0..3e87ab1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^8.3.0 version: 8.3.0(@tiptap/pm@2.27.2) '@git.zone/tsbundle': - specifier: ^2.8.3 - version: 2.8.3 + specifier: ^2.9.0 + version: 2.9.0 '@git.zone/tsrun': specifier: ^2.0.1 version: 2.0.1 @@ -630,8 +630,8 @@ packages: resolution: {integrity: sha512-S518ulKveO76pS6jrAELrnFaCw5nDAIZD9j6QzVmLYDiZuJmlRwPK3/2E8ugQ+b7ffpkwJ9MT685ooEGDcWQ4Q==} hasBin: true - '@git.zone/tsbundle@2.8.3': - resolution: {integrity: sha512-9q+KbVGKUTDNND+jDiJuk4bPH/mtiA2B0EWtV+/NyvgZfIbpe/ItHemyIvXB4RAqncMdBhzXquCFCvGjAhwVIQ==} + '@git.zone/tsbundle@2.9.0': + resolution: {integrity: sha512-itXX/oiJjrRHUlIGTHUEqSwPuGwsG4Cq8kh7aqFOm8mYzJwtXYE1gBqLJTWZma6gI5n+xAk5qTxTyfikuPgWQA==} hasBin: true '@git.zone/tspublish@1.11.0': @@ -5589,7 +5589,7 @@ snapshots: - supports-color - vue - '@git.zone/tsbundle@2.8.3': + '@git.zone/tsbundle@2.9.0': dependencies: '@push.rocks/early': 4.0.4 '@push.rocks/npmextra': 5.3.3 @@ -5646,7 +5646,7 @@ snapshots: '@git.zone/tstest@3.1.8(@aws-sdk/credential-providers@3.855.0)(@push.rocks/smartserve@2.0.1)(socks@2.8.7)(typescript@5.9.3)': dependencies: '@api.global/typedserver': 3.0.80(@push.rocks/smartserve@2.0.1) - '@git.zone/tsbundle': 2.8.3 + '@git.zone/tsbundle': 2.9.0 '@git.zone/tsrun': 2.0.1 '@push.rocks/consolecolor': 2.0.3 '@push.rocks/qenv': 6.1.3 diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 624e292..73bdc7f 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@git.zone/tswatch', - version: '3.1.0', + version: '3.2.0', description: 'A development tool for automatically watching and re-compiling TypeScript projects upon detecting file changes, enhancing developer workflows.' } diff --git a/ts/interfaces/interfaces.config.ts b/ts/interfaces/interfaces.config.ts index af8a69e..6caa952 100644 --- a/ts/interfaces/interfaces.config.ts +++ b/ts/interfaces/interfaces.config.ts @@ -44,6 +44,16 @@ export interface IBundleConfig { watchPatterns?: string[]; /** If true, trigger server reload after bundling (default: true) */ triggerReload?: boolean; + /** Output mode: 'bundle' writes JS, 'base64ts' writes base64-encoded TS (default: 'bundle') */ + outputMode?: 'bundle' | 'base64ts'; + /** Bundler to use (default: 'esbuild') */ + bundler?: 'esbuild' | 'rolldown' | 'rspack'; + /** Whether to produce a production build (default: false) */ + production?: boolean; + /** Files to include alongside the bundle */ + includeFiles?: (string | { from: string; to: string })[]; + /** Max chars per line for base64ts output. 0 or undefined = unlimited */ + maxLineLength?: number; } /** diff --git a/ts/tswatch.classes.tswatch.ts b/ts/tswatch.classes.tswatch.ts index c1569f7..2c16484 100644 --- a/ts/tswatch.classes.tswatch.ts +++ b/ts/tswatch.classes.tswatch.ts @@ -18,6 +18,7 @@ export class TsWatch { public typedserver: plugins.typedserver.TypedServer | null = null; private tsbundle = new plugins.tsbundle.TsBundle(); + private customBundleHandler = new plugins.tsbundle.CustomBundleHandler(); private htmlHandler = new plugins.tsbundle.HtmlHandler(); private assetsHandler = new plugins.tsbundle.AssetsHandler(); @@ -128,10 +129,22 @@ export class TsWatch { } else if (fromPath.endsWith('/') || !fromPath.includes('.')) { // Assets directory copy await this.assetsHandler.processAssets(); + } else if (bundleConfig.outputMode && bundleConfig.outputMode !== 'bundle') { + // Non-default outputMode (e.g. base64ts) — use CustomBundleHandler + await this.customBundleHandler.processSingleBundle({ + from: bundleConfig.from, + to: bundleConfig.to, + outputMode: bundleConfig.outputMode, + bundler: bundleConfig.bundler || 'esbuild', + production: bundleConfig.production || false, + includeFiles: bundleConfig.includeFiles, + maxLineLength: bundleConfig.maxLineLength, + }); } else { - // TypeScript bundling + // Standard TypeScript bundling (default) await this.tsbundle.build(paths.cwd, fromPath, toPath, { - bundler: 'esbuild', + bundler: bundleConfig.bundler || 'esbuild', + production: bundleConfig.production || false, }); }