diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000..20e25c74 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# style: prettier (#2670) +b06c9bbe4c6be121c5561b356d8c465c1cadffba \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 07fa209c..0560604a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,13 +7,14 @@ name: Release - beta - "*.x" permissions: - contents: read # for checkout + contents: read # for checkout jobs: release: permissions: - contents: write # to be able to publish a GitHub release - issues: write # to be able to comment on released issues - pull-requests: write # to be able to comment on released pull requests + contents: write # to be able to publish a GitHub release + issues: write # to be able to comment on released issues + pull-requests: write # to be able to comment on released pull requests + id-token: write # to enable use of OIDC for npm provenance name: release runs-on: ubuntu-latest steps: diff --git a/lib/branches/expand.js b/lib/branches/expand.js index 6ecb828c..4d7c485d 100644 --- a/lib/branches/expand.js +++ b/lib/branches/expand.js @@ -1,18 +1,18 @@ -import {isString, mapValues, omit, remove, template} from 'lodash-es'; -import micromatch from 'micromatch'; -import {getBranches} from '../git.js'; +import { isString, mapValues, omit, remove, template } from "lodash-es"; +import micromatch from "micromatch"; +import { getBranches } from "../git.js"; -export default async (repositoryUrl, {cwd}, branches) => { - const gitBranches = await getBranches(repositoryUrl, {cwd}); +export default async (repositoryUrl, { cwd }, branches) => { + const gitBranches = await getBranches(repositoryUrl, { cwd }); return branches.reduce( (branches, branch) => [ ...branches, ...remove(gitBranches, (name) => micromatch(gitBranches, branch.name).includes(name)).map((name) => ({ name, - ...mapValues(omit(branch, 'name'), (value) => (isString(value) ? template(value)({name}) : value)), + ...mapValues(omit(branch, "name"), (value) => (isString(value) ? template(value)({ name }) : value)), })), ], [] ); -} +}; diff --git a/lib/branches/get-tags.js b/lib/branches/get-tags.js index 080cb54e..019ce4cc 100644 --- a/lib/branches/get-tags.js +++ b/lib/branches/get-tags.js @@ -1,36 +1,35 @@ -import {escapeRegExp, template} from 'lodash-es'; -import semver from 'semver'; -import pReduce from 'p-reduce'; -import debugTags from 'debug'; -import {getNote, getTags} from '../../lib/git.js'; +import { escapeRegExp, template } from "lodash-es"; +import semver from "semver"; +import pReduce from "p-reduce"; +import debugTags from "debug"; +import { getNote, getTags } from "../../lib/git.js"; -const debug = debugTags('semantic-release:get-tags'); +const debug = debugTags("semantic-release:get-tags"); - -export default async ({cwd, env, options: {tagFormat}}, branches) => { +export default async ({ cwd, env, options: { tagFormat } }, branches) => { // Generate a regex to parse tags formatted with `tagFormat` // by replacing the `version` variable in the template by `(.+)`. // The `tagFormat` is compiled with space as the `version` as it's an invalid tag character, // so it's guaranteed to no be present in the `tagFormat`. - const tagRegexp = `^${escapeRegExp(template(tagFormat)({version: ' '})).replace(' ', '(.+)')}`; + const tagRegexp = `^${escapeRegExp(template(tagFormat)({ version: " " })).replace(" ", "(.+)")}`; return pReduce( branches, async (branches, branch) => { const branchTags = await pReduce( - await getTags(branch.name, {cwd, env}), + await getTags(branch.name, { cwd, env }), async (branchTags, tag) => { const [, version] = tag.match(tagRegexp) || []; return version && semver.valid(semver.clean(version)) - ? [...branchTags, {gitTag: tag, version, channels: (await getNote(tag, {cwd, env})).channels || [null]}] + ? [...branchTags, { gitTag: tag, version, channels: (await getNote(tag, { cwd, env })).channels || [null] }] : branchTags; }, [] ); - debug('found tags for branch %s: %o', branch.name, branchTags); - return [...branches, {...branch, tags: branchTags}]; + debug("found tags for branch %s: %o", branch.name, branchTags); + return [...branches, { ...branch, tags: branchTags }]; }, [] ); -} +}; diff --git a/lib/branches/index.js b/lib/branches/index.js index 0e058311..ac683d02 100644 --- a/lib/branches/index.js +++ b/lib/branches/index.js @@ -1,51 +1,51 @@ -import {isRegExp, isString} from 'lodash-es'; -import AggregateError from 'aggregate-error'; -import pEachSeries from 'p-each-series'; -import * as DEFINITIONS from '../definitions/branches.js'; -import getError from '../get-error.js'; -import {fetch, fetchNotes, verifyBranchName} from '../git.js'; -import expand from './expand.js'; -import getTags from './get-tags.js'; -import * as normalize from './normalize.js'; +import { isRegExp, isString } from "lodash-es"; +import AggregateError from "aggregate-error"; +import pEachSeries from "p-each-series"; +import * as DEFINITIONS from "../definitions/branches.js"; +import getError from "../get-error.js"; +import { fetch, fetchNotes, verifyBranchName } from "../git.js"; +import expand from "./expand.js"; +import getTags from "./get-tags.js"; +import * as normalize from "./normalize.js"; export default async (repositoryUrl, ciBranch, context) => { - const {cwd, env} = context; + const { cwd, env } = context; const remoteBranches = await expand( repositoryUrl, context, - context.options.branches.map((branch) => (isString(branch) || isRegExp(branch) ? {name: branch} : branch)) + context.options.branches.map((branch) => (isString(branch) || isRegExp(branch) ? { name: branch } : branch)) ); - await pEachSeries(remoteBranches, async ({name}) => { - await fetch(repositoryUrl, name, ciBranch, {cwd, env}); + await pEachSeries(remoteBranches, async ({ name }) => { + await fetch(repositoryUrl, name, ciBranch, { cwd, env }); }); - await fetchNotes(repositoryUrl, {cwd, env}); + await fetchNotes(repositoryUrl, { cwd, env }); const branches = await getTags(context, remoteBranches); const errors = []; const branchesByType = Object.entries(DEFINITIONS).reduce( // eslint-disable-next-line unicorn/no-fn-reference-in-iterator - (branchesByType, [type, {filter}]) => ({[type]: branches.filter(filter), ...branchesByType}), + (branchesByType, [type, { filter }]) => ({ [type]: branches.filter(filter), ...branchesByType }), {} ); - const result = Object.entries(DEFINITIONS).reduce((result, [type, {branchesValidator, branchValidator}]) => { + const result = Object.entries(DEFINITIONS).reduce((result, [type, { branchesValidator, branchValidator }]) => { branchesByType[type].forEach((branch) => { if (branchValidator && !branchValidator(branch)) { - errors.push(getError(`E${type.toUpperCase()}BRANCH`, {branch})); + errors.push(getError(`E${type.toUpperCase()}BRANCH`, { branch })); } }); const branchesOfType = normalize[type](branchesByType); if (!branchesValidator(branchesOfType)) { - errors.push(getError(`E${type.toUpperCase()}BRANCHES`, {branches: branchesOfType})); + errors.push(getError(`E${type.toUpperCase()}BRANCHES`, { branches: branchesOfType })); } - return {...result, [type]: branchesOfType}; + return { ...result, [type]: branchesOfType }; }, {}); const duplicates = [...branches] @@ -54,12 +54,12 @@ export default async (repositoryUrl, ciBranch, context) => { .filter((_, idx, array) => array[idx] === array[idx + 1] && array[idx] !== array[idx - 1]); if (duplicates.length > 0) { - errors.push(getError('EDUPLICATEBRANCHES', {duplicates})); + errors.push(getError("EDUPLICATEBRANCHES", { duplicates })); } await pEachSeries(branches, async (branch) => { if (!(await verifyBranchName(branch.name))) { - errors.push(getError('EINVALIDBRANCHNAME', branch)); + errors.push(getError("EINVALIDBRANCHNAME", branch)); } }); @@ -68,4 +68,4 @@ export default async (repositoryUrl, ciBranch, context) => { } return [...result.maintenance, ...result.release, ...result.prerelease]; -} +}; diff --git a/lib/branches/normalize.js b/lib/branches/normalize.js index 09f9785c..5151db20 100644 --- a/lib/branches/normalize.js +++ b/lib/branches/normalize.js @@ -1,27 +1,28 @@ -import {isNil, sortBy} from 'lodash-es'; -import semverDiff from 'semver-diff'; -import {FIRST_RELEASE, RELEASE_TYPE} from '../definitions/constants.js'; +import { isNil, sortBy } from "lodash-es"; +import semverDiff from "semver-diff"; +import { FIRST_RELEASE, RELEASE_TYPE } from "../definitions/constants.js"; import { getFirstVersion, getLatestVersion, - getLowerBound, getRange, + getLowerBound, + getRange, getUpperBound, highest, isMajorRange, lowest, - tagsToVersions -} from '../utils.js'; + tagsToVersions, +} from "../utils.js"; -export function maintenance({maintenance, release}) { +export function maintenance({ maintenance, release }) { return sortBy( - maintenance.map(({name, range, channel, ...rest}) => ({ + maintenance.map(({ name, range, channel, ...rest }) => ({ ...rest, name, range: range || name, channel: isNil(channel) ? name : channel, })), - 'range' - ).map(({name, range, tags, ...rest}, idx, branches) => { + "range" + ).map(({ name, range, tags, ...rest }, idx, branches) => { const versions = tagsToVersions(tags); // Find the lower bound based on Maintenance branches const maintenanceMin = @@ -44,7 +45,7 @@ export function maintenance({maintenance, release}) { const diff = semverDiff(min, max); return { ...rest, - type: 'maintenance', + type: "maintenance", name, tags, range: getRange(min, max), @@ -54,7 +55,7 @@ export function maintenance({maintenance, release}) { }); } -export function release({release}) { +export function release({ release }) { if (release.length === 0) { return release; } @@ -62,7 +63,7 @@ export function release({release}) { // The intial lastVersion is the last release from the base branch of `FIRST_RELEASE` (1.0.0) let lastVersion = getLatestVersion(tagsToVersions(release[0].tags)) || FIRST_RELEASE; - return release.map(({name, tags, channel, ...rest}, idx) => { + return release.map(({ name, tags, channel, ...rest }, idx) => { const versions = tagsToVersions(tags); // The new lastVersion is the highest version between the current branch last release and the previous branch lastVersion lastVersion = highest(getLatestVersion(versions), lastVersion); @@ -79,7 +80,7 @@ export function release({release}) { ...rest, channel: idx === 0 ? channel : isNil(channel) ? name : channel, tags, - type: 'release', + type: "release", name, range: getRange(lastVersion, bound), accept: bound ? RELEASE_TYPE.slice(0, RELEASE_TYPE.indexOf(diff)) : RELEASE_TYPE, @@ -88,13 +89,13 @@ export function release({release}) { }); } -export function prerelease({prerelease}) { - return prerelease.map(({name, prerelease, channel, tags, ...rest}) => { +export function prerelease({ prerelease }) { + return prerelease.map(({ name, prerelease, channel, tags, ...rest }) => { const preid = prerelease === true ? name : prerelease; return { ...rest, channel: isNil(channel) ? name : channel, - type: 'prerelease', + type: "prerelease", name, prerelease: preid, tags, diff --git a/lib/definitions/branches.js b/lib/definitions/branches.js index f23d0484..09f814e5 100644 --- a/lib/definitions/branches.js +++ b/lib/definitions/branches.js @@ -1,18 +1,18 @@ -import {isNil, uniqBy} from 'lodash-es'; -import semver from 'semver'; -import {isMaintenanceRange} from '../utils.js'; +import { isNil, uniqBy } from "lodash-es"; +import semver from "semver"; +import { isMaintenanceRange } from "../utils.js"; export const maintenance = { - filter: ({name, range}) => (!isNil(range) && range !== false) || isMaintenanceRange(name), - branchValidator: ({range}) => (isNil(range) ? true : isMaintenanceRange(range)), - branchesValidator: (branches) => uniqBy(branches, ({range}) => semver.validRange(range)).length === branches.length, + filter: ({ name, range }) => (!isNil(range) && range !== false) || isMaintenanceRange(name), + branchValidator: ({ range }) => (isNil(range) ? true : isMaintenanceRange(range)), + branchesValidator: (branches) => uniqBy(branches, ({ range }) => semver.validRange(range)).length === branches.length, }; export const prerelease = { - filter: ({prerelease}) => !isNil(prerelease) && prerelease !== false, - branchValidator: ({name, prerelease}) => + filter: ({ prerelease }) => !isNil(prerelease) && prerelease !== false, + branchValidator: ({ name, prerelease }) => Boolean(prerelease) && Boolean(semver.valid(`1.0.0-${prerelease === true ? name : prerelease}.1`)), - branchesValidator: (branches) => uniqBy(branches, 'prerelease').length === branches.length, + branchesValidator: (branches) => uniqBy(branches, "prerelease").length === branches.length, }; export const release = { diff --git a/lib/definitions/constants.js b/lib/definitions/constants.js index d75b7a17..83bb24b0 100644 --- a/lib/definitions/constants.js +++ b/lib/definitions/constants.js @@ -1,17 +1,17 @@ -export const RELEASE_TYPE = ['patch', 'minor', 'major']; +export const RELEASE_TYPE = ["patch", "minor", "major"]; -export const FIRST_RELEASE = '1.0.0'; +export const FIRST_RELEASE = "1.0.0"; -export const FIRSTPRERELEASE = '1'; +export const FIRSTPRERELEASE = "1"; -export const COMMIT_NAME = 'semantic-release-bot'; +export const COMMIT_NAME = "semantic-release-bot"; -export const COMMIT_EMAIL = 'semantic-release-bot@martynus.net'; +export const COMMIT_EMAIL = "semantic-release-bot@martynus.net"; -export const RELEASE_NOTES_SEPARATOR = '\n\n'; +export const RELEASE_NOTES_SEPARATOR = "\n\n"; -export const SECRET_REPLACEMENT = '[secure]'; +export const SECRET_REPLACEMENT = "[secure]"; export const SECRET_MIN_SIZE = 5; -export const GIT_NOTE_REF = 'semantic-release'; +export const GIT_NOTE_REF = "semantic-release"; diff --git a/lib/definitions/errors.js b/lib/definitions/errors.js index 7e7e978f..9df955dd 100644 --- a/lib/definitions/errors.js +++ b/lib/definitions/errors.js @@ -1,21 +1,21 @@ -import {inspect} from 'node:util'; -import {createRequire} from 'node:module'; -import {isString, toLower, trim} from 'lodash-es'; -import {RELEASE_TYPE} from './constants.js'; +import { inspect } from "node:util"; +import { createRequire } from "node:module"; +import { isString, toLower, trim } from "lodash-es"; +import { RELEASE_TYPE } from "./constants.js"; const require = createRequire(import.meta.url); -const pkg = require('../../package.json'); +const pkg = require("../../package.json"); -const [homepage] = pkg.homepage.split('#'); +const [homepage] = pkg.homepage.split("#"); const stringify = (object) => - isString(object) ? object : inspect(object, {breakLength: Infinity, depth: 2, maxArrayLength: 5}); + isString(object) ? object : inspect(object, { breakLength: Infinity, depth: 2, maxArrayLength: 5 }); const linkify = (file) => `${homepage}/blob/master/${file}`; const wordsList = (words) => - `${words.slice(0, -1).join(', ')}${words.length > 1 ? ` or ${words[words.length - 1]}` : trim(words[0])}`; + `${words.slice(0, -1).join(", ")}${words.length > 1 ? ` or ${words[words.length - 1]}` : trim(words[0])}`; -export function ENOGITREPO({cwd}) { +export function ENOGITREPO({ cwd }) { return { - message: 'Not running from a git repository.', + message: "Not running from a git repository.", details: `The \`semantic-release\` command must be executed from a Git repository. The current working directory is \`${cwd}\`. @@ -26,76 +26,76 @@ Please verify your CI configuration to make sure the \`semantic-release\` comman export function ENOREPOURL() { return { - message: 'The `repositoryUrl` option is required.', + message: "The `repositoryUrl` option is required.", details: `The [repositoryUrl option](${linkify( - 'docs/usage/configuration.md#repositoryurl' + "docs/usage/configuration.md#repositoryurl" )}) cannot be determined from the semantic-release configuration, the \`package.json\` nor the [git origin url](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes). Please make sure to add the \`repositoryUrl\` to the [semantic-release configuration] (${linkify( - 'docs/usage/configuration.md' + "docs/usage/configuration.md" )}).`, }; } -export function EGITNOPERMISSION({options: {repositoryUrl}, branch: {name}}) { +export function EGITNOPERMISSION({ options: { repositoryUrl }, branch: { name } }) { return { - message: 'Cannot push to the Git repository.', + message: "Cannot push to the Git repository.", details: `**semantic-release** cannot push the version tag to the branch \`${name}\` on the remote Git repository with URL \`${repositoryUrl}\`. This can be caused by: - - a misconfiguration of the [repositoryUrl](${linkify('docs/usage/configuration.md#repositoryurl')}) option + - a misconfiguration of the [repositoryUrl](${linkify("docs/usage/configuration.md#repositoryurl")}) option - the repository being unavailable - or missing push permission for the user configured via the [Git credentials on your CI environment](${linkify( - 'docs/usage/ci-configuration.md#authentication' - )})`, + "docs/usage/ci-configuration.md#authentication" + )})`, }; } -export function EINVALIDTAGFORMAT({options: {tagFormat}}) { +export function EINVALIDTAGFORMAT({ options: { tagFormat } }) { return { - message: 'Invalid `tagFormat` option.', + message: "Invalid `tagFormat` option.", details: `The [tagFormat](${linkify( - 'docs/usage/configuration.md#tagformat' + "docs/usage/configuration.md#tagformat" )}) must compile to a [valid Git reference](https://git-scm.com/docs/git-check-ref-format#_description). Your configuration for the \`tagFormat\` option is \`${stringify(tagFormat)}\`.`, }; } -export function ETAGNOVERSION({options: {tagFormat}}) { +export function ETAGNOVERSION({ options: { tagFormat } }) { return { - message: 'Invalid `tagFormat` option.', + message: "Invalid `tagFormat` option.", details: `The [tagFormat](${linkify( - 'docs/usage/configuration.md#tagformat' + "docs/usage/configuration.md#tagformat" )}) option must contain the variable \`version\` exactly once. Your configuration for the \`tagFormat\` option is \`${stringify(tagFormat)}\`.`, }; } -export function EPLUGINCONF({type, required, pluginConf}) { +export function EPLUGINCONF({ type, required, pluginConf }) { return { message: `The \`${type}\` plugin configuration is invalid.`, details: `The [${type} plugin configuration](${linkify(`docs/usage/plugins.md#${toLower(type)}-plugin`)}) ${ - required ? 'is required and ' : '' + required ? "is required and " : "" } must be a single or an array of plugins definition. A plugin definition is an npm module name, optionally wrapped in an array with an object. Your configuration for the \`${type}\` plugin is \`${stringify(pluginConf)}\`.`, }; } -export function EPLUGINSCONF({plugin}) { +export function EPLUGINSCONF({ plugin }) { return { - message: 'The `plugins` configuration is invalid.', + message: "The `plugins` configuration is invalid.", details: `The [plugins](${linkify( - 'docs/usage/configuration.md#plugins' + "docs/usage/configuration.md#plugins" )}) option must be an array of plugin definitions. A plugin definition is an npm module name, optionally wrapped in an array with an object. The invalid configuration is \`${stringify(plugin)}\`.`, }; } -export function EPLUGIN({pluginName, type}) { +export function EPLUGIN({ pluginName, type }) { return { message: `A plugin configured in the step ${type} is not a valid semantic-release plugin.`, details: `A valid \`${type}\` **semantic-release** plugin must be a function or an object with a function in the property \`${type}\`. @@ -103,17 +103,17 @@ export function EPLUGIN({pluginName, type}) { The plugin \`${pluginName}\` doesn't have the property \`${type}\` and cannot be used for the \`${type}\` step. Please refer to the \`${pluginName}\` and [semantic-release plugins configuration](${linkify( - 'docs/usage/plugins.md' + "docs/usage/plugins.md" )}) documentation for more details.`, }; } -export function EANALYZECOMMITSOUTPUT({result, pluginName}) { +export function EANALYZECOMMITSOUTPUT({ result, pluginName }) { return { - message: 'The `analyzeCommits` plugin returned an invalid value. It must return a valid semver release type.', + message: "The `analyzeCommits` plugin returned an invalid value. It must return a valid semver release type.", details: `The \`analyzeCommits\` plugin must return a valid [semver](https://semver.org) release type. The valid values are: ${RELEASE_TYPE.map( (type) => `\`${type}\`` - ).join(', ')}. + ).join(", ")}. The \`analyzeCommits\` function of the \`${pluginName}\` returned \`${stringify(result)}\` instead. @@ -121,15 +121,15 @@ We recommend to report the issue to the \`${pluginName}\` authors, providing the - The **semantic-release** version: \`${pkg.version}\` - The **semantic-release** logs from your CI job - The value returned by the plugin: \`${stringify(result)}\` -- A link to the **semantic-release** plugin developer guide: [${linkify('docs/developer-guide/plugin.md')}](${linkify( - 'docs/developer-guide/plugin.md' +- A link to the **semantic-release** plugin developer guide: [${linkify("docs/developer-guide/plugin.md")}](${linkify( + "docs/developer-guide/plugin.md" )})`, }; } -export function EGENERATENOTESOUTPUT({result, pluginName}) { +export function EGENERATENOTESOUTPUT({ result, pluginName }) { return { - message: 'The `generateNotes` plugin returned an invalid value. It must return a `String`.', + message: "The `generateNotes` plugin returned an invalid value. It must return a `String`.", details: `The \`generateNotes\` plugin must return a \`String\`. The \`generateNotes\` function of the \`${pluginName}\` returned \`${stringify(result)}\` instead. @@ -138,15 +138,15 @@ We recommend to report the issue to the \`${pluginName}\` authors, providing the - The **semantic-release** version: \`${pkg.version}\` - The **semantic-release** logs from your CI job - The value returned by the plugin: \`${stringify(result)}\` -- A link to the **semantic-release** plugin developer guide: [${linkify('docs/developer-guide/plugin.md')}](${linkify( - 'docs/developer-guide/plugin.md' +- A link to the **semantic-release** plugin developer guide: [${linkify("docs/developer-guide/plugin.md")}](${linkify( + "docs/developer-guide/plugin.md" )})`, }; } -export function EPUBLISHOUTPUT({result, pluginName}) { +export function EPUBLISHOUTPUT({ result, pluginName }) { return { - message: 'A `publish` plugin returned an invalid value. It must return an `Object`.', + message: "A `publish` plugin returned an invalid value. It must return an `Object`.", details: `The \`publish\` plugins must return an \`Object\`. The \`publish\` function of the \`${pluginName}\` returned \`${stringify(result)}\` instead. @@ -155,15 +155,15 @@ We recommend to report the issue to the \`${pluginName}\` authors, providing the - The **semantic-release** version: \`${pkg.version}\` - The **semantic-release** logs from your CI job - The value returned by the plugin: \`${stringify(result)}\` -- A link to the **semantic-release** plugin developer guide: [${linkify('docs/developer-guide/plugin.md')}](${linkify( - 'docs/developer-guide/plugin.md' +- A link to the **semantic-release** plugin developer guide: [${linkify("docs/developer-guide/plugin.md")}](${linkify( + "docs/developer-guide/plugin.md" )})`, }; } -export function EADDCHANNELOUTPUT({result, pluginName}) { +export function EADDCHANNELOUTPUT({ result, pluginName }) { return { - message: 'A `addChannel` plugin returned an invalid value. It must return an `Object`.', + message: "A `addChannel` plugin returned an invalid value. It must return an `Object`.", details: `The \`addChannel\` plugins must return an \`Object\`. The \`addChannel\` function of the \`${pluginName}\` returned \`${stringify(result)}\` instead. @@ -172,72 +172,72 @@ We recommend to report the issue to the \`${pluginName}\` authors, providing the - The **semantic-release** version: \`${pkg.version}\` - The **semantic-release** logs from your CI job - The value returned by the plugin: \`${stringify(result)}\` -- A link to the **semantic-release** plugin developer guide: [${linkify('docs/developer-guide/plugin.md')}](${linkify( - 'docs/developer-guide/plugin.md' +- A link to the **semantic-release** plugin developer guide: [${linkify("docs/developer-guide/plugin.md")}](${linkify( + "docs/developer-guide/plugin.md" )})`, }; } -export function EINVALIDBRANCH({branch}) { +export function EINVALIDBRANCH({ branch }) { return { - message: 'A branch is invalid in the `branches` configuration.', + message: "A branch is invalid in the `branches` configuration.", details: `Each branch in the [branches configuration](${linkify( - 'docs/usage/configuration.md#branches' + "docs/usage/configuration.md#branches" )}) must be either a string, a regexp or an object with a \`name\` property. Your configuration for the problematic branch is \`${stringify(branch)}\`.`, }; } -export function EINVALIDBRANCHNAME({branch}) { +export function EINVALIDBRANCHNAME({ branch }) { return { - message: 'A branch name is invalid in the `branches` configuration.', + message: "A branch name is invalid in the `branches` configuration.", details: `Each branch in the [branches configuration](${linkify( - 'docs/usage/configuration.md#branches' + "docs/usage/configuration.md#branches" )}) must be a [valid Git reference](https://git-scm.com/docs/git-check-ref-format#_description). Your configuration for the problematic branch is \`${stringify(branch)}\`.`, }; } -export function EDUPLICATEBRANCHES({duplicates}) { +export function EDUPLICATEBRANCHES({ duplicates }) { return { - message: 'The `branches` configuration has duplicate branches.', + message: "The `branches` configuration has duplicate branches.", details: `Each branch in the [branches configuration](${linkify( - 'docs/usage/configuration.md#branches' + "docs/usage/configuration.md#branches" )}) must havea unique name. Your configuration contains duplicates for the following branch names: \`${stringify(duplicates)}\`.`, }; } -export function EMAINTENANCEBRANCH({branch}) { +export function EMAINTENANCEBRANCH({ branch }) { return { - message: 'A maintenance branch is invalid in the `branches` configuration.', + message: "A maintenance branch is invalid in the `branches` configuration.", details: `Each maintenance branch in the [branches configuration](${linkify( - 'docs/usage/configuration.md#branches' + "docs/usage/configuration.md#branches" )}) must have a \`range\` property formatted like \`N.x\`, \`N.x.x\` or \`N.N.x\` (\`N\` is a number). Your configuration for the problematic branch is \`${stringify(branch)}\`.`, }; } -export function EMAINTENANCEBRANCHES({branches}) { +export function EMAINTENANCEBRANCHES({ branches }) { return { - message: 'The maintenance branches are invalid in the `branches` configuration.', + message: "The maintenance branches are invalid in the `branches` configuration.", details: `Each maintenance branch in the [branches configuration](${linkify( - 'docs/usage/configuration.md#branches' + "docs/usage/configuration.md#branches" )}) must have a unique \`range\` property. Your configuration for the problematic branches is \`${stringify(branches)}\`.`, }; } -export function ERELEASEBRANCHES({branches}) { +export function ERELEASEBRANCHES({ branches }) { return { - message: 'The release branches are invalid in the `branches` configuration.', + message: "The release branches are invalid in the `branches` configuration.", details: `A minimum of 1 and a maximum of 3 release branches are required in the [branches configuration](${linkify( - 'docs/usage/configuration.md#branches' + "docs/usage/configuration.md#branches" )}). This may occur if your repository does not have a release branch, such as \`master\`. @@ -246,53 +246,53 @@ Your configuration for the problematic branches is \`${stringify(branches)}\`.`, }; } -export function EPRERELEASEBRANCH({branch}) { +export function EPRERELEASEBRANCH({ branch }) { return { - message: 'A pre-release branch configuration is invalid in the `branches` configuration.', + message: "A pre-release branch configuration is invalid in the `branches` configuration.", details: `Each pre-release branch in the [branches configuration](${linkify( - 'docs/usage/configuration.md#branches' + "docs/usage/configuration.md#branches" )}) must have a \`prerelease\` property valid per the [Semantic Versioning Specification](https://semver.org/#spec-item-9). If the \`prerelease\` property is set to \`true\`, then the \`name\` property is used instead. Your configuration for the problematic branch is \`${stringify(branch)}\`.`, }; } -export function EPRERELEASEBRANCHES({branches}) { +export function EPRERELEASEBRANCHES({ branches }) { return { - message: 'The pre-release branches are invalid in the `branches` configuration.', + message: "The pre-release branches are invalid in the `branches` configuration.", details: `Each pre-release branch in the [branches configuration](${linkify( - 'docs/usage/configuration.md#branches' + "docs/usage/configuration.md#branches" )}) must have a unique \`prerelease\` property. If the \`prerelease\` property is set to \`true\`, then the \`name\` property is used instead. Your configuration for the problematic branches is \`${stringify(branches)}\`.`, }; } -export function EINVALIDNEXTVERSION({nextRelease: {version}, branch: {name, range}, commits, validBranches}) { +export function EINVALIDNEXTVERSION({ nextRelease: { version }, branch: { name, range }, commits, validBranches }) { return { message: `The release \`${version}\` on branch \`${name}\` cannot be published as it is out of range.`, details: `Based on the releases published on other branches, only versions within the range \`${range}\` can be published from branch \`${name}\`. -The following commit${commits.length > 1 ? 's are' : ' is'} responsible for the invalid release: -${commits.map(({commit: {short}, subject}) => `- ${subject} (${short})`).join('\n')} +The following commit${commits.length > 1 ? "s are" : " is"} responsible for the invalid release: +${commits.map(({ commit: { short }, subject }) => `- ${subject} (${short})`).join("\n")} ${ - commits.length > 1 ? 'Those commits' : 'This commit' - } should be moved to a valid branch with [git merge](https://git-scm.com/docs/git-merge) or [git cherry-pick](https://git-scm.com/docs/git-cherry-pick) and removed from branch \`${name}\` with [git revert](https://git-scm.com/docs/git-revert) or [git reset](https://git-scm.com/docs/git-reset). + commits.length > 1 ? "Those commits" : "This commit" +} should be moved to a valid branch with [git merge](https://git-scm.com/docs/git-merge) or [git cherry-pick](https://git-scm.com/docs/git-cherry-pick) and removed from branch \`${name}\` with [git revert](https://git-scm.com/docs/git-revert) or [git reset](https://git-scm.com/docs/git-reset). -A valid branch could be ${wordsList(validBranches.map(({name}) => `\`${name}\``))}. +A valid branch could be ${wordsList(validBranches.map(({ name }) => `\`${name}\``))}. -See the [workflow configuration documentation](${linkify('docs/usage/workflow-configuration.md')}) for more details.`, +See the [workflow configuration documentation](${linkify("docs/usage/workflow-configuration.md")}) for more details.`, }; } -export function EINVALIDMAINTENANCEMERGE({nextRelease: {channel, gitTag, version}, branch: {mergeRange, name}}) { +export function EINVALIDMAINTENANCEMERGE({ nextRelease: { channel, gitTag, version }, branch: { mergeRange, name } }) { return { message: `The release \`${version}\` on branch \`${name}\` cannot be published as it is out of range.`, details: `Only releases within the range \`${mergeRange}\` can be merged into the maintenance branch \`${name}\` and published to the \`${channel}\` distribution channel. The branch \`${name}\` head should be [reset](https://git-scm.com/docs/git-reset) to a previous commit so the commit with tag \`${gitTag}\` is removed from the branch history. -See the [workflow configuration documentation](${linkify('docs/usage/workflow-configuration.md')}) for more details.`, +See the [workflow configuration documentation](${linkify("docs/usage/workflow-configuration.md")}) for more details.`, }; } diff --git a/lib/definitions/plugins.js b/lib/definitions/plugins.js index 19b52889..7af6de70 100644 --- a/lib/definitions/plugins.js +++ b/lib/definitions/plugins.js @@ -1,23 +1,23 @@ /* eslint require-atomic-updates: off */ -import {isPlainObject, isString} from 'lodash-es'; -import {getGitHead} from '../git.js'; -import hideSensitive from '../hide-sensitive.js'; -import {hideSensitiveValues} from '../utils.js'; -import {RELEASE_NOTES_SEPARATOR, RELEASE_TYPE} from './constants.js'; +import { isPlainObject, isString } from "lodash-es"; +import { getGitHead } from "../git.js"; +import hideSensitive from "../hide-sensitive.js"; +import { hideSensitiveValues } from "../utils.js"; +import { RELEASE_NOTES_SEPARATOR, RELEASE_TYPE } from "./constants.js"; export default { verifyConditions: { required: false, dryRun: true, - pipelineConfig: () => ({settleAll: true}), + pipelineConfig: () => ({ settleAll: true }), }, analyzeCommits: { - default: ['@semantic-release/commit-analyzer'], + default: ["@semantic-release/commit-analyzer"], required: true, dryRun: true, outputValidator: (output) => !output || RELEASE_TYPE.includes(output), - preprocess: ({commits, ...inputs}) => ({ + preprocess: ({ commits, ...inputs }) => ({ ...inputs, commits: commits.filter((commit) => !/\[skip\s+release]|\[release\s+skip]/i.test(commit.message)), }), @@ -32,29 +32,29 @@ export default { verifyRelease: { required: false, dryRun: true, - pipelineConfig: () => ({settleAll: true}), + pipelineConfig: () => ({ settleAll: true }), }, generateNotes: { required: false, dryRun: true, outputValidator: (output) => !output || isString(output), pipelineConfig: () => ({ - getNextInput: ({nextRelease, ...context}, notes) => ({ + getNextInput: ({ nextRelease, ...context }, notes) => ({ ...context, nextRelease: { ...nextRelease, - notes: `${nextRelease.notes ? `${nextRelease.notes}${RELEASE_NOTES_SEPARATOR}` : ''}${notes}`, + notes: `${nextRelease.notes ? `${nextRelease.notes}${RELEASE_NOTES_SEPARATOR}` : ""}${notes}`, }, }), }), - postprocess: (results, {env}) => hideSensitive(env)(results.filter(Boolean).join(RELEASE_NOTES_SEPARATOR)), + postprocess: (results, { env }) => hideSensitive(env)(results.filter(Boolean).join(RELEASE_NOTES_SEPARATOR)), }, prepare: { required: false, dryRun: false, - pipelineConfig: ({generateNotes}) => ({ + pipelineConfig: ({ generateNotes }) => ({ getNextInput: async (context) => { - const newGitHead = await getGitHead({cwd: context.cwd}); + const newGitHead = await getGitHead({ cwd: context.cwd }); // If previous prepare plugin has created a commit (gitHead changed) if (context.nextRelease.gitHead !== newGitHead) { context.nextRelease.gitHead = newGitHead; @@ -73,7 +73,7 @@ export default { outputValidator: (output) => !output || isPlainObject(output), pipelineConfig: () => ({ // Add `nextRelease` and plugin properties to published release - transform: (release, step, {nextRelease}) => ({ + transform: (release, step, { nextRelease }) => ({ ...(release === false ? {} : nextRelease), ...release, ...step, @@ -86,7 +86,7 @@ export default { outputValidator: (output) => !output || isPlainObject(output), pipelineConfig: () => ({ // Add `nextRelease` and plugin properties to published release - transform: (release, step, {nextRelease}) => ({ + transform: (release, step, { nextRelease }) => ({ ...(release === false ? {} : nextRelease), ...release, ...step, @@ -96,13 +96,13 @@ export default { success: { required: false, dryRun: false, - pipelineConfig: () => ({settleAll: true}), - preprocess: ({releases, env, ...inputs}) => ({...inputs, env, releases: hideSensitiveValues(env, releases)}), + pipelineConfig: () => ({ settleAll: true }), + preprocess: ({ releases, env, ...inputs }) => ({ ...inputs, env, releases: hideSensitiveValues(env, releases) }), }, fail: { required: false, dryRun: false, - pipelineConfig: () => ({settleAll: true}), - preprocess: ({errors, env, ...inputs}) => ({...inputs, env, errors: hideSensitiveValues(env, errors)}), + pipelineConfig: () => ({ settleAll: true }), + preprocess: ({ errors, env, ...inputs }) => ({ ...inputs, env, errors: hideSensitiveValues(env, errors) }), }, }; diff --git a/lib/plugins/index.js b/lib/plugins/index.js index dc8a0552..c7373b6e 100644 --- a/lib/plugins/index.js +++ b/lib/plugins/index.js @@ -1,13 +1,13 @@ -import {castArray, identity, isNil, isPlainObject, isString, omit} from 'lodash-es'; -import AggregateError from 'aggregate-error'; -import getError from '../get-error.js'; -import PLUGINS_DEFINITIONS from '../definitions/plugins.js'; -import {loadPlugin, parseConfig, validatePlugin, validateStep} from './utils.js'; -import pipeline from './pipeline.js'; -import normalize from './normalize.js'; +import { castArray, identity, isNil, isPlainObject, isString, omit } from "lodash-es"; +import AggregateError from "aggregate-error"; +import getError from "../get-error.js"; +import PLUGINS_DEFINITIONS from "../definitions/plugins.js"; +import { loadPlugin, parseConfig, validatePlugin, validateStep } from "./utils.js"; +import pipeline from "./pipeline.js"; +import normalize from "./normalize.js"; export default async (context, pluginsPath) => { - let {options, logger} = context; + let { options, logger } = context; const errors = []; const plugins = options.plugins @@ -20,8 +20,8 @@ export default async (context, pluginsPath) => { if (isPlainObject(plugin)) { Object.entries(plugin).forEach(([type, func]) => { if (PLUGINS_DEFINITIONS[type]) { - Reflect.defineProperty(func, 'pluginName', { - value: isPlainObject(name) ? 'Inline plugin' : name, + Reflect.defineProperty(func, "pluginName", { + value: isPlainObject(name) ? "Inline plugin" : name, writable: false, enumerable: true, }); @@ -29,10 +29,10 @@ export default async (context, pluginsPath) => { } }); } else { - errors.push(getError('EPLUGINSCONF', {plugin})); + errors.push(getError("EPLUGINSCONF", { plugin })); } } else { - errors.push(getError('EPLUGINSCONF', {plugin})); + errors.push(getError("EPLUGINSCONF", { plugin })); } return pluginsList; @@ -43,12 +43,12 @@ export default async (context, pluginsPath) => { throw new AggregateError(errors); } - options = {...plugins, ...options}; + options = { ...plugins, ...options }; const pluginsConfig = await Object.entries(PLUGINS_DEFINITIONS).reduce( async ( eventualPluginsConfigAccumulator, - [type, {required, default: def, pipelineConfig, postprocess = identity, preprocess = identity}] + [type, { required, default: def, pipelineConfig, postprocess = identity, preprocess = identity }] ) => { let pluginOptions; const pluginsConfigAccumulator = await eventualPluginsConfigAccumulator; @@ -63,8 +63,8 @@ export default async (context, pluginsPath) => { ); } - if (!validateStep({required}, options[type])) { - errors.push(getError('EPLUGINCONF', {type, required, pluginConf: options[type]})); + if (!validateStep({ required }, options[type])) { + errors.push(getError("EPLUGINCONF", { type, required, pluginConf: options[type] })); return pluginsConfigAccumulator; } @@ -74,7 +74,7 @@ export default async (context, pluginsPath) => { const steps = await Promise.all( castArray(pluginOptions).map(async (pluginOpt) => normalize( - {...context, options: omit(options, Object.keys(PLUGINS_DEFINITIONS), 'plugins')}, + { ...context, options: omit(options, Object.keys(PLUGINS_DEFINITIONS), "plugins") }, type, pluginOpt, pluginsPath @@ -100,4 +100,4 @@ export default async (context, pluginsPath) => { } return pluginsConfig; -} +}; diff --git a/lib/plugins/normalize.js b/lib/plugins/normalize.js index 5efe68cb..fd0b1cfb 100644 --- a/lib/plugins/normalize.js +++ b/lib/plugins/normalize.js @@ -1,14 +1,14 @@ -import {cloneDeep, isFunction, isPlainObject, noop, omit} from 'lodash-es'; -import debugPlugins from 'debug'; -import getError from '../get-error.js'; -import {extractErrors} from '../utils.js'; -import PLUGINS_DEFINITIONS from '../definitions/plugins.js'; -import {loadPlugin, parseConfig} from './utils.js'; +import { cloneDeep, isFunction, isPlainObject, noop, omit } from "lodash-es"; +import debugPlugins from "debug"; +import getError from "../get-error.js"; +import { extractErrors } from "../utils.js"; +import PLUGINS_DEFINITIONS from "../definitions/plugins.js"; +import { loadPlugin, parseConfig } from "./utils.js"; -const debug = debugPlugins('semantic-release:plugins'); +const debug = debugPlugins("semantic-release:plugins"); export default async (context, type, pluginOpt, pluginsPath) => { - const {stdout, stderr, options, logger} = context; + const { stdout, stderr, options, logger } = context; if (!pluginOpt) { return noop; } @@ -21,26 +21,26 @@ export default async (context, type, pluginOpt, pluginsPath) => { let func; if (isFunction(plugin)) { - func = plugin.bind(null, cloneDeep({...options, ...config})); + func = plugin.bind(null, cloneDeep({ ...options, ...config })); } else if (isPlainObject(plugin) && plugin[type] && isFunction(plugin[type])) { - func = plugin[type].bind(null, cloneDeep({...options, ...config})); + func = plugin[type].bind(null, cloneDeep({ ...options, ...config })); } else { - throw getError('EPLUGIN', {type, pluginName}); + throw getError("EPLUGIN", { type, pluginName }); } const validator = async (input) => { - const {dryRun, outputValidator} = PLUGINS_DEFINITIONS[type] || {}; + const { dryRun, outputValidator } = PLUGINS_DEFINITIONS[type] || {}; try { if (!input.options.dryRun || dryRun) { logger.log(`Start step "${type}" of plugin "${pluginName}"`); const result = await func({ - ...cloneDeep(omit(input, ['stdout', 'stderr', 'logger'])), + ...cloneDeep(omit(input, ["stdout", "stderr", "logger"])), stdout, stderr, logger: logger.scope(logger.scopeName, pluginName), }); if (outputValidator && !outputValidator(result)) { - throw getError(`E${type.toUpperCase()}OUTPUT`, {result, pluginName}); + throw getError(`E${type.toUpperCase()}OUTPUT`, { result, pluginName }); } logger.success(`Completed step "${type}" of plugin "${pluginName}"`); @@ -50,12 +50,12 @@ export default async (context, type, pluginOpt, pluginsPath) => { logger.warn(`Skip step "${type}" of plugin "${pluginName}" in dry-run mode`); } catch (error) { logger.error(`Failed step "${type}" of plugin "${pluginName}"`); - extractErrors(error).forEach((err) => Object.assign(err, {pluginName})); + extractErrors(error).forEach((err) => Object.assign(err, { pluginName })); throw error; } }; - Reflect.defineProperty(validator, 'pluginName', {value: pluginName, writable: false, enumerable: true}); + Reflect.defineProperty(validator, "pluginName", { value: pluginName, writable: false, enumerable: true }); if (!isFunction(pluginOpt)) { if (pluginsPath[name]) { @@ -66,4 +66,4 @@ export default async (context, type, pluginOpt, pluginsPath) => { } return validator; -} +}; diff --git a/lib/plugins/pipeline.js b/lib/plugins/pipeline.js index c96415d3..992e4b9a 100644 --- a/lib/plugins/pipeline.js +++ b/lib/plugins/pipeline.js @@ -1,7 +1,7 @@ -import {identity} from 'lodash-es'; -import pReduce from 'p-reduce'; -import AggregateError from 'aggregate-error'; -import {extractErrors} from '../utils.js'; +import { identity } from "lodash-es"; +import pReduce from "p-reduce"; +import AggregateError from "aggregate-error"; +import { extractErrors } from "../utils.js"; /** * A Function that execute a list of function sequencially. If at least one Function ins the pipeline throws an Error or rejects, the pipeline function rejects as well. @@ -25,34 +25,35 @@ import {extractErrors} from '../utils.js'; * * @return {Pipeline} A Function that execute the `steps` sequentially */ -export default (steps, {settleAll = false, getNextInput = identity, transform = identity} = {}) => async (input) => { - const results = []; - const errors = []; - await pReduce( - steps, - async (lastInput, step) => { - let result; - try { - // Call the step with the input computed at the end of the previous iteration and save intermediary result - result = await transform(await step(lastInput), step, lastInput); - results.push(result); - } catch (error) { - if (settleAll) { - errors.push(...extractErrors(error)); - result = error; - } else { - throw error; +export default (steps, { settleAll = false, getNextInput = identity, transform = identity } = {}) => + async (input) => { + const results = []; + const errors = []; + await pReduce( + steps, + async (lastInput, step) => { + let result; + try { + // Call the step with the input computed at the end of the previous iteration and save intermediary result + result = await transform(await step(lastInput), step, lastInput); + results.push(result); + } catch (error) { + if (settleAll) { + errors.push(...extractErrors(error)); + result = error; + } else { + throw error; + } } - } - // Prepare input for the next step, passing the input of the last iteration (or initial parameter for the first iteration) and the result of the current one - return getNextInput(lastInput, result); - }, - input - ); - if (errors.length > 0) { - throw new AggregateError(errors); - } + // Prepare input for the next step, passing the input of the last iteration (or initial parameter for the first iteration) and the result of the current one + return getNextInput(lastInput, result); + }, + input + ); + if (errors.length > 0) { + throw new AggregateError(errors); + } - return results; -} + return results; + }; diff --git a/lib/plugins/utils.js b/lib/plugins/utils.js index addc8d1e..539ea3c7 100644 --- a/lib/plugins/utils.js +++ b/lib/plugins/utils.js @@ -1,7 +1,7 @@ -import {dirname} from 'node:path'; -import {fileURLToPath} from 'node:url'; -import {castArray, isArray, isFunction, isNil, isPlainObject, isString} from 'lodash-es'; -import resolveFrom from 'resolve-from'; +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { castArray, isArray, isFunction, isNil, isPlainObject, isString } from "lodash-es"; +import resolveFrom from "resolve-from"; const __dirname = dirname(fileURLToPath(import.meta.url)); @@ -38,7 +38,7 @@ export function validatePlugin(conf) { ); } -export function validateStep({required}, conf) { +export function validateStep({ required }, conf) { conf = castArray(conf).filter(Boolean); if (required) { return conf.length >= 1 && validateSteps(conf); @@ -47,7 +47,7 @@ export function validateStep({required}, conf) { return conf.length === 0 || validateSteps(conf); } -export async function loadPlugin({cwd}, name, pluginsPath) { +export async function loadPlugin({ cwd }, name, pluginsPath) { const basePath = pluginsPath[name] ? dirname(resolveFrom.silent(__dirname, pluginsPath[name]) || resolveFrom(cwd, pluginsPath[name])) : __dirname; @@ -72,7 +72,7 @@ export function parseConfig(plugin) { if (isArray(plugin)) { [path, config] = plugin; } else if (isPlainObject(plugin) && !isNil(plugin.path)) { - ({path, ...config} = plugin); + ({ path, ...config } = plugin); } else { path = plugin; } diff --git a/package-lock.json b/package-lock.json index a8f67808..241ed87f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@semantic-release/commit-analyzer": "^9.0.2", "@semantic-release/error": "^3.0.0", "@semantic-release/github": "^8.0.0", - "@semantic-release/npm": "^9.0.0", + "@semantic-release/npm": "^10.0.2", "@semantic-release/release-notes-generator": "^10.0.0", "aggregate-error": "^4.0.1", "cosmiconfig": "^8.0.0", @@ -517,248 +517,59 @@ } }, "node_modules/@semantic-release/npm": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", - "integrity": "sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.2.tgz", + "integrity": "sha512-Mo0XoBza4pUapxiBhLLYXeSZ9tkuHDUd/WvMbpilwuPRfJDnQXMqx5tBVon8d2mBk8JXmXpqB+ExhlWJmVT40A==", "dependencies": { "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "execa": "^5.0.0", + "aggregate-error": "^4.0.1", + "execa": "^7.0.0", "fs-extra": "^11.0.0", - "lodash": "^4.17.15", + "lodash-es": "^4.17.21", "nerf-dart": "^1.0.0", - "normalize-url": "^6.0.0", - "npm": "^8.3.0", + "normalize-url": "^8.0.0", + "npm": "^9.5.0", "rc": "^1.2.8", - "read-pkg": "^5.0.0", + "read-pkg": "^7.0.0", "registry-auth-token": "^5.0.0", "semver": "^7.1.2", - "tempy": "^1.0.0" + "tempy": "^3.0.0" }, "engines": { - "node": ">=16 || ^14.17" + "node": ">=18" }, "peerDependencies": { - "semantic-release": ">=19.0.0" + "semantic-release": ">=20.1.0" } }, - "node_modules/@semantic-release/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@semantic-release/npm/node_modules/read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/npm/node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/npm/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/npm/node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@semantic-release/npm/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@semantic-release/release-notes-generator": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", @@ -1503,18 +1314,6 @@ "node": ">=14.16" } }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/callsites": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz", @@ -1624,8 +1423,7 @@ "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/chunkd": { "version": "2.0.1", @@ -1637,7 +1435,6 @@ "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, "funding": [ { "type": "github", @@ -2083,7 +1880,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dev": true, "dependencies": { "type-fest": "^1.0.1" }, @@ -3200,7 +2996,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -4081,8 +3876,7 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nan": { "version": "2.17.0", @@ -4228,26 +4022,24 @@ } }, "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.19.4.tgz", - "integrity": "sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.6.2.tgz", + "integrity": "sha512-TnXoXhlFkH/9wI4+aXSq0aPLwKG7Ge17t1ME4/rQt+0DZWQCRk9PwhBuX/shqdUiHeKicSLSkzWx+QZgTRE+/A==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", - "@npmcli/ci-detect", "@npmcli/config", - "@npmcli/fs", "@npmcli/map-workspaces", "@npmcli/package-json", "@npmcli/run-script", @@ -4255,7 +4047,7 @@ "archy", "cacache", "chalk", - "chownr", + "ci-info", "cli-columns", "cli-table3", "columnify", @@ -4283,8 +4075,6 @@ "minimatch", "minipass", "minipass-pipeline", - "mkdirp", - "mkdirp-infer-owner", "ms", "node-gyp", "nopt", @@ -4296,7 +4086,6 @@ "npm-registry-fetch", "npm-user-validate", "npmlog", - "opener", "p-map", "pacote", "parse-conflict-json", @@ -4305,8 +4094,6 @@ "read", "read-package-json", "read-package-json-fast", - "readdir-scoped-modules", - "rimraf", "semver", "ssri", "tar", @@ -4319,85 +4106,78 @@ ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.6.3", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.2.1", - "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.2.1", - "abbrev": "~1.1.1", + "@npmcli/arborist": "^6.2.5", + "@npmcli/config": "^6.1.4", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/package-json": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^16.1.3", + "cacache": "^17.0.4", "chalk": "^4.1.2", - "chownr": "^2.0.0", + "ci-info": "^3.8.0", "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", + "cli-table3": "^0.6.3", "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.12", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.1", + "glob": "^8.1.0", "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.2.1", + "hosted-git-info": "^6.1.1", "ini": "^3.0.1", - "init-package-json": "^3.0.2", + "init-package-json": "^5.0.0", "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.4", - "libnpmdiff": "^4.0.5", - "libnpmexec": "^4.0.14", - "libnpmfund": "^3.0.5", - "libnpmhook": "^8.0.4", - "libnpmorg": "^4.0.4", - "libnpmpack": "^4.1.3", - "libnpmpublish": "^6.0.5", - "libnpmsearch": "^5.0.4", - "libnpmteam": "^4.0.4", - "libnpmversion": "^3.0.7", - "make-fetch-happen": "^10.2.0", - "minimatch": "^5.1.0", - "minipass": "^3.1.6", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.13", + "libnpmexec": "^5.0.13", + "libnpmfund": "^4.0.13", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.3", + "libnpmpack": "^5.0.13", + "libnpmpublish": "^7.1.2", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.0.3", + "minimatch": "^6.2.0", + "minipass": "^4.2.4", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", "ms": "^2.1.2", - "node-gyp": "^9.1.0", - "nopt": "^6.0.0", - "npm-audit-report": "^3.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.1.0", - "npm-pick-manifest": "^7.0.2", - "npm-profile": "^6.2.0", - "npm-registry-fetch": "^13.3.1", - "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", - "opener": "^1.5.2", + "node-gyp": "^9.3.1", + "nopt": "^7.0.0", + "npm-audit-report": "^4.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.3", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", "p-map": "^4.0.0", - "pacote": "^13.6.2", - "parse-conflict-json": "^2.0.2", - "proc-log": "^2.0.1", + "pacote": "^15.1.1", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^5.0.2", - "read-package-json-fast": "^2.0.3", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.1", - "tar": "^6.1.11", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.8", + "ssri": "^10.0.1", + "tar": "^6.1.13", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", - "treeverse": "^2.0.0", - "validate-npm-package-name": "^4.0.0", - "which": "^2.0.2", - "write-file-atomic": "^4.0.1" + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.0", + "write-file-atomic": "^5.0.0" }, "bin": { "npm": "bin/npm-cli.js", "npx": "bin/npx-cli.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-run-path": { @@ -4445,172 +4225,150 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "5.6.3", + "version": "6.2.5", "inBundle": true, "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/query": "^1.2.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.3", - "cacache": "^16.1.3", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^3.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^5.2.1", - "json-parse-even-better-errors": "^2.3.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", "json-stringify-nice": "^1.1.4", - "minimatch": "^5.1.0", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.2", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", + "minimatch": "^6.1.6", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", + "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", "walk-up-path": "^1.0.0" }, "bin": { "arborist": "bin/index.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/ci-detect": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "4.2.2", + "version": "6.1.4", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/map-workspaces": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", "semver": "^7.3.5", "walk-up-path": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "2.0.0", + "version": "3.0.0", "inBundle": true, "license": "ISC", "dependencies": { "ansi-styles": "^4.3.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "2.1.2", + "version": "3.1.0", "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/git": { + "version": "4.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { - "version": "1.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "2.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/name-from-folder": "^2.0.0", "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" + "minimatch": "^6.1.6", + "read-package-json-fast": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "3.1.1", + "version": "5.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/move-file": { @@ -4626,66 +4384,75 @@ } }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "2.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "3.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "infer-owner": "^1.0.4" + "json-parse-even-better-errors": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "1.2.0", + "version": "3.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^9.1.0", - "postcss-selector-parser": "^6.0.10", - "semver": "^7.3.7" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "4.2.1", + "version": "6.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@tootallnate/once": { @@ -4696,10 +4463,35 @@ "node": ">= 10" } }, - "node_modules/npm/node_modules/abbrev": { - "version": "1.1.1", + "node_modules/npm/node_modules/@tufjs/models": { + "version": "1.0.0", "inBundle": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "minimatch": "^6.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abort-controller": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } }, "node_modules/npm/node_modules/agent-base": { "version": "6.0.2", @@ -4713,12 +4505,12 @@ } }, "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.2.1", + "version": "4.3.0", "inBundle": true, "license": "MIT", "dependencies": { "debug": "^4.1.0", - "depd": "^1.1.2", + "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "engines": { @@ -4770,49 +4562,53 @@ "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { - "version": "3.0.1", + "version": "4.0.0", "inBundle": true, "license": "ISC", "dependencies": { "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "readable-stream": "^4.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/asap": { - "version": "2.0.6", - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, "node_modules/npm/node_modules/bin-links": { - "version": "3.0.3", + "version": "4.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/bin-links/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/binary-extensions": { @@ -4831,6 +4627,29 @@ "balanced-match": "^1.0.0" } }, + "node_modules/npm/node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", "inBundle": true, @@ -4840,31 +4659,26 @@ } }, "node_modules/npm/node_modules/cacache": { - "version": "16.1.3", + "version": "17.0.4", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", "glob": "^8.0.1", - "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", - "minipass": "^3.1.6", + "minipass": "^4.0.0", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/chalk": { @@ -4890,6 +4704,20 @@ "node": ">=10" } }, + "node_modules/npm/node_modules/ci-info": { + "version": "3.8.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", "inBundle": true, @@ -4922,7 +4750,7 @@ } }, "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.2", + "version": "0.6.3", "inBundle": true, "license": "MIT", "dependencies": { @@ -4944,14 +4772,11 @@ } }, "node_modules/npm/node_modules/cmd-shim": { - "version": "5.0.0", + "version": "6.0.1", "inBundle": true, "license": "ISC", - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/color-convert": { @@ -5037,20 +4862,15 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/debuglog": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/npm/node_modules/defaults": { - "version": "1.0.3", + "version": "1.0.4", "inBundle": true, "license": "MIT", "dependencies": { "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm/node_modules/delegates": { @@ -5059,20 +4879,11 @@ "license": "MIT" }, "node_modules/npm/node_modules/depd": { - "version": "1.1.2", + "version": "2.0.0", "inBundle": true, "license": "MIT", "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/dezalgo": { - "version": "1.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" + "node": ">= 0.8" } }, "node_modules/npm/node_modules/diff": { @@ -5110,20 +4921,39 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.12", + "node_modules/npm/node_modules/event-target-shim": { + "version": "5.0.1", "inBundle": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/events": { + "version": "3.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } }, "node_modules/npm/node_modules/fs-minipass": { - "version": "2.1.0", + "version": "3.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/fs.realpath": { @@ -5137,7 +4967,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/gauge": { - "version": "4.0.4", + "version": "5.0.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -5151,11 +4981,11 @@ "wide-align": "^1.1.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/glob": { - "version": "8.0.3", + "version": "8.1.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -5172,6 +5002,17 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/npm/node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.10", "inBundle": true, @@ -5202,14 +5043,14 @@ "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "5.2.1", + "version": "6.1.1", "inBundle": true, "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/http-cache-semantics": { @@ -5262,15 +5103,34 @@ "node": ">=0.10.0" } }, + "node_modules/npm/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, "node_modules/npm/node_modules/ignore-walk": { - "version": "5.0.1", + "version": "6.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "minimatch": "^5.0.1" + "minimatch": "^6.1.6" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/imurmurhash": { @@ -5317,20 +5177,20 @@ } }, "node_modules/npm/node_modules/init-package-json": { - "version": "3.0.2", + "version": "5.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/ip": { @@ -5358,7 +5218,7 @@ } }, "node_modules/npm/node_modules/is-core-module": { - "version": "2.10.0", + "version": "2.11.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -5387,9 +5247,12 @@ "license": "ISC" }, "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", + "version": "3.0.0", "inBundle": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", @@ -5408,174 +5271,175 @@ "license": "MIT" }, "node_modules/npm/node_modules/just-diff": { - "version": "5.1.1", + "version": "5.2.0", "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.4.1", + "version": "5.5.0", "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "6.0.4", + "version": "7.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "4.0.5", + "version": "5.0.13", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/disparity-colors": "^2.0.0", - "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/arborist": "^6.2.5", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", "binary-extensions": "^2.2.0", "diff": "^5.1.0", - "minimatch": "^5.0.1", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1", - "tar": "^6.1.0" + "minimatch": "^6.1.6", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "4.0.14", + "version": "5.0.13", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^5.6.3", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/fs": "^2.1.1", - "@npmcli/run-script": "^4.2.0", + "@npmcli/arborist": "^6.2.5", + "@npmcli/run-script": "^6.0.0", "chalk": "^4.1.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "proc-log": "^2.0.0", - "read": "^1.0.7", - "read-package-json-fast": "^2.0.2", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "walk-up-path": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "3.0.5", + "version": "4.0.13", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^5.6.3" + "@npmcli/arborist": "^6.2.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "8.0.4", + "version": "9.0.3", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^14.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "4.0.4", + "version": "5.0.3", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^14.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "4.1.3", + "version": "5.0.13", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/run-script": "^4.1.3", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1" + "@npmcli/arborist": "^6.2.5", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "6.0.5", + "version": "7.1.2", "inBundle": true, "license": "ISC", "dependencies": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", "semver": "^7.3.7", - "ssri": "^9.0.0" + "sigstore": "^1.0.0", + "ssri": "^10.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "5.0.4", + "version": "6.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^14.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "4.0.4", + "version": "5.0.3", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^14.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "3.0.7", + "version": "4.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^4.1.3", - "json-parse-even-better-errors": "^2.3.1", - "proc-log": "^2.0.0", + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/lru-cache": { - "version": "7.13.2", + "version": "7.18.3", "inBundle": true, "license": "ISC", "engines": { @@ -5583,6 +5447,406 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { + "version": "11.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "6.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "4.2.4", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "9.3.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "2.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache": { + "version": "16.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { "version": "10.2.1", "inBundle": true, "license": "ISC", @@ -5608,19 +5872,19 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm/node_modules/minimatch": { - "version": "5.1.0", + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", "inBundle": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/npm/node_modules/minipass": { - "version": "3.3.4", + "node_modules/npm/node_modules/node-gyp/node_modules/minipass": { + "version": "3.3.6", "inBundle": true, "license": "ISC", "dependencies": { @@ -5630,19 +5894,8 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "2.1.1", + "node_modules/npm/node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "2.1.2", "inBundle": true, "license": "MIT", "dependencies": { @@ -5657,179 +5910,7 @@ "encoding": "^0.1.13" } }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/mkdirp-infer-owner": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "0.0.8", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "9.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/nopt": { "version": "6.0.0", "inBundle": true, "license": "ISC", @@ -5843,162 +5924,7 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "4.0.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "5.0.0", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "9.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "5.1.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "7.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-profile": { - "version": "6.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "13.3.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "1.0.1", - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/npmlog": { + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog": { "version": "6.0.2", "inBundle": true, "license": "ISC", @@ -6012,6 +5938,225 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/ssri": { + "version": "9.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/unique-filename": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/unique-slug": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "5.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "6.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "10.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "7.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "8.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "14.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "2.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npmlog": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/once": { "version": "1.4.0", "inBundle": true, @@ -6020,14 +6165,6 @@ "wrappy": "1" } }, - "node_modules/npm/node_modules/opener": { - "version": "1.5.2", - "inBundle": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", "inBundle": true, @@ -6043,50 +6180,47 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "13.6.2", + "version": "15.1.1", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { "pacote": "lib/bin.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/parse-conflict-json": { - "version": "2.0.2", + "version": "3.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^2.3.1", + "json-parse-even-better-errors": "^3.0.0", "just-diff": "^5.0.1", "just-diff-apply": "^5.2.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/path-is-absolute": { @@ -6098,7 +6232,7 @@ } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.10", + "version": "6.0.11", "inBundle": true, "license": "MIT", "dependencies": { @@ -6110,11 +6244,19 @@ } }, "node_modules/npm/node_modules/proc-log": { - "version": "2.0.1", + "version": "3.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/process": { + "version": "0.11.10", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" } }, "node_modules/npm/node_modules/promise-all-reject-late": { @@ -6151,11 +6293,14 @@ } }, "node_modules/npm/node_modules/promzard": { - "version": "0.3.0", + "version": "1.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "read": "1" + "read": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/qrcode-terminal": { @@ -6166,80 +6311,62 @@ } }, "node_modules/npm/node_modules/read": { - "version": "1.0.7", + "version": "2.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "mute-stream": "~0.0.4" + "mute-stream": "~1.0.0" }, "engines": { - "node": ">=0.8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/read-cmd-shim": { - "version": "3.0.0", + "version": "4.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/read-package-json": { - "version": "5.0.2", + "version": "6.0.0", "inBundle": true, "license": "ISC", "dependencies": { "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/read-package-json-fast": { - "version": "2.0.3", + "version": "3.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/readable-stream": { - "version": "3.6.0", + "version": "4.3.0", "inBundle": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/npm/node_modules/retry": { @@ -6304,21 +6431,7 @@ } }, "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "version": "5.1.2", "inBundle": true, "license": "MIT" }, @@ -6329,7 +6442,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.3.7", + "version": "7.3.8", "inBundle": true, "license": "ISC", "dependencies": { @@ -6363,6 +6476,22 @@ "inBundle": true, "license": "ISC" }, + "node_modules/npm/node_modules/sigstore": { + "version": "1.1.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.0.0" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", "inBundle": true, @@ -6373,7 +6502,7 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.7.0", + "version": "2.7.1", "inBundle": true, "license": "MIT", "dependencies": { @@ -6399,7 +6528,7 @@ } }, "node_modules/npm/node_modules/spdx-correct": { - "version": "3.1.1", + "version": "3.2.0", "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -6422,27 +6551,27 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.11", + "version": "3.0.12", "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { - "version": "9.0.1", + "version": "10.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^3.1.1" + "minipass": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", + "version": "1.1.1", "inBundle": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, "node_modules/npm/node_modules/string-width": { @@ -6481,19 +6610,41 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "6.1.11", + "version": "6.1.13", "inBundle": true, "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^4.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/npm/node_modules/text-table": { @@ -6507,33 +6658,45 @@ "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { - "version": "2.0.0", + "version": "3.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "1.0.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/unique-filename": { - "version": "2.0.1", + "version": "3.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "unique-slug": "^3.0.0" + "unique-slug": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/unique-slug": { - "version": "3.0.0", + "version": "4.0.0", "inBundle": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/util-deprecate": { @@ -6551,14 +6714,14 @@ } }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "4.0.0", + "version": "5.0.0", "inBundle": true, "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/walk-up-path": { @@ -6575,17 +6738,17 @@ } }, "node_modules/npm/node_modules/which": { - "version": "2.0.2", + "version": "3.0.0", "inBundle": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "node-which": "bin/node-which" + "node-which": "bin/which.js" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/wide-align": { @@ -6602,7 +6765,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/write-file-atomic": { - "version": "4.0.2", + "version": "5.0.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -6610,7 +6773,7 @@ "signal-exit": "^3.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/yallist": { @@ -6745,7 +6908,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, "dependencies": { "aggregate-error": "^4.0.0" }, @@ -7584,6 +7746,2860 @@ "node": ">=18" } }, + "node_modules/semantic-release/node_modules/@semantic-release/npm": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", + "integrity": "sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==", + "peer": true, + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "execa": "^5.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.15", + "nerf-dart": "^1.0.0", + "normalize-url": "^6.0.0", + "npm": "^8.3.0", + "rc": "^1.2.8", + "read-pkg": "^5.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^1.0.0" + }, + "engines": { + "node": ">=16 || ^14.17" + }, + "peerDependencies": { + "semantic-release": ">=19.0.0" + } + }, + "node_modules/semantic-release/node_modules/@semantic-release/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "peer": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/@semantic-release/npm/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/semantic-release/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/semantic-release/node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "peer": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "peer": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/semantic-release/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/semantic-release/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/semantic-release/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/npm": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.19.4.tgz", + "integrity": "sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/ci-detect", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/run-script", + "abbrev", + "archy", + "cacache", + "chalk", + "chownr", + "cli-columns", + "cli-table3", + "columnify", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "mkdirp", + "mkdirp-infer-owner", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "npmlog", + "opener", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "read-package-json", + "read-package-json-fast", + "readdir-scoped-modules", + "rimraf", + "semver", + "ssri", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "peer": true, + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/config": "^4.2.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.2.1", + "abbrev": "~1.1.1", + "archy": "~1.0.0", + "cacache": "^16.1.3", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.2", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.12", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "graceful-fs": "^4.2.10", + "hosted-git-info": "^5.2.1", + "ini": "^3.0.1", + "init-package-json": "^3.0.2", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^6.0.4", + "libnpmdiff": "^4.0.5", + "libnpmexec": "^4.0.14", + "libnpmfund": "^3.0.5", + "libnpmhook": "^8.0.4", + "libnpmorg": "^4.0.4", + "libnpmpack": "^4.1.3", + "libnpmpublish": "^6.0.5", + "libnpmsearch": "^5.0.4", + "libnpmteam": "^4.0.4", + "libnpmversion": "^3.0.7", + "make-fetch-happen": "^10.2.0", + "minimatch": "^5.1.0", + "minipass": "^3.1.6", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^9.1.0", + "nopt": "^6.0.0", + "npm-audit-report": "^3.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.1.0", + "npm-pick-manifest": "^7.0.2", + "npm-profile": "^6.2.0", + "npm-registry-fetch": "^13.3.1", + "npm-user-validate": "^1.0.1", + "npmlog": "^6.0.2", + "opener": "^1.5.2", + "p-map": "^4.0.0", + "pacote": "^13.6.2", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^5.0.2", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^2.0.0", + "validate-npm-package-name": "^4.0.0", + "which": "^2.0.2", + "write-file-atomic": "^4.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "peer": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@gar/promisify": { + "version": "1.1.3", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/arborist": { + "version": "5.6.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/query": "^1.2.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.3", + "cacache": "^16.1.3", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^5.2.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "minimatch": "^5.1.0", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^6.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.2", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/ci-detect": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/config": { + "version": "4.2.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^6.0.0", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", + "walk-up-path": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "ansi-styles": "^4.3.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/fs": { + "version": "2.1.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/git": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { + "version": "1.1.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "3.1.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/package-json": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "infer-owner": "^1.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/query": { + "version": "1.2.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "npm-package-arg": "^9.1.0", + "postcss-selector-parser": "^6.0.10", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@npmcli/run-script": { + "version": "4.2.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/@tootallnate/once": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/abbrev": { + "version": "1.1.1", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/agent-base": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/agentkeepalive": { + "version": "4.2.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/are-we-there-yet": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/asap": { + "version": "2.0.6", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/bin-links": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/bin-links/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/binary-extensions": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/builtins": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/cacache": { + "version": "16.1.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/chalk": { + "version": "4.1.2", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/cidr-regex": { + "version": "3.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "ip-regex": "^4.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/cli-table3": { + "version": "0.6.2", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/clone": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/cmd-shim": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/columnify": { + "version": "1.6.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/debug": { + "version": "4.3.4", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/debuglog": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/defaults": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/delegates": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/depd": { + "version": "1.1.2", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/dezalgo": { + "version": "1.0.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/diff": { + "version": "5.1.0", + "inBundle": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.12", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/fs.realpath": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/function-bind": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/gauge": { + "version": "4.0.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/glob": { + "version": "8.0.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.10", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/has": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/has-flag": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/hosted-git-info": { + "version": "5.2.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/http-proxy-agent": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/https-proxy-agent": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/humanize-ms": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/ignore-walk": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/infer-owner": { + "version": "1.0.4", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/inflight": { + "version": "1.0.6", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/inherits": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/ini": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/init-package-json": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "npm-package-arg": "^9.0.1", + "promzard": "^0.3.0", + "read": "^1.0.7", + "read-package-json": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/ip": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/ip-regex": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/is-cidr": { + "version": "4.0.2", + "inBundle": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "cidr-regex": "^3.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/is-core-module": { + "version": "2.10.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/just-diff": { + "version": "5.1.1", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/just-diff-apply": { + "version": "5.4.1", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmaccess": { + "version": "6.0.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmdiff": { + "version": "4.0.5", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/disparity-colors": "^2.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^5.0.1", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1", + "tar": "^6.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmexec": { + "version": "4.0.14", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/fs": "^2.1.1", + "@npmcli/run-script": "^4.2.0", + "chalk": "^4.1.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-package-arg": "^9.0.1", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "proc-log": "^2.0.0", + "read": "^1.0.7", + "read-package-json-fast": "^2.0.2", + "semver": "^7.3.7", + "walk-up-path": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmfund": { + "version": "3.0.5", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/arborist": "^5.6.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmhook": { + "version": "8.0.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmorg": { + "version": "4.0.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmpack": { + "version": "4.1.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/run-script": "^4.1.3", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmpublish": { + "version": "6.0.5", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmsearch": { + "version": "5.0.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmteam": { + "version": "4.0.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/libnpmversion": { + "version": "3.0.7", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^4.1.3", + "json-parse-even-better-errors": "^2.3.1", + "proc-log": "^2.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/lru-cache": { + "version": "7.13.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/make-fetch-happen": { + "version": "10.2.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/minimatch": { + "version": "5.1.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/minipass": { + "version": "3.3.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/minipass-collect": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/minipass-fetch": { + "version": "2.1.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/mute-stream": { + "version": "0.0.8", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp": { + "version": "9.1.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/nopt": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/normalize-package-data": { + "version": "4.0.1", + "inBundle": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-audit-report": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-bundled": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-install-checks": { + "version": "5.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-package-arg": { + "version": "9.1.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-packlist": { + "version": "5.1.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-pick-manifest": { + "version": "7.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^2.0.0", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-profile": { + "version": "6.2.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-registry-fetch": { + "version": "13.3.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npm-user-validate": { + "version": "1.0.1", + "inBundle": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/npmlog": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/once": { + "version": "1.4.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/opener": { + "version": "1.5.2", + "inBundle": true, + "license": "(WTFPL OR MIT)", + "peer": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/p-map": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/pacote": { + "version": "13.6.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/parse-conflict-json": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/path-is-absolute": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/proc-log": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/promise-call-limit": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/promzard": { + "version": "0.3.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "read": "1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "peer": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/read": { + "version": "1.0.7", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/read-cmd-shim": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/read-package-json": { + "version": "5.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/read-package-json-fast": { + "version": "2.0.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/readable-stream": { + "version": "3.6.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/rimraf": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/semver": { + "version": "7.3.7", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/signal-exit": { + "version": "3.0.7", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/socks": { + "version": "2.7.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/spdx-correct": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.3.0", + "inBundle": true, + "license": "CC-BY-3.0", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.11", + "inBundle": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/ssri": { + "version": "9.0.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/string_decoder": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/supports-color": { + "version": "7.2.0", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/tar": { + "version": "6.1.11", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/treeverse": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/unique-filename": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/unique-slug": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/validate-npm-package-name": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/walk-up-path": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/wide-align": { + "version": "1.1.5", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/wrappy": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/npm/node_modules/write-file-atomic": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "peer": true + }, + "node_modules/semantic-release/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "peer": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/p-map/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "peer": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/semantic-release/node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/tempy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", + "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", + "peer": true, + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "peer": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -8328,7 +11344,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz", "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", - "dev": true, "dependencies": { "is-stream": "^3.0.0", "temp-dir": "^2.0.0", @@ -8346,7 +11361,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true, "engines": { "node": ">=8" } @@ -8355,7 +11369,6 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, "engines": { "node": ">=12.20" }, @@ -8517,7 +11530,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dev": true, "dependencies": { "crypto-random-string": "^4.0.0" }, @@ -8785,7 +11797,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz", "integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==", - "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -9259,163 +12270,40 @@ } }, "@semantic-release/npm": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", - "integrity": "sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.2.tgz", + "integrity": "sha512-Mo0XoBza4pUapxiBhLLYXeSZ9tkuHDUd/WvMbpilwuPRfJDnQXMqx5tBVon8d2mBk8JXmXpqB+ExhlWJmVT40A==", "requires": { "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "execa": "^5.0.0", + "aggregate-error": "^4.0.1", + "execa": "^7.0.0", "fs-extra": "^11.0.0", - "lodash": "^4.17.15", + "lodash-es": "^4.17.21", "nerf-dart": "^1.0.0", - "normalize-url": "^6.0.0", - "npm": "^8.3.0", + "normalize-url": "^8.0.0", + "npm": "^9.5.0", "rc": "^1.2.8", - "read-pkg": "^5.0.0", + "read-pkg": "^7.0.0", "registry-auth-token": "^5.0.0", "semver": "^7.1.2", - "tempy": "^1.0.0" + "tempy": "^3.0.0" }, "dependencies": { - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" - }, - "tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", - "requires": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" } }, "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" } } }, @@ -9975,14 +12863,6 @@ "mimic-response": "^4.0.0", "normalize-url": "^8.0.0", "responselike": "^3.0.0" - }, - "dependencies": { - "normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "dev": true - } } }, "callsites": { @@ -10055,8 +12935,7 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "chunkd": { "version": "2.0.1", @@ -10067,8 +12946,7 @@ "ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" }, "ci-parallel-vars": { "version": "1.0.1", @@ -10407,7 +13285,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dev": true, "requires": { "type-fest": "^1.0.1" } @@ -11249,8 +14126,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { "version": "5.0.0", @@ -11881,8 +14757,7 @@ "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "nan": { "version": "2.17.0", @@ -11996,88 +14871,81 @@ "dev": true }, "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" }, "npm": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.19.4.tgz", - "integrity": "sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.6.2.tgz", + "integrity": "sha512-TnXoXhlFkH/9wI4+aXSq0aPLwKG7Ge17t1ME4/rQt+0DZWQCRk9PwhBuX/shqdUiHeKicSLSkzWx+QZgTRE+/A==", "requires": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.6.3", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.2.1", - "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.2.1", - "abbrev": "~1.1.1", + "@npmcli/arborist": "^6.2.5", + "@npmcli/config": "^6.1.4", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/package-json": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^16.1.3", + "cacache": "^17.0.4", "chalk": "^4.1.2", - "chownr": "^2.0.0", + "ci-info": "^3.8.0", "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", + "cli-table3": "^0.6.3", "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.12", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.1", + "glob": "^8.1.0", "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.2.1", + "hosted-git-info": "^6.1.1", "ini": "^3.0.1", - "init-package-json": "^3.0.2", + "init-package-json": "^5.0.0", "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.4", - "libnpmdiff": "^4.0.5", - "libnpmexec": "^4.0.14", - "libnpmfund": "^3.0.5", - "libnpmhook": "^8.0.4", - "libnpmorg": "^4.0.4", - "libnpmpack": "^4.1.3", - "libnpmpublish": "^6.0.5", - "libnpmsearch": "^5.0.4", - "libnpmteam": "^4.0.4", - "libnpmversion": "^3.0.7", - "make-fetch-happen": "^10.2.0", - "minimatch": "^5.1.0", - "minipass": "^3.1.6", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.13", + "libnpmexec": "^5.0.13", + "libnpmfund": "^4.0.13", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.3", + "libnpmpack": "^5.0.13", + "libnpmpublish": "^7.1.2", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.0.3", + "minimatch": "^6.2.0", + "minipass": "^4.2.4", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", "ms": "^2.1.2", - "node-gyp": "^9.1.0", - "nopt": "^6.0.0", - "npm-audit-report": "^3.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.1.0", - "npm-pick-manifest": "^7.0.2", - "npm-profile": "^6.2.0", - "npm-registry-fetch": "^13.3.1", - "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", - "opener": "^1.5.2", + "node-gyp": "^9.3.1", + "nopt": "^7.0.0", + "npm-audit-report": "^4.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.3", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", "p-map": "^4.0.0", - "pacote": "^13.6.2", - "parse-conflict-json": "^2.0.2", - "proc-log": "^2.0.1", + "pacote": "^15.1.1", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^5.0.2", - "read-package-json-fast": "^2.0.3", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.1", - "tar": "^6.1.11", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.8", + "ssri": "^10.0.1", + "tar": "^6.1.13", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", - "treeverse": "^2.0.0", - "validate-npm-package-name": "^4.0.0", - "which": "^2.0.2", - "write-file-atomic": "^4.0.1" + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.0", + "write-file-atomic": "^5.0.0" }, "dependencies": { "@colors/colors": { @@ -12094,130 +14962,111 @@ "bundled": true }, "@npmcli/arborist": { - "version": "5.6.3", + "version": "6.2.5", "bundled": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/query": "^1.2.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.3", - "cacache": "^16.1.3", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^3.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^5.2.1", - "json-parse-even-better-errors": "^2.3.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", "json-stringify-nice": "^1.1.4", - "minimatch": "^5.1.0", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.2", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", + "minimatch": "^6.1.6", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", + "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", "walk-up-path": "^1.0.0" } }, - "@npmcli/ci-detect": { - "version": "2.0.0", - "bundled": true - }, "@npmcli/config": { - "version": "4.2.2", + "version": "6.1.4", "bundled": true, "requires": { - "@npmcli/map-workspaces": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", "semver": "^7.3.5", "walk-up-path": "^1.0.0" } }, "@npmcli/disparity-colors": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "requires": { "ansi-styles": "^4.3.0" } }, "@npmcli/fs": { - "version": "2.1.2", + "version": "3.1.0", "bundled": true, "requires": { - "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "@npmcli/git": { - "version": "3.0.2", + "version": "4.0.3", "bundled": true, "requires": { - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^2.0.2" + "which": "^3.0.0" } }, "@npmcli/installed-package-contents": { - "version": "1.0.7", + "version": "2.0.2", "bundled": true, "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "npm-bundled": { - "version": "1.1.2", - "bundled": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - } + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "@npmcli/map-workspaces": { - "version": "2.0.4", + "version": "3.0.2", "bundled": true, "requires": { - "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/name-from-folder": "^2.0.0", "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" + "minimatch": "^6.1.6", + "read-package-json-fast": "^3.0.0" } }, "@npmcli/metavuln-calculator": { - "version": "3.1.1", + "version": "5.0.0", "bundled": true, "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", "semver": "^7.3.5" } }, @@ -12230,55 +15079,71 @@ } }, "@npmcli/name-from-folder": { - "version": "1.0.1", + "version": "2.0.0", "bundled": true }, "@npmcli/node-gyp": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true }, "@npmcli/package-json": { - "version": "2.0.0", - "bundled": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { "version": "3.0.0", "bundled": true, "requires": { - "infer-owner": "^1.0.4" + "json-parse-even-better-errors": "^3.0.0" + } + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "bundled": true, + "requires": { + "which": "^3.0.0" } }, "@npmcli/query": { - "version": "1.2.0", + "version": "3.0.0", "bundled": true, "requires": { - "npm-package-arg": "^9.1.0", - "postcss-selector-parser": "^6.0.10", - "semver": "^7.3.7" + "postcss-selector-parser": "^6.0.10" } }, "@npmcli/run-script": { - "version": "4.2.1", + "version": "6.0.0", "bundled": true, "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" } }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "bundled": true + }, "@tootallnate/once": { "version": "2.0.0", "bundled": true }, + "@tufjs/models": { + "version": "1.0.0", + "bundled": true, + "requires": { + "minimatch": "^6.1.0" + } + }, "abbrev": { - "version": "1.1.1", + "version": "2.0.0", "bundled": true }, + "abort-controller": { + "version": "3.0.0", + "bundled": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, "agent-base": { "version": "6.0.2", "bundled": true, @@ -12287,11 +15152,11 @@ } }, "agentkeepalive": { - "version": "4.2.1", + "version": "4.3.0", "bundled": true, "requires": { "debug": "^4.1.0", - "depd": "^1.1.2", + "depd": "^2.0.0", "humanize-ms": "^1.2.1" } }, @@ -12323,37 +15188,29 @@ "bundled": true }, "are-we-there-yet": { - "version": "3.0.1", + "version": "4.0.0", "bundled": true, "requires": { "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "readable-stream": "^4.1.0" } }, - "asap": { - "version": "2.0.6", - "bundled": true - }, "balanced-match": { "version": "1.0.2", "bundled": true }, + "base64-js": { + "version": "1.5.1", + "bundled": true + }, "bin-links": { - "version": "3.0.3", + "version": "4.0.1", "bundled": true, "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true - } + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" } }, "binary-extensions": { @@ -12367,6 +15224,14 @@ "balanced-match": "^1.0.0" } }, + "buffer": { + "version": "6.0.3", + "bundled": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "builtins": { "version": "5.0.1", "bundled": true, @@ -12375,27 +15240,22 @@ } }, "cacache": { - "version": "16.1.3", + "version": "17.0.4", "bundled": true, "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", "glob": "^8.0.1", - "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", - "minipass": "^3.1.6", + "minipass": "^4.0.0", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" } }, "chalk": { @@ -12410,6 +15270,10 @@ "version": "2.0.0", "bundled": true }, + "ci-info": { + "version": "3.8.0", + "bundled": true + }, "cidr-regex": { "version": "3.1.1", "bundled": true, @@ -12430,7 +15294,7 @@ } }, "cli-table3": { - "version": "0.6.2", + "version": "0.6.3", "bundled": true, "requires": { "@colors/colors": "1.5.0", @@ -12442,11 +15306,8 @@ "bundled": true }, "cmd-shim": { - "version": "5.0.0", - "bundled": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } + "version": "6.0.1", + "bundled": true }, "color-convert": { "version": "2.0.1", @@ -12500,12 +15361,8 @@ } } }, - "debuglog": { - "version": "1.0.1", - "bundled": true - }, "defaults": { - "version": "1.0.3", + "version": "1.0.4", "bundled": true, "requires": { "clone": "^1.0.2" @@ -12516,17 +15373,9 @@ "bundled": true }, "depd": { - "version": "1.1.2", + "version": "2.0.0", "bundled": true }, - "dezalgo": { - "version": "1.0.4", - "bundled": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, "diff": { "version": "5.1.0", "bundled": true @@ -12551,15 +15400,23 @@ "version": "2.0.3", "bundled": true }, + "event-target-shim": { + "version": "5.0.1", + "bundled": true + }, + "events": { + "version": "3.3.0", + "bundled": true + }, "fastest-levenshtein": { - "version": "1.0.12", + "version": "1.0.16", "bundled": true }, "fs-minipass": { - "version": "2.1.0", + "version": "3.0.1", "bundled": true, "requires": { - "minipass": "^3.0.0" + "minipass": "^4.0.0" } }, "fs.realpath": { @@ -12571,7 +15428,7 @@ "bundled": true }, "gauge": { - "version": "4.0.4", + "version": "5.0.0", "bundled": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", @@ -12585,7 +15442,7 @@ } }, "glob": { - "version": "8.0.3", + "version": "8.1.0", "bundled": true, "requires": { "fs.realpath": "^1.0.0", @@ -12593,6 +15450,15 @@ "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" + }, + "dependencies": { + "minimatch": { + "version": "5.1.6", + "bundled": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "graceful-fs": { @@ -12615,7 +15481,7 @@ "bundled": true }, "hosted-git-info": { - "version": "5.2.1", + "version": "6.1.1", "bundled": true, "requires": { "lru-cache": "^7.5.1" @@ -12657,11 +15523,15 @@ "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "ieee754": { + "version": "1.2.1", + "bundled": true + }, "ignore-walk": { - "version": "5.0.1", + "version": "6.0.1", "bundled": true, "requires": { - "minimatch": "^5.0.1" + "minimatch": "^6.1.6" } }, "imurmurhash": { @@ -12693,16 +15563,16 @@ "bundled": true }, "init-package-json": { - "version": "3.0.2", + "version": "5.0.0", "bundled": true, "requires": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" + "validate-npm-package-name": "^5.0.0" } }, "ip": { @@ -12721,7 +15591,7 @@ } }, "is-core-module": { - "version": "2.10.0", + "version": "2.11.0", "bundled": true, "requires": { "has": "^1.0.3" @@ -12740,7 +15610,7 @@ "bundled": true }, "json-parse-even-better-errors": { - "version": "2.3.1", + "version": "3.0.0", "bundled": true }, "json-stringify-nice": { @@ -12752,179 +15622,185 @@ "bundled": true }, "just-diff": { - "version": "5.1.1", + "version": "5.2.0", "bundled": true }, "just-diff-apply": { - "version": "5.4.1", + "version": "5.5.0", "bundled": true }, "libnpmaccess": { - "version": "6.0.4", + "version": "7.0.2", "bundled": true, "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" } }, "libnpmdiff": { - "version": "4.0.5", + "version": "5.0.13", "bundled": true, "requires": { - "@npmcli/disparity-colors": "^2.0.0", - "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/arborist": "^6.2.5", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", "binary-extensions": "^2.2.0", "diff": "^5.1.0", - "minimatch": "^5.0.1", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1", - "tar": "^6.1.0" + "minimatch": "^6.1.6", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" } }, "libnpmexec": { - "version": "4.0.14", + "version": "5.0.13", "bundled": true, "requires": { - "@npmcli/arborist": "^5.6.3", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/fs": "^2.1.1", - "@npmcli/run-script": "^4.2.0", + "@npmcli/arborist": "^6.2.5", + "@npmcli/run-script": "^6.0.0", "chalk": "^4.1.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "proc-log": "^2.0.0", - "read": "^1.0.7", - "read-package-json-fast": "^2.0.2", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "walk-up-path": "^1.0.0" } }, "libnpmfund": { - "version": "3.0.5", + "version": "4.0.13", "bundled": true, "requires": { - "@npmcli/arborist": "^5.6.3" + "@npmcli/arborist": "^6.2.5" } }, "libnpmhook": { - "version": "8.0.4", + "version": "9.0.3", "bundled": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^14.0.3" } }, "libnpmorg": { - "version": "4.0.4", + "version": "5.0.3", "bundled": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^14.0.3" } }, "libnpmpack": { - "version": "4.1.3", + "version": "5.0.13", "bundled": true, "requires": { - "@npmcli/run-script": "^4.1.3", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1" + "@npmcli/arborist": "^6.2.5", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" } }, "libnpmpublish": { - "version": "6.0.5", + "version": "7.1.2", "bundled": true, "requires": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", "semver": "^7.3.7", - "ssri": "^9.0.0" + "sigstore": "^1.0.0", + "ssri": "^10.0.1" } }, "libnpmsearch": { - "version": "5.0.4", + "version": "6.0.2", "bundled": true, "requires": { - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^14.0.3" } }, "libnpmteam": { - "version": "4.0.4", + "version": "5.0.3", "bundled": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^14.0.3" } }, "libnpmversion": { - "version": "3.0.7", + "version": "4.0.2", "bundled": true, "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^4.1.3", - "json-parse-even-better-errors": "^2.3.1", - "proc-log": "^2.0.0", + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.7" } }, "lru-cache": { - "version": "7.13.2", + "version": "7.18.3", "bundled": true }, "make-fetch-happen": { - "version": "10.2.1", + "version": "11.0.3", "bundled": true, "requires": { "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "ssri": "^10.0.0" } }, "minimatch": { - "version": "5.1.0", + "version": "6.2.0", "bundled": true, "requires": { "brace-expansion": "^2.0.1" } }, "minipass": { - "version": "3.3.4", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } + "version": "4.2.4", + "bundled": true }, "minipass-collect": { "version": "1.0.2", "bundled": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minipass-fetch": { - "version": "2.1.1", + "version": "3.0.1", "bundled": true, "requires": { "encoding": "^0.1.13", - "minipass": "^3.1.6", + "minipass": "^4.0.0", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" } @@ -12934,6 +15810,15 @@ "bundled": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minipass-json-stream": { @@ -12942,6 +15827,15 @@ "requires": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minipass-pipeline": { @@ -12949,6 +15843,15 @@ "bundled": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minipass-sized": { @@ -12956,6 +15859,15 @@ "bundled": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minizlib": { @@ -12964,27 +15876,27 @@ "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "mkdirp": { "version": "1.0.4", "bundled": true }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "bundled": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - } - }, "ms": { "version": "2.1.3", "bundled": true }, "mute-stream": { - "version": "0.0.8", + "version": "1.0.0", "bundled": true }, "negotiator": { @@ -12992,14 +15904,14 @@ "bundled": true }, "node-gyp": { - "version": "9.1.0", + "version": "9.3.1", "bundled": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", + "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", @@ -13007,6 +15919,26 @@ "which": "^2.0.2" }, "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "bundled": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, "brace-expansion": { "version": "1.1.11", "bundled": true, @@ -13015,6 +15947,78 @@ "concat-map": "0.0.1" } }, + "cacache": { + "version": "16.1.3", + "bundled": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "bundled": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "gauge": { + "version": "4.0.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, "glob": { "version": "7.2.3", "bundled": true, @@ -13027,6 +16031,28 @@ "path-is-absolute": "^1.0.0" } }, + "make-fetch-happen": { + "version": "10.2.1", + "bundled": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, "minimatch": { "version": "3.1.2", "bundled": true, @@ -13034,137 +16060,180 @@ "brace-expansion": "^1.1.7" } }, - "nopt": { - "version": "5.0.0", + "minipass": { + "version": "3.3.6", "bundled": true, "requires": { - "abbrev": "1" + "yallist": "^4.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.2", + "bundled": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "nopt": { + "version": "6.0.0", + "bundled": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "bundled": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "readable-stream": { + "version": "3.6.1", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "ssri": { + "version": "9.0.1", + "bundled": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "bundled": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "which": { + "version": "2.0.2", + "bundled": true, + "requires": { + "isexe": "^2.0.0" } } } }, "nopt": { - "version": "6.0.0", + "version": "7.0.0", "bundled": true, "requires": { - "abbrev": "^1.0.0" + "abbrev": "^2.0.0" } }, "normalize-package-data": { - "version": "4.0.1", + "version": "5.0.0", "bundled": true, "requires": { - "hosted-git-info": "^5.0.0", + "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "npm-audit-report": { - "version": "3.0.0", + "version": "4.0.0", "bundled": true, "requires": { "chalk": "^4.0.0" } }, "npm-bundled": { - "version": "2.0.1", + "version": "3.0.0", "bundled": true, "requires": { - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true - } + "npm-normalize-package-bin": "^3.0.0" } }, "npm-install-checks": { - "version": "5.0.0", + "version": "6.0.0", "bundled": true, "requires": { "semver": "^7.1.1" } }, "npm-normalize-package-bin": { - "version": "1.0.1", + "version": "3.0.0", "bundled": true }, "npm-package-arg": { - "version": "9.1.0", + "version": "10.1.0", "bundled": true, "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "validate-npm-package-name": "^5.0.0" } }, "npm-packlist": { - "version": "5.1.3", + "version": "7.0.4", "bundled": true, "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true - } + "ignore-walk": "^6.0.0" } }, "npm-pick-manifest": { - "version": "7.0.2", + "version": "8.0.1", "bundled": true, "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", "semver": "^7.3.5" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true - } } }, "npm-profile": { - "version": "6.2.1", + "version": "7.0.1", "bundled": true, "requires": { - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0" + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" } }, "npm-registry-fetch": { - "version": "13.3.1", + "version": "14.0.3", "bundled": true, "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", + "make-fetch-happen": "^11.0.0", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" } }, "npm-user-validate": { - "version": "1.0.1", + "version": "2.0.0", "bundled": true }, "npmlog": { - "version": "6.0.2", + "version": "7.0.1", "bundled": true, "requires": { - "are-we-there-yet": "^3.0.0", + "are-we-there-yet": "^4.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", + "gauge": "^5.0.0", "set-blocking": "^2.0.0" } }, @@ -13175,10 +16244,6 @@ "wrappy": "1" } }, - "opener": { - "version": "1.5.2", - "bundled": true - }, "p-map": { "version": "4.0.0", "bundled": true, @@ -13187,37 +16252,34 @@ } }, "pacote": { - "version": "13.6.2", + "version": "15.1.1", "bundled": true, "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11" } }, "parse-conflict-json": { - "version": "2.0.2", + "version": "3.0.0", "bundled": true, "requires": { - "json-parse-even-better-errors": "^2.3.1", + "json-parse-even-better-errors": "^3.0.0", "just-diff": "^5.0.1", "just-diff-apply": "^5.2.0" } @@ -13227,7 +16289,7 @@ "bundled": true }, "postcss-selector-parser": { - "version": "6.0.10", + "version": "6.0.11", "bundled": true, "requires": { "cssesc": "^3.0.0", @@ -13235,7 +16297,11 @@ } }, "proc-log": { - "version": "2.0.1", + "version": "3.0.0", + "bundled": true + }, + "process": { + "version": "0.11.10", "bundled": true }, "promise-all-reject-late": { @@ -13259,10 +16325,10 @@ } }, "promzard": { - "version": "0.3.0", + "version": "1.0.0", "bundled": true, "requires": { - "read": "1" + "read": "^2.0.0" } }, "qrcode-terminal": { @@ -13270,57 +16336,42 @@ "bundled": true }, "read": { - "version": "1.0.7", + "version": "2.0.0", "bundled": true, "requires": { - "mute-stream": "~0.0.4" + "mute-stream": "~1.0.0" } }, "read-cmd-shim": { - "version": "3.0.0", + "version": "4.0.0", "bundled": true }, "read-package-json": { - "version": "5.0.2", + "version": "6.0.0", "bundled": true, "requires": { "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true - } + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "read-package-json-fast": { - "version": "2.0.3", + "version": "3.0.2", "bundled": true, "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "readable-stream": { - "version": "3.6.0", + "version": "4.3.0", "bundled": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "bundled": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" } }, "retry": { @@ -13364,7 +16415,7 @@ } }, "safe-buffer": { - "version": "5.2.1", + "version": "5.1.2", "bundled": true }, "safer-buffer": { @@ -13373,7 +16424,7 @@ "optional": true }, "semver": { - "version": "7.3.7", + "version": "7.3.8", "bundled": true, "requires": { "lru-cache": "^6.0.0" @@ -13396,12 +16447,21 @@ "version": "3.0.7", "bundled": true }, + "sigstore": { + "version": "1.1.1", + "bundled": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.0.0" + } + }, "smart-buffer": { "version": "4.2.0", "bundled": true }, "socks": { - "version": "2.7.0", + "version": "2.7.1", "bundled": true, "requires": { "ip": "^2.0.0", @@ -13418,7 +16478,7 @@ } }, "spdx-correct": { - "version": "3.1.1", + "version": "3.2.0", "bundled": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -13438,21 +16498,21 @@ } }, "spdx-license-ids": { - "version": "3.0.11", + "version": "3.0.12", "bundled": true }, "ssri": { - "version": "9.0.1", + "version": "10.0.1", "bundled": true, "requires": { - "minipass": "^3.1.1" + "minipass": "^4.0.0" } }, "string_decoder": { - "version": "1.3.0", + "version": "1.1.1", "bundled": true, "requires": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, "string-width": { @@ -13479,15 +16539,33 @@ } }, "tar": { - "version": "6.1.11", + "version": "6.1.13", "bundled": true, "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^4.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + } } }, "text-table": { @@ -13499,18 +16577,26 @@ "bundled": true }, "treeverse": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true }, - "unique-filename": { - "version": "2.0.1", + "tuf-js": { + "version": "1.1.1", "bundled": true, "requires": { - "unique-slug": "^3.0.0" + "@tufjs/models": "1.0.0", + "make-fetch-happen": "^11.0.1" + } + }, + "unique-filename": { + "version": "3.0.0", + "bundled": true, + "requires": { + "unique-slug": "^4.0.0" } }, "unique-slug": { - "version": "3.0.0", + "version": "4.0.0", "bundled": true, "requires": { "imurmurhash": "^0.1.4" @@ -13529,7 +16615,7 @@ } }, "validate-npm-package-name": { - "version": "4.0.0", + "version": "5.0.0", "bundled": true, "requires": { "builtins": "^5.0.0" @@ -13547,7 +16633,7 @@ } }, "which": { - "version": "2.0.2", + "version": "3.0.0", "bundled": true, "requires": { "isexe": "^2.0.0" @@ -13565,7 +16651,7 @@ "bundled": true }, "write-file-atomic": { - "version": "4.0.2", + "version": "5.0.0", "bundled": true, "requires": { "imurmurhash": "^0.1.4", @@ -13677,7 +16763,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, "requires": { "aggregate-error": "^4.0.0" } @@ -14222,6 +17307,1996 @@ "semver-diff": "^4.0.0", "signale": "^1.2.1", "yargs": "^17.5.1" + }, + "dependencies": { + "@semantic-release/npm": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", + "integrity": "sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==", + "peer": true, + "requires": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "execa": "^5.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.15", + "nerf-dart": "^1.0.0", + "normalize-url": "^6.0.0", + "npm": "^8.3.0", + "rc": "^1.2.8", + "read-pkg": "^5.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^1.0.0" + }, + "dependencies": { + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "peer": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "peer": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "peer": true + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "peer": true + }, + "del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "peer": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "peer": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "peer": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "peer": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "peer": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "peer": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "peer": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "peer": true + }, + "npm": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.19.4.tgz", + "integrity": "sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==", + "peer": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/config": "^4.2.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.2.1", + "abbrev": "~1.1.1", + "archy": "~1.0.0", + "cacache": "^16.1.3", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.2", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.12", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "graceful-fs": "^4.2.10", + "hosted-git-info": "^5.2.1", + "ini": "^3.0.1", + "init-package-json": "^3.0.2", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^6.0.4", + "libnpmdiff": "^4.0.5", + "libnpmexec": "^4.0.14", + "libnpmfund": "^3.0.5", + "libnpmhook": "^8.0.4", + "libnpmorg": "^4.0.4", + "libnpmpack": "^4.1.3", + "libnpmpublish": "^6.0.5", + "libnpmsearch": "^5.0.4", + "libnpmteam": "^4.0.4", + "libnpmversion": "^3.0.7", + "make-fetch-happen": "^10.2.0", + "minimatch": "^5.1.0", + "minipass": "^3.1.6", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^9.1.0", + "nopt": "^6.0.0", + "npm-audit-report": "^3.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.1.0", + "npm-pick-manifest": "^7.0.2", + "npm-profile": "^6.2.0", + "npm-registry-fetch": "^13.3.1", + "npm-user-validate": "^1.0.1", + "npmlog": "^6.0.2", + "opener": "^1.5.2", + "p-map": "^4.0.0", + "pacote": "^13.6.2", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^5.0.2", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^2.0.0", + "validate-npm-package-name": "^4.0.0", + "which": "^2.0.2", + "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "optional": true, + "peer": true + }, + "@gar/promisify": { + "version": "1.1.3", + "bundled": true, + "peer": true + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "bundled": true, + "peer": true + }, + "@npmcli/arborist": { + "version": "5.6.3", + "bundled": true, + "peer": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/query": "^1.2.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.3", + "cacache": "^16.1.3", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^5.2.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "minimatch": "^5.1.0", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^6.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.2", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/ci-detect": { + "version": "2.0.0", + "bundled": true, + "peer": true + }, + "@npmcli/config": { + "version": "4.2.2", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^6.0.0", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/disparity-colors": { + "version": "2.0.0", + "bundled": true, + "peer": true, + "requires": { + "ansi-styles": "^4.3.0" + } + }, + "@npmcli/fs": { + "version": "2.1.2", + "bundled": true, + "peer": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "3.0.2", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "bundled": true, + "peer": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "npm-bundled": { + "version": "1.1.2", + "bundled": true, + "peer": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + } + } + }, + "@npmcli/map-workspaces": { + "version": "2.0.4", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + } + }, + "@npmcli/metavuln-calculator": { + "version": "3.1.1", + "bundled": true, + "peer": true, + "requires": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "bundled": true, + "peer": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/name-from-folder": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "@npmcli/node-gyp": { + "version": "2.0.0", + "bundled": true, + "peer": true + }, + "@npmcli/package-json": { + "version": "2.0.0", + "bundled": true, + "peer": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "@npmcli/promise-spawn": { + "version": "3.0.0", + "bundled": true, + "peer": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/query": { + "version": "1.2.0", + "bundled": true, + "peer": true, + "requires": { + "npm-package-arg": "^9.1.0", + "postcss-selector-parser": "^6.0.10", + "semver": "^7.3.7" + } + }, + "@npmcli/run-script": { + "version": "4.2.1", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "bundled": true, + "peer": true + }, + "abbrev": { + "version": "1.1.1", + "bundled": true, + "peer": true + }, + "agent-base": { + "version": "6.0.2", + "bundled": true, + "peer": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "bundled": true, + "peer": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "bundled": true, + "peer": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "bundled": true, + "peer": true + }, + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "2.0.0", + "bundled": true, + "peer": true + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "peer": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "bundled": true, + "peer": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "asap": { + "version": "2.0.6", + "bundled": true, + "peer": true + }, + "balanced-match": { + "version": "1.0.2", + "bundled": true, + "peer": true + }, + "bin-links": { + "version": "3.0.3", + "bundled": true, + "peer": true, + "requires": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "peer": true + } + } + }, + "binary-extensions": { + "version": "2.2.0", + "bundled": true, + "peer": true + }, + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "builtins": { + "version": "5.0.1", + "bundled": true, + "peer": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "16.1.3", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "bundled": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "2.0.0", + "bundled": true, + "peer": true + }, + "cidr-regex": { + "version": "3.1.1", + "bundled": true, + "peer": true, + "requires": { + "ip-regex": "^4.1.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "bundled": true, + "peer": true + }, + "cli-columns": { + "version": "4.0.0", + "bundled": true, + "peer": true, + "requires": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "cli-table3": { + "version": "0.6.2", + "bundled": true, + "peer": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "clone": { + "version": "1.0.4", + "bundled": true, + "peer": true + }, + "cmd-shim": { + "version": "5.0.0", + "bundled": true, + "peer": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "peer": true + }, + "color-support": { + "version": "1.1.3", + "bundled": true, + "peer": true + }, + "columnify": { + "version": "1.6.0", + "bundled": true, + "peer": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, + "common-ancestor-path": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "peer": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "peer": true + }, + "cssesc": { + "version": "3.0.0", + "bundled": true, + "peer": true + }, + "debug": { + "version": "4.3.4", + "bundled": true, + "peer": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "bundled": true, + "peer": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "peer": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "peer": true + }, + "depd": { + "version": "1.1.2", + "bundled": true, + "peer": true + }, + "dezalgo": { + "version": "1.0.4", + "bundled": true, + "peer": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "5.1.0", + "bundled": true, + "peer": true + }, + "emoji-regex": { + "version": "8.0.0", + "bundled": true, + "peer": true + }, + "encoding": { + "version": "0.1.13", + "bundled": true, + "optional": true, + "peer": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "env-paths": { + "version": "2.2.1", + "bundled": true, + "peer": true + }, + "err-code": { + "version": "2.0.3", + "bundled": true, + "peer": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "bundled": true, + "peer": true + }, + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "peer": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true, + "peer": true + }, + "gauge": { + "version": "4.0.4", + "bundled": true, + "peer": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "glob": { + "version": "8.0.3", + "bundled": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "bundled": true, + "peer": true + }, + "has": { + "version": "1.0.3", + "bundled": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "bundled": true, + "peer": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "peer": true + }, + "hosted-git-info": { + "version": "5.2.1", + "bundled": true, + "peer": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "bundled": true, + "peer": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "bundled": true, + "peer": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "bundled": true, + "peer": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "peer": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "bundled": true, + "optional": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ignore-walk": { + "version": "5.0.1", + "bundled": true, + "peer": true, + "requires": { + "minimatch": "^5.0.1" + } + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "peer": true + }, + "indent-string": { + "version": "4.0.0", + "bundled": true, + "peer": true + }, + "infer-owner": { + "version": "1.0.4", + "bundled": true, + "peer": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "peer": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "peer": true + }, + "ini": { + "version": "3.0.1", + "bundled": true, + "peer": true + }, + "init-package-json": { + "version": "3.0.2", + "bundled": true, + "peer": true, + "requires": { + "npm-package-arg": "^9.0.1", + "promzard": "^0.3.0", + "read": "^1.0.7", + "read-package-json": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0" + } + }, + "ip": { + "version": "2.0.0", + "bundled": true, + "peer": true + }, + "ip-regex": { + "version": "4.3.0", + "bundled": true, + "peer": true + }, + "is-cidr": { + "version": "4.0.2", + "bundled": true, + "peer": true, + "requires": { + "cidr-regex": "^3.1.1" + } + }, + "is-core-module": { + "version": "2.10.0", + "bundled": true, + "peer": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true, + "peer": true + }, + "is-lambda": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "peer": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "bundled": true, + "peer": true + }, + "json-stringify-nice": { + "version": "1.1.4", + "bundled": true, + "peer": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true, + "peer": true + }, + "just-diff": { + "version": "5.1.1", + "bundled": true, + "peer": true + }, + "just-diff-apply": { + "version": "5.4.1", + "bundled": true, + "peer": true + }, + "libnpmaccess": { + "version": "6.0.4", + "bundled": true, + "peer": true, + "requires": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmdiff": { + "version": "4.0.5", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/disparity-colors": "^2.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^5.0.1", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1", + "tar": "^6.1.0" + } + }, + "libnpmexec": { + "version": "4.0.14", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/fs": "^2.1.1", + "@npmcli/run-script": "^4.2.0", + "chalk": "^4.1.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-package-arg": "^9.0.1", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "proc-log": "^2.0.0", + "read": "^1.0.7", + "read-package-json-fast": "^2.0.2", + "semver": "^7.3.7", + "walk-up-path": "^1.0.0" + } + }, + "libnpmfund": { + "version": "3.0.5", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/arborist": "^5.6.3" + } + }, + "libnpmhook": { + "version": "8.0.4", + "bundled": true, + "peer": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmorg": { + "version": "4.0.4", + "bundled": true, + "peer": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmpack": { + "version": "4.1.3", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/run-script": "^4.1.3", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1" + } + }, + "libnpmpublish": { + "version": "6.0.5", + "bundled": true, + "peer": true, + "requires": { + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" + } + }, + "libnpmsearch": { + "version": "5.0.4", + "bundled": true, + "peer": true, + "requires": { + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmteam": { + "version": "4.0.4", + "bundled": true, + "peer": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmversion": { + "version": "3.0.7", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^4.1.3", + "json-parse-even-better-errors": "^2.3.1", + "proc-log": "^2.0.0", + "semver": "^7.3.7" + } + }, + "lru-cache": { + "version": "7.13.2", + "bundled": true, + "peer": true + }, + "make-fetch-happen": { + "version": "10.2.1", + "bundled": true, + "peer": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "bundled": true, + "peer": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "3.3.4", + "bundled": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "bundled": true, + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.1", + "bundled": true, + "peer": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "bundled": true, + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "bundled": true, + "peer": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "bundled": true, + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "bundled": true, + "peer": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "bundled": true, + "peer": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "bundled": true, + "peer": true + }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "bundled": true, + "peer": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + } + }, + "ms": { + "version": "2.1.3", + "bundled": true, + "peer": true + }, + "mute-stream": { + "version": "0.0.8", + "bundled": true, + "peer": true + }, + "negotiator": { + "version": "0.6.3", + "bundled": true, + "peer": true + }, + "node-gyp": { + "version": "9.1.0", + "bundled": true, + "peer": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "nopt": { + "version": "5.0.0", + "bundled": true, + "peer": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "nopt": { + "version": "6.0.0", + "bundled": true, + "peer": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "4.0.1", + "bundled": true, + "peer": true, + "requires": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-audit-report": { + "version": "3.0.0", + "bundled": true, + "peer": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "npm-bundled": { + "version": "2.0.1", + "bundled": true, + "peer": true, + "requires": { + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "peer": true + } + } + }, + "npm-install-checks": { + "version": "5.0.0", + "bundled": true, + "peer": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "npm-package-arg": { + "version": "9.1.0", + "bundled": true, + "peer": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + } + }, + "npm-packlist": { + "version": "5.1.3", + "bundled": true, + "peer": true, + "requires": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "peer": true + } + } + }, + "npm-pick-manifest": { + "version": "7.0.2", + "bundled": true, + "peer": true, + "requires": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^2.0.0", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "peer": true + } + } + }, + "npm-profile": { + "version": "6.2.1", + "bundled": true, + "peer": true, + "requires": { + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0" + } + }, + "npm-registry-fetch": { + "version": "13.3.1", + "bundled": true, + "peer": true, + "requires": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "npmlog": { + "version": "6.0.2", + "bundled": true, + "peer": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "peer": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.2", + "bundled": true, + "peer": true + }, + "p-map": { + "version": "4.0.0", + "bundled": true, + "peer": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "pacote": { + "version": "13.6.2", + "bundled": true, + "peer": true, + "requires": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + } + }, + "parse-conflict-json": { + "version": "2.0.2", + "bundled": true, + "peer": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "postcss-selector-parser": { + "version": "6.0.10", + "bundled": true, + "peer": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "proc-log": { + "version": "2.0.1", + "bundled": true, + "peer": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "promise-call-limit": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true, + "peer": true + }, + "promise-retry": { + "version": "2.0.1", + "bundled": true, + "peer": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "peer": true, + "requires": { + "read": "1" + } + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true, + "peer": true + }, + "read": { + "version": "1.0.7", + "bundled": true, + "peer": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "3.0.0", + "bundled": true, + "peer": true + }, + "read-package-json": { + "version": "5.0.2", + "bundled": true, + "peer": true, + "requires": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "peer": true + } + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "bundled": true, + "peer": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "bundled": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "bundled": true, + "peer": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "retry": { + "version": "0.12.0", + "bundled": true, + "peer": true + }, + "rimraf": { + "version": "3.0.2", + "bundled": true, + "peer": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "bundled": true, + "peer": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true, + "peer": true + }, + "semver": { + "version": "7.3.7", + "bundled": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "peer": true + }, + "signal-exit": { + "version": "3.0.7", + "bundled": true, + "peer": true + }, + "smart-buffer": { + "version": "4.2.0", + "bundled": true, + "peer": true + }, + "socks": { + "version": "2.7.0", + "bundled": true, + "peer": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "bundled": true, + "peer": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "spdx-correct": { + "version": "3.1.1", + "bundled": true, + "peer": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "bundled": true, + "peer": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "bundled": true, + "peer": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "bundled": true, + "peer": true + }, + "ssri": { + "version": "9.0.1", + "bundled": true, + "peer": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "peer": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "bundled": true, + "peer": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "bundled": true, + "peer": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "bundled": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tar": { + "version": "6.1.11", + "bundled": true, + "peer": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true, + "peer": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true, + "peer": true + }, + "treeverse": { + "version": "2.0.0", + "bundled": true, + "peer": true + }, + "unique-filename": { + "version": "2.0.1", + "bundled": true, + "peer": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "bundled": true, + "peer": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "peer": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "peer": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "bundled": true, + "peer": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "walk-up-path": { + "version": "1.0.0", + "bundled": true, + "peer": true + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "peer": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "2.0.2", + "bundled": true, + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "bundled": true, + "peer": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "peer": true + }, + "write-file-atomic": { + "version": "4.0.2", + "bundled": true, + "peer": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "yallist": { + "version": "4.0.0", + "bundled": true, + "peer": true + } + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "peer": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "peer": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "peer": true, + "requires": { + "aggregate-error": "^3.0.0" + }, + "dependencies": { + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "peer": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + } + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "peer": true + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "peer": true + }, + "tempy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", + "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", + "peer": true, + "requires": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + } + }, + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "peer": true + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "peer": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + } } }, "semver": { @@ -14800,7 +19875,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz", "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", - "dev": true, "requires": { "is-stream": "^3.0.0", "temp-dir": "^2.0.0", @@ -14811,14 +19885,12 @@ "temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" }, "type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" } } }, @@ -14940,7 +20012,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dev": true, "requires": { "crypto-random-string": "^4.0.0" } @@ -15154,7 +20225,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz", "integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==", - "dev": true, "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" diff --git a/package.json b/package.json index 1e48c71b..679d8fac 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@semantic-release/commit-analyzer": "^9.0.2", "@semantic-release/error": "^3.0.0", "@semantic-release/github": "^8.0.0", - "@semantic-release/npm": "^9.0.0", + "@semantic-release/npm": "^10.0.2", "@semantic-release/release-notes-generator": "^10.0.0", "aggregate-error": "^4.0.1", "cosmiconfig": "^8.0.0", @@ -117,7 +117,8 @@ "trailingComma": "es5" }, "publishConfig": { - "access": "public" + "access": "public", + "provenance": true }, "repository": { "type": "git", @@ -125,8 +126,8 @@ }, "scripts": { "codecov": "codecov -f coverage/coverage-final.json", - "lint": "prettier --check \"*.{js,json,md}\" \".github/**/*.{md,yml}\" \"docs/**/*.md\" \"{bin,lib,test}/*.js\"", - "lint:fix": "prettier --write \"*.{js,json,md}\" \".github/**/*.{md,yml}\" \"docs/**/*.md\" \"{bin,lib,test}/*.js\"", + "lint": "prettier --check \"*.{js,json,md}\" \".github/**/*.{md,yml}\" \"docs/**/*.md\" \"{bin,lib,test}/**/*.js\"", + "lint:fix": "prettier --write \"*.{js,json,md}\" \".github/**/*.{md,yml}\" \"docs/**/*.md\" \"{bin,lib,test}/**/*.js\"", "pretest": "npm run lint", "semantic-release": "./bin/semantic-release.js", "test": "c8 ava --verbose", diff --git a/test/branches/branches.test.js b/test/branches/branches.test.js index 8ec438a6..7bbfb98e 100644 --- a/test/branches/branches.test.js +++ b/test/branches/branches.test.js @@ -1,277 +1,277 @@ -import test from 'ava'; -import {union} from 'lodash-es'; -import semver from 'semver'; -import * as td from 'testdouble'; +import test from "ava"; +import { union } from "lodash-es"; +import semver from "semver"; +import * as td from "testdouble"; -const getBranch = (branches, branch) => branches.find(({name}) => name === branch); -const release = (branches, name, version) => getBranch(branches, name).tags.push({version}); +const getBranch = (branches, branch) => branches.find(({ name }) => name === branch); +const release = (branches, name, version) => getBranch(branches, name).tags.push({ version }); const merge = (branches, source, target, tag) => { getBranch(branches, target).tags = union( - getBranch(branches, source).tags.filter(({version}) => !tag || semver.cmp(version, '<=', tag)), + getBranch(branches, source).tags.filter(({ version }) => !tag || semver.cmp(version, "<=", tag)), getBranch(branches, target).tags ); }; const remoteBranches = []; -const repositoryUrl = 'repositoryUrl'; +const repositoryUrl = "repositoryUrl"; let expand, getTags, getBranches; test.beforeEach(async (t) => { - getTags = (await td.replaceEsm('../../lib/branches/get-tags.js')).default; - expand = (await td.replaceEsm('../../lib/branches/expand.js')).default; - getBranches = (await import('../../lib/branches/index.js')).default; -}) + getTags = (await td.replaceEsm("../../lib/branches/get-tags.js")).default; + expand = (await td.replaceEsm("../../lib/branches/expand.js")).default; + getBranches = (await import("../../lib/branches/index.js")).default; +}); test.afterEach.always((t) => { td.reset(); }); -test.serial('Enforce ranges with branching release workflow', async (t) => { +test.serial("Enforce ranges with branching release workflow", async (t) => { const branches = [ - {name: '1.x', tags: []}, - {name: '1.0.x', tags: []}, - {name: 'master', tags: []}, - {name: 'next', tags: []}, - {name: 'next-major', tags: []}, - {name: 'beta', prerelease: true, tags: []}, - {name: 'alpha', prerelease: true, tags: []}, + { name: "1.x", tags: [] }, + { name: "1.0.x", tags: [] }, + { name: "master", tags: [] }, + { name: "next", tags: [] }, + { name: "next-major", tags: [] }, + { name: "beta", prerelease: true, tags: [] }, + { name: "alpha", prerelease: true, tags: [] }, ]; - const context = {options: {branches}}; + const context = { options: { branches } }; td.when(expand(repositoryUrl, context, branches)).thenResolve(remoteBranches); td.when(getTags(context, remoteBranches)).thenResolve(branches); - let result = (await getBranches(repositoryUrl, 'master', context)).map(({name, range}) => ({name, range,})); - t.is(getBranch(result, '1.0.x').range, '>=1.0.0 <1.0.0', 'Cannot release on 1.0.x before a releasing on master'); - t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.0', 'Cannot release on 1.x before a releasing on master'); - t.is(getBranch(result, 'master').range, '>=1.0.0'); - t.is(getBranch(result, 'next').range, '>=1.0.0'); - t.is(getBranch(result, 'next-major').range, '>=1.0.0'); + let result = (await getBranches(repositoryUrl, "master", context)).map(({ name, range }) => ({ name, range })); + t.is(getBranch(result, "1.0.x").range, ">=1.0.0 <1.0.0", "Cannot release on 1.0.x before a releasing on master"); + t.is(getBranch(result, "1.x").range, ">=1.1.0 <1.0.0", "Cannot release on 1.x before a releasing on master"); + t.is(getBranch(result, "master").range, ">=1.0.0"); + t.is(getBranch(result, "next").range, ">=1.0.0"); + t.is(getBranch(result, "next-major").range, ">=1.0.0"); - release(branches, 'master', '1.0.0'); - result = (await getBranches('repositoryUrl', 'master', context)).map(({name, range}) => ({name, range})); - t.is(getBranch(result, '1.0.x').range, '>=1.0.0 <1.0.0', 'Cannot release on 1.0.x before a releasing on master'); - t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.0', 'Cannot release on 1.x before a releasing on master'); - t.is(getBranch(result, 'master').range, '>=1.0.0'); - t.is(getBranch(result, 'next').range, '>=1.0.0'); - t.is(getBranch(result, 'next-major').range, '>=1.0.0'); + release(branches, "master", "1.0.0"); + result = (await getBranches("repositoryUrl", "master", context)).map(({ name, range }) => ({ name, range })); + t.is(getBranch(result, "1.0.x").range, ">=1.0.0 <1.0.0", "Cannot release on 1.0.x before a releasing on master"); + t.is(getBranch(result, "1.x").range, ">=1.1.0 <1.0.0", "Cannot release on 1.x before a releasing on master"); + t.is(getBranch(result, "master").range, ">=1.0.0"); + t.is(getBranch(result, "next").range, ">=1.0.0"); + t.is(getBranch(result, "next-major").range, ">=1.0.0"); - release(branches, 'master', '1.0.1'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + release(branches, "master", "1.0.1"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=1.0.1', 'Can release only > than 1.0.1 on master'); - t.is(getBranch(result, 'next').range, '>=1.0.1', 'Can release only > than 1.0.1 on next'); - t.is(getBranch(result, 'next-major').range, '>=1.0.1', 'Can release only > than 1.0.1 on next-major'); + t.is(getBranch(result, "master").range, ">=1.0.1", "Can release only > than 1.0.1 on master"); + t.is(getBranch(result, "next").range, ">=1.0.1", "Can release only > than 1.0.1 on next"); + t.is(getBranch(result, "next-major").range, ">=1.0.1", "Can release only > than 1.0.1 on next-major"); - merge(branches, 'master', 'next'); - merge(branches, 'master', 'next-major'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + merge(branches, "master", "next"); + merge(branches, "master", "next-major"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=1.0.1', 'Can release only > than 1.0.1 on master'); - t.is(getBranch(result, 'next').range, '>=1.0.1', 'Can release only > than 1.0.1 on next'); - t.is(getBranch(result, 'next-major').range, '>=1.0.1', 'Can release only > than 1.0.1 on next-major'); + t.is(getBranch(result, "master").range, ">=1.0.1", "Can release only > than 1.0.1 on master"); + t.is(getBranch(result, "next").range, ">=1.0.1", "Can release only > than 1.0.1 on next"); + t.is(getBranch(result, "next-major").range, ">=1.0.1", "Can release only > than 1.0.1 on next-major"); - release(branches, 'next', '1.1.0'); - release(branches, 'next', '1.1.1'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + release(branches, "next", "1.1.0"); + release(branches, "next", "1.1.1"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=1.0.1 <1.1.0', 'Can release only patch, > than 1.0.1 on master'); - t.is(getBranch(result, 'next').range, '>=1.1.1', 'Can release only > than 1.1.1 on next'); - t.is(getBranch(result, 'next-major').range, '>=1.1.1', 'Can release > than 1.1.1 on next-major'); + t.is(getBranch(result, "master").range, ">=1.0.1 <1.1.0", "Can release only patch, > than 1.0.1 on master"); + t.is(getBranch(result, "next").range, ">=1.1.1", "Can release only > than 1.1.1 on next"); + t.is(getBranch(result, "next-major").range, ">=1.1.1", "Can release > than 1.1.1 on next-major"); - release(branches, 'next-major', '2.0.0'); - release(branches, 'next-major', '2.0.1'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + release(branches, "next-major", "2.0.0"); + release(branches, "next-major", "2.0.1"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=1.0.1 <1.1.0', 'Can release only patch, > than 1.0.1 on master'); - t.is(getBranch(result, 'next').range, '>=1.1.1 <2.0.0', 'Can release only patch or minor, > than 1.1.0 on next'); - t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major'); + t.is(getBranch(result, "master").range, ">=1.0.1 <1.1.0", "Can release only patch, > than 1.0.1 on master"); + t.is(getBranch(result, "next").range, ">=1.1.1 <2.0.0", "Can release only patch or minor, > than 1.1.0 on next"); + t.is(getBranch(result, "next-major").range, ">=2.0.1", "Can release any version, > than 2.0.1 on next-major"); - merge(branches, 'next-major', 'beta'); - release(branches, 'beta', '3.0.0-beta.1'); - merge(branches, 'beta', 'alpha'); - release(branches, 'alpha', '4.0.0-alpha.1'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + merge(branches, "next-major", "beta"); + release(branches, "beta", "3.0.0-beta.1"); + merge(branches, "beta", "alpha"); + release(branches, "alpha", "4.0.0-alpha.1"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major'); + t.is(getBranch(result, "next-major").range, ">=2.0.1", "Can release any version, > than 2.0.1 on next-major"); - merge(branches, 'master', '1.0.x'); - merge(branches, 'master', '1.x'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + merge(branches, "master", "1.0.x"); + merge(branches, "master", "1.x"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=1.0.1 <1.1.0', 'Can release only patch, > than 1.0.1 on master'); + t.is(getBranch(result, "master").range, ">=1.0.1 <1.1.0", "Can release only patch, > than 1.0.1 on master"); t.is( - getBranch(result, '1.0.x').range, - '>=1.0.1 <1.0.1', - 'Cannot release on 1.0.x before >= 1.1.0 is released on master' + getBranch(result, "1.0.x").range, + ">=1.0.1 <1.0.1", + "Cannot release on 1.0.x before >= 1.1.0 is released on master" ); - t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.1', 'Cannot release on 1.x before >= 1.2.0 is released on master'); + t.is(getBranch(result, "1.x").range, ">=1.1.0 <1.0.1", "Cannot release on 1.x before >= 1.2.0 is released on master"); - release(branches, 'master', '1.0.2'); - release(branches, 'master', '1.0.3'); - release(branches, 'master', '1.0.4'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + release(branches, "master", "1.0.2"); + release(branches, "master", "1.0.3"); + release(branches, "master", "1.0.4"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=1.0.4 <1.1.0', 'Can release only patch, > than 1.0.4 on master'); + t.is(getBranch(result, "master").range, ">=1.0.4 <1.1.0", "Can release only patch, > than 1.0.4 on master"); t.is( - getBranch(result, '1.0.x').range, - '>=1.0.1 <1.0.2', - 'Cannot release on 1.0.x before >= 1.1.0 is released on master' + getBranch(result, "1.0.x").range, + ">=1.0.1 <1.0.2", + "Cannot release on 1.0.x before >= 1.1.0 is released on master" ); - t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.2', 'Cannot release on 1.x before >= 1.2.0 is released on master'); + t.is(getBranch(result, "1.x").range, ">=1.1.0 <1.0.2", "Cannot release on 1.x before >= 1.2.0 is released on master"); - merge(branches, 'next', 'master'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + merge(branches, "next", "master"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=1.1.1', 'Can release only > than 1.1.1 on master'); - t.is(getBranch(result, 'next').range, '>=1.1.1 <2.0.0', 'Can release only patch or minor, > than 1.1.1 on next'); - t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major'); + t.is(getBranch(result, "master").range, ">=1.1.1", "Can release only > than 1.1.1 on master"); + t.is(getBranch(result, "next").range, ">=1.1.1 <2.0.0", "Can release only patch or minor, > than 1.1.1 on next"); + t.is(getBranch(result, "next-major").range, ">=2.0.1", "Can release any version, > than 2.0.1 on next-major"); t.is( - getBranch(result, '1.0.x').range, - '>=1.0.1 <1.0.2', - 'Cannot release on 1.0.x before 1.0.x version from master are merged' + getBranch(result, "1.0.x").range, + ">=1.0.1 <1.0.2", + "Cannot release on 1.0.x before 1.0.x version from master are merged" ); - t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.2', 'Cannot release on 1.x before >= 2.0.0 is released on master'); + t.is(getBranch(result, "1.x").range, ">=1.1.0 <1.0.2", "Cannot release on 1.x before >= 2.0.0 is released on master"); - merge(branches, 'master', '1.0.x', '1.0.4'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + merge(branches, "master", "1.0.x", "1.0.4"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=1.1.1', 'Can release only > than 1.1.1 on master'); - t.is(getBranch(result, '1.0.x').range, '>=1.0.4 <1.1.0', 'Can release on 1.0.x only within range'); - t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.1.0', 'Cannot release on 1.x before >= 2.0.0 is released on master'); + t.is(getBranch(result, "master").range, ">=1.1.1", "Can release only > than 1.1.1 on master"); + t.is(getBranch(result, "1.0.x").range, ">=1.0.4 <1.1.0", "Can release on 1.0.x only within range"); + t.is(getBranch(result, "1.x").range, ">=1.1.0 <1.1.0", "Cannot release on 1.x before >= 2.0.0 is released on master"); - merge(branches, 'master', '1.x'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + merge(branches, "master", "1.x"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=1.1.1', 'Can release only > than 1.1.1 on master'); - t.is(getBranch(result, '1.0.x').range, '>=1.0.4 <1.1.0', 'Can release on 1.0.x only within range'); - t.is(getBranch(result, '1.x').range, '>=1.1.1 <1.1.1', 'Cannot release on 1.x before >= 2.0.0 is released on master'); + t.is(getBranch(result, "master").range, ">=1.1.1", "Can release only > than 1.1.1 on master"); + t.is(getBranch(result, "1.0.x").range, ">=1.0.4 <1.1.0", "Can release on 1.0.x only within range"); + t.is(getBranch(result, "1.x").range, ">=1.1.1 <1.1.1", "Cannot release on 1.x before >= 2.0.0 is released on master"); - merge(branches, 'next-major', 'next'); - merge(branches, 'next', 'master'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + merge(branches, "next-major", "next"); + merge(branches, "next", "master"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=2.0.1', 'Can release only > than 2.0.1 on master'); - t.is(getBranch(result, 'next').range, '>=2.0.1', 'Can release only > than 2.0.1 on next'); - t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release only > than 2.0.1 on next-major'); - t.is(getBranch(result, '1.x').range, '>=1.1.1 <2.0.0', 'Can release on 1.x only within range'); + t.is(getBranch(result, "master").range, ">=2.0.1", "Can release only > than 2.0.1 on master"); + t.is(getBranch(result, "next").range, ">=2.0.1", "Can release only > than 2.0.1 on next"); + t.is(getBranch(result, "next-major").range, ">=2.0.1", "Can release only > than 2.0.1 on next-major"); + t.is(getBranch(result, "1.x").range, ">=1.1.1 <2.0.0", "Can release on 1.x only within range"); - merge(branches, 'beta', 'master'); - release(branches, 'master', '3.0.0'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + merge(branches, "beta", "master"); + release(branches, "master", "3.0.0"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, 'master').range, '>=3.0.0', 'Can release only > than 3.0.0 on master'); - t.is(getBranch(result, 'next').range, '>=3.0.0', 'Can release only > than 3.0.0 on next'); - t.is(getBranch(result, 'next-major').range, '>=3.0.0', 'Can release only > than 3.0.0 on next-major'); + t.is(getBranch(result, "master").range, ">=3.0.0", "Can release only > than 3.0.0 on master"); + t.is(getBranch(result, "next").range, ">=3.0.0", "Can release only > than 3.0.0 on next"); + t.is(getBranch(result, "next-major").range, ">=3.0.0", "Can release only > than 3.0.0 on next-major"); - branches.push({name: '1.1.x', tags: []}); - merge(branches, '1.x', '1.1.x'); - result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({ + branches.push({ name: "1.1.x", tags: [] }); + merge(branches, "1.x", "1.1.x"); + result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({ name, range, })); - t.is(getBranch(result, '1.0.x').range, '>=1.0.4 <1.1.0', 'Can release on 1.0.x only within range'); - t.is(getBranch(result, '1.1.x').range, '>=1.1.1 <1.2.0', 'Can release on 1.1.x only within range'); - t.is(getBranch(result, '1.x').range, '>=1.2.0 <2.0.0', 'Can release on 1.x only within range'); + t.is(getBranch(result, "1.0.x").range, ">=1.0.4 <1.1.0", "Can release on 1.0.x only within range"); + t.is(getBranch(result, "1.1.x").range, ">=1.1.1 <1.2.0", "Can release on 1.1.x only within range"); + t.is(getBranch(result, "1.x").range, ">=1.2.0 <2.0.0", "Can release on 1.x only within range"); }); -test.serial('Throw SemanticReleaseError for invalid configurations', async (t) => { +test.serial("Throw SemanticReleaseError for invalid configurations", async (t) => { const branches = [ - {name: '123', range: '123', tags: []}, - {name: '1.x', tags: []}, - {name: 'maintenance-1', range: '1.x', tags: []}, - {name: '1.x.x', tags: []}, - {name: 'beta', prerelease: '', tags: []}, - {name: 'alpha', prerelease: 'alpha', tags: []}, - {name: 'preview', prerelease: 'alpha', tags: []}, + { name: "123", range: "123", tags: [] }, + { name: "1.x", tags: [] }, + { name: "maintenance-1", range: "1.x", tags: [] }, + { name: "1.x.x", tags: [] }, + { name: "beta", prerelease: "", tags: [] }, + { name: "alpha", prerelease: "alpha", tags: [] }, + { name: "preview", prerelease: "alpha", tags: [] }, ]; - const context = {options: {branches}}; + const context = { options: { branches } }; td.when(expand(repositoryUrl, context, branches)).thenResolve(remoteBranches); td.when(getTags(context, remoteBranches)).thenResolve(branches); - const error = await t.throwsAsync(getBranches(repositoryUrl, 'master', context)); + const error = await t.throwsAsync(getBranches(repositoryUrl, "master", context)); const errors = [...error.errors]; - t.is(errors[0].name, 'SemanticReleaseError'); - t.is(errors[0].code, 'EMAINTENANCEBRANCH'); + t.is(errors[0].name, "SemanticReleaseError"); + t.is(errors[0].code, "EMAINTENANCEBRANCH"); t.truthy(errors[0].message); t.truthy(errors[0].details); - t.is(errors[1].name, 'SemanticReleaseError'); - t.is(errors[1].code, 'EMAINTENANCEBRANCHES'); + t.is(errors[1].name, "SemanticReleaseError"); + t.is(errors[1].code, "EMAINTENANCEBRANCHES"); t.truthy(errors[1].message); t.truthy(errors[1].details); - t.is(errors[2].name, 'SemanticReleaseError'); - t.is(errors[2].code, 'EPRERELEASEBRANCH'); + t.is(errors[2].name, "SemanticReleaseError"); + t.is(errors[2].code, "EPRERELEASEBRANCH"); t.truthy(errors[2].message); t.truthy(errors[2].details); - t.is(errors[3].name, 'SemanticReleaseError'); - t.is(errors[3].code, 'EPRERELEASEBRANCHES'); + t.is(errors[3].name, "SemanticReleaseError"); + t.is(errors[3].code, "EPRERELEASEBRANCHES"); t.truthy(errors[3].message); t.truthy(errors[3].details); - t.is(errors[4].name, 'SemanticReleaseError'); - t.is(errors[4].code, 'ERELEASEBRANCHES'); + t.is(errors[4].name, "SemanticReleaseError"); + t.is(errors[4].code, "ERELEASEBRANCHES"); t.truthy(errors[4].message); t.truthy(errors[4].details); }); -test.serial('Throw a SemanticReleaseError if there is duplicate branches', async (t) => { +test.serial("Throw a SemanticReleaseError if there is duplicate branches", async (t) => { const branches = [ - {name: 'master', tags: []}, - {name: 'master', tags: []}, + { name: "master", tags: [] }, + { name: "master", tags: [] }, ]; - const context = {options: {branches}}; + const context = { options: { branches } }; td.when(expand(repositoryUrl, context, branches)).thenResolve(remoteBranches); td.when(getTags(context, remoteBranches)).thenResolve(branches); - const errors = [...(await t.throwsAsync(getBranches(repositoryUrl, 'master', context))).errors]; + const errors = [...(await t.throwsAsync(getBranches(repositoryUrl, "master", context))).errors]; - t.is(errors[0].name, 'SemanticReleaseError'); - t.is(errors[0].code, 'EDUPLICATEBRANCHES'); + t.is(errors[0].name, "SemanticReleaseError"); + t.is(errors[0].code, "EDUPLICATEBRANCHES"); t.truthy(errors[0].message); t.truthy(errors[0].details); }); -test.serial('Throw a SemanticReleaseError for each invalid branch name', async (t) => { +test.serial("Throw a SemanticReleaseError for each invalid branch name", async (t) => { const branches = [ - {name: '~master', tags: []}, - {name: '^master', tags: []}, + { name: "~master", tags: [] }, + { name: "^master", tags: [] }, ]; - const context = {options: {branches}}; + const context = { options: { branches } }; const remoteBranches = []; td.when(expand(repositoryUrl, context, branches)).thenResolve(remoteBranches); td.when(getTags(context, remoteBranches)).thenResolve(branches); - const errors = [...(await t.throwsAsync(getBranches(repositoryUrl, 'master', context))).errors]; + const errors = [...(await t.throwsAsync(getBranches(repositoryUrl, "master", context))).errors]; - t.is(errors[0].name, 'SemanticReleaseError'); - t.is(errors[0].code, 'EINVALIDBRANCHNAME'); + t.is(errors[0].name, "SemanticReleaseError"); + t.is(errors[0].code, "EINVALIDBRANCHNAME"); t.truthy(errors[0].message); t.truthy(errors[0].details); - t.is(errors[1].name, 'SemanticReleaseError'); - t.is(errors[1].code, 'EINVALIDBRANCHNAME'); + t.is(errors[1].name, "SemanticReleaseError"); + t.is(errors[1].code, "EINVALIDBRANCHNAME"); t.truthy(errors[1].message); t.truthy(errors[1].details); }); diff --git a/test/branches/expand.test.js b/test/branches/expand.test.js index 75acde35..1df0c37d 100644 --- a/test/branches/expand.test.js +++ b/test/branches/expand.test.js @@ -1,54 +1,54 @@ -import test from 'ava'; -import expand from '../../lib/branches/expand.js'; -import {gitCheckout, gitCommits, gitPush, gitRepo} from '../helpers/git-utils.js'; +import test from "ava"; +import expand from "../../lib/branches/expand.js"; +import { gitCheckout, gitCommits, gitPush, gitRepo } from "../helpers/git-utils.js"; -test('Expand branches defined with globs', async (t) => { - const {cwd, repositoryUrl} = await gitRepo(true); - await gitCommits(['First'], {cwd}); - await gitPush(repositoryUrl, 'master', {cwd}); - await gitCheckout('1.0.x', true, {cwd}); - await gitCommits(['Second'], {cwd}); - await gitPush(repositoryUrl, '1.0.x', {cwd}); - await gitCheckout('1.x.x', true, {cwd}); - await gitCommits(['Third'], {cwd}); - await gitPush(repositoryUrl, '1.x.x', {cwd}); - await gitCheckout('2.x', true, {cwd}); - await gitCommits(['Fourth'], {cwd}); - await gitPush(repositoryUrl, '2.x', {cwd}); - await gitCheckout('next', true, {cwd}); - await gitCommits(['Fifth'], {cwd}); - await gitPush(repositoryUrl, 'next', {cwd}); - await gitCheckout('pre/foo', true, {cwd}); - await gitCommits(['Sixth'], {cwd}); - await gitPush(repositoryUrl, 'pre/foo', {cwd}); - await gitCheckout('pre/bar', true, {cwd}); - await gitCommits(['Seventh'], {cwd}); - await gitPush(repositoryUrl, 'pre/bar', {cwd}); - await gitCheckout('beta', true, {cwd}); - await gitCommits(['Eighth'], {cwd}); - await gitPush(repositoryUrl, 'beta', {cwd}); +test("Expand branches defined with globs", async (t) => { + const { cwd, repositoryUrl } = await gitRepo(true); + await gitCommits(["First"], { cwd }); + await gitPush(repositoryUrl, "master", { cwd }); + await gitCheckout("1.0.x", true, { cwd }); + await gitCommits(["Second"], { cwd }); + await gitPush(repositoryUrl, "1.0.x", { cwd }); + await gitCheckout("1.x.x", true, { cwd }); + await gitCommits(["Third"], { cwd }); + await gitPush(repositoryUrl, "1.x.x", { cwd }); + await gitCheckout("2.x", true, { cwd }); + await gitCommits(["Fourth"], { cwd }); + await gitPush(repositoryUrl, "2.x", { cwd }); + await gitCheckout("next", true, { cwd }); + await gitCommits(["Fifth"], { cwd }); + await gitPush(repositoryUrl, "next", { cwd }); + await gitCheckout("pre/foo", true, { cwd }); + await gitCommits(["Sixth"], { cwd }); + await gitPush(repositoryUrl, "pre/foo", { cwd }); + await gitCheckout("pre/bar", true, { cwd }); + await gitCommits(["Seventh"], { cwd }); + await gitPush(repositoryUrl, "pre/bar", { cwd }); + await gitCheckout("beta", true, { cwd }); + await gitCommits(["Eighth"], { cwd }); + await gitPush(repositoryUrl, "beta", { cwd }); const branches = [ // Should match all maintenance type branches - {name: '+([0-9])?(.{+([0-9]),x}).x'}, - {name: 'master', channel: 'latest'}, - {name: 'next'}, - {name: 'pre/{foo,bar}', channel: `\${name.replace(/^pre\\//g, '')}`, prerelease: true}, + { name: "+([0-9])?(.{+([0-9]),x}).x" }, + { name: "master", channel: "latest" }, + { name: "next" }, + { name: "pre/{foo,bar}", channel: `\${name.replace(/^pre\\//g, '')}`, prerelease: true }, // Should be ignored as there is no matching branches in the repo - {name: 'missing'}, + { name: "missing" }, // Should be ignored as the matching branch in the repo is already matched by `/^pre\\/(\\w+)$/gi` - {name: '*/foo', channel: 'foo', prerelease: 'foo'}, - {name: 'beta', channel: `channel-\${name}`, prerelease: true}, + { name: "*/foo", channel: "foo", prerelease: "foo" }, + { name: "beta", channel: `channel-\${name}`, prerelease: true }, ]; - t.deepEqual(await expand(repositoryUrl, {cwd}, branches), [ - {name: '1.0.x'}, - {name: '1.x.x'}, - {name: '2.x'}, - {name: 'master', channel: 'latest'}, - {name: 'next'}, - {name: 'pre/bar', channel: 'bar', prerelease: true}, - {name: 'pre/foo', channel: 'foo', prerelease: true}, - {name: 'beta', channel: 'channel-beta', prerelease: true}, + t.deepEqual(await expand(repositoryUrl, { cwd }, branches), [ + { name: "1.0.x" }, + { name: "1.x.x" }, + { name: "2.x" }, + { name: "master", channel: "latest" }, + { name: "next" }, + { name: "pre/bar", channel: "bar", prerelease: true }, + { name: "pre/foo", channel: "foo", prerelease: true }, + { name: "beta", channel: "channel-beta", prerelease: true }, ]); }); diff --git a/test/branches/get-tags.test.js b/test/branches/get-tags.test.js index 9ef318d0..3ec04dff 100644 --- a/test/branches/get-tags.test.js +++ b/test/branches/get-tags.test.js @@ -1,153 +1,156 @@ -import test from 'ava'; -import getTags from '../../lib/branches/get-tags.js'; -import {gitAddNote, gitCheckout, gitCommits, gitRepo, gitTagVersion} from '../helpers/git-utils.js'; +import test from "ava"; +import getTags from "../../lib/branches/get-tags.js"; +import { gitAddNote, gitCheckout, gitCommits, gitRepo, gitTagVersion } from "../helpers/git-utils.js"; -test('Get the valid tags', async (t) => { - const {cwd} = await gitRepo(); - const commits = await gitCommits(['First'], {cwd}); - await gitTagVersion('foo', undefined, {cwd}); - await gitTagVersion('v2.0.0', undefined, {cwd}); - commits.push(...(await gitCommits(['Second'], {cwd}))); - await gitTagVersion('v1.0.0', undefined, {cwd}); - commits.push(...(await gitCommits(['Third'], {cwd}))); - await gitTagVersion('v3.0', undefined, {cwd}); - commits.push(...(await gitCommits(['Fourth'], {cwd}))); - await gitTagVersion('v3.0.0-beta.1', undefined, {cwd}); +test("Get the valid tags", async (t) => { + const { cwd } = await gitRepo(); + const commits = await gitCommits(["First"], { cwd }); + await gitTagVersion("foo", undefined, { cwd }); + await gitTagVersion("v2.0.0", undefined, { cwd }); + commits.push(...(await gitCommits(["Second"], { cwd }))); + await gitTagVersion("v1.0.0", undefined, { cwd }); + commits.push(...(await gitCommits(["Third"], { cwd }))); + await gitTagVersion("v3.0", undefined, { cwd }); + commits.push(...(await gitCommits(["Fourth"], { cwd }))); + await gitTagVersion("v3.0.0-beta.1", undefined, { cwd }); - const result = await getTags({cwd, options: {tagFormat: `v\${version}`}}, [{name: 'master'}]); + const result = await getTags({ cwd, options: { tagFormat: `v\${version}` } }, [{ name: "master" }]); t.deepEqual(result, [ { - name: 'master', + name: "master", tags: [ - {gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}, - {gitTag: 'v2.0.0', version: '2.0.0', channels: [null]}, - {gitTag: 'v3.0.0-beta.1', version: '3.0.0-beta.1', channels: [null]}, + { gitTag: "v1.0.0", version: "1.0.0", channels: [null] }, + { gitTag: "v2.0.0", version: "2.0.0", channels: [null] }, + { gitTag: "v3.0.0-beta.1", version: "3.0.0-beta.1", channels: [null] }, ], }, ]); }); -test('Get the valid tags from multiple branches', async (t) => { - const {cwd} = await gitRepo(); - await gitCommits(['First'], {cwd}); - await gitTagVersion('v1.0.0', undefined, {cwd}); - await gitAddNote(JSON.stringify({channels: [null, '1.x']}), 'v1.0.0', {cwd}); - await gitCommits(['Second'], {cwd}); - await gitTagVersion('v1.1.0', undefined, {cwd}); - await gitAddNote(JSON.stringify({channels: [null, '1.x']}), 'v1.1.0', {cwd}); - await gitCheckout('1.x', true, {cwd}); - await gitCheckout('master', false, {cwd}); - await gitCommits(['Third'], {cwd}); - await gitTagVersion('v2.0.0', undefined, {cwd}); - await gitAddNote(JSON.stringify({channels: [null, 'next']}), 'v2.0.0', {cwd}); - await gitCheckout('next', true, {cwd}); - await gitCommits(['Fourth'], {cwd}); - await gitTagVersion('v3.0.0', undefined, {cwd}); - await gitAddNote(JSON.stringify({channels: ['next']}), 'v3.0.0', {cwd}); +test("Get the valid tags from multiple branches", async (t) => { + const { cwd } = await gitRepo(); + await gitCommits(["First"], { cwd }); + await gitTagVersion("v1.0.0", undefined, { cwd }); + await gitAddNote(JSON.stringify({ channels: [null, "1.x"] }), "v1.0.0", { cwd }); + await gitCommits(["Second"], { cwd }); + await gitTagVersion("v1.1.0", undefined, { cwd }); + await gitAddNote(JSON.stringify({ channels: [null, "1.x"] }), "v1.1.0", { cwd }); + await gitCheckout("1.x", true, { cwd }); + await gitCheckout("master", false, { cwd }); + await gitCommits(["Third"], { cwd }); + await gitTagVersion("v2.0.0", undefined, { cwd }); + await gitAddNote(JSON.stringify({ channels: [null, "next"] }), "v2.0.0", { cwd }); + await gitCheckout("next", true, { cwd }); + await gitCommits(["Fourth"], { cwd }); + await gitTagVersion("v3.0.0", undefined, { cwd }); + await gitAddNote(JSON.stringify({ channels: ["next"] }), "v3.0.0", { cwd }); - const result = await getTags({cwd, options: {tagFormat: `v\${version}`}}, [ - {name: '1.x'}, - {name: 'master'}, - {name: 'next'}, + const result = await getTags({ cwd, options: { tagFormat: `v\${version}` } }, [ + { name: "1.x" }, + { name: "master" }, + { name: "next" }, ]); t.deepEqual(result, [ { - name: '1.x', + name: "1.x", tags: [ - {gitTag: 'v1.0.0', version: '1.0.0', channels: [null, '1.x']}, - {gitTag: 'v1.1.0', version: '1.1.0', channels: [null, '1.x']}, + { gitTag: "v1.0.0", version: "1.0.0", channels: [null, "1.x"] }, + { gitTag: "v1.1.0", version: "1.1.0", channels: [null, "1.x"] }, ], }, { - name: 'master', - tags: [...result[0].tags, {gitTag: 'v2.0.0', version: '2.0.0', channels: [null, 'next']}], + name: "master", + tags: [...result[0].tags, { gitTag: "v2.0.0", version: "2.0.0", channels: [null, "next"] }], }, { - name: 'next', - tags: [...result[1].tags, {gitTag: 'v3.0.0', version: '3.0.0', channels: ['next']}], + name: "next", + tags: [...result[1].tags, { gitTag: "v3.0.0", version: "3.0.0", channels: ["next"] }], }, ]); }); -test('Return branches with and empty tags array if no valid tag is found', async (t) => { - const {cwd} = await gitRepo(); - await gitCommits(['First'], {cwd}); - await gitTagVersion('foo', undefined, {cwd}); - await gitCommits(['Second'], {cwd}); - await gitTagVersion('v2.0.x', undefined, {cwd}); - await gitCommits(['Third'], {cwd}); - await gitTagVersion('v3.0', undefined, {cwd}); +test("Return branches with and empty tags array if no valid tag is found", async (t) => { + const { cwd } = await gitRepo(); + await gitCommits(["First"], { cwd }); + await gitTagVersion("foo", undefined, { cwd }); + await gitCommits(["Second"], { cwd }); + await gitTagVersion("v2.0.x", undefined, { cwd }); + await gitCommits(["Third"], { cwd }); + await gitTagVersion("v3.0", undefined, { cwd }); - const result = await getTags({cwd, options: {tagFormat: `prefix@v\${version}`}}, [{name: 'master'}]); + const result = await getTags({ cwd, options: { tagFormat: `prefix@v\${version}` } }, [{ name: "master" }]); - t.deepEqual(result, [{name: 'master', tags: []}]); + t.deepEqual(result, [{ name: "master", tags: [] }]); }); -test('Return branches with and empty tags array if no valid tag is found in history of configured branches', async (t) => { - const {cwd} = await gitRepo(); - await gitCommits(['First'], {cwd}); - await gitCheckout('next', true, {cwd}); - await gitCommits(['Second'], {cwd}); - await gitTagVersion('v1.0.0', undefined, {cwd}); - await gitAddNote(JSON.stringify({channels: [null, 'next']}), 'v1.0.0', {cwd}); - await gitCommits(['Third'], {cwd}); - await gitTagVersion('v2.0.0', undefined, {cwd}); - await gitAddNote(JSON.stringify({channels: [null, 'next']}), 'v2.0.0', {cwd}); - await gitCommits(['Fourth'], {cwd}); - await gitTagVersion('v3.0.0', undefined, {cwd}); - await gitAddNote(JSON.stringify({channels: [null, 'next']}), 'v3.0.0', {cwd}); - await gitCheckout('master', false, {cwd}); +test("Return branches with and empty tags array if no valid tag is found in history of configured branches", async (t) => { + const { cwd } = await gitRepo(); + await gitCommits(["First"], { cwd }); + await gitCheckout("next", true, { cwd }); + await gitCommits(["Second"], { cwd }); + await gitTagVersion("v1.0.0", undefined, { cwd }); + await gitAddNote(JSON.stringify({ channels: [null, "next"] }), "v1.0.0", { cwd }); + await gitCommits(["Third"], { cwd }); + await gitTagVersion("v2.0.0", undefined, { cwd }); + await gitAddNote(JSON.stringify({ channels: [null, "next"] }), "v2.0.0", { cwd }); + await gitCommits(["Fourth"], { cwd }); + await gitTagVersion("v3.0.0", undefined, { cwd }); + await gitAddNote(JSON.stringify({ channels: [null, "next"] }), "v3.0.0", { cwd }); + await gitCheckout("master", false, { cwd }); - const result = await getTags({cwd, options: {tagFormat: `prefix@v\${version}`}}, [{name: 'master'}, {name: 'next'}]); + const result = await getTags({ cwd, options: { tagFormat: `prefix@v\${version}` } }, [ + { name: "master" }, + { name: "next" }, + ]); t.deepEqual(result, [ - {name: 'master', tags: []}, - {name: 'next', tags: []}, + { name: "master", tags: [] }, + { name: "next", tags: [] }, ]); }); test('Get the highest valid tag corresponding to the "tagFormat"', async (t) => { - const {cwd} = await gitRepo(); - await gitCommits(['First'], {cwd}); + const { cwd } = await gitRepo(); + await gitCommits(["First"], { cwd }); - await gitTagVersion('1.0.0', undefined, {cwd}); - t.deepEqual(await getTags({cwd, options: {tagFormat: `\${version}`}}, [{name: 'master'}]), [ - {name: 'master', tags: [{gitTag: '1.0.0', version: '1.0.0', channels: [null]}]}, + await gitTagVersion("1.0.0", undefined, { cwd }); + t.deepEqual(await getTags({ cwd, options: { tagFormat: `\${version}` } }, [{ name: "master" }]), [ + { name: "master", tags: [{ gitTag: "1.0.0", version: "1.0.0", channels: [null] }] }, ]); - await gitTagVersion('foo-1.0.0-bar', undefined, {cwd}); - t.deepEqual(await getTags({cwd, options: {tagFormat: `foo-\${version}-bar`}}, [{name: 'master'}]), [ - {name: 'master', tags: [{gitTag: 'foo-1.0.0-bar', version: '1.0.0', channels: [null]}]}, + await gitTagVersion("foo-1.0.0-bar", undefined, { cwd }); + t.deepEqual(await getTags({ cwd, options: { tagFormat: `foo-\${version}-bar` } }, [{ name: "master" }]), [ + { name: "master", tags: [{ gitTag: "foo-1.0.0-bar", version: "1.0.0", channels: [null] }] }, ]); - await gitTagVersion('foo-v1.0.0-bar', undefined, {cwd}); - t.deepEqual(await getTags({cwd, options: {tagFormat: `foo-v\${version}-bar`}}, [{name: 'master'}]), [ + await gitTagVersion("foo-v1.0.0-bar", undefined, { cwd }); + t.deepEqual(await getTags({ cwd, options: { tagFormat: `foo-v\${version}-bar` } }, [{ name: "master" }]), [ { - name: 'master', - tags: [{gitTag: 'foo-v1.0.0-bar', version: '1.0.0', channels: [null]}], + name: "master", + tags: [{ gitTag: "foo-v1.0.0-bar", version: "1.0.0", channels: [null] }], }, ]); - await gitTagVersion('(.+)/1.0.0/(a-z)', undefined, {cwd}); - t.deepEqual(await getTags({cwd, options: {tagFormat: `(.+)/\${version}/(a-z)`}}, [{name: 'master'}]), [ + await gitTagVersion("(.+)/1.0.0/(a-z)", undefined, { cwd }); + t.deepEqual(await getTags({ cwd, options: { tagFormat: `(.+)/\${version}/(a-z)` } }, [{ name: "master" }]), [ { - name: 'master', - tags: [{gitTag: '(.+)/1.0.0/(a-z)', version: '1.0.0', channels: [null]}], + name: "master", + tags: [{ gitTag: "(.+)/1.0.0/(a-z)", version: "1.0.0", channels: [null] }], }, ]); - await gitTagVersion('2.0.0-1.0.0-bar.1', undefined, {cwd}); - t.deepEqual(await getTags({cwd, options: {tagFormat: `2.0.0-\${version}-bar.1`}}, [{name: 'master'}]), [ + await gitTagVersion("2.0.0-1.0.0-bar.1", undefined, { cwd }); + t.deepEqual(await getTags({ cwd, options: { tagFormat: `2.0.0-\${version}-bar.1` } }, [{ name: "master" }]), [ { - name: 'master', - tags: [{gitTag: '2.0.0-1.0.0-bar.1', version: '1.0.0', channels: [null]}], + name: "master", + tags: [{ gitTag: "2.0.0-1.0.0-bar.1", version: "1.0.0", channels: [null] }], }, ]); - await gitTagVersion('3.0.0-bar.2', undefined, {cwd}); - t.deepEqual(await getTags({cwd, options: {tagFormat: `\${version}-bar.2`}}, [{name: 'master'}]), [ - {name: 'master', tags: [{gitTag: '3.0.0-bar.2', version: '3.0.0', channels: [null]}]}, + await gitTagVersion("3.0.0-bar.2", undefined, { cwd }); + t.deepEqual(await getTags({ cwd, options: { tagFormat: `\${version}-bar.2` } }, [{ name: "master" }]), [ + { name: "master", tags: [{ gitTag: "3.0.0-bar.2", version: "3.0.0", channels: [null] }] }, ]); }); diff --git a/test/branches/normalize.test.js b/test/branches/normalize.test.js index 43badf2f..d033310d 100644 --- a/test/branches/normalize.test.js +++ b/test/branches/normalize.test.js @@ -1,17 +1,17 @@ -import test from 'ava'; -import * as normalize from '../../lib/branches/normalize.js'; +import test from "ava"; +import * as normalize from "../../lib/branches/normalize.js"; -const toTags = (versions) => versions.map((version) => ({version})); +const toTags = (versions) => versions.map((version) => ({ version })); -test('Maintenance branches - initial state', (t) => { +test("Maintenance branches - initial state", (t) => { const maintenance = [ - {name: '1.x', channel: '1.x', tags: []}, - {name: '1.1.x', tags: []}, - {name: '1.2.x', tags: []}, + { name: "1.x", channel: "1.x", tags: [] }, + { name: "1.1.x", tags: [] }, + { name: "1.2.x", tags: [] }, ]; - const release = [{name: 'master', tags: []}]; + const release = [{ name: "master", tags: [] }]; t.deepEqual( - normalize.maintenance({maintenance, release}).map(({type, name, range, accept, channel, mergeRange}) => ({ + normalize.maintenance({ maintenance, release }).map(({ type, name, range, accept, channel, mergeRange }) => ({ type, name, range, @@ -21,51 +21,51 @@ test('Maintenance branches - initial state', (t) => { })), [ { - type: 'maintenance', - name: '1.1.x', - range: '>=1.1.0 <1.0.0', + type: "maintenance", + name: "1.1.x", + range: ">=1.1.0 <1.0.0", accept: [], - channel: '1.1.x', - mergeRange: '>=1.1.0 <1.2.0', + channel: "1.1.x", + mergeRange: ">=1.1.0 <1.2.0", }, { - type: 'maintenance', - name: '1.2.x', - range: '>=1.2.0 <1.0.0', + type: "maintenance", + name: "1.2.x", + range: ">=1.2.0 <1.0.0", accept: [], - channel: '1.2.x', - mergeRange: '>=1.2.0 <1.3.0', + channel: "1.2.x", + mergeRange: ">=1.2.0 <1.3.0", }, { - type: 'maintenance', - name: '1.x', - range: '>=1.3.0 <1.0.0', + type: "maintenance", + name: "1.x", + range: ">=1.3.0 <1.0.0", accept: [], - channel: '1.x', - mergeRange: '>=1.3.0 <2.0.0', + channel: "1.x", + mergeRange: ">=1.3.0 <2.0.0", }, ] ); }); -test('Maintenance branches - cap range to first release present on default branch and not in any Maintenance one', (t) => { +test("Maintenance branches - cap range to first release present on default branch and not in any Maintenance one", (t) => { const maintenance = [ - {name: '1.x', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '1.2.1', '1.3.0', '1.4.0', '1.5.0'])}, - {name: 'name', range: '1.1.x', tags: toTags(['1.0.0', '1.0.1', '1.1.0', '1.1.1'])}, - {name: '1.2.x', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '1.2.1'])}, - {name: '2.x.x', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '1.2.1', '1.5.0'])}, + { name: "1.x", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.2.1", "1.3.0", "1.4.0", "1.5.0"]) }, + { name: "name", range: "1.1.x", tags: toTags(["1.0.0", "1.0.1", "1.1.0", "1.1.1"]) }, + { name: "1.2.x", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.2.1"]) }, + { name: "2.x.x", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.2.1", "1.5.0"]) }, ]; const release = [ { - name: 'master', - tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '1.2.1', '1.3.0', '1.4.0', '1.5.0', '1.6.0', '2.0.0']), + name: "master", + tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.2.1", "1.3.0", "1.4.0", "1.5.0", "1.6.0", "2.0.0"]), }, ]; t.deepEqual( normalize - .maintenance({maintenance, release}) - .map(({type, name, range, accept, channel, mergeRange: maintenanceRange}) => ({ + .maintenance({ maintenance, release }) + .map(({ type, name, range, accept, channel, mergeRange: maintenanceRange }) => ({ type, name, range, @@ -75,50 +75,50 @@ test('Maintenance branches - cap range to first release present on default branc })), [ { - type: 'maintenance', - name: 'name', - range: '>=1.1.1 <1.2.0', - accept: ['patch'], - channel: 'name', - mergeRange: '>=1.1.0 <1.2.0', + type: "maintenance", + name: "name", + range: ">=1.1.1 <1.2.0", + accept: ["patch"], + channel: "name", + mergeRange: ">=1.1.0 <1.2.0", }, { - type: 'maintenance', - name: '1.2.x', - range: '>=1.2.1 <1.3.0', - accept: ['patch'], - channel: '1.2.x', - mergeRange: '>=1.2.0 <1.3.0', + type: "maintenance", + name: "1.2.x", + range: ">=1.2.1 <1.3.0", + accept: ["patch"], + channel: "1.2.x", + mergeRange: ">=1.2.0 <1.3.0", }, { - type: 'maintenance', - name: '1.x', - range: '>=1.5.0 <1.6.0', - accept: ['patch'], - channel: '1.x', - mergeRange: '>=1.3.0 <2.0.0', + type: "maintenance", + name: "1.x", + range: ">=1.5.0 <1.6.0", + accept: ["patch"], + channel: "1.x", + mergeRange: ">=1.3.0 <2.0.0", }, { - type: 'maintenance', - name: '2.x.x', - range: '>=2.0.0 <1.6.0', + type: "maintenance", + name: "2.x.x", + range: ">=2.0.0 <1.6.0", accept: [], - channel: '2.x.x', - mergeRange: '>=2.0.0 <3.0.0', + channel: "2.x.x", + mergeRange: ">=2.0.0 <3.0.0", }, ] ); }); -test('Maintenance branches - cap range to default branch last release if all release are also present on maintenance branch', (t) => { +test("Maintenance branches - cap range to default branch last release if all release are also present on maintenance branch", (t) => { const maintenance = [ - {name: '1.x', tags: toTags(['1.0.0', '1.2.0', '1.3.0'])}, - {name: '2.x.x', tags: toTags(['1.0.0', '1.2.0', '1.3.0', '2.0.0'])}, + { name: "1.x", tags: toTags(["1.0.0", "1.2.0", "1.3.0"]) }, + { name: "2.x.x", tags: toTags(["1.0.0", "1.2.0", "1.3.0", "2.0.0"]) }, ]; - const release = [{name: 'master', tags: toTags(['1.0.0', '1.2.0', '1.3.0', '2.0.0'])}]; + const release = [{ name: "master", tags: toTags(["1.0.0", "1.2.0", "1.3.0", "2.0.0"]) }]; t.deepEqual( - normalize.maintenance({maintenance, release}).map(({type, name, range, accept, channel, mergeRange}) => ({ + normalize.maintenance({ maintenance, release }).map(({ type, name, range, accept, channel, mergeRange }) => ({ type, name, range, @@ -128,270 +128,272 @@ test('Maintenance branches - cap range to default branch last release if all rel })), [ { - type: 'maintenance', - name: '1.x', - range: '>=1.3.0 <2.0.0', - accept: ['patch', 'minor'], - channel: '1.x', - mergeRange: '>=1.0.0 <2.0.0', + type: "maintenance", + name: "1.x", + range: ">=1.3.0 <2.0.0", + accept: ["patch", "minor"], + channel: "1.x", + mergeRange: ">=1.0.0 <2.0.0", }, { - type: 'maintenance', - name: '2.x.x', - range: '>=2.0.0 <2.0.0', + type: "maintenance", + name: "2.x.x", + range: ">=2.0.0 <2.0.0", accept: [], - channel: '2.x.x', - mergeRange: '>=2.0.0 <3.0.0', + channel: "2.x.x", + mergeRange: ">=2.0.0 <3.0.0", }, ] ); }); -test('Release branches - initial state', (t) => { +test("Release branches - initial state", (t) => { const release = [ - {name: 'master', tags: []}, - {name: 'next', channel: 'next', tags: []}, - {name: 'next-major', tags: []}, + { name: "master", tags: [] }, + { name: "next", channel: "next", tags: [] }, + { name: "next-major", tags: [] }, ]; t.deepEqual( normalize - .release({release}) - .map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})), + .release({ release }) + .map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })), [ { - type: 'release', - name: 'master', - range: '>=1.0.0', - accept: ['patch', 'minor', 'major'], + type: "release", + name: "master", + range: ">=1.0.0", + accept: ["patch", "minor", "major"], channel: undefined, main: true, }, { - type: 'release', - name: 'next', - range: '>=1.0.0', - accept: ['patch', 'minor', 'major'], - channel: 'next', + type: "release", + name: "next", + range: ">=1.0.0", + accept: ["patch", "minor", "major"], + channel: "next", main: false, }, { - type: 'release', - name: 'next-major', - range: '>=1.0.0', - accept: ['patch', 'minor', 'major'], - channel: 'next-major', + type: "release", + name: "next-major", + range: ">=1.0.0", + accept: ["patch", "minor", "major"], + channel: "next-major", main: false, }, ] ); }); -test('Release branches - 3 release branches', (t) => { +test("Release branches - 3 release branches", (t) => { const release = [ - {name: 'master', tags: toTags(['1.0.0', '1.0.1', '1.0.2'])}, - {name: 'next', tags: toTags(['1.0.0', '1.0.1', '1.0.2', '1.1.0', '1.2.0'])}, - {name: 'next-major', tags: toTags(['1.0.0', '1.0.1', '1.0.2', '1.1.0', '1.2.0', '2.0.0', '2.0.1', '2.1.0'])}, + { name: "master", tags: toTags(["1.0.0", "1.0.1", "1.0.2"]) }, + { name: "next", tags: toTags(["1.0.0", "1.0.1", "1.0.2", "1.1.0", "1.2.0"]) }, + { name: "next-major", tags: toTags(["1.0.0", "1.0.1", "1.0.2", "1.1.0", "1.2.0", "2.0.0", "2.0.1", "2.1.0"]) }, ]; t.deepEqual( normalize - .release({release}) - .map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})), + .release({ release }) + .map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })), [ - {type: 'release', name: 'master', range: '>=1.0.2 <1.1.0', accept: ['patch'], channel: undefined, main: true}, + { type: "release", name: "master", range: ">=1.0.2 <1.1.0", accept: ["patch"], channel: undefined, main: true }, { - type: 'release', - name: 'next', - range: '>=1.2.0 <2.0.0', - accept: ['patch', 'minor'], - channel: 'next', + type: "release", + name: "next", + range: ">=1.2.0 <2.0.0", + accept: ["patch", "minor"], + channel: "next", main: false, }, { - type: 'release', - name: 'next-major', - range: '>=2.1.0', - accept: ['patch', 'minor', 'major'], - channel: 'next-major', + type: "release", + name: "next-major", + range: ">=2.1.0", + accept: ["patch", "minor", "major"], + channel: "next-major", main: false, }, ] ); }); -test('Release branches - 2 release branches', (t) => { +test("Release branches - 2 release branches", (t) => { const release = [ - {name: 'master', tags: toTags(['1.0.0', '1.0.1', '1.1.0', '1.1.1', '1.2.0'])}, - {name: 'next', tags: toTags(['1.0.0', '1.0.1', '1.1.0', '1.1.1', '1.2.0', '2.0.0', '2.0.1', '2.1.0'])}, + { name: "master", tags: toTags(["1.0.0", "1.0.1", "1.1.0", "1.1.1", "1.2.0"]) }, + { name: "next", tags: toTags(["1.0.0", "1.0.1", "1.1.0", "1.1.1", "1.2.0", "2.0.0", "2.0.1", "2.1.0"]) }, ]; t.deepEqual( normalize - .release({release}) - .map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})), + .release({ release }) + .map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })), [ { - type: 'release', - name: 'master', - range: '>=1.2.0 <2.0.0', - accept: ['patch', 'minor'], + type: "release", + name: "master", + range: ">=1.2.0 <2.0.0", + accept: ["patch", "minor"], channel: undefined, main: true, }, { - type: 'release', - name: 'next', - range: '>=2.1.0', - accept: ['patch', 'minor', 'major'], - channel: 'next', + type: "release", + name: "next", + range: ">=2.1.0", + accept: ["patch", "minor", "major"], + channel: "next", main: false, }, ] ); }); -test('Release branches - 1 release branches', (t) => { - const release = [{name: 'master', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0'])}]; +test("Release branches - 1 release branches", (t) => { + const release = [{ name: "master", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0"]) }]; t.deepEqual( - normalize.release({release}).map(({type, name, range, accept, channel}) => ({type, name, range, accept, channel})), - [{type: 'release', name: 'master', range: '>=1.2.0', accept: ['patch', 'minor', 'major'], channel: undefined}] + normalize + .release({ release }) + .map(({ type, name, range, accept, channel }) => ({ type, name, range, accept, channel })), + [{ type: "release", name: "master", range: ">=1.2.0", accept: ["patch", "minor", "major"], channel: undefined }] ); }); -test('Release branches - cap ranges to first release only present on following branch', (t) => { +test("Release branches - cap ranges to first release only present on following branch", (t) => { const release = [ - {name: 'master', tags: toTags(['1.0.0', '1.1.0', '1.2.0', '2.0.0'])}, - {name: 'next', tags: toTags(['1.0.0', '1.1.0', '1.2.0', '2.0.0', '2.1.0'])}, - {name: 'next-major', tags: toTags(['1.0.0', '1.1.0', '1.2.0', '2.0.0', '2.1.0', '2.2.0'])}, + { name: "master", tags: toTags(["1.0.0", "1.1.0", "1.2.0", "2.0.0"]) }, + { name: "next", tags: toTags(["1.0.0", "1.1.0", "1.2.0", "2.0.0", "2.1.0"]) }, + { name: "next-major", tags: toTags(["1.0.0", "1.1.0", "1.2.0", "2.0.0", "2.1.0", "2.2.0"]) }, ]; t.deepEqual( normalize - .release({release}) - .map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})), + .release({ release }) + .map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })), [ - {type: 'release', name: 'master', range: '>=2.0.0 <2.1.0', accept: ['patch'], channel: undefined, main: true}, - {type: 'release', name: 'next', range: '>=2.1.0 <2.2.0', accept: ['patch'], channel: 'next', main: false}, + { type: "release", name: "master", range: ">=2.0.0 <2.1.0", accept: ["patch"], channel: undefined, main: true }, + { type: "release", name: "next", range: ">=2.1.0 <2.2.0", accept: ["patch"], channel: "next", main: false }, { - type: 'release', - name: 'next-major', - range: '>=2.2.0', - accept: ['patch', 'minor', 'major'], - channel: 'next-major', + type: "release", + name: "next-major", + range: ">=2.2.0", + accept: ["patch", "minor", "major"], + channel: "next-major", main: false, }, ] ); }); -test('Release branches - Handle missing previous tags in branch history', (t) => { +test("Release branches - Handle missing previous tags in branch history", (t) => { const release = [ - {name: 'master', tags: toTags(['1.0.0', '2.0.0'])}, - {name: 'next', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '2.0.0'])}, + { name: "master", tags: toTags(["1.0.0", "2.0.0"]) }, + { name: "next", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "2.0.0"]) }, ]; t.deepEqual( normalize - .release({release}) - .map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})), + .release({ release }) + .map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })), [ { - type: 'release', - name: 'master', - range: '>=2.0.0', - accept: ['patch', 'minor', 'major'], + type: "release", + name: "master", + range: ">=2.0.0", + accept: ["patch", "minor", "major"], channel: undefined, main: true, }, { - type: 'release', - name: 'next', - range: '>=2.0.0', - accept: ['patch', 'minor', 'major'], - channel: 'next', + type: "release", + name: "next", + range: ">=2.0.0", + accept: ["patch", "minor", "major"], + channel: "next", main: false, }, ] ); }); -test('Release branches - limit releases on 2nd and 3rd branch based on 1st branch last release', (t) => { +test("Release branches - limit releases on 2nd and 3rd branch based on 1st branch last release", (t) => { const release = [ - {name: 'master', tags: toTags(['1.0.0', '1.1.0', '2.0.0', '3.0.0'])}, - {name: 'next', tags: toTags(['1.0.0', '1.1.0'])}, - {name: 'next-major', tags: toTags(['1.0.0', '1.1.0', '2.0.0'])}, + { name: "master", tags: toTags(["1.0.0", "1.1.0", "2.0.0", "3.0.0"]) }, + { name: "next", tags: toTags(["1.0.0", "1.1.0"]) }, + { name: "next-major", tags: toTags(["1.0.0", "1.1.0", "2.0.0"]) }, ]; t.deepEqual( normalize - .release({release}) - .map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})), + .release({ release }) + .map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })), [ { - type: 'release', - name: 'master', - range: '>=3.0.0', - accept: ['patch', 'minor', 'major'], + type: "release", + name: "master", + range: ">=3.0.0", + accept: ["patch", "minor", "major"], channel: undefined, main: true, }, { - type: 'release', - name: 'next', - range: '>=3.0.0', - accept: ['patch', 'minor', 'major'], - channel: 'next', + type: "release", + name: "next", + range: ">=3.0.0", + accept: ["patch", "minor", "major"], + channel: "next", main: false, }, { - type: 'release', - name: 'next-major', - range: '>=3.0.0', - accept: ['patch', 'minor', 'major'], - channel: 'next-major', + type: "release", + name: "next-major", + range: ">=3.0.0", + accept: ["patch", "minor", "major"], + channel: "next-major", main: false, }, ] ); }); -test('Prerelease branches', (t) => { +test("Prerelease branches", (t) => { const prerelease = [ - {name: 'beta', channel: 'beta', prerelease: true, tags: []}, - {name: 'alpha', prerelease: 'preview', tags: []}, + { name: "beta", channel: "beta", prerelease: true, tags: [] }, + { name: "alpha", prerelease: "preview", tags: [] }, ]; t.deepEqual( - normalize.prerelease({prerelease}).map(({type, name, channel}) => ({type, name, channel})), + normalize.prerelease({ prerelease }).map(({ type, name, channel }) => ({ type, name, channel })), [ - {type: 'prerelease', name: 'beta', channel: 'beta'}, - {type: 'prerelease', name: 'alpha', channel: 'alpha'}, + { type: "prerelease", name: "beta", channel: "beta" }, + { type: "prerelease", name: "alpha", channel: "alpha" }, ] ); }); test('Allow to set channel to "false" to prevent default', (t) => { - const maintenance = [{name: '1.x', channel: false, tags: []}]; + const maintenance = [{ name: "1.x", channel: false, tags: [] }]; const release = [ - {name: 'master', channel: false, tags: []}, - {name: 'next', channel: false, tags: []}, + { name: "master", channel: false, tags: [] }, + { name: "next", channel: false, tags: [] }, ]; - const prerelease = [{name: 'beta', channel: false, prerelease: true, tags: []}]; + const prerelease = [{ name: "beta", channel: false, prerelease: true, tags: [] }]; t.deepEqual( - normalize.maintenance({maintenance, release}).map(({name, channel}) => ({name, channel})), - [{name: '1.x', channel: false}] + normalize.maintenance({ maintenance, release }).map(({ name, channel }) => ({ name, channel })), + [{ name: "1.x", channel: false }] ); t.deepEqual( - normalize.release({release}).map(({name, channel}) => ({name, channel})), + normalize.release({ release }).map(({ name, channel }) => ({ name, channel })), [ - {name: 'master', channel: false}, - {name: 'next', channel: false}, + { name: "master", channel: false }, + { name: "next", channel: false }, ] ); t.deepEqual( - normalize.prerelease({prerelease}).map(({name, channel}) => ({name, channel})), - [{name: 'beta', channel: false}] + normalize.prerelease({ prerelease }).map(({ name, channel }) => ({ name, channel })), + [{ name: "beta", channel: false }] ); }); diff --git a/test/definitions/branches.test.js b/test/definitions/branches.test.js index 6ccce3bc..9da4bd25 100644 --- a/test/definitions/branches.test.js +++ b/test/definitions/branches.test.js @@ -1,92 +1,94 @@ -import test from 'ava'; -import {maintenance, prerelease, release} from '../../lib/definitions/branches.js'; +import test from "ava"; +import { maintenance, prerelease, release } from "../../lib/definitions/branches.js"; test('A "maintenance" branch is identified by having a "range" property or a "name" formatted like "N.x", "N.x.x" or "N.N.x"', (t) => { /* eslint-disable unicorn/no-fn-reference-in-iterator */ - t.true(maintenance.filter({name: '1.x.x'})); - t.true(maintenance.filter({name: '1.0.x'})); - t.true(maintenance.filter({name: '1.x'})); - t.true(maintenance.filter({name: 'some-name', range: '1.x.x'})); - t.true(maintenance.filter({name: 'some-name', range: '1.1.x'})); - t.true(maintenance.filter({name: 'some-name', range: ''})); - t.true(maintenance.filter({name: 'some-name', range: true})); + t.true(maintenance.filter({ name: "1.x.x" })); + t.true(maintenance.filter({ name: "1.0.x" })); + t.true(maintenance.filter({ name: "1.x" })); + t.true(maintenance.filter({ name: "some-name", range: "1.x.x" })); + t.true(maintenance.filter({ name: "some-name", range: "1.1.x" })); + t.true(maintenance.filter({ name: "some-name", range: "" })); + t.true(maintenance.filter({ name: "some-name", range: true })); - t.false(maintenance.filter({name: 'some-name', range: null})); - t.false(maintenance.filter({name: 'some-name', range: false})); - t.false(maintenance.filter({name: 'some-name'})); - t.false(maintenance.filter({name: '1.0.0'})); - t.false(maintenance.filter({name: 'x.x.x'})); + t.false(maintenance.filter({ name: "some-name", range: null })); + t.false(maintenance.filter({ name: "some-name", range: false })); + t.false(maintenance.filter({ name: "some-name" })); + t.false(maintenance.filter({ name: "1.0.0" })); + t.false(maintenance.filter({ name: "x.x.x" })); /* eslint-enable unicorn/no-fn-reference-in-iterator */ }); test('A "maintenance" branches must have a "range" property formatted like "N.x", "N.x.x" or "N.N.x"', (t) => { - t.true(maintenance.branchValidator({name: 'some-name', range: '1.x.x'})); - t.true(maintenance.branchValidator({name: 'some-name', range: '1.1.x'})); + t.true(maintenance.branchValidator({ name: "some-name", range: "1.x.x" })); + t.true(maintenance.branchValidator({ name: "some-name", range: "1.1.x" })); - t.false(maintenance.branchValidator({name: 'some-name', range: '^1.0.0'})); - t.false(maintenance.branchValidator({name: 'some-name', range: '>=1.0.0 <2.0.0'})); - t.false(maintenance.branchValidator({name: 'some-name', range: '1.0.0'})); - t.false(maintenance.branchValidator({name: 'some-name', range: 'wrong-range'})); - t.false(maintenance.branchValidator({name: 'some-name', range: true})); - t.false(maintenance.branchValidator({name: 'some-name', range: ''})); + t.false(maintenance.branchValidator({ name: "some-name", range: "^1.0.0" })); + t.false(maintenance.branchValidator({ name: "some-name", range: ">=1.0.0 <2.0.0" })); + t.false(maintenance.branchValidator({ name: "some-name", range: "1.0.0" })); + t.false(maintenance.branchValidator({ name: "some-name", range: "wrong-range" })); + t.false(maintenance.branchValidator({ name: "some-name", range: true })); + t.false(maintenance.branchValidator({ name: "some-name", range: "" })); }); test('The "maintenance" branches must have unique ranges', (t) => { - t.true(maintenance.branchesValidator([{range: '1.x.x'}, {range: '1.0.x'}])); + t.true(maintenance.branchesValidator([{ range: "1.x.x" }, { range: "1.0.x" }])); - t.false(maintenance.branchesValidator([{range: '1.x.x'}, {range: '1.x.x'}])); - t.false(maintenance.branchesValidator([{range: '1.x.x'}, {range: '1.x'}])); + t.false(maintenance.branchesValidator([{ range: "1.x.x" }, { range: "1.x.x" }])); + t.false(maintenance.branchesValidator([{ range: "1.x.x" }, { range: "1.x" }])); }); test('A "prerelease" branch is identified by having a thruthy "prerelease" property', (t) => { /* eslint-disable unicorn/no-fn-reference-in-iterator */ - t.true(prerelease.filter({name: 'some-name', prerelease: true})); - t.true(prerelease.filter({name: 'some-name', prerelease: 'beta'})); - t.true(prerelease.filter({name: 'some-name', prerelease: ''})); + t.true(prerelease.filter({ name: "some-name", prerelease: true })); + t.true(prerelease.filter({ name: "some-name", prerelease: "beta" })); + t.true(prerelease.filter({ name: "some-name", prerelease: "" })); - t.false(prerelease.filter({name: 'some-name', prerelease: null})); - t.false(prerelease.filter({name: 'some-name', prerelease: false})); - t.false(prerelease.filter({name: 'some-name'})); + t.false(prerelease.filter({ name: "some-name", prerelease: null })); + t.false(prerelease.filter({ name: "some-name", prerelease: false })); + t.false(prerelease.filter({ name: "some-name" })); /* eslint-enable unicorn/no-fn-reference-in-iterator */ }); test('A "prerelease" branch must have a valid prerelease detonation in "prerelease" property or in "name" if "prerelease" is "true"', (t) => { - t.true(prerelease.branchValidator({name: 'beta', prerelease: true})); - t.true(prerelease.branchValidator({name: 'some-name', prerelease: 'beta'})); + t.true(prerelease.branchValidator({ name: "beta", prerelease: true })); + t.true(prerelease.branchValidator({ name: "some-name", prerelease: "beta" })); - t.false(prerelease.branchValidator({name: 'some-name', prerelease: ''})); - t.false(prerelease.branchValidator({name: 'some-name', prerelease: null})); - t.false(prerelease.branchValidator({name: 'some-name', prerelease: false})); - t.false(prerelease.branchValidator({name: 'some-name', prerelease: '000'})); - t.false(prerelease.branchValidator({name: 'some-name', prerelease: '#beta'})); - t.false(prerelease.branchValidator({name: '000', prerelease: true})); - t.false(prerelease.branchValidator({name: '#beta', prerelease: true})); + t.false(prerelease.branchValidator({ name: "some-name", prerelease: "" })); + t.false(prerelease.branchValidator({ name: "some-name", prerelease: null })); + t.false(prerelease.branchValidator({ name: "some-name", prerelease: false })); + t.false(prerelease.branchValidator({ name: "some-name", prerelease: "000" })); + t.false(prerelease.branchValidator({ name: "some-name", prerelease: "#beta" })); + t.false(prerelease.branchValidator({ name: "000", prerelease: true })); + t.false(prerelease.branchValidator({ name: "#beta", prerelease: true })); }); test('The "prerelease" branches must have unique "prerelease" property', (t) => { - t.true(prerelease.branchesValidator([{prerelease: 'beta'}, {prerelease: 'alpha'}])); + t.true(prerelease.branchesValidator([{ prerelease: "beta" }, { prerelease: "alpha" }])); - t.false(prerelease.branchesValidator([{range: 'beta'}, {range: 'beta'}, {range: 'alpha'}])); + t.false(prerelease.branchesValidator([{ range: "beta" }, { range: "beta" }, { range: "alpha" }])); }); test('A "release" branch is identified by not havin a "range" or "prerelease" property or a "name" formatted like "N.x", "N.x.x" or "N.N.x"', (t) => { /* eslint-disable unicorn/no-fn-reference-in-iterator */ - t.true(release.filter({name: 'some-name'})); + t.true(release.filter({ name: "some-name" })); - t.false(release.filter({name: '1.x.x'})); - t.false(release.filter({name: '1.0.x'})); - t.false(release.filter({name: 'some-name', range: '1.x.x'})); - t.false(release.filter({name: 'some-name', range: '1.1.x'})); - t.false(release.filter({name: 'some-name', prerelease: true})); - t.false(release.filter({name: 'some-name', prerelease: 'beta'})); + t.false(release.filter({ name: "1.x.x" })); + t.false(release.filter({ name: "1.0.x" })); + t.false(release.filter({ name: "some-name", range: "1.x.x" })); + t.false(release.filter({ name: "some-name", range: "1.1.x" })); + t.false(release.filter({ name: "some-name", prerelease: true })); + t.false(release.filter({ name: "some-name", prerelease: "beta" })); /* eslint-enable unicorn/no-fn-reference-in-iterator */ }); -test('There must be between 1 and 3 release branches', (t) => { - t.true(release.branchesValidator([{name: 'branch1'}])); - t.true(release.branchesValidator([{name: 'branch1'}, {name: 'branch2'}])); - t.true(release.branchesValidator([{name: 'branch1'}, {name: 'branch2'}, {name: 'branch3'}])); +test("There must be between 1 and 3 release branches", (t) => { + t.true(release.branchesValidator([{ name: "branch1" }])); + t.true(release.branchesValidator([{ name: "branch1" }, { name: "branch2" }])); + t.true(release.branchesValidator([{ name: "branch1" }, { name: "branch2" }, { name: "branch3" }])); t.false(release.branchesValidator([])); - t.false(release.branchesValidator([{name: 'branch1'}, {name: 'branch2'}, {name: 'branch3'}, {name: 'branch4'}])); + t.false( + release.branchesValidator([{ name: "branch1" }, { name: "branch2" }, { name: "branch3" }, { name: "branch4" }]) + ); }); diff --git a/test/definitions/plugins.test.js b/test/definitions/plugins.test.js index ec50137e..532787d8 100644 --- a/test/definitions/plugins.test.js +++ b/test/definitions/plugins.test.js @@ -1,15 +1,15 @@ -import test from 'ava'; -import plugins from '../../lib/definitions/plugins.js'; -import {RELEASE_NOTES_SEPARATOR, SECRET_REPLACEMENT} from '../../lib/definitions/constants.js'; +import test from "ava"; +import plugins from "../../lib/definitions/plugins.js"; +import { RELEASE_NOTES_SEPARATOR, SECRET_REPLACEMENT } from "../../lib/definitions/constants.js"; test('The "analyzeCommits" plugin output must be either undefined or a valid semver release type', (t) => { - t.false(plugins.analyzeCommits.outputValidator('invalid')); + t.false(plugins.analyzeCommits.outputValidator("invalid")); t.false(plugins.analyzeCommits.outputValidator(1)); t.false(plugins.analyzeCommits.outputValidator({})); t.true(plugins.analyzeCommits.outputValidator()); t.true(plugins.analyzeCommits.outputValidator(null)); - t.true(plugins.analyzeCommits.outputValidator('major')); + t.true(plugins.analyzeCommits.outputValidator("major")); }); test('The "generateNotes" plugin output, if defined, must be a string', (t) => { @@ -18,57 +18,57 @@ test('The "generateNotes" plugin output, if defined, must be a string', (t) => { t.true(plugins.generateNotes.outputValidator()); t.true(plugins.generateNotes.outputValidator(null)); - t.true(plugins.generateNotes.outputValidator('')); - t.true(plugins.generateNotes.outputValidator('string')); + t.true(plugins.generateNotes.outputValidator("")); + t.true(plugins.generateNotes.outputValidator("string")); }); test('The "publish" plugin output, if defined, must be an object or "false"', (t) => { t.false(plugins.publish.outputValidator(1)); - t.false(plugins.publish.outputValidator('string')); + t.false(plugins.publish.outputValidator("string")); t.true(plugins.publish.outputValidator({})); t.true(plugins.publish.outputValidator()); t.true(plugins.publish.outputValidator(null)); - t.true(plugins.publish.outputValidator('')); + t.true(plugins.publish.outputValidator("")); t.true(plugins.publish.outputValidator(false)); }); test('The "addChannel" plugin output, if defined, must be an object', (t) => { t.false(plugins.addChannel.outputValidator(1)); - t.false(plugins.addChannel.outputValidator('string')); + t.false(plugins.addChannel.outputValidator("string")); t.true(plugins.addChannel.outputValidator({})); t.true(plugins.addChannel.outputValidator()); t.true(plugins.addChannel.outputValidator(null)); - t.true(plugins.addChannel.outputValidator('')); + t.true(plugins.addChannel.outputValidator("")); }); test('The "generateNotes" plugins output are concatenated with separator and sensitive data is hidden', (t) => { - const env = {MY_TOKEN: 'secret token'}; - t.is(plugins.generateNotes.postprocess(['note 1', 'note 2'], {env}), `note 1${RELEASE_NOTES_SEPARATOR}note 2`); - t.is(plugins.generateNotes.postprocess(['', 'note'], {env}), 'note'); - t.is(plugins.generateNotes.postprocess([undefined, 'note'], {env}), 'note'); - t.is(plugins.generateNotes.postprocess(['note 1', '', 'note 2'], {env}), `note 1${RELEASE_NOTES_SEPARATOR}note 2`); + const env = { MY_TOKEN: "secret token" }; + t.is(plugins.generateNotes.postprocess(["note 1", "note 2"], { env }), `note 1${RELEASE_NOTES_SEPARATOR}note 2`); + t.is(plugins.generateNotes.postprocess(["", "note"], { env }), "note"); + t.is(plugins.generateNotes.postprocess([undefined, "note"], { env }), "note"); + t.is(plugins.generateNotes.postprocess(["note 1", "", "note 2"], { env }), `note 1${RELEASE_NOTES_SEPARATOR}note 2`); t.is( - plugins.generateNotes.postprocess(['note 1', undefined, 'note 2'], {env}), + plugins.generateNotes.postprocess(["note 1", undefined, "note 2"], { env }), `note 1${RELEASE_NOTES_SEPARATOR}note 2` ); t.is( plugins.generateNotes.postprocess( [`Note 1: Exposing token ${env.MY_TOKEN}`, `Note 2: Exposing token ${SECRET_REPLACEMENT}`], - {env} + { env } ), `Note 1: Exposing token ${SECRET_REPLACEMENT}${RELEASE_NOTES_SEPARATOR}Note 2: Exposing token ${SECRET_REPLACEMENT}` ); }); test('The "analyzeCommits" plugins output are reduced to the highest release type', (t) => { - t.is(plugins.analyzeCommits.postprocess(['major', 'minor']), 'major'); - t.is(plugins.analyzeCommits.postprocess(['', 'minor']), 'minor'); - t.is(plugins.analyzeCommits.postprocess([undefined, 'patch']), 'patch'); - t.is(plugins.analyzeCommits.postprocess([null, 'patch']), 'patch'); - t.is(plugins.analyzeCommits.postprocess(['wrong_type', 'minor']), 'minor'); + t.is(plugins.analyzeCommits.postprocess(["major", "minor"]), "major"); + t.is(plugins.analyzeCommits.postprocess(["", "minor"]), "minor"); + t.is(plugins.analyzeCommits.postprocess([undefined, "patch"]), "patch"); + t.is(plugins.analyzeCommits.postprocess([null, "patch"]), "patch"); + t.is(plugins.analyzeCommits.postprocess(["wrong_type", "minor"]), "minor"); t.is(plugins.analyzeCommits.postprocess([]), undefined); - t.is(plugins.analyzeCommits.postprocess(['wrong_type']), undefined); + t.is(plugins.analyzeCommits.postprocess(["wrong_type"]), undefined); }); diff --git a/test/fixtures/index.js b/test/fixtures/index.js index ead516c9..2d1ec238 100644 --- a/test/fixtures/index.js +++ b/test/fixtures/index.js @@ -1 +1 @@ -export default () => {} +export default () => {}; diff --git a/test/fixtures/plugin-error-inherited.js b/test/fixtures/plugin-error-inherited.js index fd6e6110..10940bb7 100644 --- a/test/fixtures/plugin-error-inherited.js +++ b/test/fixtures/plugin-error-inherited.js @@ -1,4 +1,4 @@ -import SemanticReleaseError from '@semantic-release/error'; +import SemanticReleaseError from "@semantic-release/error"; class InheritedError extends SemanticReleaseError { constructor(message, code) { @@ -10,5 +10,5 @@ class InheritedError extends SemanticReleaseError { } export default () => { - throw new InheritedError('Inherited error', 'EINHERITED'); -} + throw new InheritedError("Inherited error", "EINHERITED"); +}; diff --git a/test/fixtures/plugin-error.js b/test/fixtures/plugin-error.js index a9a3f1b4..645adfd4 100644 --- a/test/fixtures/plugin-error.js +++ b/test/fixtures/plugin-error.js @@ -1,5 +1,5 @@ export default () => { - const error = new Error('a'); - error.errorProperty = 'errorProperty'; + const error = new Error("a"); + error.errorProperty = "errorProperty"; throw error; -} +}; diff --git a/test/fixtures/plugin-errors.js b/test/fixtures/plugin-errors.js index 0c5f269a..575695e7 100644 --- a/test/fixtures/plugin-errors.js +++ b/test/fixtures/plugin-errors.js @@ -1,5 +1,5 @@ -import AggregateError from 'aggregate-error'; +import AggregateError from "aggregate-error"; export default () => { - throw new AggregateError([new Error('a'), new Error('b')]); -} + throw new AggregateError([new Error("a"), new Error("b")]); +}; diff --git a/test/fixtures/plugin-identity.js b/test/fixtures/plugin-identity.js index 8452a404..643340e6 100644 --- a/test/fixtures/plugin-identity.js +++ b/test/fixtures/plugin-identity.js @@ -1 +1 @@ -export default (pluginConfig, context) => context +export default (pluginConfig, context) => context; diff --git a/test/fixtures/plugin-log-env.js b/test/fixtures/plugin-log-env.js index d965a0a2..032fe9c2 100644 --- a/test/fixtures/plugin-log-env.js +++ b/test/fixtures/plugin-log-env.js @@ -1,6 +1,6 @@ -export default (pluginConfig, {env, logger}) => { +export default (pluginConfig, { env, logger }) => { console.log(`Console: Exposing token ${env.MY_TOKEN}`); logger.log(`Log: Exposing token ${env.MY_TOKEN}`); logger.error(`Error: Console token ${env.MY_TOKEN}`); throw new Error(`Throw error: Exposing ${env.MY_TOKEN}`); -} +}; diff --git a/test/fixtures/plugin-result-config.js b/test/fixtures/plugin-result-config.js index 9caabd16..0d4e568a 100644 --- a/test/fixtures/plugin-result-config.js +++ b/test/fixtures/plugin-result-config.js @@ -1 +1 @@ -export default (pluginConfig, context) => ({pluginConfig, context}) +export default (pluginConfig, context) => ({ pluginConfig, context }); diff --git a/test/helpers/git-utils.js b/test/helpers/git-utils.js index de8af1d1..becd4ed7 100644 --- a/test/helpers/git-utils.js +++ b/test/helpers/git-utils.js @@ -1,10 +1,10 @@ -import {temporaryDirectory} from 'tempy'; -import {execa} from 'execa'; -import fileUrl from 'file-url'; -import pEachSeries from 'p-each-series'; -import gitLogParser from 'git-log-parser'; -import getStream from 'get-stream'; -import {GIT_NOTE_REF} from '../../lib/definitions/constants.js'; +import { temporaryDirectory } from "tempy"; +import { execa } from "execa"; +import fileUrl from "file-url"; +import pEachSeries from "p-each-series"; +import gitLogParser from "git-log-parser"; +import getStream from "get-stream"; +import { GIT_NOTE_REF } from "../../lib/definitions/constants.js"; /** * Commit message information. @@ -25,14 +25,14 @@ import {GIT_NOTE_REF} from '../../lib/definitions/constants.js'; */ export async function initGit(withRemote) { const cwd = temporaryDirectory(); - const args = withRemote ? ['--bare', '--initial-branch=master'] : ['--initial-branch=master']; + const args = withRemote ? ["--bare", "--initial-branch=master"] : ["--initial-branch=master"]; - await execa('git', ['init', ...args], {cwd}).catch(() => { - const args = withRemote ? ['--bare'] : []; - return execa('git', ['init', ...args], {cwd}); + await execa("git", ["init", ...args], { cwd }).catch(() => { + const args = withRemote ? ["--bare"] : []; + return execa("git", ["init", ...args], { cwd }); }); const repositoryUrl = fileUrl(cwd); - return {cwd, repositoryUrl}; + return { cwd, repositoryUrl }; } /** @@ -45,18 +45,18 @@ export async function initGit(withRemote) { * @param {String} [branch='master'] The branch to initialize. * @return {String} The path of the clone if `withRemote` is `true`, the path of the repository otherwise. */ -export async function gitRepo(withRemote, branch = 'master') { - let {cwd, repositoryUrl} = await initGit(withRemote); +export async function gitRepo(withRemote, branch = "master") { + let { cwd, repositoryUrl } = await initGit(withRemote); if (withRemote) { await initBareRepo(repositoryUrl, branch); cwd = await gitShallowClone(repositoryUrl, branch); } else { - await gitCheckout(branch, true, {cwd}); + await gitCheckout(branch, true, { cwd }); } - await execa('git', ['config', 'commit.gpgsign', false], {cwd}); + await execa("git", ["config", "commit.gpgsign", false], { cwd }); - return {cwd, repositoryUrl}; + return { cwd, repositoryUrl }; } /** @@ -70,12 +70,12 @@ export async function gitRepo(withRemote, branch = 'master') { * @param {String} repositoryUrl The URL of the bare repository. * @param {String} [branch='master'] the branch to initialize. */ -export async function initBareRepo(repositoryUrl, branch = 'master') { +export async function initBareRepo(repositoryUrl, branch = "master") { const cwd = temporaryDirectory(); - await execa('git', ['clone', '--no-hardlinks', repositoryUrl, cwd], {cwd}); - await gitCheckout(branch, true, {cwd}); - await gitCommits(['Initial commit'], {cwd}); - await execa('git', ['push', repositoryUrl, branch], {cwd}); + await execa("git", ["clone", "--no-hardlinks", repositoryUrl, cwd], { cwd }); + await gitCheckout(branch, true, { cwd }); + await gitCommits(["Initial commit"], { cwd }); + await execa("git", ["push", repositoryUrl, branch], { cwd }); } /** @@ -90,7 +90,9 @@ export async function gitCommits(messages, execaOptions) { await pEachSeries( messages, async (message) => - (await execa('git', ['commit', '-m', message, '--allow-empty', '--no-gpg-sign'], execaOptions)).stdout + ( + await execa("git", ["commit", "-m", message, "--allow-empty", "--no-gpg-sign"], execaOptions) + ).stdout ); return (await gitGetCommits(undefined, execaOptions)).slice(0, messages.length); } @@ -104,12 +106,17 @@ export async function gitCommits(messages, execaOptions) { * @return {Array} The list of parsed commits. */ export async function gitGetCommits(from, execaOptions) { - Object.assign(gitLogParser.fields, {hash: 'H', message: 'B', gitTags: 'd', committerDate: {key: 'ci', type: Date}}); + Object.assign(gitLogParser.fields, { + hash: "H", + message: "B", + gitTags: "d", + committerDate: { key: "ci", type: Date }, + }); return ( await getStream.array( gitLogParser.parse( - {_: `${from ? from + '..' : ''}HEAD`}, - {...execaOptions, env: {...process.env, ...execaOptions.env}} + { _: `${from ? from + ".." : ""}HEAD` }, + { ...execaOptions, env: { ...process.env, ...execaOptions.env } } ) ) ).map((commit) => { @@ -127,7 +134,7 @@ export async function gitGetCommits(from, execaOptions) { * @param {Object} [execaOpts] Options to pass to `execa`. */ export async function gitCheckout(branch, create, execaOptions) { - await execa('git', create ? ['checkout', '-b', branch] : ['checkout', branch], execaOptions); + await execa("git", create ? ["checkout", "-b", branch] : ["checkout", branch], execaOptions); } /** @@ -137,7 +144,7 @@ export async function gitCheckout(branch, create, execaOptions) { * @param {Object} [execaOpts] Options to pass to `execa`. */ export async function gitFetch(repositoryUrl, execaOptions) { - await execa('git', ['fetch', repositoryUrl], execaOptions); + await execa("git", ["fetch", repositoryUrl], execaOptions); } /** @@ -148,7 +155,7 @@ export async function gitFetch(repositoryUrl, execaOptions) { * @return {String} The sha of the head commit in the current git repository. */ export async function gitHead(execaOptions) { - return (await execa('git', ['rev-parse', 'HEAD'], execaOptions)).stdout; + return (await execa("git", ["rev-parse", "HEAD"], execaOptions)).stdout; } /** @@ -159,7 +166,7 @@ export async function gitHead(execaOptions) { * @param {Object} [execaOpts] Options to pass to `execa`. */ export async function gitTagVersion(tagName, sha, execaOptions) { - await execa('git', sha ? ['tag', '-f', tagName, sha] : ['tag', tagName], execaOptions); + await execa("git", sha ? ["tag", "-f", tagName, sha] : ["tag", tagName], execaOptions); } /** @@ -171,10 +178,10 @@ export async function gitTagVersion(tagName, sha, execaOptions) { * @param {Number} [depth=1] The number of commit to clone. * @return {String} The path of the cloned repository. */ -export async function gitShallowClone(repositoryUrl, branch = 'master', depth = 1) { +export async function gitShallowClone(repositoryUrl, branch = "master", depth = 1) { const cwd = temporaryDirectory(); - await execa('git', ['clone', '--no-hardlinks', '--no-tags', '-b', branch, '--depth', depth, repositoryUrl, cwd], { + await execa("git", ["clone", "--no-hardlinks", "--no-tags", "-b", branch, "--depth", depth, repositoryUrl, cwd], { cwd, }); return cwd; @@ -190,21 +197,21 @@ export async function gitShallowClone(repositoryUrl, branch = 'master', depth = export async function gitDetachedHead(repositoryUrl, head) { const cwd = temporaryDirectory(); - await execa('git', ['init'], {cwd}); - await execa('git', ['remote', 'add', 'origin', repositoryUrl], {cwd}); - await execa('git', ['fetch', repositoryUrl], {cwd}); - await execa('git', ['checkout', head], {cwd}); + await execa("git", ["init"], { cwd }); + await execa("git", ["remote", "add", "origin", repositoryUrl], { cwd }); + await execa("git", ["fetch", repositoryUrl], { cwd }); + await execa("git", ["checkout", head], { cwd }); return cwd; } export async function gitDetachedHeadFromBranch(repositoryUrl, branch, head) { const cwd = temporaryDirectory(); - await execa('git', ['init'], {cwd}); - await execa('git', ['remote', 'add', 'origin', repositoryUrl], {cwd}); - await execa('git', ['fetch', '--force', repositoryUrl, `${branch}:remotes/origin/${branch}`], {cwd}); - await execa('git', ['reset', '--hard', head], {cwd}); - await execa('git', ['checkout', '-q', '-B', branch], {cwd}); + await execa("git", ["init"], { cwd }); + await execa("git", ["remote", "add", "origin", repositoryUrl], { cwd }); + await execa("git", ["fetch", "--force", repositoryUrl, `${branch}:remotes/origin/${branch}`], { cwd }); + await execa("git", ["reset", "--hard", head], { cwd }); + await execa("git", ["checkout", "-q", "-B", branch], { cwd }); return cwd; } @@ -216,7 +223,7 @@ export async function gitDetachedHeadFromBranch(repositoryUrl, branch, head) { * @param {Object} [execaOpts] Options to pass to `execa`. */ export async function gitAddConfig(name, value, execaOptions) { - await execa('git', ['config', '--add', name, value], execaOptions); + await execa("git", ["config", "--add", name, value], execaOptions); } /** @@ -228,7 +235,7 @@ export async function gitAddConfig(name, value, execaOptions) { * @return {String} The sha of the commit associated with `tagName` on the local repository. */ export async function gitTagHead(tagName, execaOptions) { - return (await execa('git', ['rev-list', '-1', tagName], execaOptions)).stdout; + return (await execa("git", ["rev-list", "-1", tagName], execaOptions)).stdout; } /** @@ -241,8 +248,8 @@ export async function gitTagHead(tagName, execaOptions) { * @return {String} The sha of the commit associated with `tagName` on the remote repository. */ export async function gitRemoteTagHead(repositoryUrl, tagName, execaOptions) { - return (await execa('git', ['ls-remote', '--tags', repositoryUrl, tagName], execaOptions)).stdout - .split('\n') + return (await execa("git", ["ls-remote", "--tags", repositoryUrl, tagName], execaOptions)).stdout + .split("\n") .filter((tag) => Boolean(tag)) .map((tag) => tag.match(/^(?\S+)/)[1])[0]; } @@ -256,7 +263,7 @@ export async function gitRemoteTagHead(repositoryUrl, tagName, execaOptions) { * @return {String} The tag associatedwith the sha in parameter or `null`. */ export async function gitCommitTag(gitHead, execaOptions) { - return (await execa('git', ['describe', '--tags', '--exact-match', gitHead], execaOptions)).stdout; + return (await execa("git", ["describe", "--tags", "--exact-match", gitHead], execaOptions)).stdout; } /** @@ -269,7 +276,7 @@ export async function gitCommitTag(gitHead, execaOptions) { * @throws {Error} if the push failed. */ export async function gitPush(repositoryUrl, branch, execaOptions) { - await execa('git', ['push', '--tags', repositoryUrl, `HEAD:${branch}`], execaOptions); + await execa("git", ["push", "--tags", repositoryUrl, `HEAD:${branch}`], execaOptions); } /** @@ -279,7 +286,7 @@ export async function gitPush(repositoryUrl, branch, execaOptions) { * @param {Object} [execaOpts] Options to pass to `execa`. */ export async function merge(ref, execaOptions) { - await execa('git', ['merge', '--no-ff', ref], execaOptions); + await execa("git", ["merge", "--no-ff", ref], execaOptions); } /** @@ -289,7 +296,7 @@ export async function merge(ref, execaOptions) { * @param {Object} [execaOpts] Options to pass to `execa`. */ export async function mergeFf(ref, execaOptions) { - await execa('git', ['merge', '--ff', ref], execaOptions); + await execa("git", ["merge", "--ff", ref], execaOptions); } /** @@ -299,7 +306,7 @@ export async function mergeFf(ref, execaOptions) { * @param {Object} [execaOpts] Options to pass to `execa`. */ export async function rebase(ref, execaOptions) { - await execa('git', ['rebase', ref], execaOptions); + await execa("git", ["rebase", ref], execaOptions); } /** @@ -310,7 +317,7 @@ export async function rebase(ref, execaOptions) { * @param {Object} [execaOpts] Options to pass to `execa`. */ export async function gitAddNote(note, ref, execaOptions) { - await execa('git', ['notes', '--ref', GIT_NOTE_REF, 'add', '-m', note, ref], execaOptions); + await execa("git", ["notes", "--ref", GIT_NOTE_REF, "add", "-m", note, ref], execaOptions); } /** @@ -320,5 +327,5 @@ export async function gitAddNote(note, ref, execaOptions) { * @param {Object} [execaOpts] Options to pass to `execa`. */ export async function gitGetNote(ref, execaOptions) { - return (await execa('git', ['notes', '--ref', GIT_NOTE_REF, 'show', ref], execaOptions)).stdout; + return (await execa("git", ["notes", "--ref", GIT_NOTE_REF, "show", ref], execaOptions)).stdout; } diff --git a/test/helpers/gitbox.js b/test/helpers/gitbox.js index 0e9b04a6..e718a523 100644 --- a/test/helpers/gitbox.js +++ b/test/helpers/gitbox.js @@ -1,14 +1,14 @@ -import Docker from 'dockerode'; -import getStream from 'get-stream'; -import pRetry from 'p-retry'; -import {gitShallowClone, initBareRepo} from './git-utils.js'; +import Docker from "dockerode"; +import getStream from "get-stream"; +import pRetry from "p-retry"; +import { gitShallowClone, initBareRepo } from "./git-utils.js"; -const IMAGE = 'semanticrelease/docker-gitbox:latest'; +const IMAGE = "semanticrelease/docker-gitbox:latest"; const SERVER_PORT = 80; const HOST_PORT = 2080; -const SERVER_HOST = 'localhost'; -const GIT_USERNAME = 'integration'; -const GIT_PASSWORD = 'suchsecure'; +const SERVER_HOST = "localhost"; +const GIT_USERNAME = "integration"; +const GIT_PASSWORD = "suchsecure"; const docker = new Docker(); let container; @@ -24,14 +24,14 @@ export async function start() { Tty: true, Image: IMAGE, HostConfig: { - PortBindings: {[`${SERVER_PORT}/tcp`]: [{HostPort: `${HOST_PORT}`}]} + PortBindings: { [`${SERVER_PORT}/tcp`]: [{ HostPort: `${HOST_PORT}` }] }, }, - ExposedPorts: {[`${SERVER_PORT}/tcp`]: {}} + ExposedPorts: { [`${SERVER_PORT}/tcp`]: {} }, }); await container.start(); const exec = await container.exec({ - Cmd: ['ng-auth', '-u', GIT_USERNAME, '-p', GIT_PASSWORD], + Cmd: ["ng-auth", "-u", GIT_USERNAME, "-p", GIT_PASSWORD], AttachStdout: true, AttachStderr: true, }); @@ -54,9 +54,9 @@ export async function stop() { * @param {String} [description=`Repository ${name}`] The repository description. * @return {Object} The `repositoryUrl` (URL without auth) and `authUrl` (URL with auth). */ -export async function createRepo(name, branch = 'master', description = `Repository ${name}`) { +export async function createRepo(name, branch = "master", description = `Repository ${name}`) { const exec = await container.exec({ - Cmd: ['repo-admin', '-n', name, '-d', description], + Cmd: ["repo-admin", "-n", name, "-d", description], AttachStdout: true, AttachStderr: true, }); @@ -66,8 +66,8 @@ export async function createRepo(name, branch = 'master', description = `Reposit const authUrl = `http://${gitCredential}@${SERVER_HOST}:${HOST_PORT}/git/${name}.git`; // Retry as the server might take a few ms to make the repo available push - await pRetry(() => initBareRepo(authUrl, branch), {retries: 5, minTimeout: 500, factor: 2}); + await pRetry(() => initBareRepo(authUrl, branch), { retries: 5, minTimeout: 500, factor: 2 }); const cwd = await gitShallowClone(authUrl); - return {cwd, repositoryUrl, authUrl}; + return { cwd, repositoryUrl, authUrl }; } diff --git a/test/helpers/mockserver.js b/test/helpers/mockserver.js index 103cee1a..32ef9f4c 100644 --- a/test/helpers/mockserver.js +++ b/test/helpers/mockserver.js @@ -1,12 +1,12 @@ -import Docker from 'dockerode'; -import getStream from 'get-stream'; -import got from 'got'; -import pRetry from 'p-retry'; -import {mockServerClient} from 'mockserver-client'; +import Docker from "dockerode"; +import getStream from "get-stream"; +import got from "got"; +import pRetry from "p-retry"; +import { mockServerClient } from "mockserver-client"; -const IMAGE = 'mockserver/mockserver:latest'; +const IMAGE = "mockserver/mockserver:latest"; const MOCK_SERVER_PORT = 1080; -const MOCK_SERVER_HOST = 'localhost'; +const MOCK_SERVER_HOST = "localhost"; const docker = new Docker(); let container; @@ -20,15 +20,15 @@ export async function start() { Tty: true, Image: IMAGE, HostConfig: { - PortBindings: {[`${MOCK_SERVER_PORT}/tcp`]: [{HostPort: `${MOCK_SERVER_PORT}`}]} + PortBindings: { [`${MOCK_SERVER_PORT}/tcp`]: [{ HostPort: `${MOCK_SERVER_PORT}` }] }, }, - ExposedPorts: {[`${MOCK_SERVER_PORT}/tcp`]: {}} + ExposedPorts: { [`${MOCK_SERVER_PORT}/tcp`]: {} }, }); await container.start(); try { // Wait for the mock server to be ready - await pRetry(() => got.put(`http://${MOCK_SERVER_HOST}:${MOCK_SERVER_PORT}/status`, {cache: false}), { + await pRetry(() => got.put(`http://${MOCK_SERVER_HOST}:${MOCK_SERVER_PORT}/status`, { cache: false }), { retries: 7, minTimeout: 1000, factor: 2, @@ -70,17 +70,17 @@ export const url = `http://${MOCK_SERVER_HOST}:${MOCK_SERVER_PORT}`; */ export async function mock( path, - {body: requestBody, headers: requestHeaders}, - {method = 'POST', statusCode = 200, body: responseBody} + { body: requestBody, headers: requestHeaders }, + { method = "POST", statusCode = 200, body: responseBody } ) { await client.mockAnyResponse({ - httpRequest: {path, method}, + httpRequest: { path, method }, httpResponse: { statusCode, - headers: [{name: 'Content-Type', values: ['application/json; charset=utf-8']}], + headers: [{ name: "Content-Type", values: ["application/json; charset=utf-8"] }], body: JSON.stringify(responseBody), }, - times: {remainingTimes: 1, unlimited: false}, + times: { remainingTimes: 1, unlimited: false }, }); return { @@ -88,7 +88,7 @@ export async function mock( path, headers: requestHeaders, body: requestBody - ? {type: 'JSON', json: JSON.stringify(requestBody), matchType: 'ONLY_MATCHING_FIELDS'} + ? { type: "JSON", json: JSON.stringify(requestBody), matchType: "ONLY_MATCHING_FIELDS" } : undefined, }; } diff --git a/test/helpers/npm-registry.js b/test/helpers/npm-registry.js index a71cedf4..70616f12 100644 --- a/test/helpers/npm-registry.js +++ b/test/helpers/npm-registry.js @@ -1,17 +1,17 @@ -import path, {dirname} from 'node:path'; -import {fileURLToPath} from 'node:url'; -import Docker from 'dockerode'; -import getStream from 'get-stream'; -import got from 'got'; -import delay from 'delay'; -import pRetry from 'p-retry'; +import path, { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import Docker from "dockerode"; +import getStream from "get-stream"; +import got from "got"; +import delay from "delay"; +import pRetry from "p-retry"; -const IMAGE = 'verdaccio/verdaccio:5'; +const IMAGE = "verdaccio/verdaccio:5"; const REGISTRY_PORT = 4873; -const REGISTRY_HOST = 'localhost'; -const NPM_USERNAME = 'integration'; -const NPM_PASSWORD = 'suchsecure'; -const NPM_EMAIL = 'integration@test.com'; +const REGISTRY_HOST = "localhost"; +const NPM_USERNAME = "integration"; +const NPM_PASSWORD = "suchsecure"; +const NPM_EMAIL = "integration@test.com"; const docker = new Docker(); const __dirname = dirname(fileURLToPath(import.meta.url)); let container, npmToken; @@ -26,10 +26,10 @@ export async function start() { Tty: true, Image: IMAGE, HostConfig: { - PortBindings: {[`${REGISTRY_PORT}/tcp`]: [{HostPort: `${REGISTRY_PORT}`}]}, - Binds: [`${path.join(__dirname, 'config.yaml')}:/verdaccio/conf/config.yaml`], + PortBindings: { [`${REGISTRY_PORT}/tcp`]: [{ HostPort: `${REGISTRY_PORT}` }] }, + Binds: [`${path.join(__dirname, "config.yaml")}:/verdaccio/conf/config.yaml`], }, - ExposedPorts: {[`${REGISTRY_PORT}/tcp`]: {}} + ExposedPorts: { [`${REGISTRY_PORT}/tcp`]: {} }, }); await container.start(); @@ -37,7 +37,7 @@ export async function start() { try { // Wait for the registry to be ready - await pRetry(() => got(`http://${REGISTRY_HOST}:${REGISTRY_PORT}/`, {cache: false}), { + await pRetry(() => got(`http://${REGISTRY_HOST}:${REGISTRY_PORT}/`, { cache: false }), { retries: 7, minTimeout: 1000, factor: 2, @@ -48,24 +48,24 @@ export async function start() { // Create user await got(`http://${REGISTRY_HOST}:${REGISTRY_PORT}/-/user/org.couchdb.user:${NPM_USERNAME}`, { - method: 'PUT', + method: "PUT", json: { _id: `org.couchdb.user:${NPM_USERNAME}`, name: NPM_USERNAME, roles: [], - type: 'user', + type: "user", password: NPM_PASSWORD, email: NPM_EMAIL, }, }); // Create token for user - ({token: npmToken} = await got(`http://${REGISTRY_HOST}:${REGISTRY_PORT}/-/npm/v1/tokens`, { + ({ token: npmToken } = await got(`http://${REGISTRY_HOST}:${REGISTRY_PORT}/-/npm/v1/tokens`, { username: NPM_USERNAME, password: NPM_PASSWORD, - method: 'POST', - headers: {'content-type': 'application/json'}, - json: {password: NPM_PASSWORD, readonly: false, cidr_whitelist: []} + method: "POST", + headers: { "content-type": "application/json" }, + json: { password: NPM_PASSWORD, readonly: false, cidr_whitelist: [] }, }).json()); } diff --git a/test/helpers/npm-utils.js b/test/helpers/npm-utils.js index 7b7831be..5e8b1ca5 100644 --- a/test/helpers/npm-utils.js +++ b/test/helpers/npm-utils.js @@ -1,5 +1,5 @@ -import {execa} from 'execa'; +import { execa } from "execa"; export async function npmView(packageName, env) { - return JSON.parse((await execa('npm', ['view', packageName, '--json'], {env})).stdout); + return JSON.parse((await execa("npm", ["view", packageName, "--json"], { env })).stdout); } diff --git a/test/plugins/normalize.test.js b/test/plugins/normalize.test.js index 3dc03f9a..6e6b50a3 100644 --- a/test/plugins/normalize.test.js +++ b/test/plugins/normalize.test.js @@ -1,7 +1,7 @@ -import test from 'ava'; -import {noop} from 'lodash-es'; -import {stub} from 'sinon'; -import normalize from '../../lib/plugins/normalize.js'; +import test from "ava"; +import { noop } from "lodash-es"; +import { stub } from "sinon"; +import normalize from "../../lib/plugins/normalize.js"; const cwd = process.cwd(); @@ -10,7 +10,7 @@ test.beforeEach((t) => { t.context.log = stub(); t.context.error = stub(); t.context.success = stub(); - t.context.stderr = {write: stub()}; + t.context.stderr = { write: stub() }; t.context.logger = { log: t.context.log, error: t.context.error, @@ -19,98 +19,108 @@ test.beforeEach((t) => { }; }); -test('Normalize and load plugin from string', async (t) => { +test("Normalize and load plugin from string", async (t) => { const plugin = await normalize( - {cwd, options: {}, logger: t.context.logger}, - 'verifyConditions', - './test/fixtures/plugin-noop.cjs', + { cwd, options: {}, logger: t.context.logger }, + "verifyConditions", + "./test/fixtures/plugin-noop.cjs", {} ); - t.is(plugin.pluginName, './test/fixtures/plugin-noop.cjs'); - t.is(typeof plugin, 'function'); + t.is(plugin.pluginName, "./test/fixtures/plugin-noop.cjs"); + t.is(typeof plugin, "function"); t.deepEqual(t.context.success.args[0], ['Loaded plugin "verifyConditions" from "./test/fixtures/plugin-noop.cjs"']); }); -test('Normalize and load plugin from object', async (t) => { +test("Normalize and load plugin from object", async (t) => { const plugin = await normalize( - {cwd, options: {}, logger: t.context.logger}, - 'publish', - {path: './test/fixtures/plugin-noop.cjs'}, + { cwd, options: {}, logger: t.context.logger }, + "publish", + { path: "./test/fixtures/plugin-noop.cjs" }, {} ); - t.is(plugin.pluginName, './test/fixtures/plugin-noop.cjs'); - t.is(typeof plugin, 'function'); + t.is(plugin.pluginName, "./test/fixtures/plugin-noop.cjs"); + t.is(typeof plugin, "function"); t.deepEqual(t.context.success.args[0], ['Loaded plugin "publish" from "./test/fixtures/plugin-noop.cjs"']); }); -test('Normalize and load plugin from a base file path', async (t) => { - const plugin = await normalize({cwd, options: {}, logger: t.context.logger}, 'verifyConditions', './plugin-noop.cjs', { - './plugin-noop.cjs': './test/fixtures', - }); +test("Normalize and load plugin from a base file path", async (t) => { + const plugin = await normalize( + { cwd, options: {}, logger: t.context.logger }, + "verifyConditions", + "./plugin-noop.cjs", + { + "./plugin-noop.cjs": "./test/fixtures", + } + ); - t.is(plugin.pluginName, './plugin-noop.cjs'); - t.is(typeof plugin, 'function'); + t.is(plugin.pluginName, "./plugin-noop.cjs"); + t.is(typeof plugin, "function"); t.deepEqual(t.context.success.args[0], [ 'Loaded plugin "verifyConditions" from "./plugin-noop.cjs" in shareable config "./test/fixtures"', ]); }); test('Wrap plugin in a function that add the "pluginName" to the error"', async (t) => { - const plugin = await normalize({cwd, options: {}, logger: t.context.logger}, 'verifyConditions', './plugin-error', { - './plugin-error': './test/fixtures', + const plugin = await normalize({ cwd, options: {}, logger: t.context.logger }, "verifyConditions", "./plugin-error", { + "./plugin-error": "./test/fixtures", }); - const error = await t.throwsAsync(plugin({options: {}})); + const error = await t.throwsAsync(plugin({ options: {} })); - t.is(error.pluginName, './plugin-error'); + t.is(error.pluginName, "./plugin-error"); }); test('Wrap plugin in a function that add the "pluginName" to multiple errors"', async (t) => { - const plugin = await normalize({cwd, options: {}, logger: t.context.logger}, 'verifyConditions', './plugin-errors', { - './plugin-errors': './test/fixtures', - }); + const plugin = await normalize( + { cwd, options: {}, logger: t.context.logger }, + "verifyConditions", + "./plugin-errors", + { + "./plugin-errors": "./test/fixtures", + } + ); - const errors = [...(await t.throwsAsync(plugin({options: {}}))).errors]; + const errors = [...(await t.throwsAsync(plugin({ options: {} }))).errors]; for (const error of errors) { - t.is(error.pluginName, './plugin-errors'); + t.is(error.pluginName, "./plugin-errors"); } }); -test('Normalize and load plugin from function', async (t) => { +test("Normalize and load plugin from function", async (t) => { const pluginFunction = () => {}; - const plugin = await normalize({cwd, options: {}, logger: t.context.logger}, '', pluginFunction, {}); + const plugin = await normalize({ cwd, options: {}, logger: t.context.logger }, "", pluginFunction, {}); - t.is(plugin.pluginName, '[Function: pluginFunction]'); - t.is(typeof plugin, 'function'); + t.is(plugin.pluginName, "[Function: pluginFunction]"); + t.is(typeof plugin, "function"); }); -test('Normalize and load plugin that retuns multiple functions', async (t) => { +test("Normalize and load plugin that retuns multiple functions", async (t) => { const plugin = await normalize( - {cwd, options: {}, logger: t.context.logger}, - 'verifyConditions', - './test/fixtures/multi-plugin.cjs', + { cwd, options: {}, logger: t.context.logger }, + "verifyConditions", + "./test/fixtures/multi-plugin.cjs", {} ); - t.is(typeof plugin, 'function'); + t.is(typeof plugin, "function"); t.deepEqual(t.context.success.args[0], ['Loaded plugin "verifyConditions" from "./test/fixtures/multi-plugin.cjs"']); }); test('Wrap "analyzeCommits" plugin in a function that validate the output of the plugin', async (t) => { const analyzeCommits = stub().resolves(2); const plugin = await normalize( - {cwd, options: {}, stderr: t.context.stderr, logger: t.context.logger}, - 'analyzeCommits', + { cwd, options: {}, stderr: t.context.stderr, logger: t.context.logger }, + "analyzeCommits", analyzeCommits, {} ); - const error = await t.throwsAsync(plugin({options: {}})); + const error = await t.throwsAsync(plugin({ options: {} })); - t.is(error.code, 'EANALYZECOMMITSOUTPUT'); - t.is(error.name, 'SemanticReleaseError'); + t.is(error.code, "EANALYZECOMMITSOUTPUT"); + t.is(error.name, "SemanticReleaseError"); t.truthy(error.message); t.truthy(error.details); t.regex(error.details, /2/); @@ -119,16 +129,16 @@ test('Wrap "analyzeCommits" plugin in a function that validate the output of the test('Wrap "generateNotes" plugin in a function that validate the output of the plugin', async (t) => { const generateNotes = stub().resolves(2); const plugin = await normalize( - {cwd, options: {}, stderr: t.context.stderr, logger: t.context.logger}, - 'generateNotes', + { cwd, options: {}, stderr: t.context.stderr, logger: t.context.logger }, + "generateNotes", generateNotes, {} ); - const error = await t.throwsAsync(plugin({options: {}})); + const error = await t.throwsAsync(plugin({ options: {} })); - t.is(error.code, 'EGENERATENOTESOUTPUT'); - t.is(error.name, 'SemanticReleaseError'); + t.is(error.code, "EGENERATENOTESOUTPUT"); + t.is(error.name, "SemanticReleaseError"); t.truthy(error.message); t.truthy(error.details); t.regex(error.details, /2/); @@ -137,16 +147,16 @@ test('Wrap "generateNotes" plugin in a function that validate the output of the test('Wrap "publish" plugin in a function that validate the output of the plugin', async (t) => { const publish = stub().resolves(2); const plugin = await normalize( - {cwd, options: {}, stderr: t.context.stderr, logger: t.context.logger}, - 'publish', + { cwd, options: {}, stderr: t.context.stderr, logger: t.context.logger }, + "publish", publish, {} ); - const error = await t.throwsAsync(plugin({options: {}})); + const error = await t.throwsAsync(plugin({ options: {} })); - t.is(error.code, 'EPUBLISHOUTPUT'); - t.is(error.name, 'SemanticReleaseError'); + t.is(error.code, "EPUBLISHOUTPUT"); + t.is(error.name, "SemanticReleaseError"); t.truthy(error.message); t.truthy(error.details); t.regex(error.details, /2/); @@ -155,16 +165,16 @@ test('Wrap "publish" plugin in a function that validate the output of the plugin test('Wrap "addChannel" plugin in a function that validate the output of the plugin', async (t) => { const addChannel = stub().resolves(2); const plugin = await normalize( - {cwd, options: {}, stderr: t.context.stderr, logger: t.context.logger}, - 'addChannel', + { cwd, options: {}, stderr: t.context.stderr, logger: t.context.logger }, + "addChannel", addChannel, {} ); - const error = await t.throwsAsync(plugin({options: {}})); + const error = await t.throwsAsync(plugin({ options: {} })); - t.is(error.code, 'EADDCHANNELOUTPUT'); - t.is(error.name, 'SemanticReleaseError'); + t.is(error.code, "EADDCHANNELOUTPUT"); + t.is(error.name, "SemanticReleaseError"); t.truthy(error.message); t.truthy(error.details); t.regex(error.details, /2/); @@ -172,60 +182,60 @@ test('Wrap "addChannel" plugin in a function that validate the output of the plu test('Plugin is called with "pluginConfig" (with object definition) and input', async (t) => { const pluginFunction = stub().resolves(); - const pluginConf = {path: pluginFunction, conf: 'confValue'}; - const options = {global: 'globalValue'}; - const plugin = await normalize({cwd, options, logger: t.context.logger}, '', pluginConf, {}); - await plugin({options: {}, param: 'param'}); + const pluginConf = { path: pluginFunction, conf: "confValue" }; + const options = { global: "globalValue" }; + const plugin = await normalize({ cwd, options, logger: t.context.logger }, "", pluginConf, {}); + await plugin({ options: {}, param: "param" }); t.true( pluginFunction.calledWithMatch( - {conf: 'confValue', global: 'globalValue'}, - {param: 'param', logger: t.context.logger} + { conf: "confValue", global: "globalValue" }, + { param: "param", logger: t.context.logger } ) ); }); test('Plugin is called with "pluginConfig" (with array definition) and input', async (t) => { const pluginFunction = stub().resolves(); - const pluginConf = [pluginFunction, {conf: 'confValue'}]; - const options = {global: 'globalValue'}; - const plugin = await normalize({cwd, options, logger: t.context.logger}, '', pluginConf, {}); - await plugin({options: {}, param: 'param'}); + const pluginConf = [pluginFunction, { conf: "confValue" }]; + const options = { global: "globalValue" }; + const plugin = await normalize({ cwd, options, logger: t.context.logger }, "", pluginConf, {}); + await plugin({ options: {}, param: "param" }); t.true( pluginFunction.calledWithMatch( - {conf: 'confValue', global: 'globalValue'}, - {param: 'param', logger: t.context.logger} + { conf: "confValue", global: "globalValue" }, + { param: "param", logger: t.context.logger } ) ); }); test('Prevent plugins to modify "pluginConfig"', async (t) => { const pluginFunction = stub().callsFake((pluginConfig) => { - pluginConfig.conf.subConf = 'otherConf'; + pluginConfig.conf.subConf = "otherConf"; }); - const pluginConf = {path: pluginFunction, conf: {subConf: 'originalConf'}}; - const options = {globalConf: {globalSubConf: 'originalGlobalConf'}}; - const plugin = await normalize({cwd, options, logger: t.context.logger}, '', pluginConf, {}); - await plugin({options: {}}); + const pluginConf = { path: pluginFunction, conf: { subConf: "originalConf" } }; + const options = { globalConf: { globalSubConf: "originalGlobalConf" } }; + const plugin = await normalize({ cwd, options, logger: t.context.logger }, "", pluginConf, {}); + await plugin({ options: {} }); - t.is(pluginConf.conf.subConf, 'originalConf'); - t.is(options.globalConf.globalSubConf, 'originalGlobalConf'); + t.is(pluginConf.conf.subConf, "originalConf"); + t.is(options.globalConf.globalSubConf, "originalGlobalConf"); }); -test('Prevent plugins to modify its input', async (t) => { +test("Prevent plugins to modify its input", async (t) => { const pluginFunction = stub().callsFake((pluginConfig, options) => { - options.param.subParam = 'otherParam'; + options.param.subParam = "otherParam"; }); - const input = {param: {subParam: 'originalSubParam'}, options: {}}; - const plugin = await normalize({cwd, options: {}, logger: t.context.logger}, '', pluginFunction, {}); + const input = { param: { subParam: "originalSubParam" }, options: {} }; + const plugin = await normalize({ cwd, options: {}, logger: t.context.logger }, "", pluginFunction, {}); await plugin(input); - t.is(input.param.subParam, 'originalSubParam'); + t.is(input.param.subParam, "originalSubParam"); }); -test('Return noop if the plugin is not defined', async (t) => { - const plugin = await normalize({cwd, options: {}, logger: t.context.logger}); +test("Return noop if the plugin is not defined", async (t) => { + const plugin = await normalize({ cwd, options: {}, logger: t.context.logger }); t.is(plugin, noop); }); @@ -233,12 +243,12 @@ test('Return noop if the plugin is not defined', async (t) => { test('Always pass a defined "pluginConfig" for plugin defined with string', async (t) => { // Call the normalize function with the path of a plugin that returns its config const plugin = await normalize( - {cwd, options: {}, logger: t.context.logger}, - '', - './test/fixtures/plugin-result-config', + { cwd, options: {}, logger: t.context.logger }, + "", + "./test/fixtures/plugin-result-config", {} ); - const pluginResult = await plugin({options: {}}); + const pluginResult = await plugin({ options: {} }); t.deepEqual(pluginResult.pluginConfig, {}); }); @@ -246,33 +256,38 @@ test('Always pass a defined "pluginConfig" for plugin defined with string', asyn test('Always pass a defined "pluginConfig" for plugin defined with path', async (t) => { // Call the normalize function with the path of a plugin that returns its config const plugin = await normalize( - {cwd, options: {}, logger: t.context.logger}, - '', - {path: './test/fixtures/plugin-result-config'}, + { cwd, options: {}, logger: t.context.logger }, + "", + { path: "./test/fixtures/plugin-result-config" }, {} ); - const pluginResult = await plugin({options: {}}); + const pluginResult = await plugin({ options: {} }); t.deepEqual(pluginResult.pluginConfig, {}); }); -test('Throws an error if the plugin return an object without the expected plugin function', async (t) => { +test("Throws an error if the plugin return an object without the expected plugin function", async (t) => { const error = await t.throwsAsync(() => - normalize({cwd, options: {}, logger: t.context.logger}, 'nonExistentPlugin', './test/fixtures/multi-plugin.cjs', {}) + normalize( + { cwd, options: {}, logger: t.context.logger }, + "nonExistentPlugin", + "./test/fixtures/multi-plugin.cjs", + {} + ) ); - t.is(error.code, 'EPLUGIN'); - t.is(error.name, 'SemanticReleaseError'); + t.is(error.code, "EPLUGIN"); + t.is(error.name, "SemanticReleaseError"); t.truthy(error.message); t.truthy(error.details); }); -test('Throws an error if the plugin is not found', async (t) => { +test("Throws an error if the plugin is not found", async (t) => { await t.throwsAsync( - () => normalize({cwd, options: {}, logger: t.context.logger}, 'nonExistentPlugin', 'non-existing-path', {}), + () => normalize({ cwd, options: {}, logger: t.context.logger }, "nonExistentPlugin", "non-existing-path", {}), { message: /Cannot find module 'non-existing-path'/, - code: 'MODULE_NOT_FOUND', + code: "MODULE_NOT_FOUND", instanceOf: Error, } ); diff --git a/test/plugins/pipeline.test.js b/test/plugins/pipeline.test.js index 70766f07..5e5fad0f 100644 --- a/test/plugins/pipeline.test.js +++ b/test/plugins/pipeline.test.js @@ -1,9 +1,9 @@ -import test from 'ava'; -import {stub} from 'sinon'; -import AggregateError from 'aggregate-error'; -import pipeline from '../../lib/plugins/pipeline.js'; +import test from "ava"; +import { stub } from "sinon"; +import AggregateError from "aggregate-error"; +import pipeline from "../../lib/plugins/pipeline.js"; -test('Execute each function in series passing the same input', async (t) => { +test("Execute each function in series passing the same input", async (t) => { const step1 = stub().resolves(1); const step2 = stub().resolves(2); const step3 = stub().resolves(3); @@ -25,7 +25,7 @@ test('Execute each function in series passing a transformed input from "getNextI const step4 = stub().resolves(4); const getNextInput = (lastResult, result) => lastResult + result; - const result = await pipeline([step1, step2, step3, step4], {settleAll: false, getNextInput})(0); + const result = await pipeline([step1, step2, step3, step4], { settleAll: false, getNextInput })(0); t.deepEqual(result, [1, 2, 3, 4]); t.true(step1.calledWith(0)); @@ -44,7 +44,7 @@ test('Execute each function in series passing the "lastResult" and "result" to " const step4 = stub().resolves(4); const getNextInput = stub().returnsArg(0); - const result = await pipeline([step1, step2, step3, step4], {settleAll: false, getNextInput})(5); + const result = await pipeline([step1, step2, step3, step4], { settleAll: false, getNextInput })(5); t.deepEqual(result, [1, 2, 3, 4]); t.deepEqual(getNextInput.args, [ @@ -63,7 +63,7 @@ test('Execute each function in series calling "transform" to modify the results' const getNextInput = stub().returnsArg(0); const transform = stub().callsFake((result) => result + 1); - const result = await pipeline([step1, step2, step3, step4], {getNextInput, transform})(5); + const result = await pipeline([step1, step2, step3, step4], { getNextInput, transform })(5); t.deepEqual(result, [1 + 1, 2 + 1, 3 + 1, 4 + 1]); t.deepEqual(getNextInput.args, [ @@ -82,7 +82,7 @@ test('Execute each function in series calling "transform" to modify the results const getNextInput = stub().returnsArg(0); const transform = stub().callsFake((result) => result + 1); - const result = await pipeline([step1, step2, step3, step4], {settleAll: true, getNextInput, transform})(5); + const result = await pipeline([step1, step2, step3, step4], { settleAll: true, getNextInput, transform })(5); t.deepEqual(result, [1 + 1, 2 + 1, 3 + 1, 4 + 1]); t.deepEqual(getNextInput.args, [ @@ -93,24 +93,24 @@ test('Execute each function in series calling "transform" to modify the results ]); }); -test('Stop execution and throw error if a step rejects', async (t) => { +test("Stop execution and throw error if a step rejects", async (t) => { const step1 = stub().resolves(1); - const step2 = stub().rejects(new Error('test error')); + const step2 = stub().rejects(new Error("test error")); const step3 = stub().resolves(3); const error = await t.throwsAsync(pipeline([step1, step2, step3])(0), { instanceOf: Error, - message: 'test error', + message: "test error", }); - t.is(error.message, 'test error'); + t.is(error.message, "test error"); t.true(step1.calledWith(0)); t.true(step2.calledWith(0)); t.true(step3.notCalled); }); -test('Throw all errors from the first step throwing an AggregateError', async (t) => { - const error1 = new Error('test error 1'); - const error2 = new Error('test error 2'); +test("Throw all errors from the first step throwing an AggregateError", async (t) => { + const error1 = new Error("test error 1"); + const error2 = new Error("test error 2"); const step1 = stub().resolves(1); const step2 = stub().rejects(new AggregateError([error1, error2])); @@ -124,14 +124,14 @@ test('Throw all errors from the first step throwing an AggregateError', async (t t.true(step3.notCalled); }); -test('Execute all even if a Promise rejects', async (t) => { - const error1 = new Error('test error 1'); - const error2 = new Error('test error 2'); +test("Execute all even if a Promise rejects", async (t) => { + const error1 = new Error("test error 1"); + const error2 = new Error("test error 2"); const step1 = stub().resolves(1); const step2 = stub().rejects(error1); const step3 = stub().rejects(error2); - const error = await t.throwsAsync(pipeline([step1, step2, step3], {settleAll: true})(0)); + const error = await t.throwsAsync(pipeline([step1, step2, step3], { settleAll: true })(0)); t.deepEqual([...error.errors], [error1, error2]); t.true(step1.calledWith(0)); @@ -139,31 +139,31 @@ test('Execute all even if a Promise rejects', async (t) => { t.true(step3.calledWith(0)); }); -test('Throw all errors from all steps throwing an AggregateError', async (t) => { - const error1 = new Error('test error 1'); - const error2 = new Error('test error 2'); - const error3 = new Error('test error 3'); - const error4 = new Error('test error 4'); +test("Throw all errors from all steps throwing an AggregateError", async (t) => { + const error1 = new Error("test error 1"); + const error2 = new Error("test error 2"); + const error3 = new Error("test error 3"); + const error4 = new Error("test error 4"); const step1 = stub().rejects(new AggregateError([error1, error2])); const step2 = stub().rejects(new AggregateError([error3, error4])); - const error = await t.throwsAsync(pipeline([step1, step2], {settleAll: true})(0)); + const error = await t.throwsAsync(pipeline([step1, step2], { settleAll: true })(0)); t.deepEqual([...error.errors], [error1, error2, error3, error4]); t.true(step1.calledWith(0)); t.true(step2.calledWith(0)); }); -test('Execute each function in series passing a transformed input even if a step rejects', async (t) => { - const error2 = new Error('test error 2'); - const error3 = new Error('test error 3'); +test("Execute each function in series passing a transformed input even if a step rejects", async (t) => { + const error2 = new Error("test error 2"); + const error3 = new Error("test error 3"); const step1 = stub().resolves(1); const step2 = stub().rejects(error2); const step3 = stub().rejects(error3); const step4 = stub().resolves(4); const getNextInput = (previousResult, result) => previousResult + result; - const error = await t.throwsAsync(pipeline([step1, step2, step3, step4], {settleAll: true, getNextInput})(0)); + const error = await t.throwsAsync(pipeline([step1, step2, step3, step4], { settleAll: true, getNextInput })(0)); t.deepEqual([...error.errors], [error2, error3]); t.true(step1.calledWith(0)); diff --git a/test/plugins/plugins.test.js b/test/plugins/plugins.test.js index 6b108830..184081a9 100644 --- a/test/plugins/plugins.test.js +++ b/test/plugins/plugins.test.js @@ -1,9 +1,9 @@ -import path from 'path'; -import test from 'ava'; -import {copy, outputFile} from 'fs-extra'; -import {stub} from 'sinon'; -import {temporaryDirectory} from 'tempy'; -import getPlugins from '../../lib/plugins/index.js'; +import path from "path"; +import test from "ava"; +import { copy, outputFile } from "fs-extra"; +import { stub } from "sinon"; +import { temporaryDirectory } from "tempy"; +import getPlugins from "../../lib/plugins/index.js"; // Save the current working directory const cwd = process.cwd(); @@ -12,32 +12,32 @@ test.beforeEach((t) => { // Stub the logger functions t.context.log = stub(); t.context.success = stub(); - t.context.logger = {log: t.context.log, success: t.context.success, scope: () => t.context.logger}; + t.context.logger = { log: t.context.log, success: t.context.success, scope: () => t.context.logger }; }); -test('Export default plugins', async (t) => { - const plugins = await getPlugins({cwd, options: {}, logger: t.context.logger}, {}); +test("Export default plugins", async (t) => { + const plugins = await getPlugins({ cwd, options: {}, logger: t.context.logger }, {}); // Verify the module returns a function for each plugin - t.is(typeof plugins.verifyConditions, 'function'); - t.is(typeof plugins.analyzeCommits, 'function'); - t.is(typeof plugins.verifyRelease, 'function'); - t.is(typeof plugins.generateNotes, 'function'); - t.is(typeof plugins.prepare, 'function'); - t.is(typeof plugins.publish, 'function'); - t.is(typeof plugins.success, 'function'); - t.is(typeof plugins.fail, 'function'); + t.is(typeof plugins.verifyConditions, "function"); + t.is(typeof plugins.analyzeCommits, "function"); + t.is(typeof plugins.verifyRelease, "function"); + t.is(typeof plugins.generateNotes, "function"); + t.is(typeof plugins.prepare, "function"); + t.is(typeof plugins.publish, "function"); + t.is(typeof plugins.success, "function"); + t.is(typeof plugins.fail, "function"); }); -test('Export plugins based on steps config', async (t) => { +test("Export plugins based on steps config", async (t) => { const plugins = await getPlugins( { cwd, logger: t.context.logger, options: { - verifyConditions: ['./test/fixtures/plugin-noop.cjs', {path: './test/fixtures/plugin-noop.cjs'}], - generateNotes: './test/fixtures/plugin-noop.cjs', - analyzeCommits: {path: './test/fixtures/plugin-noop.cjs'}, + verifyConditions: ["./test/fixtures/plugin-noop.cjs", { path: "./test/fixtures/plugin-noop.cjs" }], + generateNotes: "./test/fixtures/plugin-noop.cjs", + analyzeCommits: { path: "./test/fixtures/plugin-noop.cjs" }, verifyRelease: () => {}, }, }, @@ -45,161 +45,161 @@ test('Export plugins based on steps config', async (t) => { ); // Verify the module returns a function for each plugin - t.is(typeof plugins.verifyConditions, 'function'); - t.is(typeof plugins.analyzeCommits, 'function'); - t.is(typeof plugins.verifyRelease, 'function'); - t.is(typeof plugins.generateNotes, 'function'); - t.is(typeof plugins.prepare, 'function'); - t.is(typeof plugins.publish, 'function'); - t.is(typeof plugins.success, 'function'); - t.is(typeof plugins.fail, 'function'); + t.is(typeof plugins.verifyConditions, "function"); + t.is(typeof plugins.analyzeCommits, "function"); + t.is(typeof plugins.verifyRelease, "function"); + t.is(typeof plugins.generateNotes, "function"); + t.is(typeof plugins.prepare, "function"); + t.is(typeof plugins.publish, "function"); + t.is(typeof plugins.success, "function"); + t.is(typeof plugins.fail, "function"); }); test('Export plugins based on "plugins" config (array)', async (t) => { - const plugin1 = {verifyConditions: stub(), publish: stub()}; - const plugin2 = {verifyConditions: stub(), verifyRelease: stub()}; + const plugin1 = { verifyConditions: stub(), publish: stub() }; + const plugin2 = { verifyConditions: stub(), verifyRelease: stub() }; const plugins = await getPlugins( - {cwd, logger: t.context.logger, options: {plugins: [plugin1, [plugin2, {}]], verifyRelease: () => {}}}, + { cwd, logger: t.context.logger, options: { plugins: [plugin1, [plugin2, {}]], verifyRelease: () => {} } }, {} ); - await plugins.verifyConditions({options: {}}); + await plugins.verifyConditions({ options: {} }); t.true(plugin1.verifyConditions.calledOnce); t.true(plugin2.verifyConditions.calledOnce); - await plugins.publish({options: {}}); + await plugins.publish({ options: {} }); t.true(plugin1.publish.calledOnce); - await plugins.verifyRelease({options: {}}); + await plugins.verifyRelease({ options: {} }); t.true(plugin2.verifyRelease.notCalled); // Verify the module returns a function for each plugin - t.is(typeof plugins.verifyConditions, 'function'); - t.is(typeof plugins.analyzeCommits, 'function'); - t.is(typeof plugins.verifyRelease, 'function'); - t.is(typeof plugins.generateNotes, 'function'); - t.is(typeof plugins.prepare, 'function'); - t.is(typeof plugins.publish, 'function'); - t.is(typeof plugins.success, 'function'); - t.is(typeof plugins.fail, 'function'); + t.is(typeof plugins.verifyConditions, "function"); + t.is(typeof plugins.analyzeCommits, "function"); + t.is(typeof plugins.verifyRelease, "function"); + t.is(typeof plugins.generateNotes, "function"); + t.is(typeof plugins.prepare, "function"); + t.is(typeof plugins.publish, "function"); + t.is(typeof plugins.success, "function"); + t.is(typeof plugins.fail, "function"); }); test('Export plugins based on "plugins" config (single definition)', async (t) => { - const plugin1 = {verifyConditions: stub(), publish: stub()}; - const plugins = await getPlugins({cwd, logger: t.context.logger, options: {plugins: plugin1}}, {}); + const plugin1 = { verifyConditions: stub(), publish: stub() }; + const plugins = await getPlugins({ cwd, logger: t.context.logger, options: { plugins: plugin1 } }, {}); - await plugins.verifyConditions({options: {}}); + await plugins.verifyConditions({ options: {} }); t.true(plugin1.verifyConditions.calledOnce); - await plugins.publish({options: {}}); + await plugins.publish({ options: {} }); t.true(plugin1.publish.calledOnce); // Verify the module returns a function for each plugin - t.is(typeof plugins.verifyConditions, 'function'); - t.is(typeof plugins.analyzeCommits, 'function'); - t.is(typeof plugins.verifyRelease, 'function'); - t.is(typeof plugins.generateNotes, 'function'); - t.is(typeof plugins.prepare, 'function'); - t.is(typeof plugins.publish, 'function'); - t.is(typeof plugins.success, 'function'); - t.is(typeof plugins.fail, 'function'); + t.is(typeof plugins.verifyConditions, "function"); + t.is(typeof plugins.analyzeCommits, "function"); + t.is(typeof plugins.verifyRelease, "function"); + t.is(typeof plugins.generateNotes, "function"); + t.is(typeof plugins.prepare, "function"); + t.is(typeof plugins.publish, "function"); + t.is(typeof plugins.success, "function"); + t.is(typeof plugins.fail, "function"); }); test('Merge global options, "plugins" options and step options', async (t) => { - const plugin1 = [{verifyConditions: stub(), publish: stub()}, {pluginOpt1: 'plugin1'}]; - const plugin2 = [{verifyConditions: stub()}, {pluginOpt2: 'plugin2'}]; - const plugin3 = [stub(), {pluginOpt3: 'plugin3'}]; + const plugin1 = [{ verifyConditions: stub(), publish: stub() }, { pluginOpt1: "plugin1" }]; + const plugin2 = [{ verifyConditions: stub() }, { pluginOpt2: "plugin2" }]; + const plugin3 = [stub(), { pluginOpt3: "plugin3" }]; const plugins = await getPlugins( { cwd, logger: t.context.logger, - options: {globalOpt: 'global', plugins: [plugin1, plugin2], verifyRelease: [plugin3]}, + options: { globalOpt: "global", plugins: [plugin1, plugin2], verifyRelease: [plugin3] }, }, {} ); - await plugins.verifyConditions({options: {}}); - t.deepEqual(plugin1[0].verifyConditions.args[0][0], {globalOpt: 'global', pluginOpt1: 'plugin1'}); - t.deepEqual(plugin2[0].verifyConditions.args[0][0], {globalOpt: 'global', pluginOpt2: 'plugin2'}); + await plugins.verifyConditions({ options: {} }); + t.deepEqual(plugin1[0].verifyConditions.args[0][0], { globalOpt: "global", pluginOpt1: "plugin1" }); + t.deepEqual(plugin2[0].verifyConditions.args[0][0], { globalOpt: "global", pluginOpt2: "plugin2" }); - await plugins.publish({options: {}}); - t.deepEqual(plugin1[0].publish.args[0][0], {globalOpt: 'global', pluginOpt1: 'plugin1'}); + await plugins.publish({ options: {} }); + t.deepEqual(plugin1[0].publish.args[0][0], { globalOpt: "global", pluginOpt1: "plugin1" }); - await plugins.verifyRelease({options: {}}); - t.deepEqual(plugin3[0].args[0][0], {globalOpt: 'global', pluginOpt3: 'plugin3'}); + await plugins.verifyRelease({ options: {} }); + t.deepEqual(plugin3[0].args[0][0], { globalOpt: "global", pluginOpt3: "plugin3" }); }); test('Unknown steps of plugins configured in "plugins" are ignored', async (t) => { - const plugin1 = {verifyConditions: () => {}, unknown: () => {}}; - const plugins = await getPlugins({cwd, logger: t.context.logger, options: {plugins: [plugin1]}}, {}); + const plugin1 = { verifyConditions: () => {}, unknown: () => {} }; + const plugins = await getPlugins({ cwd, logger: t.context.logger, options: { plugins: [plugin1] } }, {}); - t.is(typeof plugins.verifyConditions, 'function'); + t.is(typeof plugins.verifyConditions, "function"); t.is(plugins.unknown, undefined); }); -test('Export plugins loaded from the dependency of a shareable config module', async (t) => { +test("Export plugins loaded from the dependency of a shareable config module", async (t) => { const cwd = temporaryDirectory(); await copy( - './test/fixtures/plugin-noop.cjs', - path.resolve(cwd, 'node_modules/shareable-config/node_modules/custom-plugin/index.js') + "./test/fixtures/plugin-noop.cjs", + path.resolve(cwd, "node_modules/shareable-config/node_modules/custom-plugin/index.js") ); - await outputFile(path.resolve(cwd, 'node_modules/shareable-config/index.js'), ''); + await outputFile(path.resolve(cwd, "node_modules/shareable-config/index.js"), ""); const plugins = await getPlugins( { cwd, logger: t.context.logger, options: { - verifyConditions: ['custom-plugin', {path: 'custom-plugin'}], - generateNotes: 'custom-plugin', - analyzeCommits: {path: 'custom-plugin'}, + verifyConditions: ["custom-plugin", { path: "custom-plugin" }], + generateNotes: "custom-plugin", + analyzeCommits: { path: "custom-plugin" }, verifyRelease: () => {}, }, }, - {'custom-plugin': 'shareable-config'} + { "custom-plugin": "shareable-config" } ); // Verify the module returns a function for each plugin - t.is(typeof plugins.verifyConditions, 'function'); - t.is(typeof plugins.analyzeCommits, 'function'); - t.is(typeof plugins.verifyRelease, 'function'); - t.is(typeof plugins.generateNotes, 'function'); - t.is(typeof plugins.prepare, 'function'); - t.is(typeof plugins.publish, 'function'); - t.is(typeof plugins.success, 'function'); - t.is(typeof plugins.fail, 'function'); + t.is(typeof plugins.verifyConditions, "function"); + t.is(typeof plugins.analyzeCommits, "function"); + t.is(typeof plugins.verifyRelease, "function"); + t.is(typeof plugins.generateNotes, "function"); + t.is(typeof plugins.prepare, "function"); + t.is(typeof plugins.publish, "function"); + t.is(typeof plugins.success, "function"); + t.is(typeof plugins.fail, "function"); }); -test('Export plugins loaded from the dependency of a shareable config file', async (t) => { +test("Export plugins loaded from the dependency of a shareable config file", async (t) => { const cwd = temporaryDirectory(); - await copy('./test/fixtures/plugin-noop.cjs', path.resolve(cwd, 'plugin/plugin-noop.cjs')); - await outputFile(path.resolve(cwd, 'shareable-config.js'), ''); + await copy("./test/fixtures/plugin-noop.cjs", path.resolve(cwd, "plugin/plugin-noop.cjs")); + await outputFile(path.resolve(cwd, "shareable-config.js"), ""); const plugins = await getPlugins( { cwd, logger: t.context.logger, options: { - verifyConditions: ['./plugin/plugin-noop.cjs', {path: './plugin/plugin-noop.cjs'}], - generateNotes: './plugin/plugin-noop.cjs', - analyzeCommits: {path: './plugin/plugin-noop.cjs'}, + verifyConditions: ["./plugin/plugin-noop.cjs", { path: "./plugin/plugin-noop.cjs" }], + generateNotes: "./plugin/plugin-noop.cjs", + analyzeCommits: { path: "./plugin/plugin-noop.cjs" }, verifyRelease: () => {}, }, }, - {'./plugin/plugin-noop': './shareable-config.js'} + { "./plugin/plugin-noop": "./shareable-config.js" } ); // Verify the module returns a function for each plugin - t.is(typeof plugins.verifyConditions, 'function'); - t.is(typeof plugins.analyzeCommits, 'function'); - t.is(typeof plugins.verifyRelease, 'function'); - t.is(typeof plugins.generateNotes, 'function'); - t.is(typeof plugins.prepare, 'function'); - t.is(typeof plugins.publish, 'function'); - t.is(typeof plugins.success, 'function'); - t.is(typeof plugins.fail, 'function'); + t.is(typeof plugins.verifyConditions, "function"); + t.is(typeof plugins.analyzeCommits, "function"); + t.is(typeof plugins.verifyRelease, "function"); + t.is(typeof plugins.generateNotes, "function"); + t.is(typeof plugins.prepare, "function"); + t.is(typeof plugins.publish, "function"); + t.is(typeof plugins.success, "function"); + t.is(typeof plugins.fail, "function"); }); -test('Use default when only options are passed for a single plugin', async (t) => { +test("Use default when only options are passed for a single plugin", async (t) => { const analyzeCommits = {}; const generateNotes = {}; const publish = {}; @@ -211,7 +211,7 @@ test('Use default when only options are passed for a single plugin', async (t) = cwd, logger: t.context.logger, options: { - plugins: ['@semantic-release/commit-analyzer', '@semantic-release/release-notes-generator'], + plugins: ["@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator"], analyzeCommits, generateNotes, publish, @@ -223,96 +223,102 @@ test('Use default when only options are passed for a single plugin', async (t) = ); // Verify the module returns a function for each plugin - t.is(typeof plugins.analyzeCommits, 'function'); - t.is(typeof plugins.generateNotes, 'function'); - t.is(typeof plugins.success, 'function'); - t.is(typeof plugins.fail, 'function'); + t.is(typeof plugins.analyzeCommits, "function"); + t.is(typeof plugins.generateNotes, "function"); + t.is(typeof plugins.success, "function"); + t.is(typeof plugins.fail, "function"); // Verify only the plugins defined as an object with no `path` are set to the default value t.falsy(success.path); t.falsy(fail.path); }); -test('Merge global options with plugin options', async (t) => { +test("Merge global options with plugin options", async (t) => { const plugins = await getPlugins( { cwd, logger: t.context.logger, options: { - globalOpt: 'global', - otherOpt: 'globally-defined', - verifyRelease: {path: './test/fixtures/plugin-result-config', localOpt: 'local', otherOpt: 'locally-defined'}, + globalOpt: "global", + otherOpt: "globally-defined", + verifyRelease: { path: "./test/fixtures/plugin-result-config", localOpt: "local", otherOpt: "locally-defined" }, }, }, {} ); - const [result] = await plugins.verifyRelease({options: {}}); + const [result] = await plugins.verifyRelease({ options: {} }); - t.deepEqual(result.pluginConfig, {localOpt: 'local', globalOpt: 'global', otherOpt: 'locally-defined'}); + t.deepEqual(result.pluginConfig, { localOpt: "local", globalOpt: "global", otherOpt: "locally-defined" }); }); -test('Throw an error for each invalid plugin configuration', async (t) => { +test("Throw an error for each invalid plugin configuration", async (t) => { const errors = [ - ...(await t.throwsAsync(() => - getPlugins( - { - cwd, - logger: t.context.logger, - options: { - plugins: ['@semantic-release/commit-analyzer', '@semantic-release/release-notes-generator'], - verifyConditions: 1, - analyzeCommits: [], - verifyRelease: [{}], - generateNotes: [{path: null}], + ...( + await t.throwsAsync(() => + getPlugins( + { + cwd, + logger: t.context.logger, + options: { + plugins: ["@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator"], + verifyConditions: 1, + analyzeCommits: [], + verifyRelease: [{}], + generateNotes: [{ path: null }], + }, }, - }, - {} + {} + ) ) - )).errors, + ).errors, ]; - t.is(errors[0].name, 'SemanticReleaseError'); - t.is(errors[0].code, 'EPLUGINCONF'); - t.is(errors[1].name, 'SemanticReleaseError'); - t.is(errors[1].code, 'EPLUGINCONF'); - t.is(errors[2].name, 'SemanticReleaseError'); - t.is(errors[2].code, 'EPLUGINCONF'); - t.is(errors[3].name, 'SemanticReleaseError'); - t.is(errors[3].code, 'EPLUGINCONF'); + t.is(errors[0].name, "SemanticReleaseError"); + t.is(errors[0].code, "EPLUGINCONF"); + t.is(errors[1].name, "SemanticReleaseError"); + t.is(errors[1].code, "EPLUGINCONF"); + t.is(errors[2].name, "SemanticReleaseError"); + t.is(errors[2].code, "EPLUGINCONF"); + t.is(errors[3].name, "SemanticReleaseError"); + t.is(errors[3].code, "EPLUGINCONF"); }); test('Throw EPLUGINSCONF error if the "plugins" option contains an old plugin definition (returns a function)', async (t) => { const errors = [ - ...(await t.throwsAsync(() => - getPlugins( - { - cwd, - logger: t.context.logger, - options: {plugins: ['./test/fixtures/multi-plugin.cjs', './test/fixtures/plugin-noop.cjs', () => {}]}, - }, - {} + ...( + await t.throwsAsync(() => + getPlugins( + { + cwd, + logger: t.context.logger, + options: { plugins: ["./test/fixtures/multi-plugin.cjs", "./test/fixtures/plugin-noop.cjs", () => {}] }, + }, + {} + ) ) - )).errors, + ).errors, ]; - t.is(errors[0].name, 'SemanticReleaseError'); - t.is(errors[0].code, 'EPLUGINSCONF'); - t.is(errors[1].name, 'SemanticReleaseError'); - t.is(errors[1].code, 'EPLUGINSCONF'); + t.is(errors[0].name, "SemanticReleaseError"); + t.is(errors[0].code, "EPLUGINSCONF"); + t.is(errors[1].name, "SemanticReleaseError"); + t.is(errors[1].code, "EPLUGINSCONF"); }); test('Throw EPLUGINSCONF error for each invalid definition if the "plugins" option', async (t) => { const errors = [ - ...(await t.throwsAsync(() => - getPlugins({cwd, logger: t.context.logger, options: {plugins: [1, {path: 1}, [() => {}, {}, {}]]}}, {}) - )).errors, + ...( + await t.throwsAsync(() => + getPlugins({ cwd, logger: t.context.logger, options: { plugins: [1, { path: 1 }, [() => {}, {}, {}]] } }, {}) + ) + ).errors, ]; - t.is(errors[0].name, 'SemanticReleaseError'); - t.is(errors[0].code, 'EPLUGINSCONF'); - t.is(errors[1].name, 'SemanticReleaseError'); - t.is(errors[1].code, 'EPLUGINSCONF'); - t.is(errors[2].name, 'SemanticReleaseError'); - t.is(errors[2].code, 'EPLUGINSCONF'); + t.is(errors[0].name, "SemanticReleaseError"); + t.is(errors[0].code, "EPLUGINSCONF"); + t.is(errors[1].name, "SemanticReleaseError"); + t.is(errors[1].code, "EPLUGINSCONF"); + t.is(errors[2].name, "SemanticReleaseError"); + t.is(errors[2].code, "EPLUGINSCONF"); }); diff --git a/test/plugins/utils.test.js b/test/plugins/utils.test.js index 160c01d7..323fd55f 100644 --- a/test/plugins/utils.test.js +++ b/test/plugins/utils.test.js @@ -1,203 +1,202 @@ -import test from 'ava'; -import {loadPlugin, parseConfig, validatePlugin, validateStep} from '../../lib/plugins/utils.js'; +import test from "ava"; +import { loadPlugin, parseConfig, validatePlugin, validateStep } from "../../lib/plugins/utils.js"; -test('validatePlugin', (t) => { - const path = 'plugin-module'; - const options = {option1: 'value1', option2: 'value2'}; +test("validatePlugin", (t) => { + const path = "plugin-module"; + const options = { option1: "value1", option2: "value2" }; - t.true(validatePlugin(path), 'String definition'); - t.true(validatePlugin({publish: () => {}}), 'Object definition'); - t.true(validatePlugin([path]), 'Array definition'); - t.true(validatePlugin([path, options]), 'Array definition with options'); - t.true(validatePlugin([{publish: () => {}}, options]), 'Array definition with options and path as object'); - t.true(validatePlugin({path}), 'Object with path definition'); - t.true(validatePlugin({path, ...options}), 'Object with path definition with options'); + t.true(validatePlugin(path), "String definition"); + t.true(validatePlugin({ publish: () => {} }), "Object definition"); + t.true(validatePlugin([path]), "Array definition"); + t.true(validatePlugin([path, options]), "Array definition with options"); + t.true(validatePlugin([{ publish: () => {} }, options]), "Array definition with options and path as object"); + t.true(validatePlugin({ path }), "Object with path definition"); + t.true(validatePlugin({ path, ...options }), "Object with path definition with options"); t.true( - validatePlugin({path: {publish: () => {}}, ...options}), - 'Object with path definition with options and path as object' + validatePlugin({ path: { publish: () => {} }, ...options }), + "Object with path definition with options and path as object" ); - t.false(validatePlugin(1), 'String definition, wrong path'); - t.false(validatePlugin([]), 'Array definition, missing path'); - t.false(validatePlugin([path, options, {}]), 'Array definition, additional parameter'); - t.false(validatePlugin([1]), 'Array definition, wrong path'); - t.false(validatePlugin([path, 1]), 'Array definition, wrong options'); - t.false(validatePlugin({path: 1}), 'Object definition, wrong path'); + t.false(validatePlugin(1), "String definition, wrong path"); + t.false(validatePlugin([]), "Array definition, missing path"); + t.false(validatePlugin([path, options, {}]), "Array definition, additional parameter"); + t.false(validatePlugin([1]), "Array definition, wrong path"); + t.false(validatePlugin([path, 1]), "Array definition, wrong options"); + t.false(validatePlugin({ path: 1 }), "Object definition, wrong path"); }); -test('validateStep: optional plugin configuration', (t) => { - const type = {multiple: true, required: false}; +test("validateStep: optional plugin configuration", (t) => { + const type = { multiple: true, required: false }; // Empty config t.true(validateStep(type)); t.true(validateStep(type, [])); // Single value definition - t.true(validateStep(type, 'plugin-path.js')); + t.true(validateStep(type, "plugin-path.js")); t.true(validateStep(type, () => {})); - t.true(validateStep(type, ['plugin-path.js'])); + t.true(validateStep(type, ["plugin-path.js"])); t.true(validateStep(type, [() => {}])); t.false(validateStep(type, {})); t.false(validateStep(type, [{}])); // Array type definition - t.true(validateStep(type, [['plugin-path.js']])); - t.true(validateStep(type, [['plugin-path.js', {options: 'value'}]])); - t.true(validateStep(type, [[() => {}, {options: 'value'}]])); - t.false(validateStep(type, [['plugin-path.js', 1]])); + t.true(validateStep(type, [["plugin-path.js"]])); + t.true(validateStep(type, [["plugin-path.js", { options: "value" }]])); + t.true(validateStep(type, [[() => {}, { options: "value" }]])); + t.false(validateStep(type, [["plugin-path.js", 1]])); // Object type definition - t.true(validateStep(type, {path: 'plugin-path.js'})); - t.true(validateStep(type, {path: 'plugin-path.js', options: 'value'})); - t.true(validateStep(type, {path: () => {}, options: 'value'})); - t.false(validateStep(type, {path: null})); + t.true(validateStep(type, { path: "plugin-path.js" })); + t.true(validateStep(type, { path: "plugin-path.js", options: "value" })); + t.true(validateStep(type, { path: () => {}, options: "value" })); + t.false(validateStep(type, { path: null })); // Considered as an Array of 2 definitions and not as one Array definition in case of a muliple plugin type - t.false(validateStep(type, [() => {}, {options: 'value'}])); - t.false(validateStep(type, ['plugin-path.js', {options: 'value'}])); + t.false(validateStep(type, [() => {}, { options: "value" }])); + t.false(validateStep(type, ["plugin-path.js", { options: "value" }])); // Multiple definitions t.true( validateStep(type, [ - 'plugin-path.js', + "plugin-path.js", () => {}, - ['plugin-path.js'], - ['plugin-path.js', {options: 'value'}], - [() => {}, {options: 'value'}], - {path: 'plugin-path.js'}, - {path: 'plugin-path.js', options: 'value'}, - {path: () => {}, options: 'value'}, + ["plugin-path.js"], + ["plugin-path.js", { options: "value" }], + [() => {}, { options: "value" }], + { path: "plugin-path.js" }, + { path: "plugin-path.js", options: "value" }, + { path: () => {}, options: "value" }, ]) ); t.false( validateStep(type, [ - 'plugin-path.js', + "plugin-path.js", () => {}, - ['plugin-path.js'], - ['plugin-path.js', 1], - [() => {}, {options: 'value'}], - {path: 'plugin-path.js'}, - {path: 'plugin-path.js', options: 'value'}, - {path: () => {}, options: 'value'}, + ["plugin-path.js"], + ["plugin-path.js", 1], + [() => {}, { options: "value" }], + { path: "plugin-path.js" }, + { path: "plugin-path.js", options: "value" }, + { path: () => {}, options: "value" }, ]) ); t.false( validateStep(type, [ - 'plugin-path.js', + "plugin-path.js", {}, - ['plugin-path.js'], - ['plugin-path.js', {options: 'value'}], - [() => {}, {options: 'value'}], - {path: 'plugin-path.js'}, - {path: 'plugin-path.js', options: 'value'}, - {path: () => {}, options: 'value'}, + ["plugin-path.js"], + ["plugin-path.js", { options: "value" }], + [() => {}, { options: "value" }], + { path: "plugin-path.js" }, + { path: "plugin-path.js", options: "value" }, + { path: () => {}, options: "value" }, ]) ); t.false( validateStep(type, [ - 'plugin-path.js', + "plugin-path.js", () => {}, - ['plugin-path.js'], - ['plugin-path.js', {options: 'value'}], - [() => {}, {options: 'value'}], - {path: null}, - {path: 'plugin-path.js', options: 'value'}, - {path: () => {}, options: 'value'}, + ["plugin-path.js"], + ["plugin-path.js", { options: "value" }], + [() => {}, { options: "value" }], + { path: null }, + { path: "plugin-path.js", options: "value" }, + { path: () => {}, options: "value" }, ]) ); }); -test('validateStep: required plugin configuration', (t) => { - const type = {required: true}; +test("validateStep: required plugin configuration", (t) => { + const type = { required: true }; // Empty config t.false(validateStep(type)); t.false(validateStep(type, [])); // Single value definition - t.true(validateStep(type, 'plugin-path.js')); + t.true(validateStep(type, "plugin-path.js")); t.true(validateStep(type, () => {})); - t.true(validateStep(type, ['plugin-path.js'])); + t.true(validateStep(type, ["plugin-path.js"])); t.true(validateStep(type, [() => {}])); t.false(validateStep(type, {})); t.false(validateStep(type, [{}])); // Array type definition - t.true(validateStep(type, [['plugin-path.js']])); - t.true(validateStep(type, [['plugin-path.js', {options: 'value'}]])); - t.true(validateStep(type, [[() => {}, {options: 'value'}]])); - t.false(validateStep(type, [['plugin-path.js', 1]])); + t.true(validateStep(type, [["plugin-path.js"]])); + t.true(validateStep(type, [["plugin-path.js", { options: "value" }]])); + t.true(validateStep(type, [[() => {}, { options: "value" }]])); + t.false(validateStep(type, [["plugin-path.js", 1]])); // Object type definition - t.true(validateStep(type, {path: 'plugin-path.js'})); - t.true(validateStep(type, {path: 'plugin-path.js', options: 'value'})); - t.true(validateStep(type, {path: () => {}, options: 'value'})); - t.false(validateStep(type, {path: null})); + t.true(validateStep(type, { path: "plugin-path.js" })); + t.true(validateStep(type, { path: "plugin-path.js", options: "value" })); + t.true(validateStep(type, { path: () => {}, options: "value" })); + t.false(validateStep(type, { path: null })); // Considered as an Array of 2 definitions and not as one Array definition in the case of a muliple plugin type - t.false(validateStep(type, [() => {}, {options: 'value'}])); - t.false(validateStep(type, ['plugin-path.js', {options: 'value'}])); + t.false(validateStep(type, [() => {}, { options: "value" }])); + t.false(validateStep(type, ["plugin-path.js", { options: "value" }])); // Multiple definitions t.true( validateStep(type, [ - 'plugin-path.js', + "plugin-path.js", () => {}, - ['plugin-path.js'], - ['plugin-path.js', {options: 'value'}], - [() => {}, {options: 'value'}], - {path: 'plugin-path.js'}, - {path: 'plugin-path.js', options: 'value'}, - {path: () => {}, options: 'value'}, + ["plugin-path.js"], + ["plugin-path.js", { options: "value" }], + [() => {}, { options: "value" }], + { path: "plugin-path.js" }, + { path: "plugin-path.js", options: "value" }, + { path: () => {}, options: "value" }, ]) ); t.false( validateStep(type, [ - 'plugin-path.js', + "plugin-path.js", () => {}, - ['plugin-path.js'], - ['plugin-path.js', 1], - [() => {}, {options: 'value'}], - {path: 'plugin-path.js'}, - {path: 'plugin-path.js', options: 'value'}, - {path: () => {}, options: 'value'}, + ["plugin-path.js"], + ["plugin-path.js", 1], + [() => {}, { options: "value" }], + { path: "plugin-path.js" }, + { path: "plugin-path.js", options: "value" }, + { path: () => {}, options: "value" }, ]) ); t.false( validateStep(type, [ - 'plugin-path.js', + "plugin-path.js", {}, - ['plugin-path.js'], - ['plugin-path.js', {options: 'value'}], - [() => {}, {options: 'value'}], - {path: 'plugin-path.js'}, - {path: 'plugin-path.js', options: 'value'}, - {path: () => {}, options: 'value'}, + ["plugin-path.js"], + ["plugin-path.js", { options: "value" }], + [() => {}, { options: "value" }], + { path: "plugin-path.js" }, + { path: "plugin-path.js", options: "value" }, + { path: () => {}, options: "value" }, ]) ); t.false( validateStep(type, [ - 'plugin-path.js', + "plugin-path.js", () => {}, - ['plugin-path.js'], - ['plugin-path.js', {options: 'value'}], - [() => {}, {options: 'value'}], - {path: null}, - {path: 'plugin-path.js', options: 'value'}, - {path: () => {}, options: 'value'}, + ["plugin-path.js"], + ["plugin-path.js", { options: "value" }], + [() => {}, { options: "value" }], + { path: null }, + { path: "plugin-path.js", options: "value" }, + { path: () => {}, options: "value" }, ]) ); }); -test('loadPlugin', async (t) => { +test("loadPlugin", async (t) => { const cwd = process.cwd(); const func = () => {}; - t.is((await import('../fixtures/plugin-noop.cjs')).default, await loadPlugin({cwd: './test/fixtures'}, './plugin-noop.cjs', {}), 'From cwd'); t.is( - (await import('../fixtures/plugin-noop.cjs')).default, - await loadPlugin({cwd}, './plugin-noop.cjs', {'./plugin-noop.cjs': './test/fixtures'}), - 'From a shareable config context' + (await import("../fixtures/plugin-noop.cjs")).default, + await loadPlugin({ cwd: "./test/fixtures" }, "./plugin-noop.cjs", {}), + "From cwd" ); t.is( (await import("../fixtures/plugin-noop.cjs")).default, @@ -213,13 +212,13 @@ test('loadPlugin', async (t) => { t.is(func, await loadPlugin({ cwd }, func, {}), "Defined as a function"); }); -test('parseConfig', (t) => { - const path = 'plugin-module'; - const options = {option1: 'value1', option2: 'value2'}; +test("parseConfig", (t) => { + const path = "plugin-module"; + const options = { option1: "value1", option2: "value2" }; - t.deepEqual(parseConfig(path), [path, {}], 'String definition'); - t.deepEqual(parseConfig({path}), [path, {}], 'Object definition'); - t.deepEqual(parseConfig({path, ...options}), [path, options], 'Object definition with options'); - t.deepEqual(parseConfig([path]), [path, {}], 'Array definition'); - t.deepEqual(parseConfig([path, options]), [path, options], 'Array definition with options'); + t.deepEqual(parseConfig(path), [path, {}], "String definition"); + t.deepEqual(parseConfig({ path }), [path, {}], "Object definition"); + t.deepEqual(parseConfig({ path, ...options }), [path, options], "Object definition with options"); + t.deepEqual(parseConfig([path]), [path, {}], "Array definition"); + t.deepEqual(parseConfig([path, options]), [path, options], "Array definition with options"); });