@changesets/cli
Advanced tools
+8
-0
| # @changesets/cli | ||
| ## 2.5.2 | ||
| ### Patch Changes | ||
| - [`184a653`](https://github.com/atlassian/changesets/commit/184a653de2d050f877b91d0ad319f00683bbc7ff) [#278](https://github.com/atlassian/changesets/pull/278) Thanks [@mitchellhamilton](https://github.com/mitchellhamilton)! - Use a single prompt for the semver version type when there is only a single package in the repo in `changeset add` | ||
|  | ||
| ## 2.5.1 | ||
@@ -4,0 +12,0 @@ |
+132
-86
@@ -16,3 +16,2 @@ 'use strict'; | ||
| var git = require('@changesets/git'); | ||
| var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty')); | ||
| var prettier = _interopDefault(require('prettier')); | ||
@@ -132,6 +131,23 @@ var humanId = _interopDefault(require('human-id')); | ||
| async function askList(message, choices) { | ||
| const name = `List-${serialId()}`; | ||
| return enquirer.prompt([{ | ||
| choices, | ||
| message, | ||
| name, | ||
| // @ts-ignore | ||
| prefix: logger.prefix, | ||
| type: "select", | ||
| onCancel: cancelFlow | ||
| }]).then(responses => responses[name]).catch(err => { | ||
| logger.error(err); | ||
| }); | ||
| } | ||
| function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
| function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
| function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
| function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
| async function writeChangeset(changeset, cwd) { | ||
@@ -166,17 +182,2 @@ const { | ||
| function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
| function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
| async function getWorkspaces (opts) { | ||
| let workspaces = await getWorkspaces$1(_objectSpread$1({ | ||
| tools: ["yarn", "bolt", "pnpm", "root"] | ||
| }, opts)); | ||
| if (workspaces === null) { | ||
| return []; | ||
| } | ||
| return workspaces; | ||
| } | ||
| const { | ||
@@ -191,2 +192,14 @@ green, | ||
| async function confirmMajorRelease(pkgJSON) { | ||
| if (semver.lt(pkgJSON.version, "1.0.0")) { | ||
| // prettier-ignore | ||
| logger.log(yellow(`WARNING: Releasing a major version for ${green(pkgJSON.name)} will be its ${red('first major release')}.`)); | ||
| logger.log(yellow(`If you are unsure if this is correct, contact the package's maintainers$ ${red("before committing this changeset")}.`)); | ||
| let shouldReleaseFirstMajor = await askConfirm(bold(`Are you sure you want still want to release the ${red("first major release")} of ${pkgJSON.name}?`)); | ||
| return shouldReleaseFirstMajor; | ||
| } | ||
| return true; | ||
| } | ||
| async function getPackagesToRelease(changedPackages, allPackages) { | ||
@@ -240,75 +253,82 @@ function askInitialReleaseQuestion(defaultChoiceList) { | ||
| async function createChangeset(changedPackages, cwd) { | ||
| const allPackages = await getWorkspaces({ | ||
| cwd | ||
| }); | ||
| const packagesToRelease = await getPackagesToRelease(changedPackages, allPackages); | ||
| let pkgJsonsByName = new Map(allPackages.map(({ | ||
| name, | ||
| config | ||
| }) => [name, config])); | ||
| async function createChangeset(changedPackages, allPackages) { | ||
| const releases = []; | ||
| let pkgsLeftToGetBumpTypeFor = new Set(packagesToRelease); | ||
| let pkgsThatShouldBeMajorBumped = await askCheckboxPlus(bold(`Which packages should have a ${red("major")} bump?`), packagesToRelease.map(pkgName => { | ||
| return { | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }; | ||
| })); | ||
| for (const pkgName of pkgsThatShouldBeMajorBumped) { | ||
| // for packages that are under v1, we want to make sure major releases are intended, | ||
| // as some repo-wide sweeping changes have mistakenly release first majors | ||
| // of packages. | ||
| let { | ||
| version | ||
| } = pkgJsonsByName.get(pkgName); | ||
| if (allPackages.length > 1) { | ||
| const packagesToRelease = await getPackagesToRelease(changedPackages, allPackages); | ||
| let pkgJsonsByName = new Map(allPackages.map(({ | ||
| name, | ||
| config | ||
| }) => [name, config])); | ||
| let pkgsLeftToGetBumpTypeFor = new Set(packagesToRelease); | ||
| let pkgsThatShouldBeMajorBumped = await askCheckboxPlus(bold(`Which packages should have a ${red("major")} bump?`), packagesToRelease.map(pkgName => { | ||
| return { | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }; | ||
| })); | ||
| if (semver.lt(version, "1.0.0")) { | ||
| // prettier-ignore | ||
| logger.log(yellow(`WARNING: Releasing a major version for ${green(pkgName)} will be its ${red('first major release')}.`)); | ||
| logger.log(yellow(`If you are unsure if this is correct, contact the package's maintainers$ ${red("before committing this changeset")}.`)); | ||
| let shouldReleaseFirstMajor = await askConfirm(bold(`Are you sure you want still want to release the ${red("first major release")} of ${pkgName}?`)); | ||
| for (const pkgName of pkgsThatShouldBeMajorBumped) { | ||
| // for packages that are under v1, we want to make sure major releases are intended, | ||
| // as some repo-wide sweeping changes have mistakenly release first majors | ||
| // of packages. | ||
| let pkgJson = pkgJsonsByName.get(pkgName); | ||
| let shouldReleaseFirstMajor = await confirmMajorRelease(pkgJson); | ||
| if (!shouldReleaseFirstMajor) { | ||
| continue; | ||
| if (shouldReleaseFirstMajor) { | ||
| pkgsLeftToGetBumpTypeFor.delete(pkgName); | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "major" | ||
| }); | ||
| } | ||
| } | ||
| pkgsLeftToGetBumpTypeFor.delete(pkgName); | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "major" | ||
| }); | ||
| } | ||
| if (pkgsLeftToGetBumpTypeFor.size !== 0) { | ||
| let pkgsThatShouldBeMinorBumped = await askCheckboxPlus(bold(`Which packages should have a ${green("minor")} bump?`), [...pkgsLeftToGetBumpTypeFor].map(pkgName => { | ||
| return { | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }; | ||
| })); | ||
| if (pkgsLeftToGetBumpTypeFor.size !== 0) { | ||
| let pkgsThatShouldBeMinorBumped = await askCheckboxPlus(bold(`Which packages should have a ${green("minor")} bump?`), [...pkgsLeftToGetBumpTypeFor].map(pkgName => { | ||
| return { | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }; | ||
| })); | ||
| for (const pkgName of pkgsThatShouldBeMinorBumped) { | ||
| pkgsLeftToGetBumpTypeFor.delete(pkgName); | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "minor" | ||
| }); | ||
| } | ||
| } | ||
| for (const pkgName of pkgsThatShouldBeMinorBumped) { | ||
| pkgsLeftToGetBumpTypeFor.delete(pkgName); | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "minor" | ||
| if (pkgsLeftToGetBumpTypeFor.size !== 0) { | ||
| logger.log(`The following packages will be ${blue("patch")} bumped:`); | ||
| pkgsLeftToGetBumpTypeFor.forEach(pkgName => { | ||
| logger.log(formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version)); | ||
| }); | ||
| for (const pkgName of pkgsLeftToGetBumpTypeFor) { | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "patch" | ||
| }); | ||
| } | ||
| } | ||
| } | ||
| } else { | ||
| let pkg = allPackages[0]; | ||
| let type = await askList(`What kind of change is this for ${green(pkg.name)}? (current version is ${pkg.config.version})`, ["patch", "minor", "major"]); | ||
| console.log(type); | ||
| if (pkgsLeftToGetBumpTypeFor.size !== 0) { | ||
| logger.log(`The following packages will be ${blue("patch")} bumped:`); | ||
| pkgsLeftToGetBumpTypeFor.forEach(pkgName => { | ||
| logger.log(formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version)); | ||
| }); | ||
| if (type === "major") { | ||
| let shouldReleaseAsMajor = await confirmMajorRelease(pkg.config); | ||
| for (const pkgName of pkgsLeftToGetBumpTypeFor) { | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "patch" | ||
| }); | ||
| if (!shouldReleaseAsMajor) { | ||
| throw new errors.ExitError(1); | ||
| } | ||
| } | ||
| releases.push({ | ||
| name: pkg.name, | ||
| type | ||
| }); | ||
| } | ||
@@ -330,3 +350,3 @@ | ||
| function printConfirmationMessage(changeset) { | ||
| function printConfirmationMessage(changeset, repoHasMultiplePackages) { | ||
| function getReleasesOfType(type) { | ||
@@ -343,15 +363,38 @@ return changeset.releases.filter(release => release.type === type).map(release => release.name); | ||
| if (patchReleases.length > 0) logger.log(`${chalk.green("[Patch]")}\n ${patchReleases.join(", ")}`); | ||
| const message = outdent` | ||
| if (repoHasMultiplePackages) { | ||
| const message = outdent` | ||
| ${chalk.red("========= NOTE ========")} | ||
| All dependents of these packages that will be incompatible with the new version will be ${chalk.red("patch bumped")} when this changeset is applied.`; | ||
| const prettyMessage = boxen(message, { | ||
| borderStyle: "double", | ||
| align: "center" | ||
| }); | ||
| logger.log(prettyMessage); | ||
| const prettyMessage = boxen(message, { | ||
| borderStyle: "double", | ||
| align: "center" | ||
| }); | ||
| logger.log(prettyMessage); | ||
| } | ||
| } | ||
| function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
| function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { _defineProperty$1(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
| function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
| async function getWorkspaces (opts) { | ||
| let workspaces = await getWorkspaces$1(_objectSpread$1({ | ||
| tools: ["yarn", "bolt", "pnpm", "root"] | ||
| }, opts)); | ||
| if (workspaces === null) { | ||
| return []; | ||
| } | ||
| return workspaces; | ||
| } | ||
| async function add(cwd, { | ||
| empty | ||
| }, config) { | ||
| const allPackages = await getWorkspaces({ | ||
| cwd | ||
| }); | ||
| const changesetBase = path.resolve(cwd, ".changeset"); | ||
@@ -372,4 +415,4 @@ let newChangeset, confirmChangeset; | ||
| const changePackagesName = changedPackages.filter(a => a).map(pkg => pkg.name); | ||
| newChangeset = await createChangeset(changePackagesName, cwd); | ||
| printConfirmationMessage(newChangeset); | ||
| newChangeset = await createChangeset(changePackagesName, allPackages); | ||
| printConfirmationMessage(newChangeset, allPackages.length > 1); | ||
| confirmChangeset = await askConfirm("Is this your desired changeset?"); | ||
@@ -427,4 +470,7 @@ } | ||
| async function version(cwd, config) { | ||
| let [changesets, preState] = await Promise.all([readChangesets(cwd), pre$1.readPreState(cwd), removeEmptyFolders(path.resolve(cwd, ".changeset"))]); | ||
| let [_changesets, _preState] = await Promise.all([readChangesets(cwd), pre$1.readPreState(cwd), removeEmptyFolders(path.resolve(cwd, ".changeset"))]); // temporarily needed because of TS 3.7 regression - https://github.com/microsoft/TypeScript/issues/33752 | ||
| const changesets = _changesets; | ||
| const preState = _preState; | ||
| if (preState !== undefined && preState.mode === "pre") { | ||
@@ -431,0 +477,0 @@ logger.warn(importantSeparator); |
+130
-80
@@ -7,3 +7,3 @@ "use strict"; | ||
| var meow = _interopDefault(require("meow")), config = require("@changesets/config"), errors = require("@changesets/errors"), logger = require("@changesets/logger"), fs = _interopDefault(require("fs-extra")), path = _interopDefault(require("path")), getWorkspaces$1 = _interopDefault(require("get-workspaces")), chalk = _interopDefault(require("chalk")), termSize = _interopDefault(require("term-size")), enquirer = require("enquirer"), git = require("@changesets/git"), _defineProperty = _interopDefault(require("@babel/runtime/helpers/defineProperty")), prettier = _interopDefault(require("prettier")), humanId = _interopDefault(require("human-id")), semver = _interopDefault(require("semver")), boxen = _interopDefault(require("boxen")), outdent = _interopDefault(require("outdent")), applyReleasePlan = _interopDefault(require("@changesets/apply-release-plan")), readChangesets = _interopDefault(require("@changesets/read")), getDependentsgraph = _interopDefault(require("get-dependents-graph")), assembleReleasePlan = _interopDefault(require("@changesets/assemble-release-plan")), pre$1 = require("@changesets/pre"), pLimit = _interopDefault(require("p-limit")), spawn = _interopDefault(require("spawndamnit")), isCI$1 = _interopDefault(require("is-ci")), table = _interopDefault(require("tty-table")), getReleasePlan = _interopDefault(require("@changesets/get-release-plan")), util = require("util"); | ||
| var meow = _interopDefault(require("meow")), config = require("@changesets/config"), errors = require("@changesets/errors"), logger = require("@changesets/logger"), fs = _interopDefault(require("fs-extra")), path = _interopDefault(require("path")), getWorkspaces$1 = _interopDefault(require("get-workspaces")), chalk = _interopDefault(require("chalk")), termSize = _interopDefault(require("term-size")), enquirer = require("enquirer"), git = require("@changesets/git"), prettier = _interopDefault(require("prettier")), humanId = _interopDefault(require("human-id")), semver = _interopDefault(require("semver")), boxen = _interopDefault(require("boxen")), outdent = _interopDefault(require("outdent")), applyReleasePlan = _interopDefault(require("@changesets/apply-release-plan")), readChangesets = _interopDefault(require("@changesets/read")), getDependentsgraph = _interopDefault(require("get-dependents-graph")), assembleReleasePlan = _interopDefault(require("@changesets/assemble-release-plan")), pre$1 = require("@changesets/pre"), pLimit = _interopDefault(require("p-limit")), spawn = _interopDefault(require("spawndamnit")), isCI$1 = _interopDefault(require("is-ci")), table = _interopDefault(require("tty-table")), getReleasePlan = _interopDefault(require("@changesets/get-release-plan")), util = require("util"); | ||
@@ -80,2 +80,16 @@ const pkgPath = path.dirname(require.resolve("@changesets/cli/package.json")); | ||
| async function askList(message, choices) { | ||
| const name = `List-${serialId()}`; | ||
| return enquirer.prompt([ { | ||
| choices: choices, | ||
| message: message, | ||
| name: name, | ||
| prefix: logger.prefix, | ||
| type: "select", | ||
| onCancel: cancelFlow | ||
| } ]).then(responses => responses[name]).catch(err => { | ||
| logger.error(err); | ||
| }); | ||
| } | ||
| function ownKeys(object, enumerableOnly) { | ||
@@ -85,5 +99,5 @@ var keys = Object.keys(object); | ||
| var symbols = Object.getOwnPropertySymbols(object); | ||
| enumerableOnly && (symbols = symbols.filter(function(sym) { | ||
| enumerableOnly && (symbols = symbols.filter((function(sym) { | ||
| return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
| })), keys.push.apply(keys, symbols); | ||
| }))), keys.push.apply(keys, symbols); | ||
| } | ||
@@ -96,7 +110,7 @@ return keys; | ||
| var source = null != arguments[i] ? arguments[i] : {}; | ||
| i % 2 ? ownKeys(source, !0).forEach(function(key) { | ||
| i % 2 ? ownKeys(Object(source), !0).forEach((function(key) { | ||
| _defineProperty(target, key, source[key]); | ||
| }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(source).forEach(function(key) { | ||
| })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach((function(key) { | ||
| Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
| }); | ||
| })); | ||
| } | ||
@@ -106,2 +120,11 @@ return target; | ||
| function _defineProperty(obj, key, value) { | ||
| return key in obj ? Object.defineProperty(obj, key, { | ||
| value: value, | ||
| enumerable: !0, | ||
| configurable: !0, | ||
| writable: !0 | ||
| }) : obj[key] = value, obj; | ||
| } | ||
| async function writeChangeset(changeset, cwd) { | ||
@@ -117,34 +140,13 @@ const {summary: summary, releases: releases} = changeset, changesetBase = path.resolve(cwd, ".changeset"), changesetID = humanId({ | ||
| function ownKeys$1(object, enumerableOnly) { | ||
| var keys = Object.keys(object); | ||
| if (Object.getOwnPropertySymbols) { | ||
| var symbols = Object.getOwnPropertySymbols(object); | ||
| enumerableOnly && (symbols = symbols.filter(function(sym) { | ||
| return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
| })), keys.push.apply(keys, symbols); | ||
| } | ||
| return keys; | ||
| } | ||
| const {green: green, yellow: yellow, red: red, bold: bold, blue: blue, cyan: cyan} = chalk; | ||
| function _objectSpread$1(target) { | ||
| for (var i = 1; i < arguments.length; i++) { | ||
| var source = null != arguments[i] ? arguments[i] : {}; | ||
| i % 2 ? ownKeys$1(source, !0).forEach(function(key) { | ||
| _defineProperty(target, key, source[key]); | ||
| }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(source).forEach(function(key) { | ||
| Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
| }); | ||
| async function confirmMajorRelease(pkgJSON) { | ||
| if (semver.lt(pkgJSON.version, "1.0.0")) { | ||
| return logger.log(yellow(`WARNING: Releasing a major version for ${green(pkgJSON.name)} will be its ${red("first major release")}.`)), | ||
| logger.log(yellow(`If you are unsure if this is correct, contact the package's maintainers$ ${red("before committing this changeset")}.`)), | ||
| await askConfirm(bold(`Are you sure you want still want to release the ${red("first major release")} of ${pkgJSON.name}?`)); | ||
| } | ||
| return target; | ||
| return !0; | ||
| } | ||
| async function getWorkspaces(opts) { | ||
| let workspaces = await getWorkspaces$1(_objectSpread$1({ | ||
| tools: [ "yarn", "bolt", "pnpm", "root" ] | ||
| }, opts)); | ||
| return null === workspaces ? [] : workspaces; | ||
| } | ||
| const {green: green, yellow: yellow, red: red, bold: bold, blue: blue, cyan: cyan} = chalk; | ||
| async function getPackagesToRelease(changedPackages, allPackages) { | ||
@@ -176,44 +178,48 @@ function askInitialReleaseQuestion(defaultChoiceList) { | ||
| async function createChangeset(changedPackages, cwd) { | ||
| const allPackages = await getWorkspaces({ | ||
| cwd: cwd | ||
| }), packagesToRelease = await getPackagesToRelease(changedPackages, allPackages); | ||
| let pkgJsonsByName = new Map(allPackages.map(({name: name, config: config}) => [ name, config ])); | ||
| async function createChangeset(changedPackages, allPackages) { | ||
| const releases = []; | ||
| let pkgsLeftToGetBumpTypeFor = new Set(packagesToRelease), pkgsThatShouldBeMajorBumped = await askCheckboxPlus(bold(`Which packages should have a ${red("major")} bump?`), packagesToRelease.map(pkgName => ({ | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }))); | ||
| for (const pkgName of pkgsThatShouldBeMajorBumped) { | ||
| let {version: version} = pkgJsonsByName.get(pkgName); | ||
| if (semver.lt(version, "1.0.0")) { | ||
| if (logger.log(yellow(`WARNING: Releasing a major version for ${green(pkgName)} will be its ${red("first major release")}.`)), | ||
| logger.log(yellow(`If you are unsure if this is correct, contact the package's maintainers$ ${red("before committing this changeset")}.`)), | ||
| !await askConfirm(bold(`Are you sure you want still want to release the ${red("first major release")} of ${pkgName}?`))) continue; | ||
| } | ||
| pkgsLeftToGetBumpTypeFor.delete(pkgName), releases.push({ | ||
| if (allPackages.length > 1) { | ||
| const packagesToRelease = await getPackagesToRelease(changedPackages, allPackages); | ||
| let pkgJsonsByName = new Map(allPackages.map(({name: name, config: config}) => [ name, config ])), pkgsLeftToGetBumpTypeFor = new Set(packagesToRelease), pkgsThatShouldBeMajorBumped = await askCheckboxPlus(bold(`Which packages should have a ${red("major")} bump?`), packagesToRelease.map(pkgName => ({ | ||
| name: pkgName, | ||
| type: "major" | ||
| }); | ||
| } | ||
| if (0 !== pkgsLeftToGetBumpTypeFor.size) { | ||
| let pkgsThatShouldBeMinorBumped = await askCheckboxPlus(bold(`Which packages should have a ${green("minor")} bump?`), [ ...pkgsLeftToGetBumpTypeFor ].map(pkgName => ({ | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }))); | ||
| for (const pkgName of pkgsThatShouldBeMinorBumped) pkgsLeftToGetBumpTypeFor.delete(pkgName), | ||
| for (const pkgName of pkgsThatShouldBeMajorBumped) { | ||
| let pkgJson = pkgJsonsByName.get(pkgName); | ||
| await confirmMajorRelease(pkgJson) && (pkgsLeftToGetBumpTypeFor.delete(pkgName), | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "major" | ||
| })); | ||
| } | ||
| if (0 !== pkgsLeftToGetBumpTypeFor.size) { | ||
| let pkgsThatShouldBeMinorBumped = await askCheckboxPlus(bold(`Which packages should have a ${green("minor")} bump?`), [ ...pkgsLeftToGetBumpTypeFor ].map(pkgName => ({ | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }))); | ||
| for (const pkgName of pkgsThatShouldBeMinorBumped) pkgsLeftToGetBumpTypeFor.delete(pkgName), | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "minor" | ||
| }); | ||
| } | ||
| if (0 !== pkgsLeftToGetBumpTypeFor.size) { | ||
| logger.log(`The following packages will be ${blue("patch")} bumped:`), pkgsLeftToGetBumpTypeFor.forEach(pkgName => { | ||
| logger.log(formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version)); | ||
| }); | ||
| for (const pkgName of pkgsLeftToGetBumpTypeFor) releases.push({ | ||
| name: pkgName, | ||
| type: "patch" | ||
| }); | ||
| } | ||
| } else { | ||
| let pkg = allPackages[0], type = await askList(`What kind of change is this for ${green(pkg.name)}? (current version is ${pkg.config.version})`, [ "patch", "minor", "major" ]); | ||
| if (console.log(type), "major" === type) { | ||
| if (!await confirmMajorRelease(pkg.config)) throw new errors.ExitError(1); | ||
| } | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "minor" | ||
| name: pkg.name, | ||
| type: type | ||
| }); | ||
| } | ||
| if (0 !== pkgsLeftToGetBumpTypeFor.size) { | ||
| logger.log(`The following packages will be ${blue("patch")} bumped:`), pkgsLeftToGetBumpTypeFor.forEach(pkgName => { | ||
| logger.log(formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version)); | ||
| }); | ||
| for (const pkgName of pkgsLeftToGetBumpTypeFor) releases.push({ | ||
| name: pkgName, | ||
| type: "patch" | ||
| }); | ||
| } | ||
| logger.log("Please enter a summary for this change (this will be in the changelogs)"); | ||
@@ -229,3 +235,3 @@ let summary = await askQuestion("Summary"); | ||
| function printConfirmationMessage(changeset) { | ||
| function printConfirmationMessage(changeset, repoHasMultiplePackages) { | ||
| function getReleasesOfType(type) { | ||
@@ -236,16 +242,59 @@ return changeset.releases.filter(release => release.type === type).map(release => release.name); | ||
| const majorReleases = getReleasesOfType("major"), minorReleases = getReleasesOfType("minor"), patchReleases = getReleasesOfType("patch"); | ||
| majorReleases.length > 0 && logger.log(`${chalk.green("[Major]")}\n ${majorReleases.join(", ")}`), | ||
| if (majorReleases.length > 0 && logger.log(`${chalk.green("[Major]")}\n ${majorReleases.join(", ")}`), | ||
| minorReleases.length > 0 && logger.log(`${chalk.green("[Minor]")}\n ${minorReleases.join(", ")}`), | ||
| patchReleases.length > 0 && logger.log(`${chalk.green("[Patch]")}\n ${patchReleases.join(", ")}`); | ||
| const message = outdent` | ||
| patchReleases.length > 0 && logger.log(`${chalk.green("[Patch]")}\n ${patchReleases.join(", ")}`), | ||
| repoHasMultiplePackages) { | ||
| const message = outdent` | ||
| ${chalk.red("========= NOTE ========")} | ||
| All dependents of these packages that will be incompatible with the new version will be ${chalk.red("patch bumped")} when this changeset is applied.`, prettyMessage = boxen(message, { | ||
| borderStyle: "double", | ||
| align: "center" | ||
| }); | ||
| logger.log(prettyMessage); | ||
| borderStyle: "double", | ||
| align: "center" | ||
| }); | ||
| logger.log(prettyMessage); | ||
| } | ||
| } | ||
| function ownKeys$1(object, enumerableOnly) { | ||
| var keys = Object.keys(object); | ||
| if (Object.getOwnPropertySymbols) { | ||
| var symbols = Object.getOwnPropertySymbols(object); | ||
| enumerableOnly && (symbols = symbols.filter((function(sym) { | ||
| return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
| }))), keys.push.apply(keys, symbols); | ||
| } | ||
| return keys; | ||
| } | ||
| function _objectSpread$1(target) { | ||
| for (var i = 1; i < arguments.length; i++) { | ||
| var source = null != arguments[i] ? arguments[i] : {}; | ||
| i % 2 ? ownKeys$1(Object(source), !0).forEach((function(key) { | ||
| _defineProperty$1(target, key, source[key]); | ||
| })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach((function(key) { | ||
| Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
| })); | ||
| } | ||
| return target; | ||
| } | ||
| function _defineProperty$1(obj, key, value) { | ||
| return key in obj ? Object.defineProperty(obj, key, { | ||
| value: value, | ||
| enumerable: !0, | ||
| configurable: !0, | ||
| writable: !0 | ||
| }) : obj[key] = value, obj; | ||
| } | ||
| async function getWorkspaces(opts) { | ||
| let workspaces = await getWorkspaces$1(_objectSpread$1({ | ||
| tools: [ "yarn", "bolt", "pnpm", "root" ] | ||
| }, opts)); | ||
| return null === workspaces ? [] : workspaces; | ||
| } | ||
| async function add(cwd, {empty: empty}, config) { | ||
| const changesetBase = path.resolve(cwd, ".changeset"); | ||
| const allPackages = await getWorkspaces({ | ||
| cwd: cwd | ||
| }), changesetBase = path.resolve(cwd, ".changeset"); | ||
| let newChangeset, confirmChangeset; | ||
@@ -260,3 +309,3 @@ if (empty) newChangeset = { | ||
| })).filter(a => a).map(pkg => pkg.name); | ||
| printConfirmationMessage(newChangeset = await createChangeset(changePackagesName, cwd)), | ||
| newChangeset = await createChangeset(changePackagesName, allPackages), printConfirmationMessage(newChangeset, allPackages.length > 1), | ||
| confirmChangeset = await askConfirm("Is this your desired changeset?"); | ||
@@ -290,3 +339,4 @@ } | ||
| async function version(cwd, config) { | ||
| let [changesets, preState] = await Promise.all([ readChangesets(cwd), pre$1.readPreState(cwd), removeEmptyFolders(path.resolve(cwd, ".changeset")) ]); | ||
| let [_changesets, _preState] = await Promise.all([ readChangesets(cwd), pre$1.readPreState(cwd), removeEmptyFolders(path.resolve(cwd, ".changeset")) ]); | ||
| const changesets = _changesets, preState = _preState; | ||
| if (void 0 !== preState && "pre" === preState.mode && (logger.warn(importantSeparator), | ||
@@ -293,0 +343,0 @@ logger.warn("You are in prerelease mode"), logger.warn("If you meant to do a normal release you should revert these changes and run `changeset pre exits`"), |
+132
-86
@@ -12,3 +12,2 @@ import meow from 'meow'; | ||
| import { getChangedPackagesSinceRef, add as add$1, commit, tag } from '@changesets/git'; | ||
| import _defineProperty from '@babel/runtime/helpers/esm/defineProperty'; | ||
| import prettier from 'prettier'; | ||
@@ -128,6 +127,23 @@ import humanId from 'human-id'; | ||
| async function askList(message, choices) { | ||
| const name = `List-${serialId()}`; | ||
| return prompt([{ | ||
| choices, | ||
| message, | ||
| name, | ||
| // @ts-ignore | ||
| prefix, | ||
| type: "select", | ||
| onCancel: cancelFlow | ||
| }]).then(responses => responses[name]).catch(err => { | ||
| error(err); | ||
| }); | ||
| } | ||
| function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
| function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
| function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
| function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
| async function writeChangeset(changeset, cwd) { | ||
@@ -162,17 +178,2 @@ const { | ||
| function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
| function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
| async function getWorkspaces (opts) { | ||
| let workspaces = await getWorkspaces$1(_objectSpread$1({ | ||
| tools: ["yarn", "bolt", "pnpm", "root"] | ||
| }, opts)); | ||
| if (workspaces === null) { | ||
| return []; | ||
| } | ||
| return workspaces; | ||
| } | ||
| const { | ||
@@ -187,2 +188,14 @@ green, | ||
| async function confirmMajorRelease(pkgJSON) { | ||
| if (semver.lt(pkgJSON.version, "1.0.0")) { | ||
| // prettier-ignore | ||
| log(yellow(`WARNING: Releasing a major version for ${green(pkgJSON.name)} will be its ${red('first major release')}.`)); | ||
| log(yellow(`If you are unsure if this is correct, contact the package's maintainers$ ${red("before committing this changeset")}.`)); | ||
| let shouldReleaseFirstMajor = await askConfirm(bold(`Are you sure you want still want to release the ${red("first major release")} of ${pkgJSON.name}?`)); | ||
| return shouldReleaseFirstMajor; | ||
| } | ||
| return true; | ||
| } | ||
| async function getPackagesToRelease(changedPackages, allPackages) { | ||
@@ -236,75 +249,82 @@ function askInitialReleaseQuestion(defaultChoiceList) { | ||
| async function createChangeset(changedPackages, cwd) { | ||
| const allPackages = await getWorkspaces({ | ||
| cwd | ||
| }); | ||
| const packagesToRelease = await getPackagesToRelease(changedPackages, allPackages); | ||
| let pkgJsonsByName = new Map(allPackages.map(({ | ||
| name, | ||
| config | ||
| }) => [name, config])); | ||
| async function createChangeset(changedPackages, allPackages) { | ||
| const releases = []; | ||
| let pkgsLeftToGetBumpTypeFor = new Set(packagesToRelease); | ||
| let pkgsThatShouldBeMajorBumped = await askCheckboxPlus(bold(`Which packages should have a ${red("major")} bump?`), packagesToRelease.map(pkgName => { | ||
| return { | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }; | ||
| })); | ||
| for (const pkgName of pkgsThatShouldBeMajorBumped) { | ||
| // for packages that are under v1, we want to make sure major releases are intended, | ||
| // as some repo-wide sweeping changes have mistakenly release first majors | ||
| // of packages. | ||
| let { | ||
| version | ||
| } = pkgJsonsByName.get(pkgName); | ||
| if (allPackages.length > 1) { | ||
| const packagesToRelease = await getPackagesToRelease(changedPackages, allPackages); | ||
| let pkgJsonsByName = new Map(allPackages.map(({ | ||
| name, | ||
| config | ||
| }) => [name, config])); | ||
| let pkgsLeftToGetBumpTypeFor = new Set(packagesToRelease); | ||
| let pkgsThatShouldBeMajorBumped = await askCheckboxPlus(bold(`Which packages should have a ${red("major")} bump?`), packagesToRelease.map(pkgName => { | ||
| return { | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }; | ||
| })); | ||
| if (semver.lt(version, "1.0.0")) { | ||
| // prettier-ignore | ||
| log(yellow(`WARNING: Releasing a major version for ${green(pkgName)} will be its ${red('first major release')}.`)); | ||
| log(yellow(`If you are unsure if this is correct, contact the package's maintainers$ ${red("before committing this changeset")}.`)); | ||
| let shouldReleaseFirstMajor = await askConfirm(bold(`Are you sure you want still want to release the ${red("first major release")} of ${pkgName}?`)); | ||
| for (const pkgName of pkgsThatShouldBeMajorBumped) { | ||
| // for packages that are under v1, we want to make sure major releases are intended, | ||
| // as some repo-wide sweeping changes have mistakenly release first majors | ||
| // of packages. | ||
| let pkgJson = pkgJsonsByName.get(pkgName); | ||
| let shouldReleaseFirstMajor = await confirmMajorRelease(pkgJson); | ||
| if (!shouldReleaseFirstMajor) { | ||
| continue; | ||
| if (shouldReleaseFirstMajor) { | ||
| pkgsLeftToGetBumpTypeFor.delete(pkgName); | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "major" | ||
| }); | ||
| } | ||
| } | ||
| pkgsLeftToGetBumpTypeFor.delete(pkgName); | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "major" | ||
| }); | ||
| } | ||
| if (pkgsLeftToGetBumpTypeFor.size !== 0) { | ||
| let pkgsThatShouldBeMinorBumped = await askCheckboxPlus(bold(`Which packages should have a ${green("minor")} bump?`), [...pkgsLeftToGetBumpTypeFor].map(pkgName => { | ||
| return { | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }; | ||
| })); | ||
| if (pkgsLeftToGetBumpTypeFor.size !== 0) { | ||
| let pkgsThatShouldBeMinorBumped = await askCheckboxPlus(bold(`Which packages should have a ${green("minor")} bump?`), [...pkgsLeftToGetBumpTypeFor].map(pkgName => { | ||
| return { | ||
| name: pkgName, | ||
| message: formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version) | ||
| }; | ||
| })); | ||
| for (const pkgName of pkgsThatShouldBeMinorBumped) { | ||
| pkgsLeftToGetBumpTypeFor.delete(pkgName); | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "minor" | ||
| }); | ||
| } | ||
| } | ||
| for (const pkgName of pkgsThatShouldBeMinorBumped) { | ||
| pkgsLeftToGetBumpTypeFor.delete(pkgName); | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "minor" | ||
| if (pkgsLeftToGetBumpTypeFor.size !== 0) { | ||
| log(`The following packages will be ${blue("patch")} bumped:`); | ||
| pkgsLeftToGetBumpTypeFor.forEach(pkgName => { | ||
| log(formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version)); | ||
| }); | ||
| for (const pkgName of pkgsLeftToGetBumpTypeFor) { | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "patch" | ||
| }); | ||
| } | ||
| } | ||
| } | ||
| } else { | ||
| let pkg = allPackages[0]; | ||
| let type = await askList(`What kind of change is this for ${green(pkg.name)}? (current version is ${pkg.config.version})`, ["patch", "minor", "major"]); | ||
| console.log(type); | ||
| if (pkgsLeftToGetBumpTypeFor.size !== 0) { | ||
| log(`The following packages will be ${blue("patch")} bumped:`); | ||
| pkgsLeftToGetBumpTypeFor.forEach(pkgName => { | ||
| log(formatPkgNameAndVersion(pkgName, pkgJsonsByName.get(pkgName).version)); | ||
| }); | ||
| if (type === "major") { | ||
| let shouldReleaseAsMajor = await confirmMajorRelease(pkg.config); | ||
| for (const pkgName of pkgsLeftToGetBumpTypeFor) { | ||
| releases.push({ | ||
| name: pkgName, | ||
| type: "patch" | ||
| }); | ||
| if (!shouldReleaseAsMajor) { | ||
| throw new ExitError(1); | ||
| } | ||
| } | ||
| releases.push({ | ||
| name: pkg.name, | ||
| type | ||
| }); | ||
| } | ||
@@ -326,3 +346,3 @@ | ||
| function printConfirmationMessage(changeset) { | ||
| function printConfirmationMessage(changeset, repoHasMultiplePackages) { | ||
| function getReleasesOfType(type) { | ||
@@ -339,15 +359,38 @@ return changeset.releases.filter(release => release.type === type).map(release => release.name); | ||
| if (patchReleases.length > 0) log(`${chalk.green("[Patch]")}\n ${patchReleases.join(", ")}`); | ||
| const message = outdent` | ||
| if (repoHasMultiplePackages) { | ||
| const message = outdent` | ||
| ${chalk.red("========= NOTE ========")} | ||
| All dependents of these packages that will be incompatible with the new version will be ${chalk.red("patch bumped")} when this changeset is applied.`; | ||
| const prettyMessage = boxen(message, { | ||
| borderStyle: "double", | ||
| align: "center" | ||
| }); | ||
| log(prettyMessage); | ||
| const prettyMessage = boxen(message, { | ||
| borderStyle: "double", | ||
| align: "center" | ||
| }); | ||
| log(prettyMessage); | ||
| } | ||
| } | ||
| function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
| function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { _defineProperty$1(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
| function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
| async function getWorkspaces (opts) { | ||
| let workspaces = await getWorkspaces$1(_objectSpread$1({ | ||
| tools: ["yarn", "bolt", "pnpm", "root"] | ||
| }, opts)); | ||
| if (workspaces === null) { | ||
| return []; | ||
| } | ||
| return workspaces; | ||
| } | ||
| async function add(cwd, { | ||
| empty | ||
| }, config) { | ||
| const allPackages = await getWorkspaces({ | ||
| cwd | ||
| }); | ||
| const changesetBase = path.resolve(cwd, ".changeset"); | ||
@@ -368,4 +411,4 @@ let newChangeset, confirmChangeset; | ||
| const changePackagesName = changedPackages.filter(a => a).map(pkg => pkg.name); | ||
| newChangeset = await createChangeset(changePackagesName, cwd); | ||
| printConfirmationMessage(newChangeset); | ||
| newChangeset = await createChangeset(changePackagesName, allPackages); | ||
| printConfirmationMessage(newChangeset, allPackages.length > 1); | ||
| confirmChangeset = await askConfirm("Is this your desired changeset?"); | ||
@@ -423,4 +466,7 @@ } | ||
| async function version(cwd, config) { | ||
| let [changesets, preState] = await Promise.all([readChangesets(cwd), readPreState(cwd), removeEmptyFolders(path.resolve(cwd, ".changeset"))]); | ||
| let [_changesets, _preState] = await Promise.all([readChangesets(cwd), readPreState(cwd), removeEmptyFolders(path.resolve(cwd, ".changeset"))]); // temporarily needed because of TS 3.7 regression - https://github.com/microsoft/TypeScript/issues/33752 | ||
| const changesets = _changesets; | ||
| const preState = _preState; | ||
| if (preState !== undefined && preState.mode === "pre") { | ||
@@ -427,0 +473,0 @@ warn(importantSeparator); |
@@ -1,5 +0,5 @@ | ||
| import { Release } from "@changesets/types"; | ||
| export default function createChangeset(changedPackages: Array<string>, cwd: string): Promise<{ | ||
| import { Release, Workspace } from "@changesets/types"; | ||
| export default function createChangeset(changedPackages: Array<string>, allPackages: Workspace[]): Promise<{ | ||
| summary: string; | ||
| releases: Array<Release>; | ||
| }>; |
@@ -5,2 +5,2 @@ import { Release } from "@changesets/types"; | ||
| summary: string; | ||
| }): void; | ||
| }, repoHasMultiplePackages: boolean): void; |
| declare function askCheckboxPlus(message: string, choices: Array<any>, format?: (arg: any) => any): Promise<Array<string>>; | ||
| declare function askQuestion(message: string): Promise<string>; | ||
| declare function askConfirm(message: string): Promise<boolean>; | ||
| declare function askList(message: string, choices: Array<string>): Promise<string>; | ||
| declare function askList<Choice extends string>(message: string, choices: readonly Choice[]): Promise<Choice>; | ||
| export { askCheckboxPlus, askQuestion, askConfirm, askList }; |
+1
-1
| { | ||
| "name": "@changesets/cli", | ||
| "version": "2.5.1", | ||
| "version": "2.5.2", | ||
| "description": "Organise your package versioning and publishing to make both contributors and maintainers happy", | ||
@@ -5,0 +5,0 @@ "bin": { |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 4 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 4 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
166645
3.45%2809
4.46%