@suin/semantic-release-yarn
Version:
semantic-release plugin to publish a npm package with yarn@berry
60 lines (55 loc) • 1.49 kB
text/typescript
export interface PluginConfig {
/**
* Whether to publish the npm package to the registry. If `false` the `package.json` version will still be updated.
*
* Default: `false` if the `package.json` [private](https://docs.npmjs.com/files/package.json#private) property is `true`, `true` otherwise.
*/
readonly npmPublish?: boolean;
/**
* Directory path in which to write the package tarball. If `false` the tarball is not be kept on the file system.
*
* Default: `"."`
*/
readonly tarballDir?: string | false;
}
export const PluginConfig = {
normalize({
npmPublish,
tarballDir,
}: PluginConfig | undefined = {}): PluginConfig {
assertNullableBoolean(npmPublish, "npmPublish");
assertNullableString(tarballDir, "tarballDir");
return {
npmPublish: npmPublish ?? true,
tarballDir: tarballDir ?? ".",
};
},
};
function assertNullableBoolean(
value: unknown,
name: string
): asserts value is boolean | undefined {
if (typeof value === "undefined") {
return;
}
if (typeof value === "boolean") {
return;
}
throw new Error(
`${name} must be a boolean, but given ${JSON.stringify(value)}`
);
}
function assertNullableString(
value: unknown,
name: string
): asserts value is string | undefined {
if (typeof value === "undefined") {
return;
}
if (typeof value === "string") {
return;
}
throw new Error(
`${name} must be a string, but given ${JSON.stringify(value)}`
);
}