Berry: [Bug] Stack overflow when installing @nivo/core

Created on 5 Feb 2020  Â·  3Comments  Â·  Source: yarnpkg/berry

When installing @nivo/line (or @nivo/core directly) yarn get's into an infinite recursion trying to resolve it's dependencies and ultimately crashes with a stack overflow. This applies to other nivo graphs too, because it's caused by the @nivo/core and @nivo/tooltip dependencies.

I'm going to suspect that this is related to the fact, that @nivo/core has a dependency on @nivo/tooltip and vice versa.

To Reproduce

  1. Fresh project
  2. Add @nivo/[email protected] either via yarn add or directly in package.json and then yarn install
{
  "name": "nivo-repro",
  "dependencies": {
    "@nivo/line": "^0.61.1"
  }
}

Output of yarn:

➤ YN0000: ┌ Resolution step
➤ YN0002: │ nivo-repro@workspace:. doesn't provide prop-types@>= 15.5.10 < 16.0.0 requested by @nivo/line@npm:0.61.1
➤ YN0002: │ nivo-repro@workspace:. doesn't provide react@>= 16.8.4 < 17.0.0 requested by @nivo/line@npm:0.61.1
➤ YN0002: │ @nivo/core@npm:0.61.0 [0fd99] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [f2dbf] doesn't provide react@>= 16.8.4 < 17.0.0 requested by @nivo/core@npm:0.61.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [f2dbf] doesn't provide react@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [f2dbf] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [f2dbf] doesn't provide react@^0.14.9 || ^15.3.0 || ^16.0.0 requested by react-motion@npm:0.5.2
➤ YN0002: │ @nivo/core@npm:0.61.0 [52bd6] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [5f4ac] doesn't provide react@>= 16.8.4 < 17.0.0 requested by @nivo/core@npm:0.61.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [5f4ac] doesn't provide react@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [5f4ac] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [5f4ac] doesn't provide react@^0.14.9 || ^15.3.0 || ^16.0.0 requested by react-motion@npm:0.5.2
➤ YN0002: │ @nivo/core@npm:0.61.0 [12ee9] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [45f57] doesn't provide react@>= 16.8.4 < 17.0.0 requested by @nivo/core@npm:0.61.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [45f57] doesn't provide react@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [45f57] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [45f57] doesn't provide react@^0.14.9 || ^15.3.0 || ^16.0.0 requested by react-motion@npm:0.5.2
➤ YN0002: │ @nivo/core@npm:0.61.0 [aca7e] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [08bc0] doesn't provide react@>= 16.8.4 < 17.0.0 requested by @nivo/core@npm:0.61.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [08bc0] doesn't provide react@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [08bc0] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [08bc0] doesn't provide react@^0.14.9 || ^15.3.0 || ^16.0.0 requested by react-motion@npm:0.5.2
➤ YN0002: │ @nivo/core@npm:0.61.0 [54d77] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [aef1e] doesn't provide react@>= 16.8.4 < 17.0.0 requested by @nivo/core@npm:0.61.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [aef1e] doesn't provide react@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [aef1e] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0

[... removed ...]

➤ YN0002: │ @nivo/core@npm:0.61.0 [13c47] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [85f61] doesn't provide react@>= 16.8.4 < 17.0.0 requested by @nivo/core@npm:0.61.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [85f61] doesn't provide react@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [85f61] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [85f61] doesn't provide react@^0.14.9 || ^15.3.0 || ^16.0.0 requested by react-motion@npm:0.5.2
➤ YN0002: │ @nivo/core@npm:0.61.0 [a6f2d] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [133f8] doesn't provide react@>= 16.8.4 < 17.0.0 requested by @nivo/core@npm:0.61.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [133f8] doesn't provide react@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [133f8] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0002: │ @nivo/tooltip@npm:0.61.0 [133f8] doesn't provide react@^0.14.9 || ^15.3.0 || ^16.0.0 requested by react-motion@npm:0.5.2
➤ YN0002: │ @nivo/core@npm:0.61.0 [4f24c] doesn't provide react-dom@>0.13.0 requested by react-measure@npm:2.3.0
➤ YN0045: │ Encountered a stack overflow when resolving peer dependencies; cf /var/folders/mm/30vy02sd33177y4wgz3ql5sm0000gn/T/stacktrace-44418FYfYfAdGPUW2.log
➤ YN0000: └ Completed in 6.45s
➤ YN0000: Failed with errors in 6.45s

Stacktrace from log:

  1. nivo-repro@workspace:.
  2. @nivo/line@virtual:cdf6982093780231569b9aba4221195449eb76a030a2a445bcc658ce8a617e5e8f30769fe499f6f184ba90dd6f411bd80be672654d307c5104d182362990881a#npm:0.61.1
  3. @nivo/annotations@virtual:38315025649c2cde2e6bb6f52001ebf1ede4faae8c294759f17490fd8774fc0e4d6bf6b1daf4b734792b6209d199d58d3bb2047a7ea2da19c194d02316994fb2#npm:0.61.0
  4. @nivo/core@virtual:0fd999fc49a258f4158e778f89c2b57e2971403648e5cc54303cab4531167c7fc6ef4af461a43fbf9b17bb4d71a237f3e5a6e1314fe3f792791f422855e28295#npm:0.61.0
  5. @nivo/tooltip@virtual:f2dbfc43ff77455c3a884e8ecc456c996cdad2cd078aa6fef8383b02d7eb01599435da3999d8cb757975e696a333ea52c3e588ab80884b8feea365dc3e3df364#npm:0.61.0
  6. @nivo/core@virtual:52bd695644977ceacca58a4e231aaac78cbf8860f50dc70390db786f19d99eef8d40943b2770df4228c522f84b3e861853d41555d738b73ba12ffe3eb315d55a#npm:0.61.0
  7. @nivo/tooltip@virtual:5f4ac1b4091b434bb394ed5d586dff949e084339d9fbe097e2b9bfcf35fb0dc1267dcb1aca7805865520d94178e32a60dc7e0162d58afe98f15862e55a498d9b#npm:0.61.0
  8. @nivo/core@virtual:12ee9f7d133f2395962cc3fa3be617fd69a5e4d3b18c5e619acbdbfbb74728cec97b9883e9df5b644eca2c72b93a5ae69749d0d4a208d37dcf80c188d8cd1cbc#npm:0.61.0
  9. @nivo/tooltip@virtual:45f57756228d71d2075cc5a1188cead90ae948e80d758cf8c8df6a6405e72a866cf03c37e2bbf2f68712422cee41493427ec6293f3957fdd82434226021f0484#npm:0.61.0
 10. @nivo/core@virtual:aca7ecb238a1bd2b5b47559c00f5044ba970b0f8ceee389ec0a98428d0850022a66d9f589718f26193443f8ab595444d8415020b4e123167400c898fb9949cc7#npm:0.61.0
 11. @nivo/tooltip@virtual:08bc0bf62af503cfd9582e5bf91c7647c3925e8b2a94eed6c5ed30e653b863dcf520890d96588da068d21c942edbb306d4fb80b4355f840918de2642c997eff6#npm:0.61.0
 12. @nivo/core@virtual:54d779cb3393f57d329991155081af5625e237e86504ddedffa9e2e14597d32703c095a6f9c51355bc7fdc033c404ed3986b5a0a6c9b0f47e7940a43ee5f9a0f#npm:0.61.0
 13. @nivo/tooltip@virtual:aef1e8e790ff528c03a122738b1e49d6010a2b1591fec2cf701600513be1397b4018c0f419700be2f7fa834d48972e265ce938035acd0577a213f3616bb6fd56#npm:0.61.0
 14. @nivo/core@virtual:de5815790107bc42882f0678befdeb1cd70005702a246c060fd0c1cd36efbfcfae94d1081238831c0d1c27832123f8d195e322a92020ff88ca7c010cc3525b7f#npm:0.61.0
 15. @nivo/tooltip@virtual:6c534bc0f4b60b40bcf5c70a5d78dd50a790e1673cd406f53f77873cba1ced33d9aaa8bdaf12a8985702c3337efbd16a74a2623c5295d0a08a52c5a5b3cbf981#npm:0.61.0
 16. @nivo/core@virtual:e45b19f792d4064398af427aacd3d86194faa253e8a63367590d0f790364db551c34d599dfe995355d13344676094e043f271ffaf881d2623731ff1927e54ce2#npm:0.61.0
 17. @nivo/tooltip@virtual:947798d75ab6707ffcf7a286b8a7931a3cce0396343db3cdd1b77ef860185bb73eaa92c438eb17e97abc8f7842a2495abb090cc023972763306c7d1b3b5577aa#npm:0.61.0
 18. @nivo/core@virtual:5e5eca48e03d7d9ad3130fcffa4181a64ad0de986c52843f1f15564dd1aaed762834058cdf10aad2e84d6c917849be7b45b29f3c9c882031b3e84c022faaf9b4#npm:0.61.0
 19. @nivo/tooltip@virtual:5b268de7ac5062918cb6857131d11864dd3c6d8d52e54658102f259b6cbe544fd5734bc9592016a9103cf232554681ab81b01e1a94b3cd1f7a46f552e026c8b5#npm:0.61.0
 20. @nivo/core@virtual:81fa955e4b80a2043be61763b7d81d8087bc1307e06dea7c1fe40d3d4aa46d21668166ef35700cd55fe9d0c18a8f6855602bd8aac23835bbdcb0e2eb81f45402#npm:0.61.0
 21. @nivo/tooltip@virtual:8bddf9f84c1c4af88e528e0fa3d1a137447d5d5b6af38c04054b4c71b00e48d977d7b671e2f2c4dba1c078492e942667ee6524f246c415f496e82652bba79bac#npm:0.61.0
 22. @nivo/core@virtual:7a9635574402febaeb508a8fb663b381764f4aebc22dd791dd20d264613e321a310aad6687849923f6896196d52d95d0dc06d65ae3ccea721e8d57bc1caecf03#npm:0.61.0
 23. @nivo/tooltip@virtual:de5eb367ed51e51fec66eed04b897b46c6af669a4ec471405aba9fe03be77f3ad447a2543269fbf4569c914f76990418c96cf21cfcd969daef57c3ca80969dec#npm:0.61.0
 24. @nivo/core@virtual:e28b84f76b672d318201aa3c421db7eec1612a148d2cd5bad3afaad3f97bd9237bcf871c062a11d7151f5103aa088ae0d8c079a43b8704e6e41e01372707f6ef#npm:0.61.0
 25. @nivo/tooltip@virtual:53fdbd3efeeddad2c981621c15c4f059ad20a570e2843a2c9866f45422a43bef365e6858a28e5011d0ed05333e36c0513ab328a34da00bc960b59fa11eb7a21a#npm:0.61.0
 26. @nivo/core@virtual:b9924c0eab21f45fa20db7f2c725df7d447ed0fbd275e93f6b37cbb3e4165b69a3103b88994bfe7cb24ee24d1110c2db8d41681f00ce016954f02681da5a9d24#npm:0.61.0

[... removed ...]

2211. @nivo/tooltip@virtual:574d9442ce142279c617b5529759c2e75d952ac66e833f53f0ba9656f6024026a3961903188f28c112fde858c969b7bc82bdfe547113a63a50c56f2916163387#npm:0.61.0
2212. @nivo/core@virtual:ea4af5e1eac20f95c00caceda803f196ce4b090550ffc7c7f821000adc5b021b1055f346e6aa2f200cc651a05dd2a314474fe3aad0dab606e17969f8114ae59a#npm:0.61.0
2213. @nivo/tooltip@virtual:450dc19cf7755b181f24d5de08d7a00f06a0cbcf93b6b1e9bb7dca6b18634fa0612c06daa02ef5bc2799f974f79305dac638f4df202fcbb7e2fdbb6c302b8c1d#npm:0.61.0
2214. @nivo/core@virtual:a08493a48fdc25a1052849891b6d673895c705b30a93c387c25dc6f454a72d24bbf73c381c4981a9382b33ff831ffb0c073c08f37c94d5c5de7f2a9a3f8b454c#npm:0.61.0
2215. @nivo/tooltip@virtual:36e3d12a99edd3939312db2eb6f61f1419dce74719db76d69f3755ea04f7d4f3e5cf544b633fd47c326cde53b1b7db8b356642bc97b0e57ce7a2cf2281e9968d#npm:0.61.0
2216. @nivo/core@virtual:70b69a6735bae8c7967204276a73d41adf19544e978b130aa3c5e2e31aa181856d840a8e65ed6be643d7775cc58915e422a024b65103eb091b2c75aa85230f35#npm:0.61.0
2217. @nivo/tooltip@virtual:650bb775f92a2bd94d51b55a9cb17e22b983f10adf47935cb3231fd1032571484a6e257c8d4e50d75cb357a4f5f8ef2467a667dbf1393f2e52a9b29095597a17#npm:0.61.0
2218. @nivo/core@virtual:40f63d94f66922bfd0b4a2e69484d92c67f4b11e3c1772e8d7ea991362ed482146ea859133d29a4451e0c6d5ffb862007e9cb449537637e537645b4c7517db04#npm:0.61.0
2219. @nivo/tooltip@virtual:d5b9cb921812e9d6d4c70de6e7b87374e795f4b9bb8914408c6287819ae6978f037a60f9683cef75df77882902cd4b791f08ff955e835cbca9311f16fb8f9641#npm:0.61.0
2220. @nivo/core@virtual:eaeb2a69c62c168ebc06ba6e0baa99528437ed390b3eb348c4c7a24e63ec296a41bd8c962783100cd1fd2f50acaf1205b33730f7c270b3d39e615f7a7ef6126d#npm:0.61.0
2221. @nivo/tooltip@virtual:3f33fb2a75d9f789c983acf8954fdcbabee4c7d81bd29e63d101f7535473119459cb275dbacd5b917dfcb511e0cc58f6d479bcb72481da73901aab7e2aec507d#npm:0.61.0
2222. @nivo/core@virtual:baf39c9efe664d189a89933a681f777a02b7e9f8429e2db313c2b0e57dabc80b6fad3c099441a9411d9e8af434a1d43bccc45a1d009b4f99d54a9ad1852e1b16#npm:0.61.0
2223. @nivo/tooltip@virtual:1f6ef9578dbb33165583839e09c6ddaebddefc0098d72971d0fb12904ec04fc56cd29f311932abb48795bd4bfc087ae9575ae1c64a1f0cb70ba408b83b595b2f#npm:0.61.0
2224. @nivo/core@virtual:ea37f78b54f29318d57844aa124e487fa514e4e6f30d0db35ef31f6ee3801402862697f96f0e3fc7ee336ea76ad19050cc19ae9c804d63edbddda06a213df4e2#npm:0.61.0
2225. @nivo/tooltip@virtual:2d7938a9e964aad1eb87e19f239b9f03ab60804059b423c61cf90edd39eb143ed6308e943f919e793202817a69b2bc7dc4f7b7153785b304edfc50259bf2cd6c#npm:0.61.0

After resolving nivo's missing peerDependencies:
If i add packageExtensions and peerDependencies to package.json like this, the error still persists, with the following output.

{
  "name": "nivo-repro",
  "dependencies": {
    "react": "16.12.0",
    "react-dom": "16.12.0",
    "prop-types": "15.7.2",
    "@nivo/line": "0.61.1"
  }
}
packageExtensions:
  "@nivo/tooltip@*":
    peerDependencies:
      react: ">= 16.8.4 < 17.0.0"
      react-dom: ">= 16.8.4 < 17.0.0"
      prop-types: ">= 15.5.10 < 16.0.0"
  "@nivo/core@*":
    peerDependencies:
      react-dom: ">= 16.8.4 < 17.0.0"
  "@nivo/line@*":
    peerDependencies:
      react-dom: ">= 16.8.4 < 17.0.0"
  "@nivo/annotations@*":
    peerDependencies:
      react-dom: ">= 16.8.4 < 17.0.0"

Output:

➤ YN0000: ┌ Resolution step
➤ YN0045: │ Encountered a stack overflow when resolving peer dependencies; cf /var/folders/mm/30vy02sd33177y4wgz3ql5sm0000gn/T/stacktrace-484804IFbRuXrW6B0.log
➤ YN0000: └ Completed in 1.95s
➤ YN0000: Failed with errors in 1.95s

_Stacktrace is the same._

  • OS: macOS Catalina 10.15.2 (19C57)
  • Node version: 13.7.0
  • Yarn version: 2.0.0-rc.28

Additional context

I wasn't able to reproduce this with sherlock.

I'm not sure if i'm able to (re-)move a dependency from @nivo/core or @nivo/tooltip with packageExtensions.

I don't know if it's wrong for nivo to have circular dependencies, either way there should probably be an error message instead of a stack overflow, even if they'd have to specify the dependencies differently.

bug

Most helpful comment

I believe we have resolved this in the latest version of nivo (v0.63.0). I was able to install the bar package in a fresh Next app and get it to run without issues.

All 3 comments

This is expected. The @nivo/core package depends on @nivo/tooltip, which itself has a regular dependency on @nivo/core. In general it wouldn't be a problem, but because they both happen to have peer dependencies Yarn needs to strictly follow the dependency tree - hence the infinite recursion and eventual stack overflow.

I believe the intent was to make @nivo/core a peer dependency of @nivo/tooltip, which would avoid the issue (you can use packageExtensions to do that). In general, core packages shouldn't be regular dependencies.

I don't know if it's wrong for nivo to have circular dependencies, either way there should probably be an error message instead of a stack overflow, even if they'd have to specify the dependencies differently.

The case isn't frequent enough to be worth the engineering effort - additionally, cyclic dependencies may occur on different levels (A -> B -> C -> D -> A -> ...) making that even more difficult to handle in an aesthetically pleasing way.

I'm running into this issue as well. Attempting to add @nivo/core to the peerDependencies of @nivo/tooltip still yields the stack overflow. Is there a way to tell yarn to ignore @nivo/core being in the dependencies for the tooltip package?

I believe we have resolved this in the latest version of nivo (v0.63.0). I was able to install the bar package in a fresh Next app and get it to run without issues.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

danreg picture danreg  Â·  3Comments

benwainwright picture benwainwright  Â·  3Comments

tiansijie picture tiansijie  Â·  4Comments

larixer picture larixer  Â·  4Comments

milichev picture milichev  Â·  3Comments