diff --git a/README.md b/README.md index 41006a4b..ad40e785 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ The following are all _required_. |---|---|---| |`environment`|Set the environment for this release. E.g. "production" or "staging". Omit to skip adding deploy to release.|-| |`finalize`|When false, omit marking the release as finalized and released.|`true`| +|`ignore_missing`|When the flag is set and the previous release commit was not found in the repository, will create a release with the default commits count instead of failing the command.|`false`| +|`ignore_empty`|When the flag is set, command will not fail and just exit silently if no new commits for a given release have been found.|`false`| |`sourcemaps`|Space-separated list of paths to JavaScript sourcemaps. Omit to skip uploading sourcemaps.|-| |`started_at`|Unix timestamp of the release start date. Omit for current time.|-| |`version`|Identifier that uniquely identifies the releases. _Note: the `refs/tags/` prefix is automatically stripped when `version` is `github.ref`._|${{ github.sha }}| @@ -55,6 +57,7 @@ The following are all _required_. |`set_commits`|Specify whether to set commits for the release. Either "auto" or "skip".|"auto"| |`projects`|Space-separated list of paths of projects. When omitted, falls back to the environment variable `SENTRY_PROJECT` to determine the project.|-| |`url_prefix`|Adds a prefix to source map urls after stripping them.|-| +|`strip_common_prefix`|Will remove a common prefix from uploaded filenames. Useful for removing a path that is build-machine-specific.|`false`| ### Examples - Create a new Sentry release for the `production` environment and upload JavaScript source maps from the `./lib` directory. diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index 40b966db..f573e80c 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -2,38 +2,52 @@ import {execSync} from 'child_process'; import * as path from 'path'; import * as process from 'process'; import { - getShouldFinalize, + getBooleanOption, getSourcemaps, getStartedAt, getVersion, getSetCommitsOption, getProjects, getUrlPrefixOption, -} from '../src/validate'; +} from '../src/options'; -describe('validate', () => { +describe('options', () => { beforeAll(() => { process.env['MOCK'] = 'true'; }); - describe('getShouldFinalize', () => { - const errorMessage = 'finalize is not a boolean'; + describe('getBooleanOption', () => { + const option = 'finalize'; + const defaultValue = true; + const errorMessage = `${option} is not a boolean`; + afterEach(() => { delete process.env['INPUT_FINALIZE']; }); - test('should throw an error when finalize is invalid', async () => { + test('should throw an error when option type is not a boolean', () => { process.env['INPUT_FINALIZE'] = 'error'; - expect(() => getShouldFinalize()).toThrow(errorMessage); + expect(() => getBooleanOption(option, defaultValue)).toThrow( + errorMessage + ); }); - test('should return true when finalize is omitted', async () => { - expect(getShouldFinalize()).toBe(true); + test('should return defaultValue if option is omitted', () => { + expect(getBooleanOption(option, defaultValue)).toBe(true); }); - test('should return false when finalize is false', () => { + test('should return true when option is true or 1', () => { + process.env['INPUT_FINALIZE'] = 'true'; + expect(getBooleanOption(option, defaultValue)).toBe(true); + process.env['INPUT_FINALIZE'] = '1'; + expect(getBooleanOption(option, defaultValue)).toBe(true); + }); + + test('should return false when option is false or 0', () => { process.env['INPUT_FINALIZE'] = 'false'; - expect(getShouldFinalize()).toBe(false); + expect(getBooleanOption(option, defaultValue)).toBe(false); + process.env['INPUT_FINALIZE'] = '0'; + expect(getBooleanOption(option, defaultValue)).toBe(false); }); }); @@ -121,6 +135,7 @@ describe('validate', () => { expect(await getVersion()).toBe(`prefix-v1.0.0`); }); }); + describe('getSetCommitsOption', () => { afterEach(() => { delete process.env['INPUT_SET_COMMITS']; @@ -143,6 +158,7 @@ describe('validate', () => { expect(() => getSetCommitsOption()).toThrow(errorMessage); }); }); + describe('getProjects', () => { afterEach(() => { delete process.env['SENTRY_PROJECT']; @@ -167,6 +183,7 @@ describe('validate', () => { ); }); }); + describe('getUrlPrefixOption', () => { afterEach(() => { delete process.env['URL_PREFIX']; @@ -174,8 +191,8 @@ describe('validate', () => { it('get url prefix', () => { process.env['INPUT_URL_PREFIX'] = 'build'; expect(getUrlPrefixOption()).toEqual('build'); - }) - }) + }); + }); }); // shows how the runner will run a javascript action with env / stdout protocol diff --git a/action.yml b/action.yml index d3482ada..3333593d 100644 --- a/action.yml +++ b/action.yml @@ -11,6 +11,12 @@ inputs: finalize: description: 'When false, omit marking the release as finalized and released.' default: true + ignore_missing: + description: 'When the flag is set and the previous release commit was not found in the repository, will create a release with the default commits count instead of failing the command.' + required: false + ignore_empty: + description: 'When the flag is set, command will not fail and just exit silently if no new commits for a given release have been found.' + required: false started_at: description: 'Unix timestamp of the release start date. Omit for current time.' required: false @@ -29,6 +35,9 @@ inputs: url_prefix: description: 'Adds a prefix to source map urls after stripping them.' required: false + strip_common_prefix: + description: 'Will remove a common prefix from uploaded filenames. Useful for removing a path that is build-machine-specific.' + required: false runs: using: 'docker' image: 'docker://sentryintegrations/sentry-github-action-release:latest' diff --git a/package.json b/package.json index c9e46988..435cc220 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,7 @@ "license": "MIT", "dependencies": { "@actions/core": "^1.2.4", - "@sentry/cli": "^1.59.0", - "@sentry/types": "^5.17.0" + "@sentry/cli": "^1.67.2" }, "devDependencies": { "@types/jest": "^26.0.0", diff --git a/src/cli.ts b/src/cli.ts index 9a11e50c..e3831aea 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,4 +1,4 @@ -import SentryCli, {Releases} from '@sentry/cli'; +import SentryCli, {SentryCliReleases} from '@sentry/cli'; // @ts-ignore import {version} from '../package.json'; @@ -7,8 +7,8 @@ import {version} from '../package.json'; * * When the `MOCK` environment variable is set, stub out network calls. */ -let cli: Releases; -export const getCLI = (): Releases => { +let cli: SentryCliReleases; +export const getCLI = (): SentryCliReleases => { // Set the User-Agent string. process.env['SENTRY_PIPELINE'] = `github-action-release/${version}`; diff --git a/src/main.ts b/src/main.ts index c7284030..55a1ff5a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,29 +1,39 @@ import * as core from '@actions/core'; import {getCLI} from './cli'; -import * as validate from './validate'; +import * as options from './options'; (async () => { try { const cli = getCLI(); - // Validate parameters first so we can fail early. - validate.checkEnvironmentVariables(); - const environment = validate.getEnvironment(); - const sourcemaps = validate.getSourcemaps(); - const shouldFinalize = validate.getShouldFinalize(); - const deployStartedAtOption = validate.getStartedAt(); - const setCommitsOption = validate.getSetCommitsOption(); - const projects = validate.getProjects(); - const urlPrefix = validate.getUrlPrefixOption(); + // Validate options first so we can fail early. + options.checkEnvironmentVariables(); - const version = await validate.getVersion(); + const environment = options.getEnvironment(); + const sourcemaps = options.getSourcemaps(); + const shouldFinalize = options.getBooleanOption('finalize', true); + const ignoreMissing = options.getBooleanOption('ignore_missing', false); + const ignoreEmpty = options.getBooleanOption('ignore_empty', false); + const deployStartedAtOption = options.getStartedAt(); + const setCommitsOption = options.getSetCommitsOption(); + const projects = options.getProjects(); + const urlPrefix = options.getUrlPrefixOption(); + const stripCommonPrefix = options.getBooleanOption( + 'strip_common_prefix', + false + ); + const version = await options.getVersion(); core.debug(`Version is ${version}`); await cli.new(version, {projects}); if (setCommitsOption !== 'skip') { core.debug(`Setting commits with option '${setCommitsOption}'`); - await cli.setCommits(version, {auto: true}); + await cli.setCommits(version, { + auto: true, + ignoreMissing, + ignoreEmpty, + }); } if (sourcemaps.length) { @@ -36,6 +46,7 @@ import * as validate from './validate'; include: sourcemaps, projects: localProjects, urlPrefix, + stripCommonPrefix, }; return cli.uploadSourceMaps(version, sourceMapOptions); }) diff --git a/src/validate.ts b/src/options.ts similarity index 89% rename from src/validate.ts rename to src/options.ts index c446b6ba..fd6ffec2 100644 --- a/src/validate.ts +++ b/src/options.ts @@ -9,7 +9,7 @@ import {getCLI} from './cli'; export const getVersion = async (): Promise => { const versionOption: string = core.getInput('version'); const versionPrefixOption: string = core.getInput('version_prefix'); - let version = '' + let version = ''; if (versionOption) { // If the users passes in `${{github.ref}}, then it will have an unwanted prefix. version = versionOption.replace(/^(refs\/tags\/)/, ''); @@ -82,17 +82,22 @@ export const getSourcemaps = (): string[] => { }; /** - * Find out from input if we should finalize the release. + * Fetch boolean option from input. Throws error if option value is not a boolean. + * @param input string + * @param defaultValue boolean * @returns boolean */ -export const getShouldFinalize = (): boolean => { - const finalizeOption = core.getInput('finalize'); - if (!finalizeOption) { - return true; +export const getBooleanOption = ( + input: string, + defaultValue: boolean +): boolean => { + const option = core.getInput(input); + if (!option) { + return defaultValue; } - const finalize = finalizeOption.trim().toLowerCase(); - switch (finalize) { + const value = option.trim().toLowerCase(); + switch (value) { case 'true': case '1': return true; @@ -102,7 +107,7 @@ export const getShouldFinalize = (): boolean => { return false; } - throw Error('finalize is not a boolean'); + throw Error(`${input} is not a boolean`); }; export const getSetCommitsOption = (): 'auto' | 'skip' => { @@ -159,4 +164,4 @@ export const getProjects = (): string[] => { export const getUrlPrefixOption = (): string => { return core.getInput('url_prefix'); -} +}; diff --git a/src/sentry-cli.d.ts b/src/sentry-cli.d.ts deleted file mode 100644 index 6c391663..00000000 --- a/src/sentry-cli.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -declare module '@sentry/cli' { - export class Releases { - constructor(configFile?: string, options?: {silent?: boolean}); - new(release: string, options?: {projects: string[]}): Promise; - setCommits( - release: string, - options: { - repo?: string; - auto?: boolean; - commit?: string; - previousCommit?: string; - } - ): Promise; - finalize(release: string): Promise; - proposeVersion(): Promise; - uploadSourceMaps( - release: string, - options: { - include: string[]; - ignore?: string[]; - ignoreFile?: string; - rewrite?: boolean; - sourceMapReference?: boolean; - stripPrefix?: string[]; - stripCommonPrefix?: boolean; - validate?: boolean; - urlPrefix?: string; - urlSuffix?: string; - ext?: string[]; - projects?: [string]; //only one project allowed (for now) - } - ): Promise; - listDeploys(release: string): Promise; - newDeploy( - release: string, - options: { - env: string; - started?: number; - finished?: number; - time?: number; - name?: string; - url?: string; - } - ): Promise; - execute(args: string[], live: boolean): Promise; - } - - export class SentryCli { - constructor(options?: {configFile?: string; silent?: boolean}); - releases: Releases; - } - - export default SentryCli; -} diff --git a/yarn.lock b/yarn.lock index 89ff9a51..5910eb94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -469,22 +469,18 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@sentry/cli@^1.59.0": - version "1.59.0" - resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.59.0.tgz#8154c6426a105c6c8a2437db085837aff8e29834" - integrity sha512-9nK4uVHW7HIbOwFZNvHRWFJcD+bqjW3kMWK2UUMqQWse0Lf3xM+2o+REGGkk0S69+E4elSiukVjUPTI5aijNlA== +"@sentry/cli@^1.67.2": + version "1.67.2" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.67.2.tgz#dbb5631cb3637e10298f67915013592cb22f04ff" + integrity sha512-lPn0Sffbjg2UmCkHl2iw8pKlqpPhy85mW0za5kz3LEqC9JGUXHo9eSyyCkiRktlemMXKk+DeS/nyFy/LTRUG2Q== dependencies: https-proxy-agent "^5.0.0" mkdirp "^0.5.5" node-fetch "^2.6.0" + npmlog "^4.1.2" progress "^2.0.3" proxy-from-env "^1.1.0" -"@sentry/types@^5.17.0": - version "5.19.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.19.0.tgz#30c6a05040b644d90337ef8b50d9d59c0872744d" - integrity sha512-NlHLS9mwCEimKUA5vClAwVhXFLsqSF3VJEXU+K61fF6NZx8zfJi/HTrIBtoM4iNSAt9o4XLQatC1liIpBC06tg== - "@sinonjs/commons@^1.7.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.0.tgz#c8d68821a854c555bba172f3b06959a0039b236d" @@ -764,6 +760,16 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.11.0" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -805,6 +811,19 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1132,6 +1151,11 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -1186,6 +1210,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" @@ -1203,7 +1232,7 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-util-is@1.0.2: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -1339,6 +1368,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -1885,6 +1919,20 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -2000,6 +2048,11 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -2123,7 +2176,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2228,6 +2281,13 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -2320,7 +2380,7 @@ is-wsl@^2.1.1: dependencies: is-docker "^2.0.0" -isarray@1.0.0, isarray@^1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3198,6 +3258,21 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -3208,6 +3283,11 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -3501,6 +3581,11 @@ pretty-format@^26.1.0: ansi-styles "^4.0.0" react-is "^16.12.0" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + progress@^2.0.0, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -3583,6 +3668,19 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +readable-stream@^2.0.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -3721,7 +3819,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.2: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.1: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -3775,7 +3873,7 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -3993,6 +4091,23 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -4027,6 +4142,27 @@ string.prototype.trimstart@^1.0.1: define-properties "^1.1.3" es-abstract "^1.17.5" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -4332,6 +4468,11 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -4444,6 +4585,13 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"