Compare commits

...

5 Commits

Author SHA1 Message Date
9cf173293d v2.9.0
Some checks failed
Default (tags) / security (push) Successful in 43s
Default (tags) / test (push) Failing after 39s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-02-24 19:00:42 +00:00
3a53fffe3d feat(exports): expose mod_custom, mod_output and interfaces from entry; make processSingleBundle public 2026-02-24 19:00:42 +00:00
8f129527d9 v2.8.4
Some checks failed
Default (tags) / security (push) Successful in 41s
Default (tags) / test (push) Failing after 36s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-02-24 17:03:04 +00:00
5d9052018e fix(): no changes — empty diff, nothing to commit 2026-02-24 17:03:04 +00:00
12c5655251 feat(includeFiles): support {from, to} object form for custom serve paths
includeFiles now accepts string | {from, to} entries. The object form
allows specifying a custom serve path (e.g. ./html/index.html -> index.html)
for base64ts bundled content.
2026-02-24 17:02:46 +00:00
8 changed files with 50 additions and 12 deletions

View File

@@ -1,5 +1,17 @@
# Changelog
## 2026-02-24 - 2.9.0 - feat(exports)
expose mod_custom, mod_output and interfaces from entry; make processSingleBundle public
- Exported ./mod_custom, ./mod_output and ./interfaces from ts/index.ts to expose these modules in the public API.
- Changed processSingleBundle in ts/mod_custom/index.ts from private to public to allow programmatic invocation.
- Non-breaking API expansion; recommend a minor version bump.
## 2026-02-24 - 2.8.4 - fix()
no changes — empty diff, nothing to commit
- Diff contained no modifications; no release required
## 2026-01-23 - 2.8.3 - fix(mod_output)
use pattern base dir when computing relative paths for files to serve

View File

@@ -1,6 +1,6 @@
{
"name": "@git.zone/tsbundle",
"version": "2.8.3",
"version": "2.9.0",
"private": false,
"description": "a multi-bundler tool supporting esbuild, rolldown, and rspack for painless bundling of web projects",
"main": "dist_ts/index.js",

View File

@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@git.zone/tsbundle',
version: '2.8.3',
version: '2.9.0',
description: 'a multi-bundler tool supporting esbuild, rolldown, and rspack for painless bundling of web projects'
}

View File

@@ -11,4 +11,7 @@ early.stop();
export * from './tsbundle.class.tsbundle.js';
export * from './mod_assets/index.js';
export * from './mod_html/index.js';
export * from './mod_custom/index.js';
export * from './mod_output/index.js';
export * from './interfaces/index.js';
export { runCli };

View File

@@ -17,13 +17,15 @@ export interface IEnvTransportOptions {
export type TOutputMode = 'bundle' | 'base64ts';
export type TBundler = 'esbuild' | 'rolldown' | 'rspack';
export type TIncludeFile = string | { from: string; to: string };
export interface IBundleConfig {
from: string;
to: string;
outputMode?: TOutputMode;
bundler?: TBundler;
production?: boolean;
includeFiles?: string[];
includeFiles?: TIncludeFile[];
maxLineLength?: number; // For base64ts output: max chars per line. 0 or undefined = unlimited (default)
}

View File

@@ -48,7 +48,7 @@ export class CustomBundleHandler {
/**
* Process a single bundle configuration
*/
private async processSingleBundle(bundleConfig: interfaces.IBundleConfig): Promise<void> {
public async processSingleBundle(bundleConfig: interfaces.IBundleConfig): Promise<void> {
const outputMode = bundleConfig.outputMode || 'bundle';
const bundler = bundleConfig.bundler || 'esbuild';
@@ -105,8 +105,12 @@ export class CustomBundleHandler {
// Add included files
if (bundleConfig.includeFiles && bundleConfig.includeFiles.length > 0) {
for (const pattern of bundleConfig.includeFiles) {
await base64Output.addFilesFromGlob(pattern);
for (const entry of bundleConfig.includeFiles) {
if (typeof entry === 'string') {
await base64Output.addFilesFromGlob(entry);
} else {
await base64Output.addFileWithServePath(entry.from, entry.to);
}
}
}
@@ -135,7 +139,8 @@ export class CustomBundleHandler {
const htmlHandler = new HtmlHandler();
const outputDir = plugins.path.dirname(toPath);
for (const pattern of bundleConfig.includeFiles) {
for (const entry of bundleConfig.includeFiles) {
const pattern = typeof entry === 'string' ? entry : entry.from;
await this.copyIncludedFiles(pattern, outputDir);
}
}

View File

@@ -123,7 +123,8 @@ export class InitHandler {
console.log(` Mode: ${bundle.outputMode || 'bundle'}`);
console.log(` Bundler: ${bundle.bundler || 'esbuild'}`);
if (bundle.includeFiles && bundle.includeFiles.length > 0) {
console.log(` Include: ${bundle.includeFiles.join(', ')}`);
const display = bundle.includeFiles.map(f => typeof f === 'string' ? f : `${f.from} -> ${f.to}`);
console.log(` Include: ${display.join(', ')}`);
}
console.log('');
});
@@ -168,7 +169,8 @@ export class InitHandler {
console.log(` Mode: ${preset.config.outputMode}`);
console.log(` Bundler: ${preset.config.bundler}`);
if (preset.config.includeFiles && preset.config.includeFiles.length > 0) {
console.log(` Include: ${preset.config.includeFiles.join(', ')}`);
const display = preset.config.includeFiles.map(f => typeof f === 'string' ? f : `${f.from} -> ${f.to}`);
console.log(` Include: ${display.join(', ')}`);
}
const confirmInteract = new plugins.smartinteract.SmartInteract();
@@ -293,14 +295,14 @@ export class InitHandler {
/**
* Configure files to include
*/
private async configureIncludeFiles(prefill?: string[]): Promise<string[]> {
const includeFiles: string[] = [];
private async configureIncludeFiles(prefill?: interfaces.TIncludeFile[]): Promise<interfaces.TIncludeFile[]> {
const includeFiles: interfaces.TIncludeFile[] = [];
let addMore = true;
// If we have prefilled values, show them first
if (prefill && prefill.length > 0) {
console.log('\nPre-configured include patterns:');
prefill.forEach((p) => console.log(` - ${p}`));
prefill.forEach((p) => console.log(` - ${typeof p === 'string' ? p : `${p.from} -> ${p.to}`}`));
const keepInteract = new plugins.smartinteract.SmartInteract();
keepInteract.addQuestions([

View File

@@ -22,6 +22,20 @@ export class Base64TsOutput {
});
}
/**
* Add a file with a custom serve path
*/
public async addFileWithServePath(fromPath: string, servePath: string): Promise<void> {
const absolutePath = plugins.smartpath.transform.toAbsolute(fromPath, this.cwd) as string;
const fileExists = await plugins.fs.file(absolutePath).exists();
if (!fileExists) {
console.log(`File does not exist: ${absolutePath}`);
return;
}
const content = await plugins.fs.file(absolutePath).read();
this.addFile(servePath, content);
}
/**
* Add files matching a glob pattern
*/