@exadev/semantic-release-workspace 1.3.2 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -15,7 +15,7 @@ import { generateNotes } from "@semantic-release/release-notes-generator";
15
15
  import semanticRelease from "semantic-release";
16
16
  import { pathToFileURL } from "node:url";
17
17
  //#region package.json
18
- var version = "1.3.2";
18
+ var version = "1.3.3";
19
19
  //#endregion
20
20
  //#region src/errors.ts
21
21
  /**
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { AnalyzeCommitsContext, BranchSpec, Commit, GenerateNotesContext } from "semantic-release";
2
2
  import { ReleaseGateState } from "@exadev/release-gate";
3
3
  //#region src/package-name.d.ts
4
- declare const packageName = "@exadev/semantic-release-workspace";
4
+ export declare const packageName = "@exadev/semantic-release-workspace";
5
5
  //#endregion
6
6
  //#region src/manifest.d.ts
7
7
  /**
@@ -16,13 +16,13 @@ interface PackageManifest {
16
16
  /** Only the fields actually present in the file, each mapping dependency name to its declared range. */
17
17
  readonly dependencies: ReadonlyMap<DependencyField, ReadonlyMap<string, string>>;
18
18
  }
19
- declare function readManifest(path: string): Promise<PackageManifest>;
19
+ export declare function readManifest(path: string): Promise<PackageManifest>;
20
20
  /**
21
21
  * Rewrites one dependency range in a manifest on disk.
22
22
  *
23
23
  * Deliberately re-reads the file rather than editing a copy held from discovery time: by the time a cross-package bump is applied, semantic-release's own `@semantic-release/npm` prepare step may already have rewritten `version` in this same file for an earlier package in the run. Writing back a manifest parsed before that would silently revert it.
24
24
  */
25
- declare function writeDependencyRange(path: string, field: DependencyField, dependency: string, range: string): Promise<void>;
25
+ export declare function writeDependencyRange(path: string, field: DependencyField, dependency: string, range: string): Promise<void>;
26
26
  //#endregion
27
27
  //#region src/workspace.d.ts
28
28
  interface WorkspacePackage {
@@ -48,7 +48,7 @@ interface Workspace {
48
48
  *
49
49
  * Nothing here knows anything about a particular repository's layout: the globs come from the workspace file, and the package names, versions, and dependency ranges come from the manifests those globs match. Pointing this at any pnpm workspace is the entire configuration.
50
50
  */
51
- declare function discoverWorkspace(root: string): Promise<Workspace>;
51
+ export declare function discoverWorkspace(root: string): Promise<Workspace>;
52
52
  //#endregion
53
53
  //#region src/graph.d.ts
54
54
  /** One package's dependency on another package in the same workspace. */
@@ -73,7 +73,7 @@ interface DependencyGraph {
73
73
  *
74
74
  * A dependency on a package outside the workspace is not an edge: it neither constrains the release order nor gets rewritten when something here releases. A package that names itself becomes a self-edge, which `topologicalOrder` then reports as the one-package cycle it is, rather than being quietly dropped.
75
75
  */
76
- declare function buildDependencyGraph(packages: readonly WorkspacePackage[]): DependencyGraph;
76
+ export declare function buildDependencyGraph(packages: readonly WorkspacePackage[]): DependencyGraph;
77
77
  /**
78
78
  * Orders packages so every package appears after every workspace sibling it depends on, using Kahn's algorithm.
79
79
  *
@@ -81,7 +81,7 @@ declare function buildDependencyGraph(packages: readonly WorkspacePackage[]): De
81
81
  *
82
82
  * A cycle has no valid order at all, so it throws rather than picking one of the wrong answers. In a release context an arbitrary order is worse than a failure: it would publish a package whose sibling dependency range points at a version that does not exist yet.
83
83
  */
84
- declare function topologicalOrder(graph: DependencyGraph): readonly string[];
84
+ export declare function topologicalOrder(graph: DependencyGraph): readonly string[];
85
85
  //#endregion
86
86
  //#region src/version-range.d.ts
87
87
  /**
@@ -120,11 +120,11 @@ type DependencyRangeShape = {
120
120
  *
121
121
  * This never needs the version a sibling is releasing: every case above depends only on the shape of `current` itself, which is what lets `releaseWorkspace` validate every workspace dependency edge up front, before any package has published anything, rather than discovering an unsupported range only when the first dependency it names happens to release.
122
122
  */
123
- declare function classifyDependencyRange(current: string): DependencyRangeShape;
123
+ export declare function classifyDependencyRange(current: string): DependencyRangeShape;
124
124
  /**
125
125
  * Computes what a dependency range on a workspace sibling becomes once that sibling releases `version`, by classifying the range's shape and then, for a rewritable shape, substituting `version` in place of the version it currently names.
126
126
  */
127
- declare function updateDependencyRange(current: string, version: string): DependencyRangeUpdate;
127
+ export declare function updateDependencyRange(current: string, version: string): DependencyRangeUpdate;
128
128
  //#endregion
129
129
  //#region src/plugins.d.ts
130
130
  /**
@@ -144,9 +144,9 @@ interface DependencyBumpSource {
144
144
  /** A publish-pipeline plugin entry as the orchestrator accepts it: a module name, optionally with a config object. */
145
145
  type PublishPluginSpec = string | readonly [string] | readonly [string, Record<string, unknown>];
146
146
  /** The standard publish pipeline this orchestrator coordinates when a workspace configures none of its own. Every entry reuses the corresponding official plugin -- the orchestrator scopes and sequences them per package, it does not reimplement npm publishing, GitHub release creation, or changelog writing. */
147
- declare const DEFAULT_PUBLISH_PLUGINS: readonly PublishPluginSpec[];
147
+ export declare const DEFAULT_PUBLISH_PLUGINS: readonly PublishPluginSpec[];
148
148
  /** The standard publish pipeline for `commitStrategy: 'single'`: the same as `DEFAULT_PUBLISH_PLUGINS` minus @semantic-release/git, which that mode never runs -- see `resolvePublishPlugins`'s `forbidGitPlugin` option for why it is rejected outright rather than merely unused. Single-commit mode does its own committing (one combined commit for every released package), so a `prepare`-step git plugin here would create the very per-package commits that mode exists to avoid. */
149
- declare const SINGLE_COMMIT_DEFAULT_PUBLISH_PLUGINS: readonly PublishPluginSpec[];
149
+ export declare const SINGLE_COMMIT_DEFAULT_PUBLISH_PLUGINS: readonly PublishPluginSpec[];
150
150
  interface ScopedPlugins {
151
151
  readonly analyzeCommits: (pluginConfig: Record<string, unknown>, context: AnalyzeCommitsContext & {
152
152
  cwd: string;
@@ -162,7 +162,7 @@ interface ScopedPlugins {
162
162
  *
163
163
  * The `analyzeCommits` wrapper carries one addition beyond filtering: when the standard analyzer finds no releasable commits but a workspace dependency range of the package's has changed, it returns 'patch' anyway. A dependent whose only change is a dependency bump still needs a release for that range to reach the registry. "Has changed" is read from two sources, merged: bumps recorded in memory earlier in the current run (`scope.bumps`), and bumps recorded in the package's own filtered commit history via the trailer `dependency-bump-commit.ts` writes and reads -- the latter is what lets a run that starts after a previous run already committed and pushed the bump (a crash recovery, or simply a later run) reach the same decision, rather than depending on state that existed only inside the process that made the commit.
164
164
  */
165
- declare function createScopedPlugins(scope: {
165
+ export declare function createScopedPlugins(scope: {
166
166
  readonly pkg: WorkspacePackage;
167
167
  readonly analyzeCommitsConfig: Record<string, unknown>;
168
168
  readonly generateNotesConfig: Record<string, unknown>;
@@ -175,12 +175,12 @@ declare function createScopedPlugins(scope: {
175
175
  *
176
176
  * A commit missing from the changed-paths map is kept rather than dropped: it is inside the package's release range (semantic-release put it there), so a failure to parse its file list must not silently swallow a release. Absent evidence errs towards publishing, which is the visible direction for a release tool.
177
177
  */
178
- declare function filterCommitsToDirectory<T extends {
178
+ export declare function filterCommitsToDirectory<T extends {
179
179
  readonly hash: string;
180
180
  }>(commits: readonly T[], changedPaths: ReadonlyMap<string, ReadonlySet<string>>, directory: string): readonly T[];
181
181
  /** A publish plugin entry with its module name resolved to an absolute path, so semantic-release loads the workspace's installed plugins regardless of the package directory it runs from. */
182
182
  type ResolvedPublishPlugin = [string, Record<string, unknown>];
183
- declare function resolvePublishPlugins(specs: readonly PublishPluginSpec[], workspaceRoot: string, options: {
183
+ export declare function resolvePublishPlugins(specs: readonly PublishPluginSpec[], workspaceRoot: string, options: {
184
184
  readonly requireGitPlugin: boolean;
185
185
  readonly forbidGitPlugin?: boolean;
186
186
  }): readonly ResolvedPublishPlugin[];
@@ -207,7 +207,7 @@ interface ResumeWorkspaceReleaseOptions {
207
207
  /**
208
208
  * Finishes every package a `gatePublish: true` `releaseWorkspace` run tagged and pushed but did not publish. Resumes each `detached` entry in the array's own order -- not re-derived from the workspace's dependency graph, since a resume pass may run in a separate process or checkout, where re-deriving order should only ever matter for directory lookup, not sequencing.
209
209
  */
210
- declare function resumeWorkspaceRelease(options: ResumeWorkspaceReleaseOptions): Promise<WorkspaceReleaseOutcome>;
210
+ export declare function resumeWorkspaceRelease(options: ResumeWorkspaceReleaseOptions): Promise<WorkspaceReleaseOutcome>;
211
211
  //#endregion
212
212
  //#region src/release.d.ts
213
213
  /**
@@ -270,7 +270,7 @@ interface WorkspaceReleaseOutcome {
270
270
  *
271
271
  * For each package, in topological order: run semantic-release's programmatic API with `cwd` scoped to the package directory, a `name@version` tag format to keep each package's tags distinct in the one shared tag namespace, and inline `analyzeCommits`/`generateNotes` plugins that filter the release range's commits down to the package's own directory before delegating to the standard plugins. When a package releases, every workspace package that depends on it and has not run yet gets its dependency range rewritten in its manifest and committed immediately -- before its own turn, so its commit analysis and its published manifest both see the new range.
272
272
  */
273
- declare function releaseWorkspace(options?: ReleaseWorkspaceOptions): Promise<WorkspaceReleaseOutcome>;
273
+ export declare function releaseWorkspace(options?: ReleaseWorkspaceOptions): Promise<WorkspaceReleaseOutcome>;
274
274
  //#endregion
275
275
  //#region src/errors.d.ts
276
276
  /**
@@ -278,27 +278,27 @@ declare function releaseWorkspace(options?: ReleaseWorkspaceOptions): Promise<Wo
278
278
  *
279
279
  * All of them are thrown, never returned as a status: the orchestrator deliberately has no "skip this package and carry on" path. A workspace that can't be discovered, ordered, or bumped correctly would otherwise publish a partially-consistent set of packages, which is strictly worse than publishing nothing.
280
280
  */
281
- declare class WorkspaceReleaseError extends Error {
281
+ export declare class WorkspaceReleaseError extends Error {
282
282
  constructor(message: string);
283
283
  }
284
284
  /** The workspace itself could not be read: no `pnpm-workspace.yaml`, no `packages` globs, an unreadable or malformed `package.json`, two packages claiming the same name, or a package sitting at the workspace root (which cannot be path-scoped -- see `discoverWorkspace`). */
285
- declare class WorkspaceDiscoveryError extends WorkspaceReleaseError {}
285
+ export declare class WorkspaceDiscoveryError extends WorkspaceReleaseError {}
286
286
  /** The intra-workspace dependency graph contains a cycle, so no release order exists in which every package releases after its own dependencies. */
287
- declare class DependencyCycleError extends WorkspaceReleaseError {
287
+ export declare class DependencyCycleError extends WorkspaceReleaseError {
288
288
  /** The packages forming the cycle, in dependency order, with the first package repeated at the end so the loop reads end to end. */
289
289
  readonly cycle: readonly string[];
290
290
  constructor(cycle: readonly string[]);
291
291
  }
292
292
  /** A dependency on a workspace sibling uses a range this tool cannot rewrite with confidence. Rewriting it wrongly, or leaving it silently stale, both produce a published manifest that disagrees with the repository, so the run stops instead. */
293
- declare class UnsupportedDependencyRangeError extends WorkspaceReleaseError {}
293
+ export declare class UnsupportedDependencyRangeError extends WorkspaceReleaseError {}
294
294
  /** The semantic-release options handed to the orchestrator cannot be scoped to a single package -- typically a publish plugin list that would leave a release commit or a cross-package manifest bump uncommitted. */
295
- declare class ReleaseConfigurationError extends WorkspaceReleaseError {}
295
+ export declare class ReleaseConfigurationError extends WorkspaceReleaseError {}
296
296
  /** A git command the orchestrator runs itself (history filtering, dependency-bump commits, pushes) failed. Carries the exit code so callers can distinguish "configuration is missing" (exit 1) from real repository failures. */
297
- declare class GitCommandError extends WorkspaceReleaseError {
297
+ export declare class GitCommandError extends WorkspaceReleaseError {
298
298
  readonly exitCode: number | undefined;
299
299
  constructor(args: readonly string[], cwd: string, exitCode: number | undefined, detail: string);
300
300
  }
301
301
  /** The workspace's git state does not support the release operation -- for example a detached HEAD, which names no branch that dependency-bump commits could be pushed to. */
302
- declare class WorkspaceStateError extends WorkspaceReleaseError {}
302
+ export declare class WorkspaceStateError extends WorkspaceReleaseError {}
303
303
  //#endregion
304
- export { type AppliedDependencyBump, type CommitStrategy, DEFAULT_PUBLISH_PLUGINS, type DependencyBump, type DependencyBumpSource, DependencyCycleError, type DependencyField, type DependencyGraph, type DependencyRangeShape, type DependencyRangeUpdate, type DetachedPackageRelease, GitCommandError, type PackageManifest, type PackageReleaseOutcome, type PublishPluginSpec, ReleaseConfigurationError, type ReleaseWorkspaceOptions, type ResolvedPublishPlugin, type ResumeWorkspaceReleaseOptions, SINGLE_COMMIT_DEFAULT_PUBLISH_PLUGINS, type ScopedPlugins, UnsupportedDependencyRangeError, type Workspace, type WorkspaceDependency, WorkspaceDiscoveryError, type WorkspacePackage, WorkspaceReleaseError, type WorkspaceReleaseOutcome, WorkspaceStateError, buildDependencyGraph, classifyDependencyRange, createScopedPlugins, discoverWorkspace, filterCommitsToDirectory, packageName, readManifest, releaseWorkspace, resolvePublishPlugins, resumeWorkspaceRelease, topologicalOrder, updateDependencyRange, writeDependencyRange };
304
+ export type { AppliedDependencyBump, CommitStrategy, DependencyBump, DependencyBumpSource, DependencyField, DependencyGraph, DependencyRangeShape, DependencyRangeUpdate, DetachedPackageRelease, PackageManifest, PackageReleaseOutcome, PublishPluginSpec, ReleaseWorkspaceOptions, ResolvedPublishPlugin, ResumeWorkspaceReleaseOptions, ScopedPlugins, Workspace, WorkspaceDependency, WorkspacePackage, WorkspaceReleaseOutcome };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { AnalyzeCommitsContext, BranchSpec, Commit, GenerateNotesContext } from "semantic-release";
2
2
  import { ReleaseGateState } from "@exadev/release-gate";
3
3
  //#region src/package-name.d.ts
4
- declare const packageName = "@exadev/semantic-release-workspace";
4
+ export declare const packageName = "@exadev/semantic-release-workspace";
5
5
  //#endregion
6
6
  //#region src/manifest.d.ts
7
7
  /**
@@ -16,13 +16,13 @@ interface PackageManifest {
16
16
  /** Only the fields actually present in the file, each mapping dependency name to its declared range. */
17
17
  readonly dependencies: ReadonlyMap<DependencyField, ReadonlyMap<string, string>>;
18
18
  }
19
- declare function readManifest(path: string): Promise<PackageManifest>;
19
+ export declare function readManifest(path: string): Promise<PackageManifest>;
20
20
  /**
21
21
  * Rewrites one dependency range in a manifest on disk.
22
22
  *
23
23
  * Deliberately re-reads the file rather than editing a copy held from discovery time: by the time a cross-package bump is applied, semantic-release's own `@semantic-release/npm` prepare step may already have rewritten `version` in this same file for an earlier package in the run. Writing back a manifest parsed before that would silently revert it.
24
24
  */
25
- declare function writeDependencyRange(path: string, field: DependencyField, dependency: string, range: string): Promise<void>;
25
+ export declare function writeDependencyRange(path: string, field: DependencyField, dependency: string, range: string): Promise<void>;
26
26
  //#endregion
27
27
  //#region src/workspace.d.ts
28
28
  interface WorkspacePackage {
@@ -48,7 +48,7 @@ interface Workspace {
48
48
  *
49
49
  * Nothing here knows anything about a particular repository's layout: the globs come from the workspace file, and the package names, versions, and dependency ranges come from the manifests those globs match. Pointing this at any pnpm workspace is the entire configuration.
50
50
  */
51
- declare function discoverWorkspace(root: string): Promise<Workspace>;
51
+ export declare function discoverWorkspace(root: string): Promise<Workspace>;
52
52
  //#endregion
53
53
  //#region src/graph.d.ts
54
54
  /** One package's dependency on another package in the same workspace. */
@@ -73,7 +73,7 @@ interface DependencyGraph {
73
73
  *
74
74
  * A dependency on a package outside the workspace is not an edge: it neither constrains the release order nor gets rewritten when something here releases. A package that names itself becomes a self-edge, which `topologicalOrder` then reports as the one-package cycle it is, rather than being quietly dropped.
75
75
  */
76
- declare function buildDependencyGraph(packages: readonly WorkspacePackage[]): DependencyGraph;
76
+ export declare function buildDependencyGraph(packages: readonly WorkspacePackage[]): DependencyGraph;
77
77
  /**
78
78
  * Orders packages so every package appears after every workspace sibling it depends on, using Kahn's algorithm.
79
79
  *
@@ -81,7 +81,7 @@ declare function buildDependencyGraph(packages: readonly WorkspacePackage[]): De
81
81
  *
82
82
  * A cycle has no valid order at all, so it throws rather than picking one of the wrong answers. In a release context an arbitrary order is worse than a failure: it would publish a package whose sibling dependency range points at a version that does not exist yet.
83
83
  */
84
- declare function topologicalOrder(graph: DependencyGraph): readonly string[];
84
+ export declare function topologicalOrder(graph: DependencyGraph): readonly string[];
85
85
  //#endregion
86
86
  //#region src/version-range.d.ts
87
87
  /**
@@ -120,11 +120,11 @@ type DependencyRangeShape = {
120
120
  *
121
121
  * This never needs the version a sibling is releasing: every case above depends only on the shape of `current` itself, which is what lets `releaseWorkspace` validate every workspace dependency edge up front, before any package has published anything, rather than discovering an unsupported range only when the first dependency it names happens to release.
122
122
  */
123
- declare function classifyDependencyRange(current: string): DependencyRangeShape;
123
+ export declare function classifyDependencyRange(current: string): DependencyRangeShape;
124
124
  /**
125
125
  * Computes what a dependency range on a workspace sibling becomes once that sibling releases `version`, by classifying the range's shape and then, for a rewritable shape, substituting `version` in place of the version it currently names.
126
126
  */
127
- declare function updateDependencyRange(current: string, version: string): DependencyRangeUpdate;
127
+ export declare function updateDependencyRange(current: string, version: string): DependencyRangeUpdate;
128
128
  //#endregion
129
129
  //#region src/plugins.d.ts
130
130
  /**
@@ -144,9 +144,9 @@ interface DependencyBumpSource {
144
144
  /** A publish-pipeline plugin entry as the orchestrator accepts it: a module name, optionally with a config object. */
145
145
  type PublishPluginSpec = string | readonly [string] | readonly [string, Record<string, unknown>];
146
146
  /** The standard publish pipeline this orchestrator coordinates when a workspace configures none of its own. Every entry reuses the corresponding official plugin -- the orchestrator scopes and sequences them per package, it does not reimplement npm publishing, GitHub release creation, or changelog writing. */
147
- declare const DEFAULT_PUBLISH_PLUGINS: readonly PublishPluginSpec[];
147
+ export declare const DEFAULT_PUBLISH_PLUGINS: readonly PublishPluginSpec[];
148
148
  /** The standard publish pipeline for `commitStrategy: 'single'`: the same as `DEFAULT_PUBLISH_PLUGINS` minus @semantic-release/git, which that mode never runs -- see `resolvePublishPlugins`'s `forbidGitPlugin` option for why it is rejected outright rather than merely unused. Single-commit mode does its own committing (one combined commit for every released package), so a `prepare`-step git plugin here would create the very per-package commits that mode exists to avoid. */
149
- declare const SINGLE_COMMIT_DEFAULT_PUBLISH_PLUGINS: readonly PublishPluginSpec[];
149
+ export declare const SINGLE_COMMIT_DEFAULT_PUBLISH_PLUGINS: readonly PublishPluginSpec[];
150
150
  interface ScopedPlugins {
151
151
  readonly analyzeCommits: (pluginConfig: Record<string, unknown>, context: AnalyzeCommitsContext & {
152
152
  cwd: string;
@@ -162,7 +162,7 @@ interface ScopedPlugins {
162
162
  *
163
163
  * The `analyzeCommits` wrapper carries one addition beyond filtering: when the standard analyzer finds no releasable commits but a workspace dependency range of the package's has changed, it returns 'patch' anyway. A dependent whose only change is a dependency bump still needs a release for that range to reach the registry. "Has changed" is read from two sources, merged: bumps recorded in memory earlier in the current run (`scope.bumps`), and bumps recorded in the package's own filtered commit history via the trailer `dependency-bump-commit.ts` writes and reads -- the latter is what lets a run that starts after a previous run already committed and pushed the bump (a crash recovery, or simply a later run) reach the same decision, rather than depending on state that existed only inside the process that made the commit.
164
164
  */
165
- declare function createScopedPlugins(scope: {
165
+ export declare function createScopedPlugins(scope: {
166
166
  readonly pkg: WorkspacePackage;
167
167
  readonly analyzeCommitsConfig: Record<string, unknown>;
168
168
  readonly generateNotesConfig: Record<string, unknown>;
@@ -175,12 +175,12 @@ declare function createScopedPlugins(scope: {
175
175
  *
176
176
  * A commit missing from the changed-paths map is kept rather than dropped: it is inside the package's release range (semantic-release put it there), so a failure to parse its file list must not silently swallow a release. Absent evidence errs towards publishing, which is the visible direction for a release tool.
177
177
  */
178
- declare function filterCommitsToDirectory<T extends {
178
+ export declare function filterCommitsToDirectory<T extends {
179
179
  readonly hash: string;
180
180
  }>(commits: readonly T[], changedPaths: ReadonlyMap<string, ReadonlySet<string>>, directory: string): readonly T[];
181
181
  /** A publish plugin entry with its module name resolved to an absolute path, so semantic-release loads the workspace's installed plugins regardless of the package directory it runs from. */
182
182
  type ResolvedPublishPlugin = [string, Record<string, unknown>];
183
- declare function resolvePublishPlugins(specs: readonly PublishPluginSpec[], workspaceRoot: string, options: {
183
+ export declare function resolvePublishPlugins(specs: readonly PublishPluginSpec[], workspaceRoot: string, options: {
184
184
  readonly requireGitPlugin: boolean;
185
185
  readonly forbidGitPlugin?: boolean;
186
186
  }): readonly ResolvedPublishPlugin[];
@@ -207,7 +207,7 @@ interface ResumeWorkspaceReleaseOptions {
207
207
  /**
208
208
  * Finishes every package a `gatePublish: true` `releaseWorkspace` run tagged and pushed but did not publish. Resumes each `detached` entry in the array's own order -- not re-derived from the workspace's dependency graph, since a resume pass may run in a separate process or checkout, where re-deriving order should only ever matter for directory lookup, not sequencing.
209
209
  */
210
- declare function resumeWorkspaceRelease(options: ResumeWorkspaceReleaseOptions): Promise<WorkspaceReleaseOutcome>;
210
+ export declare function resumeWorkspaceRelease(options: ResumeWorkspaceReleaseOptions): Promise<WorkspaceReleaseOutcome>;
211
211
  //#endregion
212
212
  //#region src/release.d.ts
213
213
  /**
@@ -270,7 +270,7 @@ interface WorkspaceReleaseOutcome {
270
270
  *
271
271
  * For each package, in topological order: run semantic-release's programmatic API with `cwd` scoped to the package directory, a `name@version` tag format to keep each package's tags distinct in the one shared tag namespace, and inline `analyzeCommits`/`generateNotes` plugins that filter the release range's commits down to the package's own directory before delegating to the standard plugins. When a package releases, every workspace package that depends on it and has not run yet gets its dependency range rewritten in its manifest and committed immediately -- before its own turn, so its commit analysis and its published manifest both see the new range.
272
272
  */
273
- declare function releaseWorkspace(options?: ReleaseWorkspaceOptions): Promise<WorkspaceReleaseOutcome>;
273
+ export declare function releaseWorkspace(options?: ReleaseWorkspaceOptions): Promise<WorkspaceReleaseOutcome>;
274
274
  //#endregion
275
275
  //#region src/errors.d.ts
276
276
  /**
@@ -278,27 +278,27 @@ declare function releaseWorkspace(options?: ReleaseWorkspaceOptions): Promise<Wo
278
278
  *
279
279
  * All of them are thrown, never returned as a status: the orchestrator deliberately has no "skip this package and carry on" path. A workspace that can't be discovered, ordered, or bumped correctly would otherwise publish a partially-consistent set of packages, which is strictly worse than publishing nothing.
280
280
  */
281
- declare class WorkspaceReleaseError extends Error {
281
+ export declare class WorkspaceReleaseError extends Error {
282
282
  constructor(message: string);
283
283
  }
284
284
  /** The workspace itself could not be read: no `pnpm-workspace.yaml`, no `packages` globs, an unreadable or malformed `package.json`, two packages claiming the same name, or a package sitting at the workspace root (which cannot be path-scoped -- see `discoverWorkspace`). */
285
- declare class WorkspaceDiscoveryError extends WorkspaceReleaseError {}
285
+ export declare class WorkspaceDiscoveryError extends WorkspaceReleaseError {}
286
286
  /** The intra-workspace dependency graph contains a cycle, so no release order exists in which every package releases after its own dependencies. */
287
- declare class DependencyCycleError extends WorkspaceReleaseError {
287
+ export declare class DependencyCycleError extends WorkspaceReleaseError {
288
288
  /** The packages forming the cycle, in dependency order, with the first package repeated at the end so the loop reads end to end. */
289
289
  readonly cycle: readonly string[];
290
290
  constructor(cycle: readonly string[]);
291
291
  }
292
292
  /** A dependency on a workspace sibling uses a range this tool cannot rewrite with confidence. Rewriting it wrongly, or leaving it silently stale, both produce a published manifest that disagrees with the repository, so the run stops instead. */
293
- declare class UnsupportedDependencyRangeError extends WorkspaceReleaseError {}
293
+ export declare class UnsupportedDependencyRangeError extends WorkspaceReleaseError {}
294
294
  /** The semantic-release options handed to the orchestrator cannot be scoped to a single package -- typically a publish plugin list that would leave a release commit or a cross-package manifest bump uncommitted. */
295
- declare class ReleaseConfigurationError extends WorkspaceReleaseError {}
295
+ export declare class ReleaseConfigurationError extends WorkspaceReleaseError {}
296
296
  /** A git command the orchestrator runs itself (history filtering, dependency-bump commits, pushes) failed. Carries the exit code so callers can distinguish "configuration is missing" (exit 1) from real repository failures. */
297
- declare class GitCommandError extends WorkspaceReleaseError {
297
+ export declare class GitCommandError extends WorkspaceReleaseError {
298
298
  readonly exitCode: number | undefined;
299
299
  constructor(args: readonly string[], cwd: string, exitCode: number | undefined, detail: string);
300
300
  }
301
301
  /** The workspace's git state does not support the release operation -- for example a detached HEAD, which names no branch that dependency-bump commits could be pushed to. */
302
- declare class WorkspaceStateError extends WorkspaceReleaseError {}
302
+ export declare class WorkspaceStateError extends WorkspaceReleaseError {}
303
303
  //#endregion
304
- export { type AppliedDependencyBump, type CommitStrategy, DEFAULT_PUBLISH_PLUGINS, type DependencyBump, type DependencyBumpSource, DependencyCycleError, type DependencyField, type DependencyGraph, type DependencyRangeShape, type DependencyRangeUpdate, type DetachedPackageRelease, GitCommandError, type PackageManifest, type PackageReleaseOutcome, type PublishPluginSpec, ReleaseConfigurationError, type ReleaseWorkspaceOptions, type ResolvedPublishPlugin, type ResumeWorkspaceReleaseOptions, SINGLE_COMMIT_DEFAULT_PUBLISH_PLUGINS, type ScopedPlugins, UnsupportedDependencyRangeError, type Workspace, type WorkspaceDependency, WorkspaceDiscoveryError, type WorkspacePackage, WorkspaceReleaseError, type WorkspaceReleaseOutcome, WorkspaceStateError, buildDependencyGraph, classifyDependencyRange, createScopedPlugins, discoverWorkspace, filterCommitsToDirectory, packageName, readManifest, releaseWorkspace, resolvePublishPlugins, resumeWorkspaceRelease, topologicalOrder, updateDependencyRange, writeDependencyRange };
304
+ export type { AppliedDependencyBump, CommitStrategy, DependencyBump, DependencyBumpSource, DependencyField, DependencyGraph, DependencyRangeShape, DependencyRangeUpdate, DetachedPackageRelease, PackageManifest, PackageReleaseOutcome, PublishPluginSpec, ReleaseWorkspaceOptions, ResolvedPublishPlugin, ResumeWorkspaceReleaseOptions, ScopedPlugins, Workspace, WorkspaceDependency, WorkspacePackage, WorkspaceReleaseOutcome };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exadev/semantic-release-workspace",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "description": "Independent per-package semantic-release orchestration for pnpm workspaces, without lockstep versioning.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -107,7 +107,7 @@
107
107
  "publint": "^0.3.23",
108
108
  "semantic-release": "^25.0.9",
109
109
  "signale": "^1.4.0",
110
- "tsdown": "^0.22.14",
110
+ "tsdown": "^0.23.0",
111
111
  "turbo": "^2.10.11",
112
112
  "typescript": "^6.0.3",
113
113
  "typescript-eslint": "^8.67.0",