diff options
-rw-r--r-- | .eslintrc.yml | 3 | ||||
-rw-r--r-- | app/assets/javascripts/vue_shared/components/bar_chart.vue | 7 | ||||
-rw-r--r-- | app/assets/stylesheets/framework/common.scss | 1 | ||||
-rw-r--r-- | app/models/ci/build.rb | 2 | ||||
-rw-r--r-- | app/models/ci/persistent_ref.rb | 2 | ||||
-rw-r--r-- | changelogs/unreleased/32959-dismissal-ux-improvement.yml | 5 | ||||
-rw-r--r-- | changelogs/unreleased/sh-fix-issue-34366.yml | 5 | ||||
-rw-r--r-- | config/initializers/sidekiq.rb | 5 | ||||
-rw-r--r-- | lib/gitlab/ci/ansi2json/converter.rb | 7 | ||||
-rw-r--r-- | lib/gitlab/ci/ansi2json/result.rb | 22 | ||||
-rw-r--r-- | package.json | 4 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/ansi2json/result_spec.rb | 42 | ||||
-rw-r--r-- | spec/models/ci/build_runner_session_spec.rb | 20 | ||||
-rw-r--r-- | spec/models/ci/persistent_ref_spec.rb | 4 | ||||
-rw-r--r-- | yarn.lock | 106 |
15 files changed, 186 insertions, 49 deletions
diff --git a/.eslintrc.yml b/.eslintrc.yml index e131d4c07d1..db03486e9fb 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -30,7 +30,10 @@ rules: no-else-return: - error - allowElseIf: true + import/no-cycle: warn + import/no-unresolved: warn import/no-useless-path-segments: off + import/order: warn lines-between-class-members: off # Disabled for now, to make the plugin-vue 4.5 -> 5.0 update smoother vue/no-confusing-v-for-v-if: error diff --git a/app/assets/javascripts/vue_shared/components/bar_chart.vue b/app/assets/javascripts/vue_shared/components/bar_chart.vue index eabf5d4bf60..25d7bfe515c 100644 --- a/app/assets/javascripts/vue_shared/components/bar_chart.vue +++ b/app/assets/javascripts/vue_shared/components/bar_chart.vue @@ -55,13 +55,13 @@ export default { vbWidth: 0, vbHeight: 0, vpWidth: 0, - vpHeight: 350, - preserveAspectRatioType: 'xMidYMid meet', + vpHeight: 200, + preserveAspectRatioType: 'xMidYMin meet', containerMargin: { leftRight: 30, }, viewBoxMargin: { - topBottom: 150, + topBottom: 100, }, panX: 0, xScale: {}, @@ -274,6 +274,7 @@ export default { <div ref="svgContainer" :class="activateGrabCursor" class="svg-graph-container"> <svg ref="baseSvg" + class="svg-graph overflow-visible pt-5" :width="vpWidth" :height="vpHeight" :viewBox="svgViewBox" diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index 31ea59df4c5..9a15505dd25 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -442,6 +442,7 @@ img.emoji { .ws-normal { white-space: normal; } .ws-pre-wrap { white-space: pre-wrap; } .overflow-auto { overflow: auto; } +.overflow-visible { overflow: visible; } .d-flex-center { display: flex; diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 7d3cb62e4ee..5192f85ad8d 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -53,7 +53,7 @@ module Ci has_one :runner_session, class_name: 'Ci::BuildRunnerSession', validate: true, inverse_of: :build - accepts_nested_attributes_for :runner_session + accepts_nested_attributes_for :runner_session, update_only: true accepts_nested_attributes_for :job_variables delegate :url, to: :runner_session, prefix: true, allow_nil: true diff --git a/app/models/ci/persistent_ref.rb b/app/models/ci/persistent_ref.rb index 54c3135ac9e..10d7795be2b 100644 --- a/app/models/ci/persistent_ref.rb +++ b/app/models/ci/persistent_ref.rb @@ -22,7 +22,7 @@ module Ci end def create - return unless enabled? && !exist? + return unless enabled? create_ref(sha, path) rescue => e diff --git a/changelogs/unreleased/32959-dismissal-ux-improvement.yml b/changelogs/unreleased/32959-dismissal-ux-improvement.yml new file mode 100644 index 00000000000..20f0af549d3 --- /dev/null +++ b/changelogs/unreleased/32959-dismissal-ux-improvement.yml @@ -0,0 +1,5 @@ +--- +title: Improve UX for vulnerability dismissal note +merge_request: 20768 +author: +type: fixed diff --git a/changelogs/unreleased/sh-fix-issue-34366.yml b/changelogs/unreleased/sh-fix-issue-34366.yml new file mode 100644 index 00000000000..efc19f8392e --- /dev/null +++ b/changelogs/unreleased/sh-fix-issue-34366.yml @@ -0,0 +1,5 @@ +--- +title: Fix error in updating runner session +merge_request: 20902 +author: +type: fixed diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index 35e67e04bfb..b4a1e0da41a 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -118,8 +118,5 @@ end Sidekiq.configure_client do |config| config.redis = queues_config_hash - config.client_middleware do |chain| - chain.add Gitlab::SidekiqMiddleware::CorrelationInjector - chain.add Gitlab::SidekiqStatus::ClientMiddleware - end + config.client_middleware(&Gitlab::SidekiqMiddleware.client_configurator) end diff --git a/lib/gitlab/ci/ansi2json/converter.rb b/lib/gitlab/ci/ansi2json/converter.rb index cbda3808b86..0373a12ab69 100644 --- a/lib/gitlab/ci/ansi2json/converter.rb +++ b/lib/gitlab/ci/ansi2json/converter.rb @@ -37,16 +37,13 @@ module Gitlab flush_current_line - # TODO: replace OpenStruct with a better type - # https://gitlab.com/gitlab-org/gitlab/issues/34305 - OpenStruct.new( + Gitlab::Ci::Ansi2json::Result.new( lines: @lines, state: @state.encode, append: append, truncated: truncated, offset: start_offset, - size: stream.tell - start_offset, - total: stream.size + stream: stream ) end diff --git a/lib/gitlab/ci/ansi2json/result.rb b/lib/gitlab/ci/ansi2json/result.rb new file mode 100644 index 00000000000..9b573882a52 --- /dev/null +++ b/lib/gitlab/ci/ansi2json/result.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +# Convertion result object class +module Gitlab + module Ci + module Ansi2json + class Result + attr_reader :lines, :state, :append, :truncated, :offset, :size, :total + + def initialize(lines:, state:, append:, truncated:, offset:, stream:) + @lines = lines + @state = state + @append = append + @truncated = truncated + @offset = offset + @size = stream.tell - offset + @total = stream.size + end + end + end + end +end diff --git a/package.json b/package.json index 6e9df140b2a..d105fd2c210 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "check-dependencies": "scripts/frontend/check_dependencies.sh", "clean": "rm -rf public/assets tmp/cache/*-loader", "dev-server": "NODE_OPTIONS=\"--max-old-space-size=3584\" nodemon -w 'config/webpack.config.js' --exec 'webpack-dev-server --config config/webpack.config.js'", - "eslint": "eslint --max-warnings 0 --report-unused-disable-directives --ext .js,.vue .", + "eslint": "eslint --max-warnings 900 --report-unused-disable-directives --ext .js,.vue .", "eslint-fix": "eslint --max-warnings 0 --report-unused-disable-directives --ext .js,.vue --fix .", "eslint-report": "eslint --max-warnings 0 --ext .js,.vue --format html --output-file ./eslint-report.html --no-inline-config .", "file-coverage": "scripts/frontend/file_test_coverage.js", @@ -156,7 +156,7 @@ "eslint": "~5.9.0", "eslint-import-resolver-jest": "^2.1.1", "eslint-import-resolver-webpack": "^0.10.1", - "eslint-plugin-import": "^2.14.0", + "eslint-plugin-import": "^2.18.2", "eslint-plugin-jasmine": "^2.10.1", "eslint-plugin-jest": "^22.3.0", "eslint-plugin-no-jquery": "^2.1.0", diff --git a/spec/lib/gitlab/ci/ansi2json/result_spec.rb b/spec/lib/gitlab/ci/ansi2json/result_spec.rb new file mode 100644 index 00000000000..5b7b5481400 --- /dev/null +++ b/spec/lib/gitlab/ci/ansi2json/result_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::Ci::Ansi2json::Result do + let(:stream) { StringIO.new('hello') } + let(:state) { Gitlab::Ci::Ansi2json::State.new(nil, stream.size) } + let(:offset) { 0 } + let(:params) do + { lines: [], state: state, append: false, truncated: false, offset: offset, stream: stream } + end + + subject { described_class.new(params) } + + describe '#size' do + before do + stream.seek(5) # move stream cursor to the end + end + + context 'when offset is at the start' do + let(:offset) { 0 } + + it 'returns the full size' do + expect(subject.size).to eq(5) + end + end + + context 'when offset is not zero' do + let(:offset) { 2 } + + it 'returns the remaining size' do + expect(subject.size).to eq(3) + end + end + end + + describe '#total' do + it 'returns size of stread' do + expect(subject.total).to eq(5) + end + end +end diff --git a/spec/models/ci/build_runner_session_spec.rb b/spec/models/ci/build_runner_session_spec.rb index e51fd009f50..cdf56f24cd7 100644 --- a/spec/models/ci/build_runner_session_spec.rb +++ b/spec/models/ci/build_runner_session_spec.rb @@ -4,6 +4,7 @@ require 'spec_helper' describe Ci::BuildRunnerSession, model: true do let!(:build) { create(:ci_build, :with_runner_session) } + let(:url) { 'https://new.example.com' } subject { build.runner_session } @@ -12,6 +13,25 @@ describe Ci::BuildRunnerSession, model: true do it { is_expected.to validate_presence_of(:build) } it { is_expected.to validate_presence_of(:url).with_message('must be a valid URL') } + context 'nested attribute assignment' do + it 'creates a new session' do + simple_build = create(:ci_build) + simple_build.runner_session_attributes = { url: url } + simple_build.save! + + session = simple_build.reload.runner_session + expect(session).to be_a(Ci::BuildRunnerSession) + expect(session.url).to eq(url) + end + + it 'updates session with new attributes' do + build.runner_session_attributes = { url: url } + build.save! + + expect(build.reload.runner_session.url).to eq(url) + end + end + describe '#terminal_specification' do let(:specification) { subject.terminal_specification } diff --git a/spec/models/ci/persistent_ref_spec.rb b/spec/models/ci/persistent_ref_spec.rb index 71e0b03dff9..ece478fdd36 100644 --- a/spec/models/ci/persistent_ref_spec.rb +++ b/spec/models/ci/persistent_ref_spec.rb @@ -73,8 +73,8 @@ describe Ci::PersistentRef do pipeline.persistent_ref.create end - it 'does not create a persistent ref' do - expect(project.repository).not_to receive(:create_ref) + it 'overwrites a persistent ref' do + expect(project.repository).to receive(:create_ref).and_call_original subject end diff --git a/yarn.lock b/yarn.lock index 6a6360ca4dc..c2f8345c0a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1637,6 +1637,14 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" integrity sha1-Qmu52oQJDBg42BLIFQryCoMx4pY= +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + array-union@^1.0.1, array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -3659,7 +3667,7 @@ default-require-extensions@^2.0.0: dependencies: strip-bom "^3.0.0" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -4111,22 +4119,26 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.1, es-abstract@^1.6.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== +es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: + version "1.16.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.2.tgz#4e874331645e9925edef141e74fc4bd144669d34" + integrity sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA== dependencies: - es-to-primitive "^1.2.0" + es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" + has-symbols "^1.0.1" is-callable "^1.1.4" is-regex "^1.0.4" - object-keys "^1.0.12" + object-inspect "^1.7.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" @@ -4213,10 +4225,10 @@ eslint-import-resolver-webpack@^0.10.1: resolve "^1.4.0" semver "^5.3.0" -eslint-module-utils@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49" - integrity sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w== +eslint-module-utils@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" + integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== dependencies: debug "^2.6.8" pkg-dir "^2.0.0" @@ -4231,21 +4243,22 @@ eslint-plugin-filenames@^1.3.2: lodash.snakecase "4.1.1" lodash.upperfirst "4.3.1" -eslint-plugin-import@^2.14.0, eslint-plugin-import@^2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f" - integrity sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A== +eslint-plugin-import@^2.16.0, eslint-plugin-import@^2.18.2: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== dependencies: + array-includes "^3.0.3" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.3.0" + eslint-module-utils "^2.4.0" has "^1.0.3" - lodash "^4.17.11" minimatch "^3.0.4" + object.values "^1.1.0" read-pkg-up "^2.0.0" - resolve "^1.9.0" + resolve "^1.11.0" eslint-plugin-jasmine@^2.10.1: version "2.10.1" @@ -5369,10 +5382,10 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "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" @@ -8168,7 +8181,12 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.11, object-keys@^1.0.12: +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -8215,6 +8233,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -9723,10 +9751,10 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== +resolve@1.x, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: path-parse "^1.0.6" @@ -10518,6 +10546,22 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^5.2.0" +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" |