UNPKG

@bfra.me/semantic-release

Version:

Semantic Release shareable configuration and plugins for bfra.me.

248 lines (246 loc) 6.6 kB
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