@bfra.me/semantic-release
Version:
Semantic Release shareable configuration and plugins for bfra.me.
248 lines (246 loc) • 6.6 kB
JavaScript
import {
defineConfig
} from "./chunk-2II77SNF.js";
// src/config/builder.ts
var ConfigBuilder = class {
config = {};
pluginsList = [];
/**
* Set the branches configuration.
*
* @param branches - Branch configuration
* @returns The builder instance for chaining
*/
branches(branches) {
this.config = { ...this.config, branches };
return this;
}
/**
* Set the repository URL.
*
* @param url - Repository URL
* @returns The builder instance for chaining
*/
repositoryUrl(url) {
this.config = { ...this.config, repositoryUrl: url };
return this;
}
/**
* Set the tag format.
*
* @param format - Tag format string
* @returns The builder instance for chaining
*/
tagFormat(format) {
this.config = { ...this.config, tagFormat: format };
return this;
}
/**
* Enable or disable dry-run mode.
*
* @param enabled - Whether to enable dry-run mode
* @returns The builder instance for chaining
*/
dryRun(enabled = true) {
this.config = { ...this.config, dryRun: enabled };
return this;
}
/**
* Enable or disable CI mode.
*
* @param enabled - Whether to enable CI mode
* @returns The builder instance for chaining
*/
ci(enabled = true) {
this.config = { ...this.config, ci: enabled };
return this;
}
/**
* Set debug mode.
*
* @param enabled - Whether to enable debug mode
* @returns The builder instance for chaining
*/
debug(enabled = true) {
this.config = { ...this.config, debug: enabled };
return this;
}
/**
* Enter plugin configuration mode.
*
* @returns A plugin builder for configuring plugins
*/
plugins() {
return new PluginBuilder(this, this.pluginsList);
}
/**
* Add a custom plugin configuration.
*
* @param plugin - Plugin specification
* @returns The builder instance for chaining
*/
addPlugin(plugin) {
this.pluginsList.push(plugin);
return this;
}
/**
* Set plugins directly (replaces any existing plugins).
*
* @param plugins - Array of plugin specifications
* @returns The builder instance for chaining
*/
setPlugins(plugins) {
this.pluginsList = [...plugins];
return this;
}
/**
* Build the final configuration.
*
* @param options - Build options for validation and processing
* @returns The built semantic-release configuration
*/
build(options) {
const finalConfig = {
...this.config,
plugins: this.pluginsList.length > 0 ? this.pluginsList : void 0
};
return defineConfig(finalConfig, options);
}
/**
* Get the current configuration without finalizing.
*
* @returns The current configuration state
*/
toConfig() {
return {
...this.config,
plugins: this.pluginsList.length > 0 ? this.pluginsList : void 0
};
}
};
var PluginBuilder = class {
configBuilder;
pluginsList;
constructor(configBuilder, pluginsList) {
this.configBuilder = configBuilder;
this.pluginsList = pluginsList;
}
/**
* Add @semantic-release/commit-analyzer plugin.
*
* @param config - Plugin configuration options
* @returns The plugin builder for chaining
*/
commitAnalyzer(config) {
const plugin = config ? ["@semantic-release/commit-analyzer", config] : "@semantic-release/commit-analyzer";
this.pluginsList.push(plugin);
return this;
}
/**
* Add @semantic-release/release-notes-generator plugin.
*
* @param config - Plugin configuration options
* @returns The plugin builder for chaining
*/
releaseNotesGenerator(config) {
const plugin = config ? ["@semantic-release/release-notes-generator", config] : "@semantic-release/release-notes-generator";
this.pluginsList.push(plugin);
return this;
}
/**
* Add @semantic-release/changelog plugin.
*
* @param config - Plugin configuration options
* @returns The plugin builder for chaining
*/
changelog(config) {
const plugin = config ? ["@semantic-release/changelog", config] : "@semantic-release/changelog";
this.pluginsList.push(plugin);
return this;
}
/**
* Add @semantic-release/npm plugin.
*
* @param config - Plugin configuration options
* @returns The plugin builder for chaining
*/
npm(config) {
const plugin = config ? ["@semantic-release/npm", config] : "@semantic-release/npm";
this.pluginsList.push(plugin);
return this;
}
/**
* Add @semantic-release/github plugin.
*
* @param config - Plugin configuration options
* @returns The plugin builder for chaining
*/
github(config) {
const plugin = config ? ["@semantic-release/github", config] : "@semantic-release/github";
this.pluginsList.push(plugin);
return this;
}
/**
* Add @semantic-release/git plugin.
*
* @param config - Plugin configuration options
* @returns The plugin builder for chaining
*/
git(config) {
const plugin = config ? ["@semantic-release/git", config] : "@semantic-release/git";
this.pluginsList.push(plugin);
return this;
}
/**
* Add a custom plugin.
*
* @param plugin - Plugin specification
* @returns The plugin builder for chaining
*/
custom(plugin) {
this.pluginsList.push(plugin);
return this;
}
/**
* Return to the main configuration builder.
*
* @returns The main configuration builder
*/
done() {
return this.configBuilder;
}
/**
* Build the final configuration directly from the plugin builder.
*
* @param options - Build options for validation and processing
* @returns The built semantic-release configuration
*/
build(options) {
return this.configBuilder.build(options);
}
};
function createConfigBuilder() {
return new ConfigBuilder();
}
function createDefaultBuilder() {
return createConfigBuilder().plugins().commitAnalyzer().releaseNotesGenerator().npm().github().done();
}
function createNpmBuilder() {
return createConfigBuilder().plugins().commitAnalyzer().releaseNotesGenerator().changelog().npm().github().git({
assets: ["CHANGELOG.md", "package.json"],
// eslint-disable-next-line no-template-curly-in-string
message: "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}).done();
}
function createGitHubBuilder() {
return createConfigBuilder().plugins().commitAnalyzer().releaseNotesGenerator().github().done();
}
export {
ConfigBuilder,
PluginBuilder,
createConfigBuilder,
createDefaultBuilder,
createNpmBuilder,
createGitHubBuilder
};
//# sourceMappingURL=chunk-Y2EWY7XM.js.map